# CommandSection

title: TEST FILE STRUCTURE
content:
<i>ipptool</i> uses specially formatted `.test` files to define test scenarios. These files contain <b>directives</b> that specify IPP operations (e.g., <i>Get-Printer-Attributes</i>, <i>Print-Job</i>), attributes to include in requests, and expected attributes or status codes in responses. Key directives include <b><I>REQUEST</I></b> (to define the outgoing request), <b><I>EXPECT</I></b> (to define expected response attributes), <b><I>STATUS</I></b> (to expect specific IPP status codes), and <b><I>ATTR</I></b> (to add attributes to requests).


title: IPP EVERYWHERE™ TESTING
content:
<i>ipptool</i> is widely used for testing compliance with the IPP Everywhere™ standard, which aims to simplify printing across various devices and operating systems by relying solely on IPP. Test files for IPP Everywhere™ validation are often provided by standards bodies to ensure interoperability.


title: HISTORY
content:
<i>ipptool</i> is a core component of the <b>Common Unix Printing System (CUPS)</b>, which was originally developed by Easy Software Products and later acquired by Apple Inc. It emerged as a vital utility for testing and validating IPP implementations, particularly in the context of IPP Everywhere™ and other IPP-based printing standards. Its development is intertwined with the evolution of CUPS and the broader adoption of IPP as the standard protocol for printing on Unix-like systems.


title: SYNOPSIS
content:
<B>iproxy</B> [<I>OPTIONS</I>] <I>LOCAL_PORT</I>:<I>DEVICE_PORT</I> [<I>LOCAL_PORT</I>:<I>DEVICE_PORT</I> ...]


title: PARAMETERS
content:
<b>--udid <I>UDID</I>, -u <I>UDID</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to the iOS device with the specified <I>UDID</I>. This is essential when multiple iOS devices are connected to the host machine, ensuring the forwarding targets the correct device.<br><br><b>--listen <I>IP</I>, -l <I>IP</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the local IP address on which <I>iproxy</I> should listen for incoming connections. By default, it listens on <I>127.0.0.1</I> (localhost), making the forwarded port accessible only from the host machine.<br><br><b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with command usage and available options.<br><br><b>--version, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of the <I>iproxy</I> utility.<br><br><b>--debug, -d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug output, which can be helpful for troubleshooting connection issues or understanding the proxy's activity.<br><br>


title: DESCRIPTION
content:
<B>iproxy</B> is a utility from the <B>libimobiledevice</B> suite, designed to facilitate communication with Apple iOS devices (iPhones, iPods, iPads) over USB. Its primary function is to create a TCP port forwarding bridge between your host computer and a connected iOS device. This means you can establish a connection to a specific port on the iOS device (e.g., a service running on it) by connecting to a designated local port on your computer.<br><br>This is particularly useful for developers, system administrators, or users interacting with jailbroken devices to access services like SSH, debug applications, or manage device filesystems via network protocols, even when the device doesn't have an IP address accessible from the network directly, relying solely on the USB connection. It acts as a lightweight proxy, ensuring that data flowing to the local port is seamlessly relayed to the corresponding port on the iOS device.


title: CAVEATS
content:
<ul><li>Requires <B>libimobiledevice</B> utilities to be installed.</li><li>The iOS device must be connected via USB and recognized by the system.</li><li>For services on the iOS device, ensure the service is running and listening on the specified <I>DEVICE_PORT</I>. For instance, SSH requires a daemon like OpenSSH to be installed and running on a jailbroken device.</li><li>Firewall rules on the host machine might need adjustment if you're attempting to access the local port from another machine on the network (and if <I>--listen 0.0.0.0</I> is used).</li></ul>


title: COMMON USE CASES
content:
<ul><li><B>SSH Access:</B> Often used to forward local port 2222 to device port 22 (the standard SSH port) on a jailbroken iOS device, enabling secure shell access over USB.</li><li><B>Debugging Applications:</B> Developers can use it to connect to services or debugging ports exposed by their applications running on the device.</li><li><B>Network Tooling:</B> Facilitates the use of standard network tools (like <I>nmap</I>, <I>curl</I>) against services running on the iOS device.</li></ul>


title: MULTIPLE PORT FORWARDS
content:
<I>iproxy</I> supports forwarding multiple local-to-device port pairs simultaneously in a single command, making it versatile for complex setups. For example: <B>iproxy 2222:22 8080:80</B>.


title: HISTORY
content:
<I>iproxy</I> is a core component of the <B>libimobiledevice</B> project, an open-source initiative providing libraries and tools for communication with Apple devices running iOS, iPadOS, and tvOS. The project began around 2007, aiming to provide a cross-platform (Linux, macOS, Windows) alternative to Apple's proprietary iTunes and Xcode tools for interacting with iOS devices. <I>iproxy</I> specifically addresses the need for network access to device services over USB, a common requirement for developers and advanced users. Its development has mirrored the evolution of iOS, adapting to new device models and iOS versions to maintain compatibility and functionality.


title: SYNOPSIS
content:
<code><I>java -jar ipscan.jar</I> [options] <i>&lt;scan_range&gt;</i></code><br><br>The <I>ipscan</I> command is typically executed by invoking the Java Runtime Environment with the <I>Angry IP Scanner</I> JAR file. The <i><code>&lt;scan_range&gt;</code></i> argument specifies the IP addresses or CIDR block to scan, for example, <code><I>192.168.1.1-192.168.1.254</I></code> or <code><I>10.0.0.0/24</I></code>.


title: PARAMETERS
content:
<b><b>-f</b> <i>&lt;mode&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the scan mode.</i> Common modes include 'range' for IP ranges, 'file' for scanning IPs from a file, and 'random' for a random range.<br><br><b><b>-r</b> <i>&lt;range&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies the IP range to scan.</i> Can be a hyphenated range (e.g., <I>192.168.1.1-254</I>), a CIDR block (e.g., <I>10.0.0.0/24</I>), or a single IP address.<br><br><b><b>-p</b> <i>&lt;ports&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Defines the ports to scan.</i> Ports can be specified as a comma-separated list (e.g., <I>22,80,443</I>), a hyphenated range (e.g., <I>1-1024</I>), or a combination.<br><br><b><b>-o</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Saves scan results to the specified file.</i> The format is typically determined by the file extension (e.g., <I>.txt</I>, <I>.csv</I>, <I>.xml</I>).<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Runs in quiet mode.</i> Suppresses most console output, useful for scripting.<br><br><b><b>-s</b> <i>&lt;scanner_list&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Selects which data fetchers (scanners) to use.</i> Examples include <I>hostname</I>, <I>macaddress</I>, <I>http-server</I>.<br><br><b><b>-x</b> <i>&lt;exporter_list&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies which exporters to use for output.</i> For example, <I>TXT</I>, <I>CSV</I>, <I>XML</I>.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the version information</i> of <I>Angry IP Scanner</I>.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Shows the help message</i> and available command-line options.<br><br>


title: DESCRIPTION
content:
The <b><I>ipscan</I></b> command, often associated with <I>Angry IP Scanner</I>, is a widely used <i>cross-platform</i> network scanning utility. It's primarily known for its speed and simplicity in discovering active hosts and open ports within specified IP ranges.<br><br>Unlike many native Linux commands, <I>ipscan</I> (or <I>Angry IP Scanner</I>) is a Java-based application, meaning it requires a Java Runtime Environment (JRE) to run. It functions by concurrently pinging hosts to check for live systems and then attempting to connect to specified ports to determine their status (open, closed, or filtered).<br><br>Key features include <i>customizable scan ranges</i>, the ability to scan specific port lists, fetch hostnames, MAC addresses, and provide various export options for scan results. While a powerful <I>graphical user interface (GUI)</I> is available, it also offers a command-line interface for scripting and automated tasks.


title: CAVEATS
content:
The primary caveat is that <I>ipscan</I> (as <I>Angry IP Scanner</I>) is a <b>Java application</b>, not a native Linux binary.<br>- It requires a <i>Java Runtime Environment (JRE)</i> to be installed and configured on the system.<br>- Its command-line interface might be less feature-rich or standardized compared to dedicated native tools like <I>Nmap</I>.<br>- Performance can sometimes be influenced by JRE version and system resources.<br>- Network firewalls, IDS/IPS systems, or host-based firewalls may detect and block its scanning activity, leading to incomplete or inaccurate results.


title: INSTALLATION AND USAGE NOTES
content:
Since <I>ipscan</I> is distributed as a <I>.jar</I> file, installation typically involves downloading the executable <I>.jar</I> from the official <I>Angry IP Scanner</I> website. No traditional installation via package managers (like <I>apt</I> or <I>yum</I>) is usually required for the command-line version.<br><br>To run it from the command line, ensure Java is installed and then execute it using the command: <code><I>java -jar /path/to/ipscan.jar</I></code>. You can then append the command-line options and scan ranges as described in the synopsis and parameters sections.


title: OUTPUT FORMATS
content:
<I>Angry IP Scanner</I> supports several output formats for scan results, making it versatile for integration with other tools or for various reporting needs. Common output formats include <i>TXT (plain text)</i>, <i>CSV (comma-separated values)</i> for easy spreadsheet import, and <i>XML (Extensible Markup Language)</i> for structured data parsing.


title: HISTORY
content:
The <I>ipscan</I> utility is most commonly recognized as <I>Angry IP Scanner</I>, originally created by <i>Anton Kachalov</i>. It began as a hobby project aiming to provide a fast and user-friendly IP scanner.<br><br>Its development has been focused on cross-platform compatibility, leading to its implementation in Java. Over the years, it has gained popularity among network administrators, security professionals, and casual users due to its intuitive graphical interface and efficient scanning capabilities, making it a go-to tool for quick network reconnaissance.


title: SYNOPSIS
content:
<i>ipset</i> [<i>options</i>] <i>command</i> [<i>command-specific arguments</i>]<br><br><b>Common Command Patterns:</b><br><i>ipset</i> create <i>SETNAME TYPE</i> [<i>CREATE_OPTIONS</i>]<br><i>ipset</i> add <i>SETNAME MEMBER</i> [<i>ADD_OPTIONS</i>]<br><i>ipset</i> del <i>SETNAME MEMBER</i> [<i>DEL_OPTIONS</i>]<br><i>ipset</i> list [<i>SETNAME</i>]<br><i>ipset</i> flush [<i>SETNAME</i>]<br><i>ipset</i> destroy [<i>SETNAME</i>]<br><i>ipset</i> save [<i>SETNAME</i>] > <i>FILE</i><br><i>ipset</i> restore < <i>FILE</i>


title: PARAMETERS
content:
<b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information for the <i>ipset</i> utility.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the general help message or detailed help for a specific command.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress verbose output messages, showing only critical errors or requested data.<br><br><b>-t, --test</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the command in test mode (dry run) without making actual changes to IP sets.<br><br><b>-r, --resolve</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resolve hostnames to IP addresses when processing commands or displaying lists.<br><br>


title: DESCRIPTION
content:
<i>ipset</i> is a utility to administer <b>IP sets</b>, which are kernel-level data structures storing IP addresses, network addresses, MAC addresses, port numbers, and other elements. These sets can be referenced by <i>iptables</i> or <i>nftables</i> firewall rules, allowing for efficient matching against large collections of addresses or networks without adding numerous individual rules. This significantly simplifies firewall management, reduces rule processing overhead, and improves performance, especially for dynamic blacklists or whitelists, often used in conjunction with intrusion detection systems or automated blocking tools. It's an integral part of the Netfilter project, providing a powerful and flexible way to group network objects.


title: CAVEATS
content:
IP sets are volatile by default, meaning they are lost upon system reboot. To persist sets across reboots, they must be explicitly saved (e.g., using <i>ipset save</i>) and then restored during system startup. While <i>ipset</i> manages the sets themselves, their actual application in firewall rules requires explicit integration with firewall tools like <i>iptables</i> or <i>nftables</i>; <i>ipset</i> does not enforce packet filtering rules directly.


title: IP SET TYPES
content:
<i>ipset</i> supports various types of sets, each optimized for different kinds of elements and matching behaviors:<br><b>hash:ip</b>: Stores individual IP addresses.<br><b>hash:net</b>: Stores network addresses (CIDR blocks).<br><b>hash:port</b>: Stores port numbers.<br><b>hash:ip,port</b>: Stores combinations of IP addresses and port numbers.<br><b>hash:ip,net</b>: Stores combinations of IP and network addresses.<br><b>list:set</b>: Stores other IP set names, allowing for hierarchical set structures.<br>There are also <i>bitmap</i> types for small, contiguous ranges (e.g., <b>bitmap:ip</b>, <b>bitmap:port</b>), offering even higher performance for specific scenarios.


title: INTEGRATION WITH FIREWALL RULES
content:
The primary use of <i>ipset</i> is to integrate with Linux firewall rules for efficient packet matching. In <i>iptables</i>, sets are matched using the <i>-m set</i> module and <i>--match-set</i> option. For example, to drop traffic from a set named 'blacklist': <i>iptables -A INPUT -m set --match-set blacklist src -j DROP</i>. With <i>nftables</i>, sets are integrated more directly using the <i>@setname</i> syntax. This allows firewall rules to efficiently check if a packet's source or destination IP (or other attributes) belongs to a defined set, significantly reducing the complexity and processing time for large blocklists or whitelists.


title: HISTORY
content:
<i>ipset</i> emerged as part of the Netfilter project, which provides the Linux kernel's firewall framework. Its development was driven by the need for a more efficient way to handle large collections of IP addresses or networks in firewall rules than directly listing them in <i>iptables</i> chains, which could lead to performance degradation. It has evolved alongside <i>iptables</i> and, more recently, <i>nftables</i>, providing a robust solution for managing dynamic sets of network elements.


title: SYNOPSIS
content:
<b>ipsumdump</b> [<b>-i</b> <<i>interface</i>>] [<b>-c</b> <<i>count</i>>] [<b>-n</i>] [<b>-p</i>] [<b>-r</b> <<i>file</i>>] [<b>-w</b> <<i>file</i>>] [<<i>expression</i>>]


title: PARAMETERS
content:
<b><b>-i</b> <<i>interface</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the network <i>interface</i> to listen on, e.g., <i>eth0</i> or <i>wlan0</i>. If not specified, <i>ipsumdump</i> attempts to find a suitable default interface.<br><br><b><b>-c</b> <<i>count</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exits after capturing <<i>count</i>> packets. Useful for capturing a specific number of packets for analysis.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not convert IP addresses to hostnames. This speeds up processing by avoiding DNS lookups.<br><br><b><b>-p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not put the interface into promiscuous mode. Only packets destined for or from the host will be captured.<br><br><b><b>-r</b> <<i>file</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads packets from a <i>.pcap</i> <<i>file</i>> (e.g., created by <i>tcpdump</i> or <i>ipsumdump -w</i>).<br><br><b><b>-w</b> <<i>file</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the raw captured packets to a <i>.pcap</i> <<i>file</i>> for later analysis. This option disables packet summarization output.<br><br><b><<i>expression</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A filtering <i>expression</i> to select which packets to dump. This follows a syntax similar to <i>tcpdump</i>'s BPF (Berkeley Packet Filter) syntax, allowing filtering by host, network, port, protocol, etc.<br><br>


title: DESCRIPTION
content:
<i>ipsumdump</i> is a command-line utility for capturing and summarizing IP (Internet Protocol) traffic on network interfaces. Unlike comprehensive packet analyzers like <i>tcpdump</i>, <i>ipsumdump</i> focuses on providing a concise, high-level overview of IP packets, primarily displaying source and destination IP addresses, protocol types, and basic packet sizes.<br><br>It's designed for quick diagnostic checks, allowing users to rapidly identify active connections, potential traffic patterns, or suspicious IP activity without getting bogged down in full packet payload details. It can capture live traffic or read from <i>.pcap</i> files, and supports basic filtering expressions to narrow down the captured data. Its output is streamlined for readability, making it ideal for system administrators needing a rapid snapshot of network communications.


title: CAVEATS
content:
Running <i>ipsumdump</i> on an interface typically requires root privileges due to the need for raw socket access.<br><br>Capturing large volumes of traffic without specific filters can consume significant system resources and disk space (if writing to a file).<br><br>While designed for high-level summaries, it does not provide deep packet inspection capabilities. For detailed analysis, tools like <i>tcpdump</i> or <i>Wireshark</i> are more appropriate.<br><br>The interpretation of filtering expressions can sometimes be subtle; refer to BPF documentation for complex rules.


title: FILTERING EXPRESSIONS
content:
<i>ipsumdump</i> supports a powerful filtering syntax based on the Berkeley Packet Filter (BPF) language. Common examples include: <i>host 192.168.1.1</i>, <i>port 80</i>, <i>src net 10.0.0.0/8</i>, <i>tcp and not port 22</i>. Combining expressions with <i>and</i>, <i>or</i>, and <i>not</i> allows for complex filtering logic.


title: OUTPUT FORMAT
content:
By default, <i>ipsumdump</i> outputs a summary line for each captured IP packet. This line typically includes a timestamp, source IP:port, destination IP:port, protocol (e.g., TCP, UDP, ICMP), and packet size. The exact format may vary slightly depending on the protocol, but it's always designed for quick human readability. For example:<br><i>14:30:05.123456 IP 192.168.1.10.54321 > 8.8.8.8.53: UDP, 60 bytes</i><br><i>14:30:05.234567 IP 10.0.0.5.80 > 192.168.1.1.45678: TCP, 120 bytes [S]</i>


title: HISTORY
content:
<i>ipsumdump</i> was conceived as a simpler, more focused alternative to full-fledged network analyzers. Developed initially by a small team of network enthusiasts in the late 2000s, its primary goal was to provide quick, human-readable summaries of IP traffic without overwhelming users with excessive detail. Its design emphasizes speed and minimal overhead for on-the-fly diagnostics. While not as feature-rich as its counterparts, its niche utility for rapid IP traffic assessment has found a dedicated following in environments prioritizing quick glances over deep dives.


title: SYNOPSIS
content:
<i><b>iptables</b> [-t <I>table</I>] <I>command</I> [<I>chain</I>] [<I>match-options</I>] [-j <I>target</I>]<br><br>Common commands:<br>&nbsp;&nbsp;<b>iptables</b> -A <I>chain</I> <I>rule-specification</I> -j <I>target</I> (Append a rule)<br>&nbsp;&nbsp;<b>iptables</b> -L [<I>chain</I>] (List rules)<br>&nbsp;&nbsp;<b>iptables</b> -F [<I>chain</I>] (Flush rules)<br>&nbsp;&nbsp;<b>iptables</b> -P <I>chain</I> <I>target</I> (Set default policy)</i>


title: PARAMETERS
content:
<b>-t <I>table</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the table to operate on (e.g., 'filter', 'nat', 'mangle', 'raw'). Default is 'filter'.<br><br><b>-A, --append <I>chain</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Appends one or more rules to the end of the specified chain.<br><br><b>-I, --insert <I>chain</I> [<I>rulenum</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inserts one or more rules at the specified position in the chain (default is 1, the beginning).<br><br><b>-D, --delete <I>chain</I> <I>rule-specification</I> / <I>rulenum</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes one or more rules from the specified chain, either by specification or by rule number.<br><br><b>-L, --list [<I>chain</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all rules in the specified chain, or all chains if none is specified.<br><br><b>-F, --flush [<I>chain</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Flushes (deletes all rules from) the specified chain, or all chains if none is specified.<br><br><b>-P, --policy <I>chain</I> <I>target</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the default policy for a built-in chain (e.g., ACCEPT, DROP).<br><br><b>-j, --jump <I>target</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the action to take if the packet matches the rule (e.g., ACCEPT, DROP, REJECT, LOG, or a user-defined chain).<br><br><b>-p, --protocol [<I>protocol</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches the specified protocol (e.g., 'tcp', 'udp', 'icmp', 'all').<br><br><b>-s, --source <I>address</I>[/<I>mask</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches if the packet's source IP address is the one specified.<br><br><b>-d, --destination <I>address</I>[/<I>mask</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches if the packet's destination IP address is the one specified.<br><br><b>-i, --in-interface <I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches if the packet was received from the specified interface (e.g., 'eth0', 'lo').<br><br><b>-o, --out-interface <I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches if the packet is going out through the specified interface.<br><br><b>-m, --match <I>module</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads an extension match module (e.g., 'state', 'tcp', 'udp', 'limit').<br><br>


title: DESCRIPTION
content:
<i><b>iptables</b> is a user-space utility program that allows a system administrator to configure the IP packet filter ruleset of the Linux kernel firewall, known as <b>Netfilter</b>. It operates by defining rules that dictate how network packets are handled, such as accepting, dropping, or rejecting them based on various criteria. These rules are organized into logical structures called <b>chains</b>, which are themselves grouped into <b>tables</b>. Common tables include 'filter' (for general packet filtering), 'nat' (for Network Address Translation), and 'mangle' (for altering packet headers). <b>iptables</b> is a powerful and essential tool for securing Linux systems, controlling network access, and implementing complex networking functions like port forwarding and masquerading. It supports both stateless and stateful packet filtering, making it highly versatile.</i>


title: CAVEATS
content:
<i><br><ul><li><b>Complexity and Learning Curve</b>: <b>iptables</b> has a steep learning curve due to its extensive options, multiple tables, chains, and various match/target extensions.</li><br><li><b>Rule Persistence</b>: Rules configured with <b>iptables</b> are by default volatile and reside only in memory. They must be explicitly saved (e.g., using <b>iptables-save</b>) and restored (e.g., using <b>iptables-restore</b> or system-specific services) to survive a reboot.</li><br><li><b>Order Matters</b>: The order of rules within a chain is crucial. A packet is evaluated against rules sequentially, and the first matching rule with a terminating target determines the packet's fate.</li><br><li><b>Potential for Network Disruption</b>: Misconfigurations can easily lead to network connectivity loss, locking out administrators, or creating security vulnerabilities.</li><br><li><b>Successor Technology</b>: While still widely used, <b>iptables</b> is gradually being superseded by <b>nftables</b> in newer Linux distributions, which offers a unified framework for packet filtering across IPv4, IPv6, and Ethernet bridges.</li></ul></i>


title: TABLES AND CHAINS EXPLAINED
content:
<i><b>iptables</b> organizes rules into <b>tables</b>, each serving a specific purpose. The most common are:<br>&nbsp;&nbsp;<b>filter</b>: The default table, used for general packet filtering (ACCEPT, DROP, REJECT).<br>&nbsp;&nbsp;<b>nat</b>: Used for Network Address Translation (e.g., masquerading, port forwarding).<br>&nbsp;&nbsp;<b>mangle</b>: Used for altering packet headers (e.g., TTL, TOS).<br>&nbsp;&nbsp;<b>raw</b>: For very early processing of packets, before connection tracking.<br><br>Within each table, rules are grouped into <b>chains</b>. Built-in chains correspond to specific points in the packet flow, such as <b>INPUT</b> (for packets destined for the local host), <b>OUTPUT</b> (for packets originating from the local host), and <b>FORWARD</b> (for packets routed through the local host). Users can also create their own custom chains for better organization.</i>


title: COMMON TARGETS
content:
<i>When a packet matches a rule, a <b>target</b> determines the action to take. Common targets include:<br>&nbsp;&nbsp;<b>ACCEPT</b>: Allow the packet to pass.<br>&nbsp;&nbsp;<b>DROP</b>: Silently discard the packet (no response sent).<br>&nbsp;&nbsp;<b>REJECT</b>: Discard the packet and send an error message back to the sender (e.g., ICMP port unreachable).<br>&nbsp;&nbsp;<b>LOG</b>: Log information about the packet to the kernel log.<br>&nbsp;&nbsp;<b>RETURN</b>: Stop traversing the current chain and resume at the calling chain.<br>&nbsp;&nbsp;Custom Chains: Jump to a user-defined chain for further processing.</i>


title: HISTORY
content:
<i><b>iptables</b> is part of the <b>Netfilter</b> project, which fundamentally rewrote Linux's packet filtering capabilities. It was introduced in Linux kernel 2.4 (released in 2001), replacing its predecessors: <b>ipfwadm</b> (Linux 2.0, 1996) and <b>ipchains</b> (Linux 2.2, 1999).<br><br>The main improvements of <b>iptables</b> over <b>ipchains</b> included:<br>&nbsp;&nbsp;Full stateful firewall capabilities (connection tracking).<br>&nbsp;&nbsp;More flexible and extensible architecture through modules for various match criteria and targets.<br>&nbsp;&nbsp;Introduction of separate tables for different functionalities (filter, nat, mangle, raw).<br><br>For nearly two decades, <b>iptables</b> remained the standard Linux firewall utility. However, with the increasing complexity of network configurations and the need for a unified approach across different IP versions, <b>nftables</b> began to emerge as its successor, starting development around 2008 and becoming more prominent from kernel 3.13 (2014) onwards. Despite the rise of <b>nftables</b>, <b>iptables</b> remains widely deployed and actively maintained, often running as a compatibility layer on systems primarily using <b>nftables</b>.</i>


title: SYNOPSIS
content:
<b>iptables-apply</b> [<I>-t seconds</I>] [<I>-w wait-time</I>] [<I>-r</I>] [<I>-c test-command</I>] [<I>-x extension</I>] [<I>-V</I>] [<I>-h</I>] [<I>filename</I>]


title: PARAMETERS
content:
<b>-t <I>seconds</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the rollback timeout in seconds. Default is 60. If set to 0, <b>iptables-apply</b> will wait for user input (Enter key) before committing the rules. If the timeout expires without confirmation or a successful test, rules are reverted.<br><br><b>-w <I>wait-time</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the wait time in seconds for the <I>iptables-restore</I> or <I>ip6tables-restore</I> command to obtain the xtables lock. This helps prevent conflicts with other iptables operations.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces a rollback to the previously saved rules without attempting to apply new ones. This can be used to manually revert to a known good state.<br><br><b>-c <I>test-command</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the specified <I>test-command</I> after applying the new rules. If the command exits with a non-zero status (indicating failure), the rules are automatically reverted. This allows for custom connectivity or application health checks.<br><br><b>-x <I>extension</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the extension to use, effectively choosing between <I>iptables</I> and <I>ip6tables</I>. For example, use <I>-x ip6tables</I> to apply rules for IPv6.<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of the <b>iptables-apply</b> utility.<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a brief help message and usage instructions for the command.<br><br><b><I>filename</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to a file containing the new firewall rules to be applied. If this argument is omitted, <b>iptables-apply</b> will read the rules from standard input (stdin).<br><br>


title: DESCRIPTION
content:
<b>iptables-apply</b> is a crucial utility for safely modifying <B>Netfilter</B> (iptables/ip6tables) firewall rulesets. Its primary function is to prevent administrators from inadvertently locking themselves out of a system when deploying new firewall configurations, a common risk during remote management.<br><br>The command operates by first saving the currently active rules. It then applies the new rules provided from a specified file or standard input. Crucially, after applying the new rules, <b>iptables-apply</b> initiates a timer, typically 60 seconds by default. During this period, an optional <I>test-command</I> can be executed to verify connectivity or rule functionality.<br><br>If the <I>test-command</I> succeeds, or if the timer expires without issues and no test was specified, the new rules are committed. However, if the <I>test-command</I> fails, or if the timer expires and <b>iptables-apply</b> detects a problem (e.g., loss of network access), it automatically reverts to the previously saved, functional ruleset. This automatic rollback mechanism provides a vital safety net, ensuring system accessibility even if the new rules are flawed. It's an indispensable tool for robust and secure firewall administration.


title: CAVEATS
content:
<b>iptables-apply</b> relies on the presence and proper functioning of <B>iptables-save</B>, <B>iptables-restore</B>, and their IPv6 counterparts. Severe system issues (e.g., kernel panic, power loss) that prevent script execution might still lead to an unrecoverable state. The robustness of the rollback largely depends on the reliability of the <I>test-command</I> if specified, or the default timeout mechanism's ability to detect connectivity loss. Be cautious when using rules that extensively flush tables, as this could interfere with the save/restore process if not properly managed by the script itself.


title: AUTOMATIC ROLLBACK MECHANISM
content:
The core feature of <b>iptables-apply</b> is its intelligent rollback capability. If a specified <I>test-command</I> fails, or if the <I>timeout</I> is reached without user confirmation (when <I>-t 0</I> is used) or successful implicit validation, the command automatically reverts to the previously saved, functional firewall ruleset. This crucial mechanism prevents unintended network isolation or system inaccessibility due to erroneous rule configurations.


title: STANDARD INPUT USAGE
content:
New rules can be conveniently supplied to <b>iptables-apply</b> via standard input, allowing for dynamic rule generation and application from scripts or other commands. For example: <I>cat rules.v4 | iptables-apply</I> or <I>generate_rules.sh | iptables-apply</I>.


title: HISTORY
content:
<B>iptables-apply</B> is a component of the broader <B>iptables</B> project, which provides the user-space tools for configuring the <B>Linux kernel's Netfilter</B> firewall. Its inception was driven by the practical need to enhance safety during firewall rule deployment, particularly for remote system administration. Before such utilities, applying new rules was a high-risk operation, as a misconfiguration could immediately sever network access. <B>iptables-apply</B> was developed to mitigate this risk by integrating a reliable rollback mechanism, reflecting a mature approach to system configuration management where safety and availability are paramount.


title: SYNOPSIS
content:
<b>iptables-restore</b> [<i>-c</i>|<i>--counters</i>] [<i>-n</i>|<i>--noflush</i>] [<i>-v</i>|<i>--verbose</i>] [<i>-t &lt;table_name&gt;</i>|<i>--table &lt;table_name&gt;</i>] [<i>-f &lt;file&gt;</i>|<i>--file &lt;file&gt;</i>] [<i>--test</i>] [<i>-w</i>|<i>--wait</i> [<i>&lt;seconds&gt;</i>]] [<i>--wait-interval &lt;microseconds&gt;</i>] [<i>--modprobe=&lt;command&gt;</i>] [&lt; <i>file</i>]


title: PARAMETERS
content:
<b><b>-c</b>, <b>--counters</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restore the packet and byte counter values for each rule. Without this option, counters are reset to zero.<br><br><b><b>-n</b>, <b>--noflush</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not flush (clear) the existing rules of the selected table(s) before loading the new rules. Rules are appended rather than replacing existing ones entirely. Use with caution as this can lead to duplicate rules.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print verbose output, showing the progress and details of the rule restoration process.<br><br><b><b>-t &lt;table_name&gt;</b>, <b>--table &lt;table_name&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restore only the specified table (e.g., <i>filter</i>, <i>nat</i>, <i>mangle</i>, <i>raw</i>, <i>security</i>). If omitted, all tables found in the input will be processed.<br><br><b><b>-f &lt;file&gt;</b>, <b>--file &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read the rules from the specified <i>file</i> instead of standard input. This is an alternative to piping the file content.<br><br><b><b>--test</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Parse and validate the input, but do not actually load any rules into the kernel. Useful for checking the syntax of a rule file.<br><br><b><b>-w</b>, <b>--wait</b> [<i>&lt;seconds&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Wait for the xtables exclusive lock. If a <i>seconds</i> value is specified, it will wait for that many seconds. If the lock is not obtained within the specified time, the command exits with an error. This prevents conflicts when multiple iptables commands run concurrently.<br><br><b><b>--wait-interval &lt;microseconds&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the interval (in microseconds) to wait for the xtables lock. Default is 100000 (0.1 seconds).<br><br><b><b>--modprobe=&lt;command&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a command to use when loading kernel modules. This overrides the default module loading mechanism.<br><br>


title: DESCRIPTION
content:
<i>iptables-restore</i> is a utility used to load IP (IPv4) firewall rules into the kernel's Netfilter tables. It reads rules in the format produced by <i>iptables-save</i>, typically from standard input or a specified file.<br><br>This command is crucial for persistently configuring firewalls, as it allows for the quick and atomic loading of complex rule sets. Unlike adding rules individually with <i>iptables -A</i>, <i>iptables-restore</i> loads all rules as a single transaction. This significantly reduces the window during which the firewall might be in an inconsistent or unprotected state.<br><br>It's commonly invoked during system boot to apply a previously saved firewall configuration. The input file contains sections for each table (e.g., <i>filter</i>, <i>nat</i>, <i>mangle</i>, <i>raw</i>, <i>security</i>), along with chain definitions and rule specifications. If no specific table is selected, all tables found in the input are processed.


title: CAVEATS
content:
<b>Requires root privileges</b> to execute.<br><b>The input file must be in the exact format</b> generated by <i>iptables-save</i>. Malformed input will cause the command to fail.<br>By default (without <b>-n</b>), all existing rules for the specified table(s) are <b>flushed before new ones are loaded</b>, which can briefly expose the system.<br>This command is specifically for <b>IPv4</b> firewall rules. For IPv6, use <i>ip6tables-restore</i>.<br>Does not manage <b>IP sets</b> directly; <i>ipset-restore</i> is used for that purpose.


title: <B>ATOMIC RULE LOADING</B>
content:
A key feature of <i>iptables-restore</i> is its ability to load all rules as a single, atomic transaction. This means the entire configuration is loaded at once, minimizing the time during which the firewall might be in an inconsistent or unprotected state, which is a common concern when applying rules sequentially.


title: <B>INPUT SOURCE FLEXIBILITY</B>
content:
The command can read rules from either standard input (e.g., via a pipe <i>cat file | iptables-restore</i> or redirection <i>iptables-restore &lt; file</i>) or directly from a specified file using the <b>-f</b> option. This flexibility allows for various scripting and automation scenarios.


title: <B>ERROR HANDLING</B>
content:
If <i>iptables-restore</i> encounters a syntax error or an invalid rule specification in the input file, it typically aborts the entire restoration process. This prevents the loading of a partial or malformed rule set, which could leave the system insecure. Users should validate their <i>iptables-save</i> output before attempting restoration.


title: HISTORY
content:
<i>iptables-restore</i> is an integral part of the Netfilter project, which provides stateful packet filtering, NAT, and other packet manipulation facilities in the Linux kernel. It emerged with the introduction of <i>iptables</i> in the Linux kernel 2.4 series, succeeding older firewalling tools like <i>ipfwadm</i> and <i>ipchains</i>.<br><br>Its development was driven by the need for a more efficient and reliable method to load complex firewall configurations compared to adding rules one by one. The atomic loading capability provided by <i>iptables-restore</i> was a significant improvement, ensuring transactional updates to the firewall state and minimizing security vulnerabilities during configuration changes.


title: PARAMETERS
content:
<b>-c, --counters</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes the current values of packet and byte counters for each rule in the output. Useful for analyzing network traffic patterns or debugging.<br><br><b>-L, --linenumbers</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds line numbers to each rule in the output. This can help in identifying specific rules, especially when dealing with large or complex rule sets.<br><br><b>-t <I>table</I>, --table <I>table</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies which table's rules to save. If this option is omitted, rules from all standard tables (filter, nat, mangle, raw, security) are saved.<br><br><b>-f <I>filename</I>, --file <I>filename</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the output to the specified file instead of standard output (stdout). This is commonly used to create a backup file of the rules.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version of the <B>iptables-save</B> program and exits.<br><br>


title: DESCRIPTION
content:
The <B>iptables-save</B> command is used to extract and dump the current IPv4 firewall rules from the kernel's memory to standard output or a specified file. It generates a formatted output that is compatible with the <B>iptables-restore</B> command, making it essential for backing up, migrating, or restoring firewall configurations. <BR><BR>It reads the rule sets for all IPv4 tables (e.g., filter, nat, mangle, raw, security) or a specific table, and outputs them in a textual format that includes chain definitions, rules, and optional counters. This utility is a fundamental component of managing persistent iptables rules on Linux systems, as iptables rules are volatile and disappear on reboot unless saved and reloaded.


title: CAVEATS
content:
<ul><li><B>IPv4 Only:</B> <B>iptables-save</B> is specifically for IPv4 firewall rules. For IPv6 rules, use <B>ip6tables-save</B>.</li><li><B>Root Privileges:</B> This command requires root privileges to access and dump the kernel's firewall rules.</li><li><B>Output Format:</B> The output is designed to be parsed by <B>iptables-restore</B>. While human-readable, it follows a specific syntax that might not be immediately intuitive for manual editing.</li><li><B>Volatile Rules:</B> Rules saved by <B>iptables-save</B> are not automatically loaded on system boot. A mechanism (e.g., a service or script using <B>iptables-restore</B>) is required to load them persistently.</li></ul>


title: OUTPUT FORMAT
content:
The output generated by <B>iptables-save</B> is a series of <B>iptables</B> commands and directives that can be directly fed into <B>iptables-restore</B>. It starts with a <B>*table_name</B> line for each table, followed by <B>:CHAIN_NAME POLICY [packet_count:byte_count]</B> lines defining chains and their default policies. Subsequent lines specify individual rules, resembling their <B>iptables</B> command-line counterparts (e.g., <B>-A INPUT -p tcp --dport 22 -j ACCEPT</B>). The output for each table concludes with a <B>COMMIT</B> line, signaling the end of rule definitions for that table. This structure ensures atomic loading of rules by <B>iptables-restore</B>.


title: TYPICAL USAGE
content:
A common use case is to back up your current firewall rules to a file: <BR><BR><B>sudo iptables-save > /etc/iptables/rules.v4</B><BR><BR>And to restore them from that file: <BR><BR><B>sudo iptables-restore < /etc/iptables/rules.v4</B>


title: HISTORY
content:
<B>iptables-save</B> is part of the Netfilter project, which provides the Linux kernel's packet filtering framework. It evolved from earlier tools like <B>ipchains</B> and <B>ipfwadm</B> as part of the transition to the more flexible and powerful Netfilter architecture around Linux kernel 2.4. Its primary purpose has always been to provide a reliable method for persisting kernel-resident firewall rules.


title: SYNOPSIS
content:
<b>iptables-xml</b> [<i>OPTIONS</i>]<br>Common usage patterns:<br><b>iptables-save</b> | <b>iptables-xml</b> [<i>OPTIONS</i>] > <i>rules.xml</i><br><b>iptables-xml</b> [<i>OPTIONS</i>] < <i>rules.xml</i> | <b>iptables-restore</b>


title: PARAMETERS
content:
<b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output. This provides more detailed information during the conversion process, which can be useful for debugging.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a brief help message explaining the command's usage and options.<br><br>


title: DESCRIPTION
content:
<i>iptables-xml</i> is a utility program within the <i>iptables</i> firewall suite designed to facilitate the conversion of firewall rulesets between their internal binary representation and a structured XML format. It acts as an intermediary, working in conjunction with <i>iptables-save</i> to export the current ruleset from the kernel into XML, and with <i>iptables-restore</i> to import rules from an XML file back into the kernel. This XML representation provides a more structured and machine-readable format compared to the traditional plain-text output of <i>iptables-save</i>. <br><br>The primary uses for <i>iptables-xml</i> include backing up firewall configurations, version controlling rulesets, programmatically generating or modifying firewall rules, and simplifying the deployment of complex firewall policies. It supports both IPv4 rules via <i>iptables-xml</i> and IPv6 rules via its counterpart, <i>ip6tables-xml</i>. By piping data between the save/restore commands and <i>iptables-xml</i>, administrators can easily manage firewall rules in a format amenable to scripting and automated processing.


title: CAVEATS
content:
<i>iptables-xml</i> does not directly interact with the kernel. It requires the presence and proper functioning of <i>iptables-save</i> and <i>iptables-restore</i> (or their <i>ip6tables</i> counterparts) to perform its conversions. The XML format generated by <i>iptables-xml</i> is specific to the <i>iptables</i> project and may not be universally compatible with generic XML parsers without understanding its schema. It acts as a conversion utility, not a standalone firewall management tool. Ensure that the XML file you are restoring from is trusted, as malformed or malicious XML could potentially create undesired firewall rules.


title: USAGE EXAMPLES
content:
To save the current IPv4 firewall ruleset to an XML file:<br><b>iptables-save</b> | <b>iptables-xml</b> > <i>my_rules_ipv4.xml</i><br><br>To restore an IPv4 firewall ruleset from an XML file:<br><b>iptables-xml</b> < <i>my_rules_ipv4.xml</i> | <b>iptables-restore</b><br><br>To save the current IPv6 firewall ruleset to an XML file:<br><b>ip6tables-save</b> | <b>ip6tables-xml</b> > <i>my_rules_ipv6.xml</i><br><br>To restore an IPv6 firewall ruleset from an XML file:<br><b>ip6tables-xml</b> < <i>my_rules_ipv6.xml</i> | <b>ip6tables-restore</b>


title: IPV6 SUPPORT
content:
<i>iptables-xml</i> is specifically designed for IPv4 rules. For managing IPv6 firewall rulesets in XML format, you must use its companion command, <i>ip6tables-xml</i>. Both commands function identically but operate on their respective IP protocol versions.


title: HISTORY
content:
<i>iptables-xml</i> has been a long-standing component of the Netfilter/iptables project, designed to provide a structured, programmatic interface to firewall rulesets beyond plain text. Its development paralleled the growth of automated system administration and the need for more robust methods of managing complex firewall configurations, enabling easier backup, restoration, and version control of rules. It represents an early effort to introduce machine-readable formats for system configurations, serving a similar purpose for firewall rules.


title: SEE ALSO
content:
<i>iptables(8)</i>, <i>ip6tables(8)</i>, <i>iptables-save(8)</i>, <i>iptables-restore(8)</i>, <i>ip6tables-save(8)</i>, <i>ip6tables-restore(8)</i>, <i>netfilter(7)</i>


title: PARAMETERS
content:
<b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit, showing all available options and their usage.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's version number and exit, providing the installed <i>ipython</i> version.<br><br><b><b>--profile=</b><i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a profile to load for custom configuration. Profiles allow users to define specific settings like startup scripts, color schemes, and backend integrations.<br><br><b><b>--script=</b><i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the given file as a Python script within the <i>ipython</i> environment, enabling access to <i>ipython</i>'s magic commands and enhanced features.<br><br><b><b>--pdb</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable the IPython debugger (Pdb) on startup, allowing for interactive debugging of code during execution.<br><br><b><b>--gui=</b><i>&lt;backend&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable integration with a specific graphical user interface (GUI) event loop for interactive plotting or application development (e.g., <i>qt</i>, <i>tk</i>, <i>gtk</i>, <i>wx</i>, <i>osx</i>, <i>inline</i>).<br><br><b><b>--colors=</b><i>&lt;scheme&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the color scheme for syntax highlighting and output in the terminal (e.g., <i>NoColor</i>, <i>LightBG</i>, <i>Linux</i>).<br><br><b><b>--matplotlib[=</b><i>&lt;backend&gt;</i><b>]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable Matplotlib integration, allowing interactive plotting within the <i>ipython</i> session. An optional backend can be specified (e.g., <i>qt</i>, <i>inline</i>).<br><br>


title: DESCRIPTION
content:
<i>ipython</i> is an advanced interactive shell for the Python programming language, providing significant enhancements over the standard Python interpreter. It offers a more robust and user-friendly environment for interactive computing, data exploration, and scientific programming.<br><br>Key features include powerful introspection capabilities, comprehensive command history, intelligent tab completion for variables, functions, and files, and a rich set of "magic commands" for common tasks (e.g., <i>%run</i> to execute scripts, <i>%timeit</i> for performance timing, and <i>!</i> for system shell commands). It supports rich media output in Jupyter environments and integrates seamlessly with debuggers and profiling tools. <i>ipython</i> is a foundational component of the broader Jupyter ecosystem, serving as the primary kernel for Python in Jupyter notebooks and providing a flexible, extensible platform for interactive scientific computing.


title: CAVEATS
content:
While <i>ipython</i> significantly enhances interactive Python development, its unique features like magic commands are specific to the <i>ipython</i> environment and will not function if the code is run directly with a standard Python interpreter. For robust, production-ready applications, it's often advisable to rely on standard Python libraries and practices.


title: MAGIC COMMANDS
content:
<i>ipython</i> introduces a powerful concept called "magic commands," which are special commands that extend the interpreter's functionality. They are prefixed with a single percent sign (<i>%</i>) for 'line magics' (operating on a single line) or double percent signs (<i>%%</i>) for 'cell magics' (operating on multiple lines of code). These commands allow users to perform various tasks such as running external scripts (<i>%run</i>), timing code execution (<i>%timeit</i>), interacting with the system shell (<i>!</i> or <i>%sc</i>), or managing variables (<i>%who</i>). They provide a concise and efficient way to interact with the environment without writing full Python code.


title: JUPYTER INTEGRATION
content:
<i>ipython</i> serves as the foundational Python kernel for the Jupyter project. While <i>ipython</i> itself is an interactive terminal application, its kernel component is what powers Jupyter Notebooks and JupyterLab. This means that when you write and execute Python code in a Jupyter Notebook or JupyterLab environment, it's the <i>ipython</i> kernel running in the background, providing all the rich features like introspection, magic commands, and rich output capabilities that make Jupyter such a powerful platform for data science and interactive research.


title: HISTORY
content:
<i>ipython</i> was originally created by Fernando Pérez in 2001, aiming to provide a more advanced and user-friendly interactive computing environment for Python than the default interpreter. It rapidly gained popularity due to its powerful features like enhanced introspection, tab completion, and the introduction of 'magic commands'. A significant milestone was the development of the IPython Notebook in 2010, which later evolved into the language-agnostic Jupyter Notebook in 2014. This led to the separation of the core <i>ipython</i> kernel from the notebook interface. Today, <i>ipython</i> continues to be actively developed as a standalone interactive shell and remains the default Python kernel for the broader Jupyter project, serving as a cornerstone of interactive scientific computing.


title: PARAMETERS
content:
<b><b>-f</b>, <b>--raw-string</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <b>irb</b> to interpret strings as raw strings, affecting display output.<br><br><b><b>-m</b>, <b>--nomultiline</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables multiline input mode, requiring each expression on a single line.<br><br><b><b>-p</b>, <b>--prompt</b> <I>mode</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the prompt mode. <I>mode</I> can be <i>default</i>, <i>simple</i>, <i>inf</i>, or <i>multiline</i>.<br><br><b><b>-r</b> <I>library</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requires the specified Ruby <I>library</I> before starting the <b>irb</b> session.<br><br><b><b>-I</b> <I>directory</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds the specified <I>directory</I> to Ruby's <b>$LOAD_PATH</b>, making files within it discoverable.<br><br><b><b>-d</b>, <b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug mode for the Ruby interpreter (sets <b>$DEBUG = true</b>).<br><br><b><b>-w</b>, <b>--warn</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose warnings for the Ruby interpreter (sets <b>$VERBOSE = true</b>).<br><br><b><b>-v</b>, <b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <b>irb</b> version information.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available options.<br><br><b><b>--noreadline</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <b>irb</b> from using the <b>readline</b> library for enhanced line editing and history.<br><br><b><b>--irb_debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs internal <b>irb</b> debugging messages, useful for diagnosing <b>irb</b> itself.<br><br><b><b>--nolineinfo</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses line number information in backtraces, providing cleaner output.<br><br><b><b>--echo</b>, <b>--noecho</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls whether the results of evaluated expressions are echoed back to the console (default is <b>--echo</b>).<br><br><b><b>--inspect</b>, <b>--noinspect</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls whether the results are displayed using <b>Object#inspect</b> (default is <b>--inspect</b>).<br><br><b><b>--show-source-location</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the source file and line number for defined methods or constants.<br><br><b><b>--skip-level</b> <I>n</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips <I>n</I> levels of <b>irb</b> frames from backtraces, focusing on user code.<br><br><b><b>--back-trace-limit</b> <I>n</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the number of lines displayed in backtraces to <I>n</I>.<br><br><b><b>--context-mode</b> <I>mode</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial execution context; common modes include <i>toplevel</i> or <i>binding</i>.<br><br><b><b>--rc</b> <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads a custom configuration <I>file</I> (e.g., <b>.irbrc</b>) instead of the default.<br><br><b><b>--no-rc</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <b>irb</b> from loading any <b>.irbrc</b> configuration file.<br><br><b><b>--measure</b> <I>mode</I>, <b>--no-measure</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables or disables execution time measurement. <I>mode</I> can be <i>off</i>, <i>total</i>, <i>bytecode</i>, or <i>stack</i>.<br><br>


title: DESCRIPTION
content:
<b>irb</b>, the <i>Interactive Ruby Shell</i>, is a powerful Read-Eval-Print Loop (REPL) environment for the Ruby programming language. It comes bundled with Ruby and serves as an essential tool for developers to experiment with Ruby code, test snippets, and debug applications interactively. Users can type Ruby expressions directly into the shell, and <b>irb</b> immediately evaluates them, prints the result, and awaits the next input. This iterative feedback loop accelerates learning and development.<br><br>Beyond simple expression evaluation, <b>irb</b> supports multiline input, command history, tab completion (when used with <i>readline</i>), and allows loading external Ruby files or libraries. It can be launched with a specific context (e.g., inside a class or object definition) to facilitate testing specific parts of a program. Its flexibility makes it indispensable for quick prototyping, understanding Ruby's behavior, and debugging complex logic without needing to create full scripts.


title: CAVEATS
content:
<b>irb</b> is a powerful interactive tool, but it's important to note that it runs within a single Ruby process. Global state changes persist between commands, which can sometimes lead to unexpected results if not managed carefully.<br>While it provides basic error handling and backtraces, complex debugging scenarios might still require a dedicated debugger like <b>ruby-debug</b> or print statements in scripts.<br>The behavior of some features, like tab completion and command history, can depend on the availability and configuration of the <b>readline</b> library on your system.


title: CONFIGURATION FILE
content:
<b>irb</b> automatically loads a configuration file named <b>.irbrc</b> from the user's home directory (<b>~/.irbrc</b>) at startup. This file can contain Ruby code to customize the <b>irb</b> environment, such as setting prompt styles, defining helper methods, or requiring commonly used libraries. Users can override this behavior with the <b>--rc</b> or <b>--no-rc</b> options.


title: INTERACTIVE DEBUGGING
content:
While not a full-fledged debugger, <b>irb</b> can be used for interactive debugging. By calling <b>binding.irb</b> within a Ruby script, execution can be paused at that point, dropping the developer into an <b>irb</b> session. This allows inspecting variables, modifying code on the fly, and stepping through execution, making it a very effective tool for understanding program flow and state.


title: HISTORY
content:
<b>irb</b> has been an integral part of the Ruby programming language distribution since its early versions, providing a fundamental interactive environment for developers. It was introduced to mirror the concept of interactive shells found in other languages (like Python's IDLE or Lisp's REPL). Over the years, it has evolved with Ruby, incorporating new features, improving user experience with better prompt customization, multiline editing, and enhanced debugging capabilities, solidifying its role as an essential tool for Ruby development and experimentation.


title: PARAMETERS
content:
<b><b>--oneshot</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs <i>irqbalance</i> once, performs a rebalancing act, and then exits.<br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug messages for troubleshooting.<br><br><b><b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses normal output, showing only errors.<br><br><b><b>--nopoll</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables polling for new devices; useful if devices are static or for one-shot runs.<br><br><b><b>--irr</b> <i>&lt;0|1&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables (1) or disables (0) IRQ rebalancing. Primarily for daemon mode.<br><br><b><b>--pidfile</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative PID file path for the daemon.<br><br><b><b>--disable</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Completely disables IRQ balancing, forcing the daemon to exit if running.<br><br><b><b>--powerthresh</b> <i>&lt;threshold&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the power-saving threshold (default is 1000). Higher values prioritize power savings over performance.<br><br><b><b>--banirq</b> <i>&lt;IRQ_number&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents a specific IRQ from being balanced by <i>irqbalance</i>. Can be used multiple times.<br><br><b><b>--bancpu</b> <i>&lt;CPU_number&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents a specific CPU from receiving IRQs from <i>irqbalance</i>. Can be used multiple times.<br><br><b><b>--hintpolicy</b> <i>&lt;0|1&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines how <i>irqbalance</i> respects device affinity hints (0=ignore, 1=respect).<br><br><b><b>--policyscript</b> <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an external script to consult for custom balancing decisions.<br><br><b><b>--deepestcache</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Spreads IRQs across CPUs that share the deepest common cache, optimizing cache locality.<br><br><b><b>--numa_hint_on_hotplug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to balance new hotplugged devices on NUMA nodes based on hints.<br><br>


title: DESCRIPTION
content:
<i>irqbalance</i> is a Linux daemon that dynamically distributes hardware interrupts (IRQs) across multiple CPU cores or threads in a multi-processor or multi-core system. Its primary goal is to prevent a single CPU from becoming an IRQ bottleneck, thereby improving system performance and responsiveness, especially for I/O-intensive workloads like networking and storage.<br><br>The daemon constantly monitors system activity, identifies IRQ hot spots, and intelligently reassigns IRQ affinity (the CPU or set of CPUs an IRQ can run on) to spread the load more evenly. It strives to place IRQs on CPUs that are less busy or have less cache contention, optimizing resource utilization. While it typically runs as a continuous service in the background, it can also be executed once using the <b>--oneshot</b> option for immediate rebalancing. Configuration can be adjusted via command-line options or a system-wide configuration file, such as <i>/etc/sysconfig/irqbalance</i> or <i>/etc/irqbalance.conf</i>.


title: CAVEATS
content:
While generally beneficial, <i>irqbalance</i> might introduce slight overhead on systems with extremely low I/O, where manual IRQ affinity tuning might be more precise for specialized workloads. It respects manually set <i>smp_affinity</i> settings for specific IRQs. For highly customized or high-performance environments, direct manipulation of <i>/proc/irq/&lt;IRQ&gt;/smp_affinity</i> might be preferred over automated balancing. Modern versions are NUMA-aware, but complex NUMA topologies may still require fine-tuning beyond the daemon's automated decisions.


title: CONFIGURATION FILE
content:
On many Linux distributions, <i>irqbalance</i>'s persistent configuration is managed via a file such as <i>/etc/sysconfig/irqbalance</i> or <i>/etc/irqbalance.conf</i>. This file often contains environment variables or command-line options passed to the daemon at startup, allowing for system-wide customization.


title: SERVICE MANAGEMENT
content:
As a daemon, <i>irqbalance</i> is typically managed using standard service management tools. For systems using <i>systemd</i>, it can be controlled with commands like <b>systemctl start irqbalance</b>, <b>systemctl stop irqbalance</b>, <b>systemctl enable irqbalance</b>, and <b>systemctl status irqbalance</b>.


title: HISTORY
content:
<i>irqbalance</i> has been a staple utility in Linux distributions for many years, evolving to automate what was previously a manual and often complex task of distributing hardware interrupts. Its development has focused on improving intelligent balancing, incorporating NUMA awareness, and optimizing for power savings in modern server and desktop environments. It effectively replaced earlier, less sophisticated methods of IRQ distribution, making it easier for system administrators to achieve better I/O performance out-of-the-box.


title: PARAMETERS
content:
<b><b>-c</b> <I>file</I>, <b>--config</b> <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative configuration file instead of the default (~/.irssi/config).<br><br><b><b>-h</b> <I>dir</I>, <b>--home</b> <I>dir</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the home directory for Irssi, where it looks for its configuration and data files.<br><br><b><b>-f</b>, <b>--fork</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forks Irssi into the background immediately after starting, detaching it from the current terminal.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Irssi version information and exits.<br><br><b><b>--connect</b> <I>server</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to the specified IRC server immediately upon startup.<br><br><b><b>--session</b> <I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to or manages an existing Irssi proxy session, allowing you to re-attach to a running instance.<br><br>


title: DESCRIPTION
content:
Irssi is a full-featured, modular Internet Relay Chat (IRC) client designed for the terminal. It provides a powerful and highly customizable interface for connecting to IRC networks, joining channels, and communicating with other users, all from the command line. Unlike graphical IRC clients, Irssi is lightweight and efficient, making it an ideal choice for users who prefer text-mode applications, work on remote servers, or want to maintain persistent IRC sessions using terminal multiplexers like screen or tmux.<br><br>Key features include extensive configurability, support for multiple server connections, SSL encryption for secure communication, powerful logging capabilities, auto-reconnect, and a robust plugin architecture primarily based on Perl scripting. This extensibility allows users to add new commands, customize behavior, integrate with other tools, and tailor Irssi precisely to their needs, ranging from simple notification systems to complex IRC bots. Its command-line nature also makes it highly scriptable and suitable for automated tasks.


title: CAVEATS
content:
Irssi operates exclusively in a text-mode environment, meaning it does not offer a graphical user interface (GUI). Users accustomed to point-and-click interfaces may find its command-line driven interaction initially challenging. While powerful, its extensive configuration options and scripting capabilities can present a steep learning curve for new users. Maintaining a persistent IRC connection typically requires the use of terminal multiplexers like screen or tmux on a remote server, or careful management of your local machine's uptime, as closing the terminal window will terminate the Irssi process unless forked.


title: PERL SCRIPTING
content:
Irssi's extensibility largely stems from its support for Perl scripts. Users can write or download scripts to add new commands, customize the UI, automate tasks, integrate with external services, or even create full-fledged bots within Irssi. A vast collection of community-contributed scripts is available.


title: CONFIGURATION
content:
Configuration is handled via a plain text file, typically `~/.irssi/config`. This file allows for meticulous control over almost every aspect of the client, from server details, network settings, and channel auto-joins to themes, aliases, and keybindings. Changes can often be reloaded without restarting the client.


title: IRSSI PROXY
content:
Irssi includes an experimental `irssi-proxy` feature which allows for detached sessions. You can run `irssi` on a server, connect to it via `irssi-proxy`, and then disconnect without losing your IRC session. This is an alternative to using `screen` or `tmux` for persistence.


title: HISTORY
content:
Irssi was originally created by Timo Sirainen (known as `tss` on IRC) and first released in 1999. It quickly gained popularity among power users and system administrators due to its lightweight nature, robust feature set, and especially its highly extensible Perl scripting capabilities. This focus on modularity and user customization has been a defining characteristic throughout its development, allowing a vibrant community to contribute scripts and themes. Over the years, Irssi has consistently been updated and maintained, retaining its position as one of the most widely used and respected terminal-based IRC clients in the Linux and Unix-like ecosystems.


title: SYNOPSIS
content:
<code>git describe</code> <I>[<B>--all</B> | <B>--tags</B> | <B>--contains</B>] [<B>--abbrev=&lt;n&gt;</B>] [<B>--long</B>] [<B>--dirty[=&lt;mark&gt;]</B>] [<B>--broken[=&lt;mark&gt;]</B>] [<B>--match &lt;pattern&gt;</B>] [<B>--exclude &lt;pattern&gt;</B>] [<B>--always</B>] [<B>--first-parent</B>] [<B>--exact-match</B>] [<B>--candidates=&lt;n&gt;</B>] [<B>--debug</B>] [<B>&lt;commit-ish&gt;...</B>]</I>


title: PARAMETERS
content:
<b>--all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show <I>heads/</I> or <I>tags/</I> prefixes in the output, indicating if the closest reference was a branch or a tag.<br><br><b>--tags</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Consider any tag in <I>refs/tags</I>, not just annotated tags, when searching for the nearest tag.<br><br><b>--contains</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instead of finding a tag that is an ancestor of the commit, find a tag that contains the given commit (i.e., is a descendant of the tag).<br><br><b>--abbrev=&lt;n&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a different length for the abbreviated commit object name. A value of <I>0</I> suppresses the abbreviated hash entirely.<br><br><b>--long</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Always show the long format (<I>&lt;tag&gt;-&lt;num&gt;-g&lt;hex&gt;</I>), even if the commit is exactly on a tag.<br><br><b>--dirty[=&lt;mark&gt;]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Append <I>-dirty</I> (or a custom <I>&lt;mark&gt;</I>) to the output if the working tree has uncommitted changes.<br><br><b>--broken[=&lt;mark&gt;]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Append <I>-broken</I> (or a custom <I>&lt;mark&gt;</I>) if the working tree has issues (e.g., untracked files preventing a clean state or merge conflicts).<br><br><b>--match &lt;pattern&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only consider tags matching the given glob pattern when searching for a tag.<br><br><b>--exclude &lt;pattern&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not consider tags matching the given glob pattern.<br><br><b>--always</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Fall back to the raw commit hash if no suitable tag can be found reachable from the commit.<br><br><b>--first-parent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only follow the first parent commit when traversing the history, ignoring merges from other branches.<br><br><b>--exact-match</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only output a description if the commit is exactly a tag; otherwise, exit with an error.<br><br><b>&lt;commit-ish&gt;...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more commit objects to describe. If omitted, it defaults to <I>HEAD</I> (the current commit).<br><br>


title: DESCRIPTION
content:
<code>git-describe</code> finds the most recent tag that is reachable from a given commit (or HEAD by default). It then outputs a string representing that commit in a human-readable way, typically in the format: <I><B>&lt;tag&gt;</B>[-<B>&lt;num&gt;</B>-g<B>&lt;hex&gt;</B>]</I>. <B>&lt;tag&gt;</B> is the most recent annotated tag ancestor. <B>&lt;num&gt;</B> is the number of commits since that tag. <B>&lt;hex&gt;</B> is the abbreviated commit object name. This command is invaluable for automatically generating version strings for software builds, allowing developers and users to quickly identify the exact source code revision used for a particular build, even if it's not a direct tag. It helps in debugging and tracking releases without relying solely on raw commit hashes.


title: CAVEATS
content:
<code>git-describe</code> relies on the presence of tags in your repository's history. If no tags are found reachable from the target commit, the command will either fail or, with the <I><B>--always</B></I> option, fall back to showing the raw commit hash. Its output format can be complex, and its behavior can vary depending on whether annotated or lightweight tags are used, and the specific history structure. Results might not be intuitive if the commit history is heavily rebased or has multiple divergent branches with tags.


title: DEFAULT OUTPUT FORMAT
content:
By default, <code>git-describe</code> produces a string like <I><B>&lt;tag&gt;</B>[-<B>&lt;num&gt;</B>-g<B>&lt;hex&gt;</B>]</I>. <B>&lt;tag&gt;</B> is the closest tag. If the commit is exactly on a tag, only <B>&lt;tag&gt;</B> is shown (unless <I><B>--long</B></I> is used). If the commit is not on a tag, <B>&lt;num&gt;</B> indicates how many commits away it is, and <B>&lt;hex&gt;</B> is a short hash of the commit, prefixed with 'g' for "git".


title: COMMON USE CASES
content:
This command is widely used in automated build scripts (e.g., <I>Makefiles</I>, CI/CD pipelines) to embed version information directly into compiled binaries or release artifacts. It helps in quick identification of the exact source code state for debugging, customer support, or release management. For instance, a build version might be displayed as <I>v2.1.0-42-gabcdef12</I>.


title: HISTORY
content:
The <code>git-describe</code> command has been a core utility in Git since its early development. Its primary purpose was to provide a mechanism for software projects to automatically generate meaningful version strings from their Git repositories, particularly useful for builds and releases. This approach helps in uniquely identifying builds without manual version updates, aligning with Git's distributed nature where not all commits are necessarily "releases" but still need identifiable names.


title: SEE ALSO
content:
git-tag(1): Create, list, delete or verify a tag object signed with GPG., git-log(1): Show commit logs., git-rev-parse(1): Pick out and massage parameters., git-show-ref(1): List references in a local repository.


title: DESCRIPTION
content:
<i>grub-mkpasswd-pbkdf2</i> is a utility program provided as part of the GRUB (GRand Unified Bootloader) suite. Its primary purpose is to generate PBKDF2 (Password-Based Key Derivation Function 2) hashes of plaintext passwords. These hashes are then used within the <i>grub.cfg</i> configuration file to secure GRUB menu entries or to protect the entire bootloader configuration.<br><br>When executed, the command interactively prompts the user to enter a password and then to confirm it. It then outputs the PBKDF2-hashed password, typically prefixed with <I>grub.pbkdf2.</I>, to standard output. This output includes the salt and iteration count, making the hash robust against brute-force attacks. This tool is essential for administrators seeking to add a layer of security to their boot process, preventing unauthorized users from modifying boot parameters or accessing restricted boot options.


title: CAVEATS
content:
The password generated by <i>grub-mkpasswd-pbkdf2</i> protects only the GRUB bootloader configuration and does not secure the operating system itself. Physical access to the machine can still allow an attacker to bypass GRUB password protection by booting from removable media or by directly modifying the boot drive (though this requires more advanced knowledge). The security of the GRUB password is entirely dependent on the strength and uniqueness of the chosen password.


title: USAGE IN GRUB.CFG
content:
After generating a password using <i>grub-mkpasswd-pbkdf2</i>, the output hash can be placed in <i>/boot/grub/grub.cfg</i>. For example, to protect a specific menu entry, you would add a line like: <br><i>password_pbkdf2 <B>username</B> <I>grub.pbkdf2.hash...</I></i><br>or to protect the entire bootloader: <br><i>set superusers="<B>username</B>"</i><br><i>password_pbkdf2 <B>username</B> <I>grub.pbkdf2.hash...</I></i><br>This ensures that only users with the correct password can access or modify the specified GRUB options.


title: HISTORY
content:
The use of PBKDF2 for GRUB passwords was introduced with GRUB2, the successor to GRUB Legacy. GRUB Legacy typically used simpler hashing methods like MD5crypt for password protection. The adoption of PBKDF2 reflects a general trend towards stronger, more computationally intensive password hashing algorithms to enhance security against dictionary and brute-force attacks, aligning GRUB's security features with modern cryptographic best practices.


title: SYNOPSIS
content:
<b>gunicorn</b> [<i>OPTIONS</i>] <i>APP_MODULE</i>:<i>VARIABLE_NAME</i><br><br><i>Example:</i><br><b>gunicorn</b> <b>--bind</b> <i>0.0.0.0:8000</i> <b>--workers</b> <i>3</i> <i>myproject.wsgi:application</i><br><b>gunicorn</b> <b>--chdir</b> <i>/path/to/app</i> <i>myapp:app</i>


title: PARAMETERS
content:
<b><b>--bind ADDRESS</b>, <b>-b ADDRESS</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The socket to bind. Can be <i>IP:PORT</i>, <i>hostname:PORT</i>, or a Unix socket path (e.g., <i>'0.0.0.0:8000'</i>, <i>'/tmp/gunicorn.sock'</i>).<br><br><b><b>--workers INT</b>, <b>-w INT</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The number of worker processes to spawn. A common recommendation is <i>(2 x $NUM_CORES) + 1</i>.<br><br><b><b>--worker-class CLASS</b>, <b>-k CLASS</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The type of worker to use (e.g., <i>'sync'</i>, <i>'gevent'</i>, <i>'eventlet'</i>). Defaults to <i>'sync'</i>.<br><br><b><b>--threads INT</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The number of threads per worker for multi-threaded worker classes. Requires a compatible worker class.<br><br><b><b>--timeout INT</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Workers silent for more than this many seconds are killed and restarted. Defaults to 30 seconds.<br><br><b><b>--log-level LEVEL</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The granularity of log output. Options include <i>'debug'</i>, <i>'info'</i>, <i>'warning'</i>, <i>'error'</i>, <i>'critical'</i>.<br><br><b><b>--access-logfile FILE</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The access log file to write to. Use <i>'-'</i> for stdout.<br><br><b><b>--error-logfile FILE</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The error log file to write to. Use <i>'-'</i> for stderr.<br><br><b><b>--daemon</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Daemonize the Gunicorn process, running it in the background.<br><br><b><b>--pid FILE</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A file to write the master process PID to.<br><br><b><b>--user USER</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Switch worker processes to run as this user.<br><br><b><b>--group GROUP</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Switch worker processes to run as this group.<br><br><b><b>-c CONFIG</b>, <b>--config CONFIG</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The Gunicorn configuration file to use (a Python file defining settings).<br><br><b><b>--chdir PATH</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Change to the specified directory before loading the application.<br><br><b><b>--env KEY=VALUE</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set an environment variable for worker processes.<br><br>


title: DESCRIPTION
content:
Gunicorn (Green Unicorn) is a pre-fork worker model HTTP server for WSGI applications written in Python. It acts as a robust and high-performance intermediary, forwarding requests from a front-end web server (like Nginx or Apache) to your Python web application (e.g., Django, Flask). Its simplicity, efficiency, and broad compatibility make it a popular choice for deploying Python web projects.<br><br>Gunicorn manages multiple worker processes, each handling incoming requests, ensuring concurrency and responsiveness. It's designed for stability and resource efficiency, making it suitable for production environments. While Gunicorn serves your application code, it's generally recommended to place it behind a reverse proxy for handling static files, SSL termination, load balancing, and other advanced web server features, optimizing overall performance and security.


title: CAVEATS
content:
Gunicorn is designed to serve as an application server and should typically be run behind a reverse proxy (like Nginx or Apache). It is not optimized for serving static files, SSL termination, or advanced load balancing, which are best handled by a dedicated web server. Proper tuning of the number of worker processes is crucial for optimal performance and resource usage; too few can bottleneck, too many can exhaust resources.


title: WORKER TYPES
content:
Gunicorn supports various worker classes to handle different concurrency models.<br><b><i>'sync'</i></b> (default): Synchronous workers, one request at a time. Simple and robust for CPU-bound tasks.<br><b><i>'gevent'</i></b> / <b><i>'eventlet'</i></b>: Asynchronous workers using greenlets, suitable for I/O-bound applications requiring high concurrency.<br><b><i>'tornado'</i></b> / <b><i>'meinheld'</i></b>: Specialized asynchronous workers leveraging their respective frameworks' I/O loops.


title: DEPLOYMENT STRATEGY
content:
For production deployments, Gunicorn is almost always used in conjunction with a reverse proxy server such as Nginx or Apache. The reverse proxy handles public-facing responsibilities like SSL/TLS termination, serving static assets, caching, and load balancing, while Gunicorn focuses solely on executing the Python application code, communicating via HTTP or Unix sockets.


title: HISTORY
content:
Gunicorn was initially developed by Benoît Chesneau and first released in 2010. Its design was inspired by Ruby's Unicorn HTTP server, focusing on a pre-fork worker model for handling concurrent requests. From its inception, Gunicorn aimed to provide a simple, high-performance, and robust WSGI server for Python web applications, quickly gaining popularity as a reliable choice for deploying frameworks like Django and Flask due to its stability and ease of integration.


title: SYNOPSIS
content:
<i>General syntax:</i><br><b>magick</b> [<i>options</i>] <i>input_file</i> [<i>operations</i>] <i>output_file</i><br><br><i>Examples of common usage:</i><br><b>magick convert</b> <i>input.jpg</i> <b>-resize 50%</b> <i>output.png</i><br><b>magick mogrify -resize 50%</b> <i>*.jpg</i><br><b>magick identify -verbose</b> <i>image.png</i>


title: PARAMETERS
content:
<b>-resize <i>geometry</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scale an image using a specified geometry. Examples: <i>50%</i>, <i>120x120></i> (shrink to fit), <i>x200</i> (height 200, width auto).<br><br><b>-quality <i>value</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the compression level for formats like JPEG, MIFF, or WebP. Value ranges from 0 (lowest quality) to 100 (highest quality).<br><br><b>-format <i>string</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output specific image attributes. Commonly used with <b>identify</b> to extract metadata or properties.<br><br><b>-background <i>color</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the background color, used for operations like compositing or transparent image resizing.<br><br><b>-alpha <i>option</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Control the image's alpha (transparency) channel. Options include <i>On</i>, <i>Off</i>, <i>Set</i>, <i>Remove</i>, <i>Extract</i>, etc.<br><br><b>-rotate <i>degrees</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rotate an image by the specified number of degrees clockwise.<br><br><b>-crop <i>geometry</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Cut out a rectangular region of the image. Geometry specifies width, height, and offset.<br><br><b>-gravity <i>direction</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the direction for operations like cropping or text placement (e.g., <i>NorthWest</i>, <i>Center</i>, <i>SouthEast</i>).<br><br><b>-monochrome</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Transform the image to black and white, effectively reducing it to a bi-level image.<br><br><b>-level <i>black,white[%]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adjust the image's levels by mapping the specified black and white points to the full dynamic range.<br><br><b>-strip</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip all profiles and comments (e.g., EXIF, IPTC, XMP) from the image, reducing file size.<br><br><b>-compress <i>type</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the image compression type for the output format (e.g., <i>JPEG</i>, <i>LZW</i>, <i>None</i>).<br><br><b>-verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print detailed information about the image file being processed or identified.<br><br><b>-version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the ImageMagick version, copyright, and feature configuration.<br><br><b>-help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display command usage and available options for the specific subcommand or overall utility.<br><br>


title: DESCRIPTION
content:
ImageMagick is a free and open-source software suite for displaying, converting, and editing raster image files and vector image files. It supports over 200 image file formats including <b>PNG</b>, <b>JPEG</b>, <b>GIF</b>, <b>TIFF</b>, <b>DPX</b>, <b>EXR</b>, <b>WebP</b>, <b>Postscript</b>, <b>PDF</b>, and <b>SVG</b>. It can resize, rotate, crop, flip, or transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses, and Bézier curves. <br><br>ImageMagick's functionality is primarily accessed from the command line, though it also offers programming interfaces for various languages like Perl, PHP, Python, and Ruby. Its versatility makes it an essential tool for web development, desktop publishing, and automated image manipulation tasks, commonly used for generating thumbnails, watermarking, creating image collages, and efficient format conversion.


title: CAVEATS
content:
<ul><li><b>Performance and Resource Usage:</b> Complex operations or large images can consume significant CPU and memory, potentially leading to slow processing or system instability on resource-constrained systems.</li><li><b>Security:</b> Processing untrusted image files can pose security risks (e.g., known vulnerabilities like 'ImageTragick'). It's crucial to keep ImageMagick updated and be cautious when handling external inputs, potentially using a restricted environment or sanitization.</li><li><b>Complexity:</b> ImageMagick offers a vast array of options and its order of operations matters, which can make it challenging for new users to master.</li><li><b>Delegate Libraries:</b> ImageMagick relies on numerous external delegate libraries for format support. Missing or misconfigured delegates can limit functionality or cause errors.</li></ul>


title: SCRIPTING INTEGRATION
content:
ImageMagick is highly scriptable and commonly used in shell scripts, and via bindings in programming languages such as Python (<i>Wand</i>), PHP (<i>Imagick</i>), and Ruby (<i>RMagick</i>) for automated image processing workflows.


title: QUANTUM DEPTH
content:
ImageMagick can be compiled with different <i>quantum depths</i> (e.g., 8-bit, 16-bit, 32-bit per color channel), affecting memory usage and color precision. Higher quantum depths allow for more accurate color representation but consume more resources.


title: DELEGATES AND DEPENDENCIES
content:
The suite relies on external libraries (<i>delegates</i>) such as <i>libjpeg</i>, <i>libpng</i>, <i>libtiff</i>, <i>FreeType</i>, and <i>Ghostscript</i>, to handle various image formats and functionalities. The availability of these delegates determines ImageMagick's full capabilities.


title: HISTORY
content:
ImageMagick was first released in 1990 by John Cristy at DuPont. Initially developed for 24-bit images on a workstation, it quickly evolved into a robust, cross-platform image processing suite. Its development was driven by the need for flexible image manipulation in scientific and graphic design contexts. Over the decades, it has undergone significant architectural changes; notably, version 7.x consolidated many standalone utilities (like <i>convert</i>, <i>mogrify</i>, <i>identify</i>) under a unified <b>magick</b> command-line tool, simplifying its usage and enhancing internal consistency. Its open-source nature has fostered a large community, contributing to its continuous improvement and widespread adoption.


title: SEE ALSO
content:
convert(1), mogrify(1), identify(1), display(1), compare(1), GraphicsMagick(1), ffmpeg(1), exiftool(1)


title: SYNOPSIS
content:
immich-cli <b>[global-options]</b> <b><command></b> <b>[command-options]</b> <b>[arguments]</b><br><br>Common commands include:<br><i>immich-cli upload [options] [files/directories...]</i><br><i>immich-cli config <action> [options] [key] [value]</i><br><i>immich-cli login</i><br><i>immich-cli logout</i><br><i>immich-cli check</i><br><i>immich-cli version</i>


title: PARAMETERS
content:
<b><b>Global Options</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Options applicable to all <i>immich-cli</i> commands.<br><br><b><i>--help</i>, <i>-h</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the command or a subcommand.<br><br><b><i>--version</i>, <i>-v</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the installed <i>immich-cli</i> version.<br><br><b><i>--debug</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug output for troubleshooting purposes.<br><br><b><i>--host <url></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Immich server URL. Can be set persistently via the 'config' subcommand.<br><br><b><i>--api-key <key></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the API key for server authentication. Can be set persistently via 'config'.<br><br><b><b>upload Command Options</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Options specific to the 'upload' subcommand, used for uploading files and directories.<br><br><b><i>[files/directories...]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more paths to files or directories to be uploaded.<br><br><b><i>--recursive</i>, <i>-r</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recursively uploads all supported media files found within specified directories.<br><br><b><i>--album <name></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns uploaded files to a specific album on the Immich server. Creates the album if it doesn't exist.<br><br><b><i>--key <key-name></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a unique identifier for the upload session, enabling resumable uploads.<br><br><b><i>--skip-hash-check</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips checking if a file's hash already exists on the server, potentially speeding up uploads of already existing files.<br><br><b><i>--delete-local</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes local files from the filesystem after successful upload to the server. <b>Use with extreme caution.</b><br><br><b><i>--dry-run</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulates the upload process without actually performing any file transfers or modifications.<br><br><b><i>--force</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the upload even if conflicts or existing files are detected on the server.<br><br><b><i>--no-confirm</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Bypasses all interactive confirmation prompts during the upload process.<br><br><b><i>--recursive-skip-hidden</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes hidden files and directories (those starting with '.') during recursive uploads.<br><br><b><i>--exclude <pattern></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes files matching the given glob pattern from being uploaded.<br><br><b><i>--exclude-if-present <file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes directories that contain a specific file (e.g., '.nomedia') from being uploaded.<br><br><b><b>config Command Actions</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Actions for managing <i>immich-cli</i> configuration settings persistently.<br><br><b><i>set <key> <value></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a configuration key to a specified value (e.g., 'host', 'api-key').<br><br><b><i>get <key></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retrieves and displays the value of a specific configuration key.<br><br><b><i>show</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays all currently stored <i>immich-cli</i> configuration settings.<br><br><b><i>clear</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clears all stored <i>immich-cli</i> configuration settings, requiring re-login or manual host/API key specification.<br><br>


title: DESCRIPTION
content:
immich-cli is a command-line interface tool designed to interact with the Immich self-hosted photo and video backup solution. It provides functionalities to manage media files and server configurations directly from the terminal, making it ideal for automation, scripting, and batch operations. Users can upload individual files or entire directories, organize uploads into specific albums, and manage server connection details (like host URL and API keys). The tool supports features like recursive uploads, dry-runs to preview actions, and options to handle existing files or skip hidden directories. It's a crucial component for power users and administrators looking to integrate Immich into their existing workflows or perform large-scale media management tasks efficiently without relying on the web interface.


title: CAVEATS
content:
<i>immich-cli</i> requires an active and accessible Immich server instance for all operations.<br>Proper authentication (via API Key) is crucial for performing any actions on the server, especially uploads.<br>The <i>--delete-local</i> option is destructive; always test with <i>--dry-run</i> first and ensure proper backups before use.<br>Performance for large-scale uploads is highly dependent on network bandwidth and the Immich server's processing capabilities.


title: CONFIGURATION MANAGEMENT
content:
<i>immich-cli</i> allows persistent configuration using the <i>config</i> subcommand, which stores settings like the server host and API key. This avoids repeatedly specifying these details for every command. For example, configure it once with: <i>immich-cli config set host https://your.immich.server</i> and <i>immich-cli config set api-key your-api-key-here</i>.


title: AUTOMATED UPLOADS
content:
The CLI is particularly powerful for setting up automated backup routines. Users can schedule cron jobs or scripts to periodically upload new photos or videos from specific directories to their Immich server, leveraging options like <i>--recursive</i> and <i>--skip-hash-check</i> for efficient incremental backups. This is ideal for continuous synchronization of local media folders.


title: ERROR HANDLING AND DEBUGGING
content:
The <i>--debug</i> flag is invaluable for troubleshooting connection issues, authentication problems, or unexpected upload behaviors. It provides verbose output detailing the CLI's operations, API interactions, and any encountered errors, significantly aiding in problem diagnosis.


title: HISTORY
content:
Immich, as a self-hosted media solution, gained significant traction in the self-hosting community, leading to the development of robust tools for interaction. <i>immich-cli</i> emerged as an essential companion tool, designed to provide power users and administrators with a programmatic way to manage their media libraries. Its development closely tracks the evolution of the main Immich server, ensuring compatibility and leveraging new API features. It addresses the need for batch processing, automated backups, and scripted media organization, moving beyond the capabilities offered by the web interface or mobile apps alone.


title: SYNOPSIS
content:
impacket-mssqlclient [options] [[<I>domain</I>/]<I>username</I>[:<I>password</I>]@]<I>targetName or address</I>


title: PARAMETERS
content:
<b><I>targetName or address</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The IP address or hostname of the target MSSQL Server.<br><br><b><I>username</I>[:<I>password</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Credentials for SQL Server or Windows authentication. Password is optional if using other auth methods like <B>-hashes</B> or <B>-k</B>.<br><br><b>-windows-auth, -W</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces Windows authentication (NTLM/Kerberos) instead of SQL Server authentication. Requires a domain/username.<br><br><b>-port <I>port</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the MSSQL port to connect to (default: 1433).<br><br><b>-db <I>database</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the database to connect to on the SQL Server.<br><br><b>-sqlquery <I>query</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a single SQL query and prints the result. The query must be quoted.<br><br><b>-file <I>script_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes SQL commands from the specified file.<br><br><b>-shell</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens an interactive SQL shell session against the target database.<br><br><b>-xp_cmdshell</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens an interactive <I>xp_cmdshell</I> session, allowing command execution on the SQL Server host, if enabled and privileged.<br><br><b>-upload <I>local_path</I> <I>remote_path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uploads a file from <I>local_path</I> to <I>remote_path</I> on the server using <I>xp_cmdshell</I> or OLE Automation.<br><br><b>-download <I>remote_path</I> <I>local_path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads a file from <I>remote_path</I> on the server to <I>local_path</I> using <I>xp_cmdshell</I> or OLE Automation.<br><br><b>-hashes <I>LMHASH</I>:<I>NTHASH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses NTLM hashes for authentication (pass-the-hash). LM hash can be omitted.<br><br><b>-aesKey <I>key</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses AES Kerberos key for authentication (Pass-The-Key). Only valid with <B>-k</B>.<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use Kerberos authentication instead of NTLM. Requires <B>-dc-ip</B> or <B>-kdcHost</B>.<br><br><b>-kdcHost <I>hostname</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;IP Address or hostname of the Kerberos KDC. If omitted, will use DNS.<br><br><b>-dc-ip <I>ip_address</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;IP Address of the Domain Controller for NTLM/Kerberos authentication.<br><br><b>-debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug output.<br><br><b>-outputfile <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects command output to the specified file.<br><br>


title: DESCRIPTION
content:
<i>impacket-mssqlclient</i> is a powerful command-line utility from the <B>Impacket</B> library, designed for interacting with Microsoft SQL Server instances. It implements the MSSQL (Tabular Data Stream - TDS) protocol, allowing users to connect, execute SQL queries, enumerate databases and tables, upload/download files, and even gain an interactive shell via <I>xp_cmdshell</I> if enabled and permissions allow. It supports various authentication methods, including SQL Server authentication, Windows authentication (NTLM and Kerberos), and pass-the-hash techniques. This tool is widely used in penetration testing, security assessments, and ethical hacking scenarios to explore and exploit SQL Server vulnerabilities, perform data exfiltration, or achieve privilege escalation.


title: CAVEATS
content:
The functionality of features like <I>xp_cmdshell</I>, file upload/download, and OLE Automation procedures is highly dependent on the SQL Server configuration and the privileges of the authenticated user. <I>xp_cmdshell</I> is often disabled by default in modern SQL Server installations for security reasons. Use of this tool can be logged by security monitoring systems and firewalls.


title: PRIVILEGE REQUIREMENTS
content:
Successful interaction with MSSQL Server, especially for sensitive operations like command execution via <I>xp_cmdshell</I> or file transfers, requires an account with sufficient privileges on the SQL Server instance. This often means an administrator-level user (e.g., <I>sysadmin</I> fixed server role) or a user with specific permissions granted to execute extended stored procedures.


title: PROTOCOL IMPLEMENTATION
content:
The tool directly implements the Tabular Data Stream (TDS) protocol, which is the application-layer protocol used by Microsoft SQL Server for client-server communication. This low-level implementation allows <I>impacket-mssqlclient</I> to offer more flexibility and advanced features compared to generic database clients, particularly in security testing contexts.


title: HISTORY
content:
<i>impacket-mssqlclient</i> is a core component of the <B>Impacket</B> library, an open-source collection of Python classes initially developed by <B>SecureAuth</B> (now maintained by <B>Fortra's Core Security</B>). Impacket began development around 2005, focusing on providing programmatic access to network protocols. The <I>mssqlclient</I> module was specifically designed to handle the nuances of the MSSQL protocol (TDS), making it a staple in network security and penetration testing toolkits for its robust implementation of authentication mechanisms (SQL, NTLM, Kerberos) and its ability to leverage advanced SQL Server features.


title: PARAMETERS
content:
<b>-b, --background <color></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the viewer's background color. Accepts hex codes like #RRGGBB or #AARRGGBB.<br><br><b>-d, --display <id></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Wayland display ID to use, if applicable.<br><br><b>-f, --fullscreen</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the viewer immediately in fullscreen mode.<br><br><b>-r, --recursive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When opening directories, recursively scans subdirectories for images.<br><br><b>-s, --scale <mode></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial image scaling mode. Modes include: <i>fit</i>, <i>fill</i>, <i>stretch</i>, <i>center</i>, and <i>actual</i> (1:1 pixel mapping).<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <i>imv</i> version information and then exits.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message detailing command options and then exits.<br><br><b>file...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more image files or directories to open. If a directory is specified, all supported images within it are loaded.<br><br>


title: DESCRIPTION
content:
<i>imv</i> is a highly efficient and minimalistic command-line image viewer, particularly well-suited for users of tiling window managers and those who prioritize speed. It leverages the <i>imlib2</i> library for rapid image loading and rendering, ensuring immediate feedback and low latency when browsing through a collection of images. <i>imv</i> supports a wide array of common image formats, making it versatile for various use cases.<br><br>Its core design philosophy centers on simplicity and responsiveness, providing a clean interface focused solely on image display without extraneous graphical elements. Navigation and control are primarily keyboard-driven, allowing for quick and seamless browsing of images within a specified directory or list of files. This design makes <i>imv</i> an excellent choice for quickly reviewing photos or graphics without the overhead of more feature-rich graphical applications. It aims to be unobtrusive and highly performant, distinguishing itself by its lean resource usage and fluid user experience, especially on modern Wayland compositors.


title: CAVEATS
content:
Being minimalistic, <i>imv</i> lacks advanced GUI features like menus, toolbars, or built-in image manipulation tools. It is primarily keyboard-driven, which might require a learning curve for new users unfamiliar with its keybindings. Its performance and supported image formats are dependent on the capabilities of the underlying <i>imlib2</i> library.


title: KEYBOARD SHORTCUTS
content:
<i>imv</i> is primarily controlled via keyboard shortcuts for efficient navigation and interaction:<br><b>j</b> / <b>k</b> or <b>Right</b> / <b>Left</b> arrow: Navigate to the next/previous image.<br><b>q</b>: Quit the viewer.<br><b>f</b>: Toggle fullscreen mode.<br><b>r</b>: Rotate the current image clockwise.<br><b>+</b> / <b>-</b>: Zoom in/out on the image.<br><b>g</b>: Go to the first image in the list.<br><b>G</b>: Go to the last image in the list.<br><b>d</b>: Delete the current image (requires confirmation).<br><b>h</b>: Toggle the help overlay, showing available keybindings.


title: CONFIGURATION
content:
Users can customize <i>imv</i>'s behavior through a configuration file, typically located at <i>~/.config/imv/config</i> or <i>~/.config/imv/imvrc</i>. This file allows for the modification of default settings, such as scaling mode, and the remapping of keybindings to suit individual preferences.


title: WAYLAND COMPATIBILITY
content:
A significant design goal for <i>imv</i> was to ensure robust compatibility with Wayland compositors, making it a modern choice for users running Wayland-based desktop environments. This focus on Wayland integration contributes to its responsive and smooth performance, providing a native feel on contemporary Linux systems.


title: HISTORY
content:
<i>imv</i> was developed to be a fast, modern image viewer, offering an alternative to existing tools like <i>feh</i> or <i>sxiv</i>, with a specific focus on low latency and robust Wayland compatibility. Its development prioritizes speed and a minimal footprint, making it a popular choice among users who prefer highly responsive applications, especially within tiling window manager environments. It leverages the efficient <i>imlib2</i> library for its core image rendering capabilities.


title: SYNOPSIS
content:
<b>in2csv</b> [<i>options</i>] [<i>INPUT_FILE</i>]<br><br>Examples:<br><b>in2csv</b> <b>data.json</b> > <b>data.csv</b><br><b>in2csv</b> <b>--format xlsx</b> <b>report.xlsx</b> > <b>report.csv</b><br><b>cat</b> <b>api_response.xml</b> | <b>in2csv</b> <b>--format xml</b> <b>--root //item</b> > <b>items.csv</b>


title: PARAMETERS
content:
<b>--format FORMAT, -f FORMAT</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Required</b></i> for stdin, otherwise inferred. The format of the input data. Supported values include: <i>csv</i>, <i>json</i>, <i>xls</i>, <i>xlsx</i>, <i>dbf</i>, <i>gsheets</i>, <i>html</i>, <i>fixed</i>, <i>rdb</i>.<br><br><b>--sheet SHEET, -s SHEET</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the sheet to convert in Excel or Google Sheets files. Can be specified multiple times. Use `--names` to list available sheets.<br><br><b>--names</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the names of all sheets in an Excel or Google Sheets file and exit.<br><br><b>--no-header-row</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not output a header row for the CSV.<br><br><b>--skip-lines N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip the first N lines of the input file before parsing. Useful for files with header comments.<br><br><b>--encoding ENCODING, -e ENCODING</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the encoding of the input file (e.g., <i>utf-8</i>, <i>latin1</i>).<br><br><b>--no-inference</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable automatic type inference for columns. All columns will be output as strings.<br><br><b>--snifflimit N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limit the number of bytes to sniff when inferring CSV dialect (default: 10240).<br><br><b>--zeros</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat empty strings as zeros when type inferring.<br><br><b>--locale LOCALE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the locale for parsing numbers and dates (e.g., <i>en_US</i>, <i>fr_FR</i>).<br><br><b>--root ROOT_XPATH</b><br>&nbsp;&nbsp;&nbsp;&nbsp;For XML input, specify an XPath expression for the root element of records.<br><br><b>--table TABLE_SELECTOR</b><br>&nbsp;&nbsp;&nbsp;&nbsp;For HTML input, specify a CSS selector for the desired table.<br><br><b>--url URL</b><br>&nbsp;&nbsp;&nbsp;&nbsp;For remote HTML or Google Sheets, specify the URL.<br><br><b>--gd-service-account FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a Google Drive service account credentials JSON file.<br><br><b>--gd-credentials-file FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a Google Drive user credentials file (for OAuth 2.0).<br><br>


title: DESCRIPTION
content:
<b>in2csv</b> is a powerful command-line utility from the <i>csvkit</i> suite designed to transform data from diverse formats into the ubiquitous Comma Separated Values (CSV) format. It supports a wide array of input types, including <i>JSON</i>, <i>XML</i>, <i>Excel spreadsheets (.xls, .xlsx)</i>, <i>DBF</i>, <i>Google Sheets</i>, <i>HTML tables</i>, and fixed-width files. This tool is invaluable for data analysts, developers, and anyone needing to prepare data from disparate sources for standardized processing. <b>in2csv</b> automatically infers schema and data types where possible, but also provides options for manual override. Its integration within the <i>csvkit</i> ecosystem means that once data is converted to CSV, it can be seamlessly manipulated, filtered, joined, and analyzed using other <i>csvkit</i> tools. It can read from files or standard input, making it highly versatile for scripting and data pipelines.


title: CAVEATS
content:
<b>in2csv</b> relies on various third-party libraries for different input formats (e.g., <i>xlrd</i> for XLS, <i>openpyxl</i> for XLSX, <i>lxml</i> for XML/HTML). Missing libraries can lead to errors for specific formats. <br>While powerful, schema inference may not always be perfect, particularly with ambiguous data. In such cases, using `--no-inference` or post-processing with other <i>csvkit</i> tools might be necessary. <br>Processing very large XML or JSON files can be memory-intensive. <br>Accessing Google Sheets requires proper authentication setup, either via service accounts or user credentials.


title: SUPPORTED INPUT FORMATS
content:
<i><b>in2csv</b></i> supports a wide range of input formats, making it highly versatile:<br><ul><li><b>CSV</b>: Comma Separated Values (native support).</li><li><b>JSON</b>: JavaScript Object Notation (flat or nested structures).</li><li><b>XML</b>: Extensible Markup Language (requires XPath for record definition).</li><li><b>XLS/XLSX</b>: Microsoft Excel Spreadsheets (older and newer formats).</li><li><b>DBF</b>: dBase database files.</li><li><b>Google Sheets</b>: Online spreadsheets (requires authentication).</li><li><b>HTML</b>: Tables embedded in HTML documents (requires CSS selector).</li><li><b>Fixed-Width</b>: Data with fixed-length fields (requires schema definition).</li><li><b>RDB</b>: Relational Database dumps from <i>csvsql</i>.</li></ul>


title: GOOGLE SHEETS AUTHENTICATION
content:
To access Google Sheets, <i><b>in2csv</b></i> requires authentication. Two primary methods are supported:<br><ul><li><b>Service Account</b>: Recommended for automated scripts. Requires a JSON key file from a Google Cloud service account with Google Drive API access (`--gd-service-account`).</li><li><b>User Credentials (OAuth 2.0)</b>: For interactive use or if using a specific user's permissions. Involves generating and providing a token file (`--gd-credentials-file`). The first time you use it, it will usually open a browser for authorization.</li></ul>


title: HISTORY
content:
<b>in2csv</b> is a core component of the <i>csvkit</i> library, an open-source project initiated by Christopher Groskopf around 2012. The project was conceived to address the common need for robust, command-line tools to process CSV data, offering a more programmatic and scalable alternative to spreadsheet software. <b>in2csv</b> specifically fills the crucial role of converting diverse data formats into CSV, making it accessible to the entire <i>csvkit</i> toolchain and the broader ecosystem of Unix text processing utilities. Its development has focused on extensibility to support new input formats and improve schema inference capabilities.


title: PARAMETERS
content:
<b><b>-D</b> <i>directory</i>, <b>--pgdata=</b><i>directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;This option specifies the directory where the database cluster will be stored. This is a mandatory option.<br><br><b><b>-E</b> <i>encoding</i>, <b>--encoding=</b><i>encoding</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the default encoding for new databases. For example, <i>UTF8</i>. The default is derived from the locale.<br><br><b><b>-U</b> <i>username</i>, <b>--username=</b><i>username</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the database superuser's name for the new cluster. This user will own all system catalogs and initial databases. The default is the name of the operating system user running <i>initdb</i>.<br><br><b><b>-W</b>, <b>--pwprompt</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Causes <i>initdb</i> to prompt for a password for the database superuser. If you don't set a password, authentication will be trust-based for local connections initially.<br><br><b><b>-A</b> <i>authmethod</i>, <b>--auth-local=</b><i>authmethod</i>, <b>--auth-host=</b><i>authmethod</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the default authentication method for local (<i>--auth-local</i>) and TCP/IP (<i>--auth-host</i>) connections in <i>pg_hba.conf</i>. Common methods include <i>trust</i>, <i>ident</i>, <i>md5</i>, <i>scram-sha-256</i>. Default is <i>ident</i> for local connections and <i>scram-sha-256</i> for host connections if the cluster is initialized with a superuser password, otherwise <i>trust</i>.<br><br><b><b>-X</b> <i>waldir</i>, <b>--waldir=</b><i>wal_directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory where the transaction log (WAL) will be stored. This can be used to place the WAL on a different disk for performance or reliability.<br><br><b><b>-k</b>, <b>--data-checksums</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables data checksums for all data pages. Checksums help detect disk and file system corruption, but incur a small performance overhead. Once enabled, they cannot be turned off without reinitializing the cluster.<br><br><b><b>--no-locale</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Equivalent to setting the locale to <i>C</i> (or <i>POSIX</i>). This is a faster option than defining a specific locale as it avoids locale-dependent sorting overhead. Useful for performance-critical applications or when locale awareness is not needed.<br><br><b><b>--locale=</b><i>locale</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the default locale for the database cluster. This affects sorting order, character classification, and formatting of dates and numbers. All other locale settings (like <i>lc_collate</i>, <i>lc_ctype</i>) are set to this value unless overridden by specific options.<br><br><b><b>--lc-collate=</b><i>locale</i>, <b>--lc-ctype=</b><i>locale</i>, etc.</b><br>&nbsp;&nbsp;&nbsp;&nbsp;These options allow setting specific locale categories independently (e.g., for collation, character types, messages, monetary, numeric, time). Overrides <b>--locale</b> for that specific category.<br><br><b><b>--pwfile=</b><i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads the database superuser's password from a file. This is useful for scripting <i>initdb</i> without exposing the password on the command line.<br><br><b><b>-L</b> <i>directory</i>, <b>--localedir=</b><i>directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory where locale information can be found. This is typically only useful if you're using a custom locale setup.<br><br><b><b>-N</b>, <b>--noclean</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;By default, when <i>initdb</i> fails, it removes any files it created. This option prevents that cleanup, which can be useful for debugging.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <i>initdb</i> version and exits.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows help about <i>initdb</i> command line arguments, and exits.<br><br>


title: DESCRIPTION
content:
<i>initdb</i> is a PostgreSQL utility used to create a new PostgreSQL database cluster. A database cluster is a collection of databases managed by a single server instance. Running <i>initdb</i> creates the directory structure where all the data will live, generates the shared catalog tables (template databases), and creates the template0 and template1 databases, along with the default 'postgres' database. It also sets up default configuration files like <i>postgresql.conf</i> and <i>pg_hba.conf</i>, which control the server's behavior and client authentication.<br><br>This command is the first essential step before you can start a PostgreSQL server for the first time in a new data directory. It does <b>not</b> start the PostgreSQL server; it merely prepares the directory for the server to be started by commands like <i>pg_ctl</i> or <i>postgres</i> itself. It's crucial to ensure the data directory specified is either empty or does not exist, as <i>initdb</i> will populate it with the necessary files.


title: CAVEATS
content:
<i>initdb</i> must be run by the operating system user that will later own the PostgreSQL server process. The target data directory must be empty or non-existent; <i>initdb</i> will refuse to initialize a directory that already contains data. Ensure sufficient disk space is available for the initial setup. Data checksums, once enabled with <b>-k</b>, cannot be disabled without reinitializing the cluster.


title: DATABASE SUPERUSER
content:
When <i>initdb</i> is run, it creates a database superuser. By default, this user has the same name as the operating system user who invoked <i>initdb</i>. This superuser is critical for initial database administration tasks, including creating new databases and users, and modifying system settings. It's recommended to set a strong password for this user using the <b>-W</b> or <b>--pwfile</b> options.


title: CONFIGURATION FILES
content:
<i>initdb</i> creates several crucial configuration files in the data directory, most notably <i>postgresql.conf</i> and <i>pg_hba.conf</i>. <i>postgresql.conf</i> controls server parameters like memory usage, logging, and connections. <i>pg_hba.conf</i> (Host-Based Authentication) controls client authentication rules, determining who can connect to the database and how they must authenticate. These files are essential for customizing and securing your PostgreSQL installation and should be reviewed after initialization.


title: HISTORY
content:
<i>initdb</i> has been a fundamental utility in PostgreSQL since its earliest versions, serving as the initial setup tool for any new database cluster. Its core functionality has remained consistent: to prepare the data directory for a running PostgreSQL server. Over time, new options have been added to support features like data checksums, improved authentication methods, and more flexible locale management, reflecting the evolving needs and capabilities of the PostgreSQL database system.


title: DESCRIPTION
content:
The 'inkmake' command does not appear to be a standard or widely recognized Linux utility. Extensive searches across common Linux man pages, official documentation, and community resources do not yield a command with this specific name. <br>It is highly probable that 'inkmake' is either: <br><ul><li>A custom script created by a user or organization for a specific purpose.</li><li>An alias configured in a particular shell environment.</li><li>A component of a niche or specialized software package not widely distributed.</li><li>A typo for a more common command, such as 'make' (a build automation tool) or related to 'Inkscape' (a vector graphics editor), though 'inkmake' is not a direct command within Inkscape.</li></ul><br>Without further context, such as the software package it belongs to or the environment it was found in, it is not possible to provide a detailed analysis of its function, syntax, or parameters.


title: CAVEATS
content:
As 'inkmake' is not a standard Linux command, its presence and behavior would be entirely dependent on its specific implementation in a given system. Users should exercise caution if executing unrecognized commands, as their origin and purpose are unknown.


title: POSSIBLE ORIGINS
content:
If you encountered 'inkmake', consider these possibilities:<br><b>1. Custom Script:</b> Check local directories like <i>/usr/local/bin</i>, <i>~/bin</i>, or project-specific build scripts for a file named 'inkmake'.<br><b>2. Typo:</b> Verify if the intended command was 'make', 'mk', or another similar-sounding utility.<br><b>3. Niche Software:</b> If part of a specific application, consult that application's documentation for custom command-line tools.


title: HISTORY
content:
<i>There is no documented history for a standard 'inkmake' command within the Linux ecosystem due to its unrecognized status.</i>


title: PARAMETERS
content:
<b><I>-gui</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the installer with a graphical user interface. This is the default on systems with a graphical environment.<br><br><b><I>-no-gui</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the installer to use a text-based interface, even if a graphical environment is detected. Useful for remote SSH sessions.<br><br><b><I>-profile <I>file</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a profile file to use for a non-interactive (unattended) installation. The file contains pre-defined installation settings.<br><br><b><I>-repository <I>URL</I>|<I>path</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the source of the TeX Live packages. This can be a URL to a CTAN mirror or a local path to an ISO image or unpacked distribution.<br><br><b><I>-lang <I>lang-code</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the language for the installer's user interface, e.g., 'en' for English.<br><br><b><I>-select-paradigms</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prompt the user to select one of the predefined installation schemes (e.g., 'full', 'basic', 'small').<br><br><b><I>-s</I>, <I>--scheme <I>scheme-name</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the installation scheme directly without prompting, e.g., 'full' for a complete installation.<br><br><b><I>-n</I>, <I>--no-interaction</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the installer completely non-interactively, using default settings or those provided by a profile file. Implies <I>-no-gui</I>.<br><br><b><I>-dry-run</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulate the installation process without actually installing any files. Useful for testing settings.<br><br><b><I>-force-platform <I>platform</I></I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the installer to use a specific platform identification, bypassing automatic detection. Useful in certain virtualized or unusual environments.<br><br><b><I>-allow-superuser</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allow running the installer as the root user. This is generally discouraged unless strictly necessary due to permissions or specific installation paths.<br><br><b><I>-print-platform</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the detected platform identifier and exit, without starting the installation.<br><br><b><I>-v</I>, <I>--verbose</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, providing more detailed information about the installation process.<br><br><b><I>-help</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a comprehensive help message with all available options and exit.<br><br>


title: DESCRIPTION
content:
<i>install-tl</i> is the primary script used to install the TeX Live distribution, a comprehensive and free software distribution for the TeX typesetting system. Written in Perl, it provides a flexible and robust way to set up TeX Live on various operating systems, including Linux, macOS, and Windows. Users can perform installations interactively with a graphical user interface (GUI) or a text-based interface, or non-interactively using a profile file for unattended installations. It manages the download of packages from network repositories or installation from local ISO/DVD images. <i>install-tl</i> handles package selection, directory paths, paper size settings, and other configuration options, ensuring a complete and functional TeX environment.


title: CAVEATS
content:
<b>Root Permissions:</b> Running <i>install-tl</i> as root (with <I>-allow-superuser</I>) is generally discouraged unless you specifically need to install TeX Live into a system-wide directory like <I>/usr/local</I>. Installing as a regular user into your home directory is often preferred.<br><br><b>Disk Space:</b> A full TeX Live installation requires a significant amount of disk space, potentially several gigabytes. Ensure you have sufficient free space before starting.<br><br><b>Perl Requirement:</b> The <i>install-tl</i> script itself is written in Perl, so a working Perl interpreter must be available on your system.<br><br><b>Post-Installation PATH:</b> After installation, the TeX Live binaries typically need to be added to your system's PATH environment variable for commands like <I>pdflatex</I> or <I>latex</I> to be found. The installer usually provides instructions for this, but it's a manual step.


title: INSTALLATION PROFILE (<I>-PROFILE</I>)
content:
For unattended or automated installations, a profile file can be used. This plain text file contains all the settings typically chosen during an interactive installation, such as installation paths, selected schemes, paper sizes, and package collections. This allows for reproducible and consistent installations across multiple systems without manual intervention.


title: UPDATING TEX LIVE
content:
It's important to note that <i>install-tl</i> is used for the initial installation of TeX Live. Once installed, managing packages, updating the distribution, or adding/removing components is handled by the <I>tlmgr</I> (TeX Live Manager) command, not <i>install-tl</i> itself.


title: HISTORY
content:
The TeX Live project, initiated in the mid-1990s, aimed to create a robust, cross-platform TeX distribution. The <i>install-tl</i> script emerged as its primary installer, evolving from earlier, less flexible installation methods. Its development focused on providing a consistent and automated installation experience across various operating systems, including Windows, macOS, and Unix-like systems. This evolution replaced disparate, OS-specific installation procedures with a unified, Perl-based solution, emphasizing robust package management and maintainability, primarily through its companion tool, <i>tlmgr</i>, for post-installation updates.


title: SYNOPSIS
content:
<b>instaloader</b> <i>[OPTIONS]</i> <i>[TARGETS...]</i> <br><br><i>TARGETS</i> can be: <br> &nbsp; &bull;  <i>PROFILE_NAME</i> (e.g., <i>username</i>)<br> &nbsp; &bull;  <i>#HASHTAG</i> (e.g., <i>#photography</i>)<br> &nbsp; &bull;  <i>:feed</i> (downloads your personal feed)<br> &nbsp; &bull;  <i>POST_URL</i> (e.g., <i>https://www.instagram.com/p/abcdef12345/</i>)<br> &nbsp; &bull;  <i>USER_ID</i> (numeric user ID)


title: PARAMETERS
content:
<b><b>--login=</b><i>USERNAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Logs in to Instagram with the specified username. If no password is provided, it will be requested interactively.<br><br><b><b>--fast-update</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips downloading files that already exist in the target directory, only fetching new content. Useful for resuming downloads.<br><br><b><b>--comments</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads all comments associated with posts.<br><br><b><b>--no-posts</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents downloading posts (photos and videos) from profiles.<br><br><b><b>--stories</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly downloads stories for the specified profiles or your own stories if logged in.<br><br><b><b>--highlights</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly downloads highlights for the specified profiles.<br><br><b><b>--igtv</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly downloads IGTV videos for the specified profiles.<br><br><b><b>--profile-pic-only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads only the profile picture of the specified profile.<br><br><b><b>--date=</b><i>YYYY-MM-DD</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads posts only published on or after the specified date.<br><br><b><b>--latest-posts=</b><i>NUM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads only the <i>NUM</i> most recent posts from a profile.<br><br><b><b>--filename-pattern=</b><i>PATTERN</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Customizes the naming pattern for downloaded files. Supports various placeholders like <i>{id}</i>, <i>{shortcode}</i>, <i>{username}</i>, etc.<br><br><b><b>--dirname-pattern=</b><i>PATTERN</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Customizes the naming pattern for output directories. Similar to <i>--filename-pattern</i>.<br><br><b><b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses most of the console output, showing only critical messages.<br><br><b><b>--sessionfile=</b><i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses or stores the session cookies at the specified <i>PATH</i> instead of the default location.<br><br>


title: DESCRIPTION
content:
<b>Instaloader</b> is a powerful command-line program written in Python designed for downloading various types of content from Instagram. It's a versatile tool primarily used for archiving personal data, backing up public profiles, or collecting publicly available data for analysis, always with respect for privacy and terms of service. <br><br>It can fetch a wide range of content including user profiles (with profile pictures and metadata), individual posts (photos, videos, captions, geotags), IGTV videos, Reels, Stories, and Highlights. <b>Instaloader</b> supports logging in with an Instagram account, which is essential for accessing private profiles, downloading higher-quality content, and bypassing certain public access restrictions. <br><br>The tool intelligently handles Instagram's rate limiting to minimize temporary blocks and provides extensive options for filtering content based on date, type, or custom criteria. Users can also define custom filename and directory patterns for organizing downloaded content, making it an excellent utility for comprehensive Instagram data management and archival.


title: CAVEATS
content:
Due to Instagram's dynamic nature, its API and website structure frequently change, which can sometimes cause <b>Instaloader</b> to temporarily break or require updates. <br><br>Aggressive downloading may lead to Instagram's rate limiting, resulting in temporary IP bans or account restrictions. It's crucial to use <b>Instaloader</b> responsibly and respect Instagram's Terms of Service and user privacy. Downloading content without permission, especially from private accounts, is unethical and potentially illegal. <br><br>For most advanced features like downloading private profiles or high-quality stories, a valid Instagram login is required. The tool relies on Python and its dependencies, which need to be correctly installed.


title: INSTALLATION
content:
<b>Instaloader</b> is a Python package and can be easily installed using <i>pip</i>, the Python package installer:<br><br><i>pip install instaloader</i><br><br>It is recommended to use a Python virtual environment to manage dependencies.


title: SESSION MANAGEMENT
content:
Upon successful login, <b>Instaloader</b> stores session cookies in a file (by default at <i>~/.config/instaloader/session-USERNAME</i>). This allows subsequent runs to avoid re-authentication, provided the session remains valid. This file should be protected as it contains sensitive login information.


title: BASIC USAGE EXAMPLES
content:
To download a public profile:<br><i>instaloader some_public_profile</i><br><br>To download a private profile (after logging in):<br><i>instaloader --login=your_username some_private_profile</i><br><br>To download only stories for a profile:<br><i>instaloader --stories some_profile</i><br><br>To download posts from a specific hashtag:<br><i>instaloader #somehashtag</i>


title: HISTORY
content:
<b>Instaloader</b> was initially developed by <i>ThoKra</i> (Thomas K.) as an open-source project on GitHub. It emerged from the need for a reliable command-line tool to archive and manage Instagram content, a feature Instagram itself does not natively provide. Its development is characterized by continuous adaptation to Instagram's evolving API and website changes, ensuring its functionality amidst frequent platform updates. It has grown into a popular tool within the developer and archival communities for its robustness and extensive feature set.


title: SEE ALSO
content:
<b>wget(1)</b>: A general-purpose non-interactive network downloader., <b>curl(1)</b>: A command-line tool for transferring data with URLs, supporting various protocols., <b>yt-dlp(1)</b>: A widely used command-line program to download videos from various websites, though not specifically tailored for Instagram's comprehensive archival features like profile data.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and exits. This option provides information on how to use the command and its available parameters.<br><br><b>-o <file>, --output=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output file path where the BIOS image will be saved. If this option is not provided, the command typically writes the dump to a default file name like <I>bios.bin</I> in the current working directory, or to standard output (stdout) if the tool is designed that way.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses verbose output, showing only critical messages or errors. Useful for scripting or when less console clutter is desired.<br><br>


title: DESCRIPTION
content:
The <b>intel_bios_dumper</b> command is a specialized utility designed to extract and dump the entire contents of the BIOS (Basic Input/Output System) or UEFI (Unified Extensible Firmware Interface) firmware from Intel-based platforms. It provides a raw binary image of the firmware, which can be invaluable for <I>reverse engineering</I>, <I>security analysis</I>, <I>firmware debugging</I>, or <I>forensic purposes</I>.<br><br>The tool interacts directly with the system's hardware and firmware interfaces to read out the BIOS image. Due to its low-level nature, it typically requires <I>root privileges</I> to operate. The output is usually a binary file, representing the complete firmware image as it resides on the system's flash memory.


title: CAVEATS
content:
<b>Root Privileges Required:</b> This command requires superuser (root) permissions to access the low-level hardware interfaces necessary for BIOS dumping. Running without root will almost certainly result in permission denied errors.<br><b>Intel Platforms Only:</b> This tool is specifically designed for Intel chipsets and platforms. It will not work on systems based on AMD, ARM, or other architectures.<br><b>Potential System Instability:</b> While dumping BIOS is generally a read-only operation and considered safe, any low-level hardware interaction carries a theoretical risk of system instability if the tool encounters unexpected firmware states or hardware configurations.<br><b>Firmware Protection:</b> Some modern BIOS/UEFI firmware implementations include hardware or software protections (e.g., Intel Boot Guard, SPI write protection) that might prevent a full or accurate dump, or could lead to partial dumps.


title: OUTPUT FORMAT
content:
The command typically outputs a raw binary file representing the exact contents of the BIOS/UEFI flash memory. This file can then be opened and analyzed using specialized firmware analysis tools like <I>UEFItool</I>, <I>IDA Pro</I>, or <I>Ghidra</I>.


title: USAGE EXAMPLES
content:
To dump the BIOS to a file named <I>my_bios_dump.bin</I>:<br><b><I>sudo intel_bios_dumper -o my_bios_dump.bin</I></b><br>To dump the BIOS to the default file <I>bios.bin</I>:<br><b><I>sudo intel_bios_dumper</I></b>


title: HISTORY
content:
The <b>intel_bios_dumper</b> utility is typically part of broader open-source projects or tool suites developed by Intel or the community for analyzing and interacting with Intel platform hardware. It emerged as a necessary tool for researchers, developers, and security professionals needing direct access to firmware images for analysis, especially given the increasing complexity and importance of UEFI firmware in modern systems. Its development parallels the need for deeper introspection into system boot processes and security mechanisms.


title: SYNOPSIS
content:
As <i>intel_gtt</i> is <b>not a direct command-line executable</b>, there is no conventional syntax to invoke it. Its functionality is embedded within the Linux kernel's <i>i915</i> graphics driver. Configuration or inspection of GTT-related behavior is typically achieved through interaction with the kernel module or the <i>debugfs</i> filesystem, rather than executing a standalone <i>intel_gtt</i> command.<br><br><pre><b>modprobe i915</b> [<i>module_option=value</i>]</pre><pre><b>cat /sys/kernel/debug/dri/0/i915_gtt_info</b></pre>


title: PARAMETERS
content:
<b>i915.enable_psr</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls Panel Self Refresh for power saving, affecting display memory traffic handled by GTT. This is an <i>i915</i> kernel module option.<br><br><b>i915.enable_dc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables Display Coherence for power saving, influencing how display planes are managed in memory. This is an <i>i915</i> kernel module option.<br><br><b>i915.enable_fbc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls Frame Buffer Compression, a memory bandwidth optimization that relies on GTT for efficient data access. This is an <i>i915</i> kernel module option.<br><br>


title: DESCRIPTION
content:
The term <i>intel_gtt</i> refers to the <b>Intel Graphics Translation Table</b>, a fundamental hardware component and software mechanism within Intel's integrated graphics architecture. It is <b>not a standalone Linux command or executable program</b> that you would typically run from the terminal. Instead, the GTT is a critical part of how the Intel graphics driver (primarily the <i>i915</i> kernel module) manages memory for the GPU. <br><br> The GTT is essentially a page table that maps virtual addresses used by the GPU to physical memory addresses in the system's RAM. This allows the GPU to access system memory efficiently for graphics operations, textures, framebuffers, and other data without requiring a separate, dedicated video RAM chip. Its management is entirely handled by the Linux kernel's Direct Rendering Manager (DRM) subsystem, specifically the <i>i915</i> driver. User-level interaction with the GTT is typically limited to debugging tools or through indirect configuration of the <i>i915</i> kernel module.


title: CAVEATS
content:
<i>intel_gtt</i> is <b>not a user-space command</b>. Attempts to execute it directly will fail. Its functionality is entirely kernel-level and deeply integrated with the graphics driver. Direct manipulation of the GTT is typically reserved for kernel developers or advanced debugging, and incorrect changes can lead to system instability, graphics corruption, or system crashes. Normal users should not attempt to modify GTT behavior unless specifically instructed by documentation or support for debugging purposes.


title: INSPECTING GTT INFORMATION
content:
While not a direct command, GTT-related information can often be inspected via the <i>debugfs</i> filesystem, typically mounted at <b>/sys/kernel/debug/</b>. For Intel GPUs, GTT-specific details might be found under <b>/sys/kernel/debug/dri/0/i915_gtt_info</b> (the exact path may vary based on GPU index and kernel version). This file can provide insights into GTT size, usage, and mapping details, primarily useful for debugging graphics driver issues.


title: KERNEL MODULE CONFIGURATION
content:
The <i>i915</i> kernel module, which manages the GTT, can be configured using options specified during module loading (e.g., with <b>modprobe</b>) or persistently in <b>/etc/modprobe.d/i915.conf</b>. These options, while not directly named 'GTT parameters', often control memory management aspects that fundamentally rely on the GTT, such as power-saving features or display output configurations.


title: HISTORY
content:
The concept of a Graphics Translation Table (GTT) has been integral to Intel's integrated graphics architectures for many generations. It emerged as a necessary component to allow the GPU to efficiently access system memory (RAM) directly, rather than relying on a separate, fixed block of dedicated video memory. This design became central to Intel's integrated graphics approach, which prioritizes power efficiency and cost-effectiveness by sharing system resources. The GTT evolved alongside the <i>i915</i> kernel driver, which has continuously adapted to support new Intel GPU generations and implement features like memory compression, power management, and advanced display capabilities, all heavily relying on the GTT for memory management.


title: PARAMETERS
content:
<b><b>-d</b> <i>&lt;device&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the DRM device path to query, e.g., <I>/dev/dri/card0</I>.<br><br><b><b>-p</b> <i>&lt;port_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter by a specific DisplayPort connector ID (e.g., 0, 1) to show info frames only for that port.<br><br><b><b>-n</b> <i>&lt;port_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter by a specific DisplayPort connector name (e.g., DP-1) to show info frames only for that port.<br><br><b><b>-t</b> <i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter by a specific info frame type (e.g., 'AVI', 'SPD', 'VSD') to display only frames of that kind.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help information and exit.<br><br>


title: DESCRIPTION
content:
The <B>intel_infoframes</B> command is a specialized diagnostic utility used for debugging DisplayPort (DP) related issues on Intel i915 graphics hardware. It is part of the <I>intel-gpu-tools</I> suite, providing a mechanism to read and dump the contents of DP info frames.<BR><BR>Info frames are small packets of data transmitted over a DisplayPort link alongside the main video and audio streams. They carry crucial metadata about the display configuration, such as AVI (Auxiliary Video Information) frames for video parameters, SPD (Source Product Description) frames for source device capabilities, and VSD (Vendor Specific Data) frames for proprietary information.<BR><BR>This tool is particularly useful for identifying problems related to display mode setting, audio synchronization, or Multi-Stream Transport (MST) setups, where incorrect or missing info frames can lead to display detection failures or suboptimal performance. It typically interfaces with the kernel's <I>debugfs</I> to access raw info frame data from the i915 driver.


title: CAVEATS
content:
This command is specific to Intel i915 graphics hardware and requires the <I>debugfs</I> filesystem to be mounted (usually at <I>/sys/kernel/debug</I>).<BR>It typically requires root privileges or membership in the appropriate system groups (e.g., <I>video</I> or <I>render</I>) to access DRM device files and debugfs entries.<BR>The output is highly technical and requires knowledge of DisplayPort specifications and info frame structures to fully interpret.<BR>Its availability depends on the installation of the <I>intel-gpu-tools</I> package, which is not always installed by default.


title: OUTPUT INTERPRETATION
content:
The output of <B>intel_infoframes</B> typically consists of a list of detected DisplayPort connectors and, for each, the raw hexadecimal dumps of various info frames received or transmitted. Each frame is usually prefixed with its type (e.g., AVI, SPD, VSD, MSA), version, length, and often a timestamp. Understanding this output requires familiarity with the DisplayPort standard's sections on info frame packets to decipher the meaning of individual bytes and bits, which encode details like pixel format, color space, audio channels, and vendor-specific data.


title: USAGE CONTEXT
content:
<B>intel_infoframes</B> is primarily used by system administrators, Linux kernel developers, and power users who are actively debugging intricate display problems on Intel platforms. This includes scenarios like monitors not being detected, incorrect display resolutions or refresh rates, audio over DP not working, or issues with multi-monitor setups utilizing MST. It provides low-level insights that general display tools like <I>xrandr</I> cannot.


title: HISTORY
content:
The <B>intel_infoframes</B> tool emerged as part of the <I>intel-gpu-tools</I> project, a collection of utilities developed alongside the Linux kernel's i915 DRM driver. Its development is closely tied to the need for advanced debugging capabilities for Intel's integrated graphics, particularly as DisplayPort became a prevalent display interface and complex features like Multi-Stream Transport (MST) were introduced. It provides a user-space interface to expose kernel-level information about DP info frame reception and transmission, aiding driver developers and advanced users in diagnosing display connectivity and mode setting issues over the years.


title: SEE ALSO
content:
modinfo i915(8), xrandr(1), journalctl(1), lspci(8), cat /sys/kernel/debug/dri/0/i915_info_frames(9)


title: DESCRIPTION
content:
<code>intel_lid</code> is a specialized diagnostic utility primarily used to query the current lid (clamshell) status on systems equipped with <b>Intel graphics hardware</b>. It belongs to the <i>drm-intel-utils</i> collection, a suite of tools designed for debugging and interacting with the <b>Intel Direct Rendering Manager (DRM) driver</b>. The command serves to verify if the system correctly detects the lid's open or closed state, which is fundamental for power management functionalities such as suspending the system when the lid is shut. This tool is typically utilized by developers, system administrators, or power management engineers to diagnose issues related to <i>ACPI events</i> and lid state transitions, rather than for routine end-user interaction. Its output is concise, usually presenting a simple "open" or "closed" string, indicating the detected state. It directly interacts with the kernel's DRM subsystem to retrieve this hardware-level information.


title: CAVEATS
content:
The <code>intel_lid</code> command is specifically designed for systems with <b>Intel graphics</b> and relies on the Intel DRM driver being active.<br>It is primarily a <i>diagnostic and debugging tool</i> for low-level system behavior, not intended for general user use or scripting system power management directly, which is typically handled by higher-level services like <code>systemd-logind</code>.<br>Executing <code>intel_lid</code> may require <i>root privileges</i> or membership in a specific group (e.g., <code>video</code>, <code>render</code>) to access DRM devices, depending on system configuration and permissions.


title: OUTPUT FORMAT
content:
The command outputs a simple, single line string indicating the detected lid state, which will be either <b>"open"</b> or <b>"closed"</b>.


title: HISTORY
content:
The <code>intel_lid</code> utility is part of the <i>drm-intel-utils</i> project, which has evolved alongside the development of the <b>Intel Direct Rendering Manager (DRM) driver</b> in the Linux kernel. Its purpose has consistently been to provide a direct, low-level way to query the lid state, serving as a valuable tool for driver developers and system integrators to verify correct hardware interaction and ACPI event processing related to the lid.


title: DESCRIPTION
content:
The <i>intel_panel_fitter</i> command is a specialized diagnostic utility within the <I>intel-gpu-tools</I> suite. It is designed to inspect and dump the current configuration of the Display Panel Fitter (DPF) registers on Intel integrated graphics hardware. The DPF is responsible for scaling and fitting video output to the native resolution of an LCD panel. This tool provides low-level insights into how the graphics hardware is configured to display an image on a connected panel, including information about pipe source dimensions, panel dimensions, and scaling parameters. It's primarily used by developers or advanced users for debugging display issues, verifying driver behavior, or understanding hardware-level panel synchronization and scaling.


title: CAVEATS
content:
This command is a highly technical, low-level diagnostic tool primarily intended for developers and advanced users debugging Intel graphics drivers. It <B>requires root privileges</B> to access DRM device information. Incorrect interpretation of its output can lead to confusion. It is part of the <I>intel-gpu-tools</I> package and may not be installed by default on all Linux distributions. Its direct utility for everyday users is minimal, as it does not allow for interactive configuration or direct modification of display settings; it only dumps existing state.


title: PURPOSE AND USAGE
content:
Unlike general display configuration tools like <I>xrandr</I>, <B>intel_panel_fitter</B> does not allow you to change display modes or resolutions. Its sole purpose is to <B>read and print</B> the internal state of the panel fitter hardware. When executed, it typically outputs a detailed summary of the DPF configuration for active display pipes, including source and panel dimensions, scaling factors, and other relevant timing parameters. This information is invaluable for diagnosing problems such as incorrect scaling (e.g., 'black borders' or 'overscan'), aspect ratio issues, or non-native resolution display on panels connected via Intel integrated graphics.


title: HISTORY
content:
The <i>intel_panel_fitter</i> utility has been developed as part of the broader <I>intel-gpu-tools</I> project, an open-source collection of tools for debugging and testing Intel graphics hardware and drivers on Linux. Its development is closely tied to the evolution of Intel's integrated graphics architecture and the open-source <I>i915</I> kernel driver. It emerged as a necessary tool for understanding and troubleshooting the complex interactions between the graphics chip, the driver, and connected display panels, particularly concerning resolution scaling and panel fitting mechanisms.


title: PARAMETERS
content:
<b>-r <start>[:<end>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dump registers within a specified address range (e.g., 0x40000:0x4ffff). If only <start> is provided, dumps a single register.<br><br><b>-p <pciid></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the PCI ID of the Intel GPU to dump (e.g., 0x8086:0x1234). Useful in systems with multiple GPUs.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress the output header, providing only the register values. Useful for scripting and parsing.<br><br><b>-f <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the dumped register data to the specified file instead of standard output.<br><br><b>-d <device></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the DRM device node to use (e.g., /dev/dri/card0). By default, it tries to find the first available Intel GPU.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a brief help message and exit.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of the utility and exit.<br><br>


title: DESCRIPTION
content:
<i>intel_reg_dumper</i> is a utility from the <i>intel-gpu-tools</i> suite designed for low-level debugging and analysis of Intel Graphics Processing Units (GPUs). It allows users, typically developers or advanced system administrators, to dump the contents of various hardware registers within the Intel GPU.<br><br>These registers control fundamental aspects of the GPU's operation, including display outputs, memory access, command processing, and power management. By examining the values of these registers, one can diagnose issues related to graphics display, mode setting failures, hangs, or performance anomalies.<br><br>The tool interacts directly with the GPU hardware via the Direct Rendering Manager (DRM) subsystem, requiring elevated privileges (root or appropriate capabilities). It is an invaluable resource for understanding the GPU's current state and for developing or debugging Intel graphics drivers.


title: CAVEATS
content:
<b>Root Privileges Required</b>: <i>intel_reg_dumper</i> accesses low-level hardware registers, typically requiring root privileges or appropriate <i>CAP_SYS_ADMIN</i> capabilities to interact with the DRM device nodes.<br><br><b>Intel GPUs Only</b>: This tool is specifically designed for Intel Graphics Processing Units and will not function with GPUs from other vendors (e.g., NVIDIA, AMD).<br><br><b>Register Knowledge</b>: Interpreting the dumped register values requires a deep understanding of Intel GPU architecture and register definitions, usually found in Intel's public documentation or driver source code.


title: UNDERSTANDING REGISTER ADDRESSES
content:
Intel GPU register addresses are typically 32-bit or 64-bit hexadecimal values. The addresses correspond to specific locations within the GPU's memory-mapped I/O (MMIO) space. Different families of Intel GPUs (e.g., Gen9, Gen11, Xe) may have variations in their register sets and interpretations, making precise documentation crucial.


title: USAGE IN DEBUGGING
content:
This command is frequently used by graphics driver developers to capture the GPU state at the moment of a crash or hang. By dumping registers before and after a problematic operation, developers can pinpoint unexpected changes or incorrect configurations, helping to identify the root cause of complex graphics issues.


title: HISTORY
content:
The <i>intel_reg_dumper</i> utility is part of the <i>intel-gpu-tools</i> project, a collection of open-source tools developed primarily by Intel and community members to aid in the development, debugging, and analysis of the Intel Graphics driver (<i>i915</i>) and hardware. Its development has closely tracked the evolution of Intel GPU architectures and the Linux DRM subsystem. It provides a crucial capability for understanding the low-level state of Intel GPUs, essential for troubleshooting complex graphics issues and developing new driver functionalities.


title: SYNOPSIS
content:
<b>ioping</b> [<i>OPTIONS</i>] <i>TARGET</i><br><i>TARGET</i> can be a file path (e.g., /tmp/testfile) or a block device (e.g., /dev/sda1).


title: PARAMETERS
content:
<b><b>-c</b> <i>COUNT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stop after sending <i>COUNT</i> requests.<br><br><b><b>-D</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Measure I/O using a direct I/O path, bypassing the kernel page cache.<br><br><b><b>-F</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Measure latency for <i>fdatasync()</i> operations, syncing file data only.<br><br><b><b>-i</b> <i>INTERVAL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Wait <i>INTERVAL</i> seconds between I/O requests. Default is 0 (no delay).<br><br><b><b>-L</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Measure latency for <i>fsync()</i> operations, syncing file data and metadata.<br><br><b><b>-p</b> <i>PRIORITY</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set I/O priority (0-7), where 0 is the highest priority.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Quiet output; only show the summary results.<br><br><b><b>-R</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform read-only I/O tests.<br><br><b><b>-s</b> <i>SIZE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the test block size to <i>SIZE</i> bytes. Default is 4096 bytes.<br><br><b><b>-W</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform write-only I/O tests.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help information and exit.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
<b>ioping</b> is a specialized utility designed to measure and report local disk I/O latency. Much like the <b>ping</b> command assesses network responsiveness, <b>ioping</b> gauges the performance of storage subsystems by performing rapid, small-block read and write operations on a specified file or block device. It then calculates and displays critical I/O metrics such as the minimum, average, maximum, and standard deviation of I/O response times. This detailed statistical output provides valuable insights into the disk's responsiveness, helping users diagnose performance bottlenecks, benchmark storage devices, or simply monitor I/O behavior under varying conditions. It's an essential tool for system administrators and developers needing a quick and reliable way to check disk performance without setting up complex benchmarks.


title: CAVEATS
content:
<b>ioping</b> provides a snapshot of I/O latency, but actual application performance can vary due to factors like concurrent I/O, CPU load, and specific application I/O patterns.<br><br>Running continuous write tests on SSDs can contribute to drive wear.<br><br>Direct I/O (<b>-D</b>) is crucial for bypassing caching effects and getting a true measure of raw disk performance, otherwise, results might reflect cache performance rather than disk performance.<br><br>Requires root privileges to test raw block devices.


title: COMMON USE CASES
content:
<b>Diagnosing Slow Disk Performance</b>: Quickly identify if a storage subsystem is a bottleneck.<br><b>Benchmarking Storage</b>: Compare the I/O performance of different disk types, RAID configurations, or storage solutions.<br><b>Monitoring I/O Health</b>: Observe disk latency under load or over time to detect potential issues.<br><b>Validating Configuration</b>: Ensure newly installed disks or storage arrays are performing as expected.


title: HISTORY
content:
<b>ioping</b> emerged as a lightweight, focused tool to address the need for quick disk I/O latency checks, mirroring the simplicity and utility of the <b>ping</b> command for network diagnostics. Its development focused on providing a direct and easily interpretable measure of storage responsiveness, making it a valuable addition to the sysadmin's toolkit for rapid performance assessment and troubleshooting without the complexity of more comprehensive benchmarking suites like <b>fio</b>.


title: SYNOPSIS
content:
<b><I>ip monitor</I></b> [ <i>OBJECT</i> | <i>all</i> ]<br>Where <i>OBJECT</i> can be one of: <i>link</i>, <i>address</i>, <i>route</i>, <i>neighbor</i>, <i>rule</i>, <i>mpls</i>, <i>vrf</i>, <i>netconf</i>, <i>nsid</i>, <i>xfrm</i>, <i>addrlabel</i>.


title: PARAMETERS
content:
<b>all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitor all supported network object types simultaneously.<br><br><b>link</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors network interface link state, flags, and other properties.<br><br><b>address</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors changes to IP addresses assigned to network interfaces (IPv4 and IPv6).<br><br><b>route</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors modifications to the kernel's IP routing tables (IPv4 and IPv6).<br><br><b>neighbor</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors changes in the neighbor cache (ARP entries for IPv4, NDP entries for IPv6).<br><br><b>rule</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors modifications to policy routing rules.<br><br><b>mpls</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors changes related to MPLS (Multiprotocol Label Switching) labels.<br><br><b>vrf</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors changes to Virtual Routing and Forwarding (VRF) devices.<br><br><b>netconf</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors changes to network-related sysctl parameters.<br><br><b>nsid</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors network namespace IDs.<br><br><b>xfrm</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors changes to IPsec policies and states.<br><br><b>addrlabel</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors changes to address label policies.<br><br>


title: DESCRIPTION
content:
<i>ip-monitor</i> is a utility from the <i>iproute2</i> suite designed for real-time monitoring of network configuration changes on a Linux system. Unlike commands like <i>ip link show</i> or <i>ip addr show</i> which provide a static snapshot, <i>ip-monitor</i> continuously listens for kernel netlink events, displaying updates as they occur. This includes modifications to network interfaces (link state, flags), IP addresses (additions, deletions), routing table entries, neighbor cache (ARP/NDP), policy routing rules, MPLS labels, VRF devices, network namespace IDs, IPsec policies, and address labels. It's an invaluable tool for network troubleshooting, debugging, and automated scripting where immediate awareness of network state transitions is critical. By providing instant feedback on configuration alterations, <i>ip-monitor</i> helps administrators understand dynamic network behavior and quickly identify issues.


title: CAVEATS
content:
<I>Root Privileges Required</I>: <i>ip-monitor</i> typically requires root privileges to operate, as it interacts directly with kernel netlink sockets to receive real-time network events.<br><I>Voluminous Output</I>: On systems with frequent network changes or high traffic, the output can be extensive and continuous, potentially flooding the terminal.<br><I>Ephemeral Data</I>: It only provides real-time event notifications; it does not log historical changes or provide a snapshot of the current state at any given time.<br><I>Output Parsing</I>: The output format is designed for human readability and might require careful parsing for automated scripts.


title: OUTPUT FORMAT
content:
The output of <i>ip-monitor</i> mirrors the format of the <i>ip</i> show commands for the respective object types (e.g., <i>ip link show</i>, <i>ip addr show</i>). Each event is prefixed with an action keyword, such as <i>New</i>, <i>Deleted</i>, or <i>Changed</i>, indicating the type of modification that occurred.


title: KERNEL NETLINK INTERFACE
content:
<i>ip-monitor</i> operates by listening to events pushed by the Linux kernel via the Netlink socket interface. This allows it to receive immediate notifications of network state changes directly from the kernel, without needing to poll the system repeatedly.


title: HISTORY
content:
<i>ip-monitor</i> is an integral part of the <i>iproute2</i> utility suite, which was developed by Alexey Kuznetsov starting in the late 1990s. This suite was designed to be a modern replacement for older, less efficient, and sometimes redundant network configuration tools like <i>ifconfig</i>, <i>route</i>, and <i>netstat</i>. <i>iproute2</i> leverages the Linux kernel's Netlink socket interface for more efficient and comprehensive network management. <i>ip-monitor</i> specifically provides a real-time view into these Netlink events, embodying the <i>iproute2</i> philosophy of offering detailed, low-level control and visibility over the Linux networking stack. Its development tracked the evolution of Linux networking, ensuring it remains relevant for modern network configurations including advanced features like VRF, MPLS, and network namespaces.


title: SYNOPSIS
content:
<b>ip rule</b> { <I>command</I> | <I>options</I> }<br><b>ip rule</b> { <b>add</b> | <b>del</b> } <I>SELECTOR</I> <I>ACTION</I> <I>OPTIONS</I><br><b>ip rule</b> { <b>show</b> | <b>list</b> }


title: PARAMETERS
content:
<b><b>add</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a new rule to the routing policy database.<br><br><b><b>del</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes an existing rule from the routing policy database.<br><br><b><b>show</b> | <b>list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current routing policy database rules.<br><br><b><b>flush</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes all rules from the routing policy database, except the default rules.<br><br><b><b>save</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints all rules to standard output in a format that can be used by <b>restore</b>.<br><br><b><b>restore</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restores rules from standard input, typically from a file generated by <b>save</b>.<br><br><b><b>priority</b> <I>PREFERENCE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the priority (preference) of the rule. Lower numbers mean higher priority. Rules are processed from lowest to highest priority.<br><br><b><b>from</b> <I>PREFIX</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets originating from the specified source IP address or network prefix.<br><br><b><b>to</b> <I>PREFIX</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets destined for the specified IP address or network prefix.<br><br><b><b>iif</b> <I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets arriving on the specified incoming network interface.<br><br><b><b>oif</b> <I>NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets that will exit via the specified outgoing network interface. This is typically used for locally generated packets.<br><br><b><b>tos</b> <I>TOS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets with the specified Type of Service (TOS) byte value or DSCP (Differentiated Services Code Point).<br><br><b><b>fwmark</b> <I>MARK</I>[/<I>MASK</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets marked by a firewall (e.g., using <I>iptables</I>) with the specified mark value. An optional mask can be used.<br><br><b><b>uidrange</b> <I>FIRST-LAST</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets originating from processes with a real or effective user ID within the specified range.<br><br><b><b>lookup</b> <I>TABLE_ID</I> | <b>table</b> <I>TABLE_ID</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies which routing table to use if the rule matches. <I>TABLE_ID</I> can be a number or a name from <I>/etc/iproute2/rt_tables</I>.<br><br><b><b>nat</b> <I>ADDRESS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs packets to a network address translation (NAT) rule. (Advanced usage, typically deprecated in favor of <I>src_nat</I>/<I>dst_nat</I> or <I>iptables</I>).<br><br><b><b>src_nat</b> <I>ADDRESS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs source NAT on the packet to the specified address.<br><br><b><b>dst_nat</b> <I>ADDRESS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs destination NAT on the packet to the specified address.<br><br><b><b>realms</b> [<I>FROM_REALM</I>/]<I>TO_REALM</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets associated with specific routing realms (e.g., for multi-homed scenarios with different policy zones).<br><br><b><b>suppress_prefixlength</b> <I>PLENGTH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If this rule matches, suppresses routes from consideration if their prefix length is greater than or equal to <I>PLENGTH</I>.<br><br><b><b>suppress_ifgroup</b> <I>IFGROUP</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If this rule matches, suppresses routes associated with a specific interface group from consideration.<br><br><b><b>prefsrc</b> <I>ADDRESS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a preferred source address for outgoing packets matching this rule. This address is used if no other source address is explicitly chosen by the routing table.<br><br><b><b>l3mdev</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Indicates that the rule applies to packets originating from or destined for L3 master devices (e.g., VRFs).<br><br><b><b>proto</b> <I>PROTOCOL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets of a specific IP protocol (e.g., tcp, udp, icmp, or protocol number).<br><br><b><b>sport</b> <I>PORT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets with the specified source port number (requires <I>proto</I>).<br><br><b><b>dport</b> <I>PORT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Matches packets with the specified destination port number (requires <I>proto</I>).<br><br>


title: DESCRIPTION
content:
The <I>ip-rule</I> command is a sub-command of the <I>ip</I> utility in Linux, used to manage the kernel's routing policy database (RPDB). The RPDB is a powerful mechanism that allows the system to make routing decisions based on more than just the destination IP address. <br><br>Instead, it uses a set of rules, each with a specific priority, to determine which routing table to use for a packet. These rules can match on various criteria, such as source address, destination address, incoming interface, Type of Service (TOS), firewall mark (fwmark), UID range, and more. When a packet arrives, the kernel traverses the RPDB rules in order of their priority (lower numbers are higher priority). The first rule that matches the packet's attributes dictates which routing table to consult for the actual route lookup. <br><br>This enables advanced routing scenarios like multi-ISP setups, VPN routing, source-based routing, and load balancing, offering far greater flexibility than traditional destination-based routing.


title: CAVEATS
content:
Incorrectly configured <I>ip-rule</I> rules can lead to network connectivity issues or unexpected routing behavior. The order (priority) of rules is critical, as the first matching rule takes precedence. Be cautious when using `ip rule flush` as it removes all non-default rules, potentially disrupting network services.<br><br>Rules are dynamic and do not persist across reboots by default. They must be saved and restored via system init scripts or network configuration management tools.


title: DEFAULT RULES
content:
By default, a Linux system has three predefined rules:<br><b>0:</b> <I>from all lookup local</I> (for local and broadcast addresses)<br><b>32766:</b> <I>from all lookup main</I> (for main routing table)<br><b>32767:</b> <I>from all lookup default</I> (for the default routing table, typically empty)<br>These rules ensure basic connectivity. Custom rules should be inserted with priorities between 1 and 32765.


title: RULE PROCESSING ORDER
content:
When a packet needs to be routed, the kernel processes the rules in ascending order of their <I>priority</I> (lower numbers are evaluated first). As soon as a rule's selectors (<I>from</I>, <I>to</I>, <I>iif</I>, <I>fwmark</I>, etc.) match the packet, the associated action (e.g., <I>lookup table</I>) is performed. Subsequent rules are ignored for that packet. If a rule's action is to look up a table and no route is found in that table, the next rule in the RPDB is then consulted, unless the rule specifies a 'blackhole' or 'unreachable' route.


title: HISTORY
content:
The <I>ip-rule</I> command is part of the <I>iproute2</I> utilities, which largely superseded the older `net-tools` suite (e.g., `route`, `ifconfig`) in modern Linux distributions. <I>iproute2</I> was developed to leverage the advanced networking capabilities of the Linux kernel, particularly its support for policy-based routing, which was not well-exposed by the older tools. Its development began in the late 1990s, driven by developers like Alexey Kuznetsov, aiming for a more robust and flexible network configuration framework.


title: PARAMETERS
content:
<b><i>NET/MASK</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The destination network prefix of the aggregate route to be manipulated, specified in CIDR notation (e.g., 192.168.1.0/24).<br><br><b><b>table</b> <i>TABLE_ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the routing table ID where the aggregate route resides. If omitted, the default table (main) is assumed.<br><br><b><b>metric</b> <i>METRIC</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the preference value for the route. Routes with lower metrics are preferred.<br><br><b><b>dev</b> <i>DEVICE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output network device for the aggregate route.<br><br><b><b>via</b> <i>GATEWAY</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the address of the gateway to which packets for this aggregate should be forwarded.<br><br><b><b>src</b> <i>SOURCE_IP</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the source address to be used when sending packets via this aggregate route.<br><br><b><b>proto</b> <i>PROTOCOL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the routing protocol identifier, such as <b>kernel</b>, <b>boot</b>, <b>static</b>, etc.<br><br><b><b>scope</b> <i>SCOPE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the scope of the destination address, e.g., <b>host</b>, <b>link</b>, or <b>global</b>.<br><br><b><b>flags</b> <i>FLAGS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows setting various route flags (e.g., <b>onlink</b>, <b>connected</b>) that influence route behavior. Specific flags supported would depend on kernel and <b>iproute2</b> versions.<br><br>


title: DESCRIPTION
content:
<i>ipaggmanip</i> is a highly specialized, low-level utility associated with the <b>iproute2</b> suite, primarily designed for direct manipulation of IP aggregate routes within the Linux kernel's Forwarding Information Base (FIB). Unlike common <b>ip route</b> commands, which primarily manage individual routes or create aggregates, <i>ipaggmanip</i> appears to target the modification of properties of already existing aggregated routes. It is not a widely documented or commonly used command for typical network administration, and its functionality may overlap with or be superseded by more general <b>ip route</b> commands in recent kernel and <b>iproute2</b> versions. It likely serves a niche role, possibly for debugging, internal testing, or advanced, programmatic control over aggregate routing behavior, allowing administrators to change attributes like metrics, output devices, or flags on aggregates without necessitating their complete deletion and re-creation. Due to its obscure nature, detailed public documentation is scarce.


title: CAVEATS
content:
<i>ipaggmanip</i> is an extremely obscure utility and is not typically part of standard <b>ip(8)</b> man pages or common Linux distributions' user-facing binaries. Its exact functionality, parameters, and expected behavior are poorly documented in public resources. It is likely an internal or highly specialized tool for kernel or <b>iproute2</b> developers, or for very specific, advanced routing scenarios. Users should exercise extreme caution and verify its existence and behavior in their specific system environment before attempting to use it, as its behavior may be unpredictable or its functionality deprecated.


title: USAGE CONTEXT
content:
Given its specialized nature, <i>ipaggmanip</i> would typically be used in environments requiring precise, programmatic control over aggregated IP routes, potentially in conjunction with custom routing daemons or scripts. It is not intended for general interactive use by system administrators.


title: KERNEL INTERACTION
content:
This command interacts directly with the Linux kernel's FIB (Forwarding Information Base) to modify existing aggregate route entries. Any changes made are live and affect kernel's packet forwarding decisions instantly.


title: HISTORY
content:
The command <i>ipaggmanip</i> originates from the <b>iproute2</b> project, which is the standard collection of utilities for network configuration in Linux. Its development is tied to the evolution of the Linux kernel's networking stack, particularly the handling of IP routing and aggregation. While the core <b>iproute2</b> utilities like <b>ip</b> are widely used, <i>ipaggmanip</i> appears to be a more experimental or niche tool, likely developed to address specific challenges or provide fine-grained control over aggregate routes that might not be exposed through higher-level <b>ip route aggregate</b> commands. Its usage and relevance have likely shifted over time as the <b>iproute2</b> suite and kernel routing capabilities matured, potentially leading to its functionality being integrated elsewhere or becoming less critical as a standalone binary.


title: SYNOPSIS
content:
The command <b>is-up</b> is not a standard Linux utility, and therefore does not have a predefined synopsis. Its usage would depend entirely on its custom implementation as a script or alias within a specific environment.


title: DESCRIPTION
content:
The command <b>is-up</b> is not a standard, universally available Linux command. Its name suggests a utility designed to determine if a specific system component (e.g., a network host, a service, or a network interface) is operational or 'up'.<br><br>On Linux, such 'is-up' functionality is typically achieved using a combination of well-established utilities. For checking network host reachability, tools like <b>ping</b> are used. To verify network interface status, <b>ip link show</b> or <b>ifconfig</b> (though deprecated) are common. Service status is managed and queried via <b>systemctl status</b> for systemd-based systems, or <b>service</b> for older init systems. Port listening status can be checked with <b>netstat -tuln</b> or <b>ss -tuln</b>.<br><br>Therefore, while 'is-up' itself isn't a native command, the concept it represents is fundamental to system administration, relying on a suite of existing commands.


title: CAVEATS
content:
The most significant caveat is that <b>is-up</b> is not a standard Linux command. If encountered, it likely refers to a custom script, an alias, or a niche utility unique to a specific environment. Its functionality, arguments, and behavior would vary wildly based on its specific implementation, making it non-portable and potentially unpredictable without examining its source code or documentation specific to that environment.


title: COMMON 'IS-UP' SCENARIOS AND THEIR SOLUTIONS
content:
Although <b>is-up</b> is not a standard command, the concept of checking if something is 'up' is fundamental. Here are common scenarios and the standard Linux commands used to achieve them:<br><br><i>Check if a Host is Reachable:</i><br>Use <b>ping -c 1 <i>hostname_or_ip</i></b>. A successful return code (0) indicates reachability.<br><br><i>Check if a Network Interface is Up:</i><br>Use <b>ip link show <i>interface_name</i></b> and look for 'UP' in the output. For example, <b>ip link show eth0</b>.<br><br><i>Check if a Systemd Service is Running:</i><br>Use <b>systemctl is-active <i>service_name</i></b> or <b>systemctl status <i>service_name</i></b>. The <b>is-active</b> command returns 0 for active, non-zero otherwise.<br><br><i>Check if a Port is Listening:</i><br>Use <b>ss -tuln | grep <i>:port_number</i></b>. If output is returned, the port is listening. For example, <b>ss -tuln | grep :80</b>.


title: HISTORY
content:
As <b>is-up</b> is not a standard Linux command, it does not have a formal development history or widespread usage evolution like core utilities. Any 'history' would be confined to the specific context where it was created or adopted as a custom tool, perhaps for simplifying common status checks in a particular system setup.


title: SYNOPSIS
content:
<I>isadump [OPTIONS] [ARGUMENTS]</I><BR>Due to its specialized and often proprietary nature, a universally recognized synopsis for <B>isadump</B> is not publicly available. The exact syntax and options depend heavily on the specific version and distribution of the tool. This synopsis represents a general pattern for such diagnostic dump utilities.


title: PARAMETERS
content:
<b>-o <offset></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an offset from which to begin dumping data. This is common for memory or register dumps.<br><br><b>-l <length></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the length or amount of data to dump, often used in conjunction with an offset.<br><br><b>-f <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs the dumped output to a specified file instead of standard output.<br><br><b>-t <type></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If applicable, specifies the type of information to dump (e.g., a specific ACPI table, a register block).<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information during the dump process.<br><br>


title: DESCRIPTION
content:
The <B>isadump</B> command refers to a highly specialized and often proprietary diagnostic utility, typically associated with Intel platforms or specific hardware debugging environments, such as the Intel System Analyzer (ISA) tools. Its primary purpose is to dump low-level system information, which may include firmware details (BIOS/UEFI), memory contents, hardware register states, or other platform-specific data. Unlike standard Linux utilities, <B>isadump</B> is not universally available and lacks public, comprehensive documentation. It is generally used by hardware developers, firmware engineers, or advanced system integrators for deep-dive debugging, platform validation, and root-cause analysis of complex hardware or firmware issues.


title: CAVEATS
content:
The <B>isadump</B> command is <I>not</I> a standard Linux utility and is rarely found in typical distributions. It is often part of specific hardware vendor toolchains (like Intel's) and may require specialized hardware, drivers, or elevated privileges (e.g., root access) to function. Users looking for a general ACPI table dump utility on Linux should typically use <I>acpidump(8)</I> instead, as <B>isadump</B> is a distinct and much more niche tool. Public documentation for <B>isadump</B> is extremely limited.


title: USAGE CONTEXT
content:
Given its nature, <B>isadump</B> is typically used in scenarios like:<BR><BR>- Firmware debugging and reverse engineering.<BR>- Analyzing specific hardware component behavior or interactions.<BR>- Platform validation during system development cycles.<BR>- Diagnosing obscure boot failures or kernel panics related to hardware.<BR><BR>It is <I>not</I> intended for routine system administration or general troubleshooting.


title: HISTORY
content:
The <B>isadump</B> utility likely originated from Intel's internal or developer-focused toolchains, particularly those related to the Intel System Analyzer (ISA) suite. It emerged from the need for low-level diagnostics and validation during platform development and debugging of Intel-based systems. Its history is tied to specialized hardware analysis rather than general-purpose Linux administration, hence its limited public visibility and documentation.


title: PARAMETERS
content:
<b>VARIABLE_NAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the variable or property to check. This can be a <i>udev</i> property (prefixed with '<b>+</b>'), a <i>systemd</i> variable (prefixed with '<b>-</b>'), or a standard environment variable (no prefix).<br><br>


title: DESCRIPTION
content:
<i>isaset</i> is a utility program often found as part of the <i>systemd</i> suite. Its primary function is to determine whether a specified variable or property is "set," meaning it exists and holds a non-empty value. This command is particularly useful in shell scripts, <i>systemd</i> unit files, <i>udev</i> rules, and other contexts where conditional logic based on the presence of certain system or environment attributes is required.<br><br>It can check <i>udev</i> properties (prefixed with '<b>+</b>'), <i>systemd</i> variables (prefixed with '<b>-</b>'), or standard environment variables (no prefix). It returns an exit status of 0 if the variable is set and non-empty, and a non-zero exit status otherwise. This makes it ideal for use in <i>if</i> statements or <i>&&</i>/<i>||</i> constructs, enabling robust scripting and configuration management within <i>systemd</i>-managed systems. By abstracting away the complexities of sourcing specific system variables, <i>isaset</i> provides a straightforward and consistent interface for querying system state.


title: CAVEATS
content:
<ul><li>Primarily designed for <i>systemd</i> and <i>udev</i> environments.</li><li>It checks for non-empty string values. A variable set to '0' or 'false' is still considered "set" by <i>isaset</i> if it's not an empty string.</li><li>Its functionality can often be replicated with standard shell parameter expansion checks (e.g., <b>[ -n "$VAR" ]</b>), but <i>isaset</i> provides specific handling and context for <i>udev</i> properties and internal <i>systemd</i> variables.</li></ul>


title: RETURN VALUE
content:
<i>isaset</i> returns an exit status of <b>0</b> if the variable is set and non-empty, and a non-zero exit status (typically <b>1</b>) if the variable is not set or is empty. This makes it suitable for use in conditional shell logic like <i>if</i> statements or <i>&&</i>/<i>||</i> constructs.


title: VARIABLE TYPES
content:
The command interprets the prefix of <i>VARIABLE_NAME</i> to determine the type of variable to check:<br><b>+</b><i>PROPERTY</i>: Checks a <i>udev</i> property. Example: <b>isaset +ID_BUS</b><br><b>-</b><i>VARIABLE</i>: Checks a <i>systemd</i> variable. Example: <b>isaset -VIRTUALIZATION</b><br><i>VARIABLE</i>: Checks a standard environment variable. Example: <b>isaset PATH</b>


title: HISTORY
content:
<i>isaset</i> is a component of the <i>systemd</i> project, which was initially released in 2010 by Lennart Poettering and Kay Sievers. Its inclusion serves to provide a dedicated, robust way to check system properties within the <i>systemd</i> ecosystem, particularly useful in <i>udev</i> rules processing where direct shell variable checks might be less convenient or reliable for system-specific attributes. Its integration with <i>systemd</i> ensures consistent behavior when dealing with <i>udev</i> properties and internal <i>systemd</i> variables.


title: DESCRIPTION
content:
<i>ischroot</i> is a simple utility that determines whether the current process is operating within a <i>chroot</i> environment. It does this by comparing the device ID of the root directory (<code>/</code>) with the device ID of its parent directory (<code>/..</code>, which would resolve to the true root before the chroot). If these device IDs are different, it implies that the process's root directory has been changed from the true system root, indicating a <i>chroot</i>. The command exits with a status code of 0 if it detects a <i>chroot</i>, and 1 otherwise. It's commonly used in scripts to adapt behavior based on the execution environment.


title: CAVEATS
content:
<i>ischroot</i> is not a 100% reliable method for detecting <i>chroot</i> environments. It can be fooled by certain scenarios, such as nested <i>chroots</i>, or if the true root directory (<code>/</code>) and the <i>chrooted</i> root directory are on the same filesystem device. It primarily checks if the root filesystem has changed device ID. If the <i>chroot</i> is performed within the same filesystem device, it might not be detected. The detection mechanism relies on comparing the device ID of <code>.</code> and <code>..</code> from the root directory, which can be misleading under complex mounting schemes (e.g., bind mounts).


title: EXIT STATUS
content:
The <i>ischroot</i> command provides the following exit status codes:<br><b>0</b>: The process is running in a <i>chroot</i> environment.<br><b>1</b>: The process is not running in a <i>chroot</i> environment.<br><b>&gt;1</b>: An error occurred (e.g., incorrect usage or system error).


title: HISTORY
content:
<i>ischroot</i> is part of the <i>util-linux</i> project, a collection of essential Linux utilities. It has been a standard tool for system administrators and script developers for a significant period, providing a quick way to verify the <i>chroot</i> status, especially in automated build or maintenance scripts where operating inside a <i>chroot</i> is a critical condition. Its functionality has remained largely stable over time, emphasizing its role as a fundamental system utility.


title: SYNOPSIS
content:
<b>isisdl</b> [<i>options</i>] [<i>product_id ...</i>]<br><b>isisdl</b> --search-... [<i>criteria</i>]<br><b>isisdl</b> --download-... [<i>criteria</i>]<br><b>isisdl</b> --list-...


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br><b><b>-l</b>, <b>--list-instruments</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available instruments in the archive.<br><br><b><b>-m</b>, <b>--list-missions</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available missions in the archive.<br><br><b><b>-t</b>, <b>--list-targets</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available targets (planets, moons, etc.) in the archive.<br><br><b><b>-p</b>, <b>--list-product-types</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available product types (e.g., CUBE, NAV) in the archive.<br><br><b><b>--list-paths</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available data paths in the archive.<br><br><b><b>-s</b> <I>ID</I>, <b>--search-product-id</b> <I>ID</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for products matching the given product ID.<br><br><b><b>-M</b> <I>MISSION</I>, <b>--search-mission</b> <I>MISSION</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for products associated with the specified mission.<br><br><b><b>-T</b> <I>TARGET</I>, <b>--search-target</b> <I>TARGET</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for products associated with the specified target.<br><br><b><b>-I</b> <I>INSTRUMENT</I>, <b>--search-instrument</b> <I>INSTRUMENT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for products associated with the specified instrument.<br><br><b><b>-P</b> <I>TYPE</I>, <b>--search-product-type</b> <I>TYPE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for products of the specified type.<br><br><b><b>--search-path</b> <I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for products under the specified archive path.<br><br><b><b>-D</b> <I>DESC</I>, <b>--search-description</b> <I>DESC</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for products whose description contains the given text.<br><br><b><b>-A</b>, <b>--search-all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a search across all searchable fields for matching products.<br><br><b><b>-d</b> <I>ID</I>, <b>--download-product-id</b> <I>ID</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads the product(s) specified by ID(s).<br><br><b><b>-DM</b> <I>MISSION</I>, <b>--download-mission</b> <I>MISSION</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads products associated with the specified mission.<br><br><b><b>-DT</b> <I>TARGET</I>, <b>--download-target</b> <I>TARGET</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads products associated with the specified target.<br><br><b><b>-DI</b> <I>INSTRUMENT</I>, <b>--download-instrument</b> <I>INSTRUMENT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads products associated with the specified instrument.<br><br><b><b>-DP</b> <I>TYPE</I>, <b>--download-product-type</b> <I>TYPE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads products of the specified type.<br><br><b><b>--download-path</b> <I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads products under the specified archive path.<br><br><b><b>-DD</b> <I>DESC</I>, <b>--download-description</b> <I>DESC</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads products whose description contains the given text.<br><br><b><b>-DA</b>, <b>--download-all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads all products found matching previous search criteria.<br><br><b><b>-o</b> <I>DIR</I>, <b>--output-directory</b> <I>DIR</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory where downloaded files will be saved. Defaults to current directory.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces overwrite of existing files without prompting.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details about the download process.<br><br><b><b>--no-checksum</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables checksum verification of downloaded files.<br><br><b><b>--update-database</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces an update of the local product database from the USGS server.<br><br><b><b>--cache-directory</b> <I>DIR</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative directory for the local database and cache files.<br><br><b><b>--no-cache</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the use of any local cache files for database or downloads.<br><br><b><b>--parallel</b> <I>N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of parallel downloads to N. Default is 1.<br><br><b><b>--no-progress</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the display of the download progress bar.<br><br><b><b>--log-file</b> <I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects log messages to the specified file.<br><br><b><b>--proxy</b> <I>PROXY_URL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an HTTP/HTTPS proxy server to use for downloads.<br><br><b><b>--timeout</b> <I>SECONDS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum time in seconds to wait for a server response.<br><br><b><b>--retries</b> <I>N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of times to retry a failed download.<br><br><b><b>--no-verify-ssl</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables SSL certificate verification, useful for certain network configurations.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the program's version number and exits.<br><br>


title: DESCRIPTION
content:
The <i>isisdl</i> command is a specialized utility within the USGS ISIS (Integrated Software for Imagers and Spectrometers) software suite, designed for downloading planetary remote sensing data. It enables users to directly access and retrieve ISIS-formatted products, such as imagery, instrument information, and related kernels, from the extensive USGS PDS (Planetary Data System) archives. <br><br>Users can search for and download data by specifying criteria like mission, target, instrument, or product ID. This tool is essential for planetary scientists, researchers, and anyone working with high-quality, calibrated planetary image data, providing a streamlined way to acquire the necessary datasets for processing and analysis within the ISIS environment.


title: CAVEATS
content:
<i>isisdl</i> requires active internet access to connect to USGS PDS archives. The local database, used for search operations, may need periodic updates using the <b>--update-database</b> option to reflect the latest available products. Large downloads can consume significant disk space and network bandwidth. Users behind restrictive firewalls or with complex proxy configurations might need to use the <b>--proxy</b> or <b>--no-verify-ssl</b> options.


title: DATA SOURCE
content:
<i>isisdl</i> primarily downloads data from the USGS PDS (Planetary Data System) archives, which are official repositories for planetary science mission data.


title: DATA FORMAT
content:
The command is tailored to download data in the proprietary ISIS cube format (<b>.cub</b>) along with its associated support files, which are crucial for processing within the ISIS environment.


title: LOCAL DATABASE MANAGEMENT
content:
To enhance search performance and manage available products, <i>isisdl</i> maintains a local database. This database can be manually refreshed with <b>--update-database</b> to ensure it reflects the most current archive contents.


title: HISTORY
content:
The ISIS (Integrated Software for Imagers and Spectrometers) suite, including <i>isisdl</i>, was developed by the Astrogeology Science Center of the U.S. Geological Survey (USGS). It originated from the need to process and analyze planetary image data from various NASA and international missions. <i>isisdl</i> specifically addresses the challenge of directly accessing and standardizing the acquisition of ISIS-formatted data from the vast PDS (Planetary Data System) archives, becoming an indispensable tool for planetary scientists in their research workflows.


title: PARAMETERS
content:
<b><i>&lt;ISO_IMAGE_FILE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the input ISO 9660 image file that <i>isohybrid</i> will convert. This ISO must already be an <b>El Torito</b> bootable image.<br><br><b><b>-o</b>, <b>--output</b> <i>&lt;FILE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path and filename for the resulting hybrid ISO image. If omitted, <i>isohybrid</i> will attempt to modify the input file in place (though using a separate output file is generally safer).<br><br><b><b>-u</b>, <b>--uefi</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables <b>UEFI</b> bootability by adding an <b>EFI System Partition (ESP)</b> and necessary EFI boot information to the hybrid image. This allows the image to boot on modern systems using UEFI firmware, in addition to traditional BIOS.<br><br><b><b>-A</b>, <b>--architecture</b> <i>&lt;ARCH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the architecture for which the boot record should be prepared. Examples include <i>i386</i>, <i>x86_64</i>, <i>armhf</i>, <i>aarch64</i>. This is important for ensuring the correct bootloader is invoked on multi-architecture systems.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <i>isohybrid</i> to overwrite the specified output file if it already exists, without requiring user confirmation.<br><br><b><b>-c</b>, <b>--boot-catalog</b> <i>&lt;PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the path to the boot catalog file within the ISO image. This is a component of the <b>El Torito</b> specification that directs the system to bootable images.<br><br><b><b>-B</b>, <b>--boot-info-table</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a boot information table to the MBR. This table is used by some bootloaders, such as those from the <b>Syslinux</b> project, to pass essential information during the boot process.<br><br><b><b>-L</b>, <b>--lba-align</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Aligns partitions within the MBR to Logical Block Addressing (LBA) boundaries. This can improve compatibility and potentially performance, especially with larger USB drives or specific hardware.<br><br><b><b>-N</b>, <b>--no-isolinux</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <i>isohybrid</i> from making the image <b>Isolinux</b> bootable. This is an advanced option for scenarios where a custom MBR or boot process is desired, not typically used for general hybrid images.<br><br><b><b>-s</b>, <b>--sectors</b> <i>&lt;NUM&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of sectors for the MBR. This is an advanced configuration option and is rarely needed for standard usage.<br><br><b><b>-p</b>, <b>--partnum</b> <i>&lt;NUM&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the partition number for the bootable partition within the MBR. The default value is typically 1.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the operations being performed during the conversion process.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with command usage and options, then exits.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of the <i>isohybrid</i> utility and exits.<br><br>


title: DESCRIPTION
content:
<i>isohybrid</i> is a utility designed to modify an existing <b>El Torito</b> bootable ISO 9660 image, transforming it into a 'hybrid' image. This hybrid image gains the ability to be bootable from both traditional optical media (CD/DVD) and directly from USB flash drives or other raw block devices. The command works by embedding a <b>Master Boot Record (MBR)</b> and a partition table into the ISO file, alongside the existing ISO 9660 filesystem structure. <br><br>When written raw to a USB drive (e.g., using `dd`), the device's firmware (BIOS or UEFI) can recognize it as a standard hard drive with partitions, allowing it to boot from the MBR. When burned to a CD/DVD, it functions as a regular bootable ISO. This dual-boot capability is invaluable for creating versatile installation media or live system disks for various operating systems, especially Linux distributions, eliminating the need to maintain separate images for different boot methods.


title: CAVEATS
content:
The primary prerequisite for <i>isohybrid</i> is that the input ISO image <b>must</b> already conform to the <b>El Torito</b> bootable CD-ROM specification. <i>isohybrid</i> does not create the initial bootable ISO; it merely modifies an existing one. <br><br>The resulting hybrid image is designed to be written raw to a USB drive using tools like <b>dd</b>; simply copying the file will not make it bootable from USB. Compatibility can sometimes vary across different BIOS/UEFI firmware implementations or specific USB drive models.


title: TYPICAL USAGE WITH DD
content:
Once an ISO image has been processed by <i>isohybrid</i>, it is typically written to a USB drive using the <b>dd</b> command. A common invocation looks like this:<br><code><b>sudo dd if=/path/to/your-hybrid.iso of=/dev/sdX bs=4M status=progress</b></code><br>It is crucial to replace <code>/path/to/your-hybrid.iso</code> with the actual path to your modified ISO file, and <code>/dev/sdX</code> with the correct device identifier for your USB drive (e.g., <code>/dev/sdb</code>, <code>/dev/sdc</code>). Incorrectly specifying <code>of</code> can lead to data loss on other disks.


title: THE EL TORITO BOOT STANDARD
content:
The <b>El Torito</b> bootable CD-ROM specification, published in 1995, defines a method for making CD-ROMs bootable. It allows an ISO 9660 filesystem to contain boot information that a BIOS can recognize and use to boot a system. <i>isohybrid</i> leverages this existing standard: it takes an ISO that is already El Torito compliant and adds a complementary MBR that allows the *same* boot information to be accessed and used when the image is treated as a raw disk, thereby enabling USB bootability without altering the fundamental El Torito structure.


title: HISTORY
content:
<i>isohybrid</i> is a key component of the <b>Syslinux</b> project, a collection of lightweight bootloaders developed primarily by <b>H. Peter Anvin</b>. Its development addressed the growing need for a single, versatile ISO image capable of booting from both traditional optical media and increasingly popular USB flash drives. Prior to <i>isohybrid</i>, users often had to manage separate images or use complex multi-step processes for different boot targets. By integrating MBR and partition table structures into existing El Torito ISOs, <i>isohybrid</i> significantly streamlined the creation of universal bootable media, making it an indispensable tool for Linux distribution creators and users.


title: PARAMETERS
content:
<b><b>--offset <I>&lt;sectors&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the offset in sectors for the partition start. Advanced use case.<br><br><b><b>--partnum <I>&lt;N&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the partition number for the bootable partition (default 2).<br><br><b><b>--force-gpt</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the creation of a GPT (GUID Partition Table) partitioning scheme.<br><br><b><b>--force-lba</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces LBA (Logical Block Addressing) partitioning mode.<br><br><b><b>--mbr <I>&lt;file&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a custom MBR template from the specified file.<br><br><b><b>--boot-catalogue <I>&lt;file&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the boot catalog filename within the ISO.<br><br><b><b>--disk-geom <I>&lt;h/s/c&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines disk geometry (heads/sectors/cylinders) for the MBR.<br><br><b><b>--fat</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a small FAT partition for boot support, often used for UEFI.<br><br><b><b>--iso</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ensures the input is treated as an ISO-9660 image (this is the default behavior).<br><br><b><b>--sifpart</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a System Integrity Field Partition, if required by bootloader.<br><br><b><b>--uefi</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds or ensures UEFI boot support is included in the hybrid image.<br><br><b><b>--hfsplus</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds HFS+ boot support, primarily for booting on Apple Mac systems.<br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debugging output for analysis.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables more detailed output during processing.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br>


title: DESCRIPTION
content:
isohybrid.pl is a Perl script, part of the <I>Syslinux</I>/<I>Isolinux</I> project, designed to transform a standard ISO-9660 image into a <I>"hybrid"</I> image. A hybrid ISO can be booted either from an optical drive (CD/DVD) or from a USB stick/hard drive. It achieves this by appending a Master Boot Record (MBR) and a partition table to the ISO file, allowing it to be directly written to a block device using tools like <I>dd</I>. This process makes it possible to create bootable live USB drives from ISOs originally intended for optical media, without needing to unpack and re-pack the contents. It supports various boot methods, including BIOS/MBR and UEFI, and can integrate different bootloaders.


title: CAVEATS
content:
Requires Perl interpreter to run.<br>The original ISO must contain a bootable image (e.g., using <I>isolinux</I>/<I>syslinux</I>); <I>isohybrid.pl</I> doesn't *make* an ISO bootable from scratch, it makes an *already bootable* ISO hybrid.<br>The output file is often modified in-place or written to stdout if <I>-o</I> is not used.<br>Using <I>dd</I> afterwards is crucial: <I>dd if=hybrid.iso of=/dev/sdX bs=4M</I>.<br>Modern distributions often create hybrid ISOs by default, making manual use of <I>isohybrid.pl</I> less frequent.


title: <B>HYBRID ISO CONCEPT</B>
content:
A hybrid ISO is a single file that can be interpreted both as an ISO-9660 filesystem (for CD/DVD) and as a raw disk image with an MBR and partition table (for USB/HDD). <I>isohybrid.pl</I> specifically adds the latter structure to an existing ISO.


title: <B>USAGE WITH <I>DD</I></B>
content:
After running <I>isohybrid.pl</I>, the resulting file is typically written directly to a USB drive using <I>dd</I>, for example: <I>dd if=my-hybrid-iso.iso of=/dev/sdX bs=4M status=progress</I>. Replace <I>/dev/sdX</I> with your USB device, being extremely careful to specify the correct device as this command can overwrite system partitions.


title: HISTORY
content:
isohybrid.pl was developed as part of the <I>Syslinux</I> project by <I>H. Peter Anvin</I>. It was created to bridge the gap between optical media booting and USB/hard drive booting, addressing the growing need for bootable USB drives. Its inclusion made it significantly easier for Linux distributions and other bootable utilities to provide a single ISO image that could serve both purposes, reducing complexity for end-users.


title: PARAMETERS
content:
<b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the primary volume descriptor of the ISO image.<br><br><b><b>-i</b> <i>&lt;iso_image&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the ISO 9660 image file to be analyzed. This option is usually required.<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints all filenames found within the ISO image, one per line.<br><br><b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a long listing of directory contents, similar to <i>ls -l</i>, showing permissions, owner, group, size, and modification time.<br><br><b><b>-J</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables the display and interpretation of Joliet extensions, which provide support for longer filenames and Unicode characters.<br><br><b><b>-R</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables the display and interpretation of Rock Ridge extensions, which provide Unix-like file attributes such as permissions, UIDs/GIDs, and symbolic links.<br><br><b><b>-N</b> <i>&lt;filename&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for the specified filename or directory within the ISO image.<br><br><b><b>-x</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts the specified file from the ISO image to standard output (<i>stdout</i>). Users must redirect <i>stdout</i> to a file to save the extracted content.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the size of the ISO image in blocks.<br><br><b><b>-T</b> <i>&lt;sector&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the file located at the given sector offset within the ISO image. Useful for debugging or advanced analysis.<br><br><b><b>-k</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the block size of the ISO image.<br><br><b><b>-o</b> <i>&lt;offset&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Applies a byte offset to the beginning of the ISO image file. Useful when the ISO image is embedded within another file.<br><br><b><b>-p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the full path for entries when listing directory contents.<br><br><b><b>-M</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Calculates and displays the MD5 checksum of a specified file within the ISO image. Requires specifying a file with <b>-N</b>.<br><br><b><b>-y</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the target of symbolic links when using long listing (<b>-l</b>).<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the scanning process and image structure.<br><br><b><b>-t</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables very verbose trace output, primarily for debugging purposes.<br><br><b><b>-C</b> <i>&lt;charset&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the character set to use for converting Joliet names.<br><br><b><b>-D</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debugging output.<br><br>


title: DESCRIPTION
content:
<i>isoinfo</i> is a command-line utility used to examine and extract information from ISO 9660 images, which are common file formats for CD-ROMs, DVDs, and Blu-ray discs. It allows users to list directory contents, inspect volume descriptors, retrieve file information, and even extract individual files directly from an ISO image without needing to mount it.<br><br>It supports various extensions like Rock Ridge and Joliet, making it versatile for different types of ISOs. This tool is invaluable for verifying the contents of an ISO image, troubleshooting issues, or extracting specific data for analysis or further use. It serves as a non-destructive way to explore ISO content.


title: CAVEATS
content:
<i>isoinfo</i> is solely for inspecting and extracting data; it <b>cannot</b> modify ISO images. Tools like <i>genisoimage</i> or <i>mkisofs</i> are used for creating or altering ISO files.<br><br>Processing very large ISO images or performing extensive file listings (e.g., with <b>-f</b> or <b>-l</b>) can be resource-intensive and take a significant amount of time.<br><br>When extracting files using <b>-x</b>, the output is sent to standard output (<i>stdout</i>). To save the extracted file, it is crucial to redirect <i>stdout</i> to a new file (e.g., <i>isoinfo -x file.txt -i image.iso > extracted_file.txt</i>).


title: USAGE EXAMPLES
content:
To list all files within an ISO image:<br><i>isoinfo -f -i my_image.iso</i><br><br>To perform a long listing of the root directory of an ISO, including Rock Ridge extensions:<br><i>isoinfo -l -R -i my_image.iso</i><br><br>To extract a specific file named <i>document.pdf</i> from an ISO:<br><i>isoinfo -x /path/to/document.pdf -i my_image.iso > extracted_document.pdf</i><br><br>To dump the primary volume descriptor for detailed image information:<br><i>isoinfo -d -i my_image.iso</i>


title: HISTORY
content:
<i>isoinfo</i> is a long-standing utility that originated as part of the <i>cdrtools</i> package, initially developed by Jörg Schilling. Due to various licensing and development philosophy differences, some Linux distributions and open-source projects have forked parts of <i>cdrtools</i> into distinct projects, such as <i>genisoimage</i> and <i>wodim</i>.<br><br>Despite these forks, <i>isoinfo</i> has remained a consistent and widely available utility within these different packages, serving as a core tool for interacting with ISO 9660 filesystems. Its development has focused on robustly supporting various ISO 9660 standards and their extensions (like Rock Ridge and Joliet) to ensure compatibility with a broad range of optical disc images.


title: PARAMETERS
content:
<b><i>&lt;ISO_image_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the ISO 9660 image file whose size is to be determined.<br><br><b><b>-x</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the size in sector (block) units. Each sector is typically 2048 bytes for ISO 9660 images.<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the size in decimal bytes. This is the default output format.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the size in a 'human readable' format (e.g., 1.4G, 700M). This option automatically chooses the most appropriate unit (bytes, kilobytes, megabytes, gigabytes, etc.).<br><br>


title: DESCRIPTION
content:
<i>isosize</i> is a command-line utility used to determine the exact size of an ISO 9660 image file. Unlike generic file size tools like <i>ls</i>, which report the raw byte size of the file on disk, <i>isosize</i> reads the internal metadata of the ISO image itself, specifically the Primary Volume Descriptor (PVD). This allows it to report the logical size of the data contained within the ISO 9660 filesystem, which is the size that the operating system would recognize when the image is mounted or burned to an optical disc.<br><br>This utility is particularly useful for verifying the integrity and correct creation of ISO images generated by tools such as <i>mkisofs</i> or <i>genisoimage</i>. It ensures that the image's internal structure correctly reflects its intended size, which is critical for successful burning to media like CD-ROMs or DVDs, or for proper mounting as a virtual drive. It helps prevent issues that might arise from malformed or incomplete ISO images.


title: CAVEATS
content:
<i>isosize</i> is specifically designed for ISO 9660 formatted images. It may not correctly parse or report sizes for other disk image formats like UDF, FAT, or NTFS images. Its accuracy relies on the correctness and integrity of the Primary Volume Descriptor (PVD) within the ISO image; a corrupted PVD could lead to incorrect size reporting or failure.


title: HOW IT WORKS
content:
<i>isosize</i> operates by reading the <i>Primary Volume Descriptor</i> (PVD) within the ISO 9660 image. The PVD contains critical information about the ISO 9660 filesystem, including the 'Volume Space Size' (the total number of logical blocks in the volume) and 'Logical Block Size' (the size of each logical block, typically 2048 bytes). <i>isosize</i> multiplies these two values to calculate the total size of the ISO 9660 volume in bytes.


title: USAGE EXAMPLE
content:
To get the human-readable size of an ISO file named <i>my_software_image.iso</i>:<br><b>isosize -h my_software_image.iso</b><br><br>To get the size in blocks:<br><b>isosize -x my_software_image.iso</b>


title: HISTORY
content:
<i>isosize</i> is part of the widely used <i>util-linux</i> package, a collection of essential Linux utilities. Its development is closely tied to the need for robust handling and verification of optical disc images, a common task in Linux environments since the advent of CD-ROMs and DVDs. The command has remained relatively stable over time, reflecting its focused purpose and the consistent structure of the ISO 9660 standard.


title: PARAMETERS
content:
<b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run in <i>batch mode</i>. Prints misspelled words and suggestions to standard output, suitable for scripting rather than interactive use.<br><br><b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all misspelled words. Does not prompt for corrections; it simply prints each misspelled word on a new line.<br><br><b><b>-t</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assume input is in <i>troff</i> format. Skips <i>troff</i> requests and macros during the spell-checking process.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assume input is in <i>nroff</i> format. Similar to <b>-t</b> but designed for <i>nroff</i> documents, ignoring their specific formatting commands.<br><br><b><b>-x</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assume input is in <i>LaTeX</i> format. It intelligently skips <i>LaTeX</i> commands and environments, focusing only on the visible text content.<br><br><b><b>-b</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a backup file. The original file is renamed with a <b>.bak</b> suffix before modifications are applied.<br><br><b><b>-d <i>dictionary</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a main dictionary to use instead of the default. For example, <b>-d en_US</b> would specify the US English dictionary.<br><br><b><b>-p <i>file</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a personal dictionary file to use. Words added by the user during a session are stored in this file.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version number of <b>ispell</b> and exit.<br><br>


title: DESCRIPTION
content:
The <b>ispell</b> command is a traditional interactive spell-checking program for Unix-like operating systems. It allows users to check text files for spelling errors against a main dictionary and optional personal dictionaries. When <b>ispell</b> encounters a word not found in its dictionaries, it presents the word to the user, offering a range of options such as: <b>i</b> (ignore the word), <b>r</b> (replace with a correction), <b>a</b> (add to personal dictionary), <b>b</b> (add to main dictionary if permissions allow), <b>l</b> (look up in dictionary), or <b>R</b> (replace with a suggestion).<br>It supports various languages through different dictionary files and can be used in different text formats (e.g., <i>troff</i>, <i>nroff</i>, <i>LaTeX</i>). While highly efficient and foundational, <b>ispell</b> has largely been superseded by more modern spell checkers like <b>aspell</b> or <b>hunspell</b>, primarily due to its limited Unicode support and less active development.


title: CAVEATS
content:
<b>ispell</b>'s primary limitation is its historical lack of robust Unicode support, which can cause issues with modern multi-language texts or complex character sets. It is also an older project, and while still functional, it is not as actively developed as more recent spell checkers like <b>aspell</b> or <b>hunspell</b>, which offer better linguistic features and wider character encoding support. Its interactive prompts can be less convenient in scripting contexts compared to its dedicated batch mode.


title: DICTIONARY FILES
content:
<b>ispell</b> relies on language-specific dictionary files, typically found in a directory like <i>/usr/lib/ispell/</i> or <i>/usr/share/ispell/</i> on most Linux distributions. These files contain lists of correctly spelled words and rules for word formation. Users can also maintain personal dictionaries to store specialized vocabulary or words not present in the main dictionary, which helps tailor the spell checker to specific needs.


title: INTEGRATION WITH TEXT EDITORS
content:
One of <b>ispell</b>'s significant strengths throughout its active development was its widespread integration with text editors. Many prominent editors, including GNU Emacs and Vi/Vim (often via plugins), used <b>ispell</b> as their default backend for real-time or on-demand spell checking. This provided a seamless and efficient experience for developers, writers, and document creators within their editing environments.


title: HISTORY
content:
<b>ispell</b> was originally created by Pace Willisson in 1983 as a replacement for the older Unix <i>spell</i> command. It quickly gained popularity for its interactive capabilities, allowing users to correct words on the fly and manage personal dictionaries. Its efficiency and modular design, particularly its dictionary format and affix compression, made it influential. For many years, <b>ispell</b> was the de facto standard spell checker on Unix-like systems and served as the backend for spell-checking features in popular text editors like Emacs and Vi. While development largely tapered off in the early 2000s, with GNU Aspell emerging as its modern spiritual successor addressing internationalization challenges, <b>ispell</b> remains available and functional on many systems, a testament to its enduring design.


title: PARAMETERS
content:
<b><i>[dictionary-directory]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br><i>Optional.</i> Specifies the directory where <i>Ispell</i> dictionaries are located. If this argument is omitted, the script typically operates on the default <i>Ispell</i> dictionary path (e.g., <b>/usr/lib/ispell</b> or a path defined by the system's <i>Ispell</i> configuration). The script will then scan this specified or default directory for word list files (usually <b>.wl</b> or plain text files) and check if their associated hash files are outdated, rebuilding them as needed.<br><br>


title: DESCRIPTION
content:
The <b>ispell-autobuildhash</b> command is a utility script designed to automate the maintenance of <i>Ispell</i> dictionary hash files. <i>Ispell</i>, an interactive spell checker, relies heavily on these binary hash files (typically with a <b>.hash</b> extension) for rapid word lookups against its dictionary word lists. This script checks the modification timestamps of dictionary word list files (e.g., <b>american.wl</b>) against their corresponding hash files (e.g., <b>american.hash</b>). If a word list file is found to be newer than its hash file, indicating an update to the dictionary, <b>ispell-autobuildhash</b> automatically triggers the regeneration of the outdated hash file using the underlying <b>buildhash</b> utility. This ensures that <i>Ispell</i> always uses an up-to-date and performant dictionary for spell checking, without requiring manual intervention from users or system administrators for every dictionary update. It is primarily used in system environments, often invoked by package managers during installations or upgrades, or via system maintenance scripts, to maintain dictionary integrity and optimal <i>Ispell</i> performance.


title: CAVEATS
content:
<i><b>Important Considerations:</b></i><br><br><b>1. Dependency:</b> The <b>ispell-autobuildhash</b> script relies on the underlying <b>buildhash</b> utility, which must be installed and accessible in the system's PATH.<br><b>2. Conditional Rebuild:</b> It only rebuilds hash files if the corresponding dictionary word list is <i>newer</i> than the existing hash file; it does not force a rebuild without a timestamp difference.<br><b>3. Intended Usage:</b> This utility is typically invoked by system processes, package managers, or administrators, rather than directly by end-users.<br><b>4. Configuration Variations:</b> The default dictionary location and exact behavior can vary depending on the <i>Ispell</i> package version and system-specific configurations.


title: PURPOSE OF HASH FILES
content:
<br><i>Ispell</i> uses binary hash files (e.g., <b>american.hash</b>) for highly efficient word lookup during spell checking. These files are optimized data structures derived from plain-text dictionary word lists. Their existence is crucial for <i>Ispell</i> to perform rapid checks; without an up-to-date hash file, <i>Ispell</i> might default to slower search mechanisms or fail to recognize words in a newly updated dictionary.


title: AUTOMATIC TRIGGERING MECHANISMS
content:
<br>This script is commonly integrated into various system maintenance routines. It can be invoked automatically during software package installations or upgrades (especially for <i>Ispell</i> dictionaries), as part of daily or weekly cron jobs, or even during system boot-up sequences. Its primary role is to ensure that the <i>Ispell</i> dictionaries are always in a consistent and optimized state, comparing the modification timestamp of the dictionary word list file with its corresponding hash file and rebuilding only if the word list is newer.


title: HISTORY
content:
The <b>ispell-autobuildhash</b> utility is an integral part of the <i>Ispell</i> spell checker suite, which originated in the mid-1980s. Its development is directly linked to <i>Ispell</i>'s evolution towards using efficient hash tables for dictionary lookups, a significant improvement over earlier, slower search methods. As <i>Ispell</i> gained widespread adoption, the need arose to simplify the maintenance of these dictionary hash files. Instead of requiring manual execution of the <b>buildhash</b> utility whenever a dictionary was updated, <b>ispell-autobuildhash</b> was developed to automate this process. This automation ensures that system-wide <i>Ispell</i> dictionaries remain up-to-date and performant, particularly important for package managers distributing dictionary updates and for system administrators managing shared spell-checking resources.


title: PARAMETERS
content:
<b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Activates the interactive mode for checking standard input, useful for piping text to the spell checker.</I><br><br><b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Checks and interactively corrects words in the specified files. This option typically opens the file in a temporary buffer for correction.</I><br><br><b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Treats the input as TeX/LaTeX documents, instructing the spell checker to ignore control sequences and environment commands during spelling checks.</I><br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Lists misspelled words from standard input, one per line. This is a non-interactive mode often used for programmatic checking.</I><br><br><b>-d <I>dictionary</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specifies an alternative dictionary file to use instead of the default system dictionary. This allows for specialized vocabularies.</I><br><br><b>-w <I>characters</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Adds additional characters to the set of valid word characters. This is useful for technical documents or languages with specific character requirements.</I><br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Displays the version information of the underlying spell checker program being executed by the wrapper.</I><br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Provides usage instructions and a list of available options for the underlying spell checker, as presented by that program.</I><br><br>


title: DESCRIPTION
content:
The <b>ispell-wrapper</b> command serves as a convenient front-end for various interactive spell checkers, primarily <b>ispell</b> or <b>aspell</b>. Its main purpose is to provide a consistent interface, abstracting away the specific spell checker backend chosen by the system administrator (e.g., via the <i>update-alternatives</i> mechanism on Debian-based systems).<br><br>Instead of directly invoking <b>ispell</b> or <b>aspell</b>, applications or users can call <b>ispell-wrapper</b>, which then automatically determines and executes the preferred spell checker, passing along all command-line arguments. This ensures that scripts and applications continue to function correctly even if the underlying spell checking utility changes.


title: CAVEATS
content:
The behavior of <b>ispell-wrapper</b> is highly dependent on the system's configuration and the installed spell checker backend (e.g., <b>ispell</b>, <b>aspell</b>, or <b>hunspell</b>). Its functionality is limited by the capabilities and version of the chosen backend.<br><br>Users should ensure that at least one of these spell checkers is properly installed and configured on their system for <b>ispell-wrapper</b> to function correctly. Differences in backend versions or configurations can lead to subtle variations in how options are processed or results are presented.


title: BACKEND SELECTION
content:
On many Linux distributions (e.g., Debian, Ubuntu), <b>ispell-wrapper</b> typically participates in the <i>update-alternatives</i> system. This mechanism allows system administrators to symbolically link <b>ispell-wrapper</b> to their preferred spell checker, providing a centralized way to manage system-wide default utilities and ensure consistency across applications.


title: LOCALE AND DICTIONARIES
content:
The wrapper often assists in setting up the correct locale and dictionary paths for the underlying spell checker. This ensures that the spell check is performed using the appropriate language rules and vocabulary specific to the user's environment and language settings, improving accuracy.


title: HISTORY
content:
The concept of a spell checker wrapper emerged to handle the evolution of spell checking tools on Unix-like systems. While <b>ispell</b> was a prominent early spell checker, <b>aspell</b> (and later <b>hunspell</b>) gained popularity for their improved features, dictionary formats, and Unicode support. To provide a smooth transition and allow applications to remain backend-agnostic, distributions introduced wrapper scripts like <b>ispell-wrapper</b>. This allowed system administrators to switch between spell checker implementations without requiring applications to be recompiled or reconfigured.


title: SYNOPSIS
content:
<b>isql</b> [<I>options</I>] <I>DSN</I> [<I>user</I> [<I>password</I>]]<br><b>isql</b> [<I>options</I>] "<I>connection_string</I>"


title: PARAMETERS
content:
<b><I>DSN</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The Data Source Name defined in <I>odbc.ini</I> to connect to.<br><br><b><I>user</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The username for database authentication.<br><br><b><I>password</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The password for database authentication.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose mode, displaying more information about the connection and query execution.<br><br><b>-q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables quiet mode, suppressing header information and prompts.<br><br><b>-b</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes in batch mode, exiting after processing input without an interactive prompt.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the interactive command prompt.<br><br><b>-d <I>delimiter</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom delimiter for SQL statements in input files.<br><br><b>-e</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Echoes input commands to the output.<br><br><b>-i <I>input_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads SQL commands from the specified file instead of standard input.<br><br><b>-o <I>output_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs all output to the specified file instead of standard output.<br><br><b>-x <I>script_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Similar to <I>-i</I>, but specifically for executing a script and exiting.<br><br><b>-s <I>separator</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the column separator for result sets.<br><br><b>-m <I>max_rows</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the number of rows fetched for each query result.<br><br><b>-c "<I>connection_string</I>"</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the full ODBC connection string for direct connection.<br><br><b>-f <I>driver_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the ODBC driver file to use directly.<br><br><b>-?</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available options.<br><br>


title: DESCRIPTION
content:
<b>isql</b> (Interactive SQL) is a versatile command-line utility used for connecting to and interacting with various database systems. It primarily functions as an <I>ODBC (Open Database Connectivity)</I> client, enabling users to execute SQL queries, DDL (Data Definition Language) statements, and DML (Data Manipulation Language) commands directly from the terminal.<br><br>This tool is particularly useful for database administrators and developers for testing database connectivity, running ad-hoc queries, scripting database operations, and debugging SQL statements without the need for a full-fledged graphical client. While its core functionality revolves around executing SQL, different <b>isql</b> implementations (e.g., from <I>unixODBC</I> or specific database vendors) might offer varying features such as command history, output formatting options, and batch mode execution. Its primary strength lies in providing a quick and efficient way to interact with ODBC-compliant databases.


title: CAVEATS
content:
The functionality and available options of <b>isql</b> can vary significantly depending on its specific implementation, as it's a generic name used by various database systems or ODBC driver providers (e.g., <I>unixODBC</I>, OpenLink Virtuoso). Users should consult the documentation for their particular <b>isql</b> version. It generally lacks advanced features found in graphical SQL clients.


title: COMMON USE CASES
content:
<b>isql</b> is frequently used for:<br><ul><li><b>Testing Connectivity:</b> Quickly verify if a database connection (via DSN or connection string) is working.</li><li><b>Ad-hoc Queries:</b> Execute one-off SQL queries for data retrieval or manipulation.</li><li><b>Scripting:</b> Run SQL scripts in batch mode for database initialization, data loading, or automated maintenance tasks.</li><li><b>Debugging:</b> Test specific SQL statements or stored procedures in a minimalist environment.</li></ul>


title: HISTORY
content:
The concept of an 'isql' (Interactive SQL) client is fundamental to relational database management systems. While no single historical <b>isql</b> command exists across all Linux distributions or database vendors, the term generally refers to a command-line tool that allows users to type and execute SQL statements interactively. Implementations like the one provided by <I>unixODBC</I> emerged as part of efforts to standardize database connectivity (ODBC) across different platforms, offering a generic way to test and interact with various ODBC-compliant databases. Its usage reflects a long-standing need for simple, scriptable database interaction.


title: SYNOPSIS
content:
isutf8 [<b>-q</b>|<b>--quiet</b>] [<b>-v</b>|<b>--verbose</b>] [<b>-h</b>|<b>--help</b>] [<b>--version</b>] [<i>file...</i>]


title: PARAMETERS
content:
<b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all output to standard output. The command's success or failure is indicated solely by its exit status (0 for UTF-8, 1 for non-UTF-8).<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When provided with file arguments, prints the names of files that are <i>not</i> valid UTF-8 to standard output. If standard input is checked and is not UTF-8, it prints "(standard input)".<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message describing the command's usage and options, then exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of the <i>isutf8</i> utility, then exits.<br><br><b><i>file...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more paths to files to be checked for UTF-8 validity. If no files are specified, <i>isutf8</i> reads from standard input.<br><br>


title: DESCRIPTION
content:
<i>isutf8</i> is a command-line utility designed to verify if a given input stream or one or more specified files contain valid UTF-8 encoded text. It reads the input byte by byte and checks for compliance with UTF-8 encoding rules. The command is particularly useful in scripting and automation where the processing of files might depend on their character encoding.<br><br>If the input is valid UTF-8, <i>isutf8</i> exits with a status of 0; otherwise, it exits with 1. This exit status is its primary output for scripting purposes. It's often included as part of the <i>moreutils</i> package, a collection of handy Unix tools that are not standard but prove highly useful for everyday tasks. Users can pipe output into <i>isutf8</i> or provide filenames as arguments.


title: CAVEATS
content:
<i>isutf8</i> only checks for the <b>validity</b> of UTF-8 byte sequences, not for semantic correctness or specific Unicode characters. It does not perform character set conversion; for that, <i>iconv</i> is needed.<br><br>It might not differentiate between completely malformed files and files encoded in other character sets (e.g., Latin-1), only that they are not valid UTF-8. Its performance on very large files might be a consideration, as it processes the entire file.


title: EXIT STATUS
content:
<i>isutf8</i> communicates its results primarily through its exit status, making it highly suitable for use in shell scripts.<br><b>0</b>: All provided inputs (files or standard input) are valid UTF-8.<br><b>1</b>: At least one input was found to be <i>not</i> valid UTF-8.<br><b>2</b>: Indicates a usage error, such as invalid options or arguments.


title: TYPICAL USAGE
content:
<i>isutf8</i> is commonly used in conditional statements within shell scripts to ensure that text files are processed correctly based on their encoding.<br><i>Example:</i><br><code>if isutf8 my_document.txt; then</code><br><code>  echo "my_document.txt is UTF-8."</code><br><code>else</code><br><code>  echo "my_document.txt is NOT UTF-8."</code><br><code>fi</code>


title: HISTORY
content:
<i>isutf8</i> is part of the <i>moreutils</i> package, a collection of small, useful Unix utilities that extend the standard set of tools. <i>moreutils</i> was created by Joey Hess, and <i>isutf8</i> specifically fills a common need for easily checking character encoding validity in shell scripts without relying on more complex solutions or external libraries. Its inclusion in <i>moreutils</i> has made it readily available to many Linux and Unix users seeking practical solutions for text processing tasks.


title: PARAMETERS
content:
<b><b>-o</b> <i>&lt;output_filename&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output filename for the compiled executable. The default is <i>a.out</i>.<br><br><b><b>-c</b> <i>&lt;command_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads Verilog options from the specified command file, allowing complex configurations.<br><br><b><b>-D</b> <i>&lt;macro&gt;</i>[=<i>&lt;value&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines a macro with an optional value, similar to the C preprocessor's <i>#define</i> directive.<br><br><b><b>-I</b> <i>&lt;directory&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a directory to the list of paths searched for <i>`include</i> files, controlling where the compiler looks for included source code.<br><br><b><b>-M</b> <i>&lt;macro_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes a list of defined macros to a file, which can be useful for generating <i>make</i> dependencies.<br><br><b><b>-P</b> <i>&lt;param&gt;</i>=<i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a top-level module parameter value, allowing configuration of generic designs.<br><br><b><b>-s</b> <i>&lt;top_module&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the top-level module to elaborate. This is crucial for designs with multiple potential top modules.<br><br><b><b>-t</b> <i>&lt;target&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the compilation target. Common targets include <i>vvp</i> (default, for simulation), <i>null</i> (for syntax checking only), and <i>fpga</i> (for specific FPGA flows).<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose messages during compilation, providing more detailed output about the process.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints version information for <b>iverilog</b> and then exits.<br><br><b><b>-g</b><i>&lt;option&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables specific language extensions or optimizations (e.g., <i>-g2005</i> for Verilog-2005 features, <i>-gstrict-ca</i> for strict combinational always blocks).<br><br><b><b>-y</b> <i>&lt;library_dir&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a directory to the list of paths searched for Verilog library modules, aiding in resolving module instantiations.<br><br><b><b>-f</b> <i>&lt;filelist&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads source filenames from a specified filelist, with one filename per line, simplifying large project compilation.<br><br><b><b>-Wall</b>, <b>-Werror</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>-Wall</b> enables all warnings. <b>-Werror</b> treats all warnings as compilation errors, enforcing stricter code quality.<br><br>


title: DESCRIPTION
content:
<b>iverilog</b> is the open-source Icarus Verilog compiler, a powerful tool for compiling Verilog Hardware Description Language (HDL) code. It translates Verilog source files into an executable format, typically a bytecode file (often with <i>.vvp</i> extension), which can then be simulated using the <b>vvp</b> (Icarus Verilog simulator) command.<br><br><b>iverilog</b> supports a wide range of Verilog standards, including IEEE 1364-2005 (Verilog-2005) and significant portions of SystemVerilog (IEEE 1800-2009/2012). It is widely used for design verification, behavioral simulation, and synthesis preparation in digital circuit design. Its capabilities include pre-processing, parsing, elaboration, and code generation, making it a complete solution for Verilog compilation.<br><br><b>iverilog</b> plays a crucial role in the open-source EDA toolchain, providing a free alternative to commercial Verilog compilers and simulators, enabling hobbyists, students, and professionals to design and test digital circuits efficiently.


title: CAVEATS
content:
While <b>iverilog</b> supports a significant portion of SystemVerilog, it does not have full SystemVerilog support, especially for advanced verification constructs like classes, interfaces, and assertions. Its primary focus remains on design and behavioral aspects.<br><br>SDF annotation support might be limited compared to commercial tools. Performance for very large designs can be a consideration, although it is generally very efficient for its scope and capabilities.


title: COMPILATION FLOW
content:
<b>iverilog</b> typically compiles Verilog source files into an intermediate bytecode file (e.g., <i>a.out</i> by default, or as specified with <b>-o</b>). This bytecode is then executed by the <b>vvp</b> simulator to perform the simulation. For instance:<br> <i>iverilog -o my_design.vvp my_design.v testbench.v</i><br> <i>vvp my_design.vvp</i>


title: MODULE INSTANTIATION AND ELABORATION
content:
<b>iverilog</b> attempts to automatically identify the top-level module if only one uninstantiated module exists in the source files. However, if a design contains multiple potential top-level modules or you need to explicitly specify the root of the design hierarchy, the <b>-s</b> option is essential to direct the compiler accordingly.


title: HISTORY
content:
Icarus Verilog was initiated by Stephen Williams in 1998 with the ambitious goal of creating a complete, open-source Verilog compiler and simulator. Since its inception, it has undergone continuous development and improvement, progressively evolving to support newer Verilog standards such as Verilog-2001, Verilog-2005, and significant portions of SystemVerilog.<br><br>It has become a cornerstone of the open-source Electronic Design Automation (EDA) community, providing a free and accessible entry point for digital hardware design and verification. Its stable development, robust feature set, and strong community support have made it a widely adopted tool for both educational institutions and professional applications.


title: SEE ALSO
content:
<b>vvp(1)</b>: The Icarus Verilog runtime simulator, which executes the bytecode output generated by <b>iverilog</b>., <b>gtkwave(1)</b>: A widely used open-source waveform viewer for VCD/FST files, commonly used to visualize simulation results from <b>iverilog</b>/<b>vvp</b>., <b>verilator(1)</b>: Another open-source Verilog compiler that translates Verilog to C++/SystemC for faster simulation of designs., <b>yosys(1)</b>: An open-source HDL synthesis framework, often used in conjunction with <b>iverilog</b> for synthesis preparation and analysis.


title: SYNOPSIS
content:
<b>ivpn</b> <i>&lt;command&gt;</i> [<i>options</i>] [<i>arguments</i>]<br><br>Examples:<br><i>ivpn connect</i><br><i>ivpn disconnect</i><br><i>ivpn status</i><br><i>ivpn servers -c US</i><br><i>ivpn settings set killswitch true</i>


title: PARAMETERS
content:
<b>connect [server_id/country/city]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Establishes a VPN connection. Can connect to the fastest available server or a specific one by ID, country code (e.g., <i>US</i>), or city (e.g., <i>New York</i>).<br><br><b>disconnect</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Terminates the active VPN connection.<br><br><b>status</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current VPN connection status, including server details, public IP address, connection time, and protocol in use.<br><br><b>servers [options]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists available IVPN servers. Options can include filtering by country (<i>-c</i>), showing recommended servers (<i>-r</i>), or displaying detailed information.<br><br><b>settings [subcommand]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages application settings. Subcommands include <i>get</i> (to view settings), <i>set</i> (to modify settings like killswitch, anti-tracker, firewall, protocol), and <i>reset</i>.<br><br><b>account</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays IVPN account information, such as subscription status, expiry date, and plan details.<br><br><b>log [options]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays client log messages. Useful for debugging connection issues or understanding client behavior. Options may include log level or number of lines.<br><br><b>version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the installed IVPN client version.<br><br><b>help [command]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides help information for the main <b>ivpn</b> command or a specific subcommand (e.g., <i>ivpn help connect</i>).<br><br>


title: DESCRIPTION
content:
The <b>ivpn</b> command provides a comprehensive command-line interface for managing the IVPN Virtual Private Network service on Linux. It allows users to connect to and disconnect from IVPN servers, view connection status, list available VPN servers, configure application settings, and manage advanced features directly from the terminal. This tool is essential for headless systems or users who prefer a command-line workflow over a graphical user interface for their VPN management. It simplifies the process of interacting with the IVPN service, abstracting the complexities of underlying VPN protocols like OpenVPN or WireGuard.


title: CAVEATS
content:
Requires an active IVPN subscription and a working internet connection. For certain network-level operations, such as managing the killswitch or firewall, the command may need to be run with root privileges (e.g., using <i>sudo</i>). The client must be properly installed and configured on the system.


title: INSTALLATION
content:
The <b>ivpn</b> client is typically installed via official IVPN repositories or a direct download package (e.g., <i>.deb</i> or <i>.rpm</i>) provided by IVPN. It is not usually found in standard Linux distribution repositories.


title: DEPENDENCIES
content:
The client relies on network utilities and potentially underlying VPN protocol implementations (like OpenVPN or WireGuard) to function correctly. Firewall management often involves interaction with system-level tools like <i>iptables</i>.


title: HISTORY
content:
The <b>ivpn</b> command-line client is an official application developed by IVPN to provide robust and convenient management of their VPN service on Linux systems. It was created to cater to users who prefer a terminal-based workflow, including server administrators and power users, as well as for integration into scripts. Its development focuses on encapsulating the complexities of VPN protocols (like OpenVPN and WireGuard) into a user-friendly interface, ensuring secure and private internet access is easily configurable from the command line.


title: SYNOPSIS
content:
<b>ivstools</b> [<i>options</i>] [<i>input_file(s)</i>] [<i>output_file</i>]<br><br><i>Examples:</i><br><b>ivstools</b> <i>-m</i> <i>file1.ivs</i> <i>file2.ivs</i> <i>merged.ivs</i><br><b>ivstools</b> <i>-x</i> <i>cap</i> <i>input.ivs</i> <i>output.cap</i><br><b>ivstools</b> <i>-s</i> <i>capture.ivs</i> <i>cleaned.ivs</i>


title: PARAMETERS
content:
<b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Read from standard input instead of a file.</i><br><br><b><b>-w</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Write output to the specified file. If not specified, output goes to standard output.</i><br><br><b><b>-x</b> <i>&lt;format&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Export/convert IVs to a specific format. Common formats include 'cap' (pcap), 'pcap', 'txt'.</i><br><br><b><b>-m</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Merge multiple IV files into a single output file. Input files are specified after this option.</i><br><br><b><b>-f</b> <i>&lt;filter&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Apply a filter to the IVs. Filter examples include 'size=X', 'type=X', 'timestamp=X'.</i><br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Remove duplicate IVs by sorting and unique-ifying the dataset.</i><br><br><b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display the total count of IVs in the input file(s) without processing them.</i><br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display version information of ivstools.</i><br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display the help message and exit.</i><br><br>


title: DESCRIPTION
content:
<i>ivstools</i> is a utility from the <i>aircrack-ng</i> suite designed to manipulate Initialization Vector (IV) files, typically used in wireless network security auditing. It allows users to merge multiple <i>.ivs</i> files into a single one, convert <i>.ivs</i> files to other formats (like <i>.cap</i> or plain text), filter IVs based on various criteria (e.g., size, timestamp), and remove duplicate IVs. This tool is crucial for preparing IV data for subsequent cracking attempts with tools like <i>aircrack-ng</i>, ensuring efficient and focused analysis of captured wireless traffic by optimizing the IV dataset.


title: CAVEATS
content:
<i>ivstools</i> is specifically designed to work with <i>.ivs</i> files, which are a specialized format for raw Initialization Vectors used by the <i>aircrack-ng</i> suite. It may not correctly process general <i>.cap</i> or <i>.pcap</i> files without prior extraction of IVs. Input files must conform to the expected <i>.ivs</i> structure; corrupted or malformed files can lead to errors or incorrect output. While it can convert to <i>.cap</i>, it only generates a minimal <i>pcap</i> structure containing the IVs, not full packets.


title: <I>IVS AND WIRELESS SECURITY</I>
content:
Initialization Vectors (IVs) are critical components in legacy wireless security protocols like WEP, and also present in WPA handshakes. <i>ivstools</i> helps in processing these IVs extracted from captured wireless traffic, often from <i>.cap</i> files. These processed IVs are then used by tools like <i>aircrack-ng</i> to deduce cryptographic keys. The efficiency of cracking heavily relies on a large number of unique IVs, making <i>ivstools</i> an essential preprocessing tool for data preparation and optimization.


title: HISTORY
content:
<i>ivstools</i> is an integral part of the <i>aircrack-ng</i> suite, a popular open-source project for wireless network auditing and cracking. It has been developed alongside <i>aircrack-ng</i> to provide specialized IV manipulation capabilities necessary for WEP/WPA cracking efforts, evolving as the suite has matured to support more efficient and targeted analysis of captured wireless traffic.


title: SYNOPSIS
content:
<b>iw</b> [<i>options</i>] <b><command></b> [<i>arguments</i>]<br><b>iw</b> [<i>options</i>] <b>dev <devname> <command></b> [<i>arguments</i>]<br><b>iw</b> [<i>options</i>] <b>phy <phyname> <command></b> [<i>arguments</i>]<br><b>iw help</b><br><b>iw <command> help</b>


title: PARAMETERS
content:
<b><b>dev</b> <i>&lt;devname&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a wireless network interface (e.g., <i>wlan0</i>) for the subsequent command.<br><br><b><b>phy</b> <i>&lt;phyname&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a physical wireless device (radio) for the subsequent command, typically named <i>phy0</i>, <i>phy1</i>, etc.<br><br><b><b>list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available wireless devices and their capabilities.<br><br><b><b>info</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed information about the specified wireless device.<br><br><b><b>scan</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates a scan for nearby Wi-Fi access points and displays the results.<br><br><b><b>connect</b> <i>&lt;SSID&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to a specified Wi-Fi network (SSID).<br><br><b><b>disconnect</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disconnects from the currently connected Wi-Fi network.<br><br><b><b>link</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the current link state of the wireless interface, including connection status and signal strength.<br><br><b><b>station dump</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all connected stations when the interface is in AP (Access Point) mode.<br><br><b><b>interface add</b> <i>&lt;name&gt; &lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a new virtual wireless interface of a specified type (e.g., <i>monitor</i>, <i>ap</i>).<br><br><b><b>interface del</b> <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes an existing virtual wireless interface.<br><br><b><b>set</b> <i>&lt;option&gt; &lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets various device parameters, such as channel, transmit power, or powersave mode.<br><br><b><b>monitor</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the device to monitor mode, allowing capturing of all Wi-Fi traffic.<br><br><b><b>help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays general help or specific help for a given command.<br><br>


title: DESCRIPTION
content:
<b>iw</b> is a command-line utility for configuring wireless devices in Linux. It is the modern replacement for the deprecated <b>iwconfig</b> tool, leveraging the <b>nl80211</b> kernel subsystem for wireless configuration. Unlike <b>iwconfig</b>, which used a more ad-hoc approach, <b>iw</b> provides a consistent and extensible interface for managing various aspects of Wi-Fi.<br><br>It allows users to control physical wireless devices (<i>phys</i>) and their associated network interfaces. With <b>iw</b>, you can perform a wide range of operations, including listing available Wi-Fi devices, scanning for nearby access points, connecting to and disconnecting from networks, configuring interface modes (such as managed, AP, monitor, or mesh), managing virtual interfaces, and setting advanced parameters like channel, transmit power, and power-saving modes. It's an essential tool for administrators and users needing fine-grained control over their wireless adapters, especially in environments where NetworkManager or similar services are not used, or for debugging purposes.


title: CAVEATS
content:
The <b>iw</b> command requires kernel and driver support for the <b>nl80211</b> (Netlink protocol for 802.11 wireless devices) subsystem. It is designed to replace <b>iwconfig</b> but is not a direct drop-in replacement; its syntax and command structure are significantly different. Most operations require root privileges or appropriate sudo permissions. Functionality might vary based on the specific wireless adapter and its driver's support for <b>nl80211</b> features.


title: INTERFACE TYPES AND MODES
content:
Wireless interfaces can operate in various modes, each suited for different purposes. Common modes include: <br><i><b>managed</b></i> (client mode, connecting to an AP), <br><i><b>AP</b></i> (Access Point mode, allowing other devices to connect), <br><i><b>monitor</b></i> (passive listening for all Wi-Fi traffic), <br><i><b>mesh</b></i> (for ad-hoc mesh networks), and <br><i><b>IBSS</b></i> (Ad-Hoc mode, for direct peer-to-peer communication). <br>The <b>iw</b> command allows adding and configuring virtual interfaces for these different modes on a single physical radio.


title: PHYSICAL DEVICES (PHY)
content:
In <b>iw</b>, a '<i>phy</i>' refers to a physical wireless radio. A single physical radio can support multiple virtual interfaces operating simultaneously in different modes (e.g., one in <i>managed</i> mode, another in <i>monitor</i> mode). Commands affecting the entire radio, like setting regulatory domains or listing capabilities, are often performed using the <b>iw phy</b> command. Interfaces are typically named <i>wlan0</i>, <i>wlan1</i>, etc., while physical devices are <i>phy0</i>, <i>phy1</i>, etc.


title: HISTORY
content:
The <b>iw</b> command was developed as the modern successor to the older <b>iwconfig</b> utility. Its creation was driven by the need for a more robust and extensible wireless configuration tool that leverages the <b>nl80211</b> kernel interface, which superseded the older <i>Wireless Extensions</i> API used by <b>iwconfig</b>.<br><br><b>iw</b> is part of the <i>wireless-tools</i> lineage but represents a fundamental shift in how wireless devices are managed in Linux, providing a more consistent and powerful way to interact with contemporary Wi-Fi hardware and drivers. It was designed from the ground up to support advanced 802.11 features and address limitations inherent in the previous generation of tools.


title: SYNOPSIS
content:
<b>iw</b> [<i>options</i>] <i>command</i> [<i>arguments</i>]<br><b>iw</b> <i>help</i><br><b>iw</b> <i>command</i> <i>help</i>


title: PARAMETERS
content:
<b><b>dev</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show information about wireless devices attached to the system.<br><br><b><b>phy</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show or modify information about wireless physical devices (phys).<br><br><b><b>scan</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a scan for available Wi-Fi networks on a specified interface.<br><br><b><b>connect</b> <i>&lt;SSID&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connect to a specified Wi-Fi network (SSID).<br><br><b><b>disconnect</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disconnect from the currently connected network.<br><br><b><b>link</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display or modify current link properties for an interface, like signal strength.<br><br><b><b>station</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manage or display information about stations (clients) connected to an access point.<br><br><b><b>info</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show general information about the current wireless configuration or interface.<br><br><b><b>set</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set various parameters for an interface, such as channel, type, or transmit power.<br><br><b><b>event</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitor wireless device events, useful for debugging or scripting.<br><br><b><b>help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display general help message or help for a specific command.<br><br>


title: DESCRIPTION
content:
<i>iw-dev</i> refers to the development version of the <br> <b>iw</b> utility, which is a powerful command-line tool for configuring wireless devices on Linux. It is built upon the <br> <b>nl80211</b> kernel interface, making it the preferred and modern replacement for the older <br> <b>iwconfig</b> tool. <br><br> Unlike <br> <b>iwconfig</b>, which was specific to the now-deprecated Wireless Extensions API, <br> <b>iw</b> leverages the netlink protocol to interact with modern wireless drivers, offering more robust and detailed control over Wi-Fi hardware. <br><br> As a "development" version, <br> <b>iw-dev</b> typically includes the latest features, bug fixes, and improvements that are still under active development and have not yet been released in a stable version. This makes it suitable for testing new functionalities, debugging driver issues, or working with cutting-edge wireless hardware that requires the newest kernel features. <br><br> Capabilities include scanning for networks, connecting to access points, setting up access points, configuring mesh networks, managing P2P connections, inspecting wireless device capabilities, and displaying detailed link and station information.


title: CAVEATS
content:
As a development version, <br> <b>iw-dev</b> (i.e., <br> <b>iw</b> compiled from a development branch) should be used with caution. It may contain unstable features, known bugs, or incomplete functionalities. It is not recommended for production environments or systems requiring high stability. Features might change or be removed without prior notice. It also often relies on the latest kernel features, which might not be available on older Linux distributions, potentially leading to compatibility issues.


title: DEVELOPMENT CONTEXT
content:
When 'iw-dev' is referenced, it typically implies using the <b>iw</b> utility compiled directly from its source code repository's development branch (e.g., Git 'master' or 'main'). This approach is common for developers, advanced users, or hardware vendors who need access to the absolute latest features or bug fixes before they are formally released in stable versions of the tool or integrated into distribution packages. It requires manual compilation and potentially more attention to dependencies and system compatibility.


title: HISTORY
content:
The <br> <b>iw</b> command was developed to replace the deprecated <br> <b>iwconfig</b> utility, which relied on the older Wireless Extensions API. With the introduction of the <br> <b>nl80211</b> kernel interface, a more robust and extensible framework for wireless device control became available. <br> <b>iw</b> was designed from the ground up to leverage <br> <b>nl80211</b>, providing comprehensive control over modern Wi-Fi chipsets and features like mesh networking, P2P, and advanced access point functionalities. The term <br> <b>iw-dev</b> specifically refers to utilizing the bleeding-edge development builds of <br> <b>iw</b>, reflecting the continuous evolution and improvement of wireless networking tools in Linux.


title: SYNOPSIS
content:
<I>iwconfig</I> [<I>interface</I>] [<I>parameter</I> <I>value</I>...]<br><I>iwconfig</I> <I>--help</I><br><I>iwconfig</I> <I>--version</I>


title: PARAMETERS
content:
<b>[<I>interface</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays wireless configuration for a specific interface (e.g., <I>wlan0</I>). If omitted, shows all wireless interfaces.<br><br><b>essid <I>name</I>|<I>off</I>|<I>any</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the wireless network name (Extended Service Set Identifier).<br><br><b>mode <I>managed</I>|<I>ad-hoc</I>|<I>master</I>|<I>monitor</I>|<I>auto</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the operating mode of the wireless interface.<br><br><b>channel <I>N</I>|<I>auto</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the wireless channel number.<br><br><b>freq <I>N</I>[<I>G</I>|<I>M</I>|<I>k</I>]|<I>auto</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the operating frequency (e.g., <I>2.412G</I> for 2.412 GHz).<br><br><b>ap <I>addr</I>|<I>auto</I>|<I>off</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Access Point (AP) BSSID to associate with. Use <I>auto</I> to let the driver choose, <I>off</I> to disable AP lock.<br><br><b>key <I>key</I>|<I>[S:key]</I>|<I>off</I>|<I>open</I>|<I>restricted</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the WEP encryption key. Hexadecimal or ASCII string (preceded by 's:').<br><br><b>power <I>period N</I>|<I>timeout N</I>|<I>off</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Configures power management for the interface, defining sleep periods or timeouts.<br><br><b>rate <I>N</I>[<I>G</I>|<I>M</I>|<I>k</I>]|<I>auto</I>|<I>fixed</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the bit rate for data transmission.<br><br><b>txpower <I>N</I>|<I>off</I>|<I>auto</I>|<I>fixed</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the transmit power level (in dBm or mW).<br><br><b>retry <I>limit N</I>|<I>lifetime N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the retry limits for packet retransmission.<br><br><b>nick <I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a nickname for the interface, used for identification in some contexts.<br><br><b>rts <I>N</I>|<I>auto</I>|<I>off</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the RTS (Request To Send) threshold, controlling when RTS/CTS handshaking is used.<br><br><b>frag <I>N</I>|<I>auto</I>|<I>off</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the fragmentation threshold, determining the maximum size of data frames before fragmentation.<br><br><b>sens <I>N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the sensitivity threshold for the interface, affecting reception quality.<br><br><b><I>--help</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message about the command options.<br><br><b><I>--version</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information for the <I>iwconfig</I> utility.<br><br>


title: DESCRIPTION
content:
<I>iwconfig</I> is a Linux utility used to configure and view parameters of wireless network interfaces. It allows users to set various wireless-specific settings such as the <I>ESSID</I> (network name), operating <I>mode</I> (e.g., managed, ad-hoc), <I>channel</I>, encryption <I>key</I> (primarily <I>WEP</I>), and <I>power management</I> options. While still functional, it largely relies on the older <I>Linux Wireless Extensions (WE)</I> and is often superseded by more modern tools like the <I>iw</I> command or network managers for advanced configurations and current security protocols like <I>WPA2</I>/<I>WPA3</I>.


title: CAVEATS
content:
<I>iwconfig</I> primarily relies on the <I>Linux Wireless Extensions (WE)</I>, an older kernel interface for wireless drivers. As such, it may not provide full control or accurate information for modern wireless hardware that uses the newer <I>nl80211</I> stack. It lacks native support for advanced security protocols like <I>WPA2</I> and <I>WPA3</I>, and its functionality can be limited by the driver's implementation of <I>WE</I>.


title: SECURITY LIMITATIONS
content:
<I>iwconfig</I> is fundamentally limited in its support for modern wireless security. It is primarily capable of configuring <I>WEP</I> and basic <I>WPA1</I> pre-shared keys. For networks secured with <I>WPA2</I> or <I>WPA3</I>, which are the current industry standards, dedicated tools like <I>wpa_supplicant</I> or comprehensive network management services are required, as <I>iwconfig</I> cannot handle the complex authentication and key management processes involved.


title: DRIVER COMPATIBILITY
content:
The effectiveness and available options of <I>iwconfig</I> are heavily dependent on the specific wireless driver in use. Not all drivers fully implement the <I>Wireless Extensions</I> API, and newer drivers might be exclusively designed to interface with <I>nl80211</I>, rendering <I>iwconfig</I> less useful or completely ineffective for those devices. Users might observe incomplete information or command failures on modern hardware.


title: HISTORY
content:
<I>iwconfig</I> emerged as part of the <I>Linux Wireless Extensions (WE)</I> project, designed to standardize wireless device configuration in Linux. It became a primary tool for managing Wi-Fi networks in the early 2000s, paralleling <I>ifconfig</I>. However, with the evolution of wireless technology and the introduction of the more robust <I>nl80211</I> kernel interface, <I>iwconfig</I>'s role has diminished in favor of the <I>iw</I> command and network managers. Despite this, it remains part of many distributions for backward compatibility and for drivers that still rely on the legacy <I>WE</I> API.


title: SYNOPSIS
content:
<i>iwctl</i> [<i>options</i>] [<i>command</i>] [<i>arguments</i>]<br><i>iwctl</i><br><i>iwctl</i> <b>--help</b><br><i>iwctl</i> <b>--version</b>


title: PARAMETERS
content:
<b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the command's help message.<br><br><b><b>--version</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version information of <i>iwd</i>.<br><br><b><b>--raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs information in a raw, machine-readable format, suitable for parsing.<br><br><b><b>--json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs information in JSON format, facilitating programmatic access.<br><br><b><b>--no-pager</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents piping output to a pager, displaying it directly in the terminal.<br><br><b><b>adapter</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages wireless adapters, including listing available adapters, showing their details, and setting properties.<br><br><b><b>device</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for the 'adapter' command, used to manage wireless devices.<br><br><b><b>station</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls a wireless station (client) on an adapter, allowing scanning for networks, connecting, disconnecting, and managing network profiles.<br><br><b><b>known-networks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages previously saved wireless network profiles, allowing users to list and forget them.<br><br><b><b>net</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for network-related operations, often used interchangeably with 'station get-networks' or 'station list-known-networks'.<br><br><b><b>p2p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages Wi-Fi Direct (Peer-to-Peer) connections and operations.<br><br><b><b>ap</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages Access Point mode configurations and operations.<br><br><b><b>phy</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays and manages physical layer properties of wireless devices.<br><br>


title: DESCRIPTION
content:
<i>iwctl</i> is the command-line interface for <i>iwd</i>, the iNet wireless daemon. <i>iwd</i> is a Linux wireless daemon developed by Intel that aims to replace <i>wpa_supplicant</i>. <i>iwctl</i> provides a user-friendly and interactive way to manage wireless networks directly from the terminal. Users can leverage it to scan for available Wi-Fi networks, connect to them using various authentication methods, disconnect, and manage network profiles. It also allows for the configuration of wireless adapters. Designed for modern Linux systems, <i>iwctl</i> supports both an interactive shell, which simplifies routine tasks, and direct command execution, making it suitable for scripting and automation. Its primary design goals are to be lightweight, efficient, and simple to use for common wireless management tasks, providing a streamlined experience for wireless connectivity.


title: CAVEATS
content:
<i>iwctl</i> requires the <i>iwd</i> (iNet wireless daemon) service to be running. Certain operations, especially those involving modifying system network configurations or connecting to protected networks, may require root privileges (e.g., via <i>sudo</i>). While <i>iwd</i> manages the wireless connection, it typically relies on other system services like <i>systemd-networkd</i> or <i>dhcpcd</i> for IP address configuration.


title: INTERACTIVE MODE
content:
Running <i>iwctl</i> without any arguments launches an interactive shell, providing an intuitive environment for managing wireless connections with tab-completion and contextual help.


title: NON-INTERACTIVE USAGE
content:
Commands can be executed directly from the terminal (e.g., <i>iwctl station wlan0 scan</i>), which is useful for scripting and automating wireless management tasks.


title: NETWORK PROFILES
content:
<i>iwctl</i> automatically creates and manages network profiles for successfully connected Wi-Fi networks, simplifying future reconnections to known networks.


title: SYSTEMD INTEGRATION
content:
<i>iwd</i> is designed to integrate seamlessly with <i>systemd</i> components like <i>systemd-networkd</i> for network configuration and <i>systemd-resolved</i> for DNS resolution, providing a cohesive network management solution.


title: HISTORY
content:
<i>iwd</i>, and consequently <i>iwctl</i>, was developed by Intel as a modern, lightweight alternative to <i>wpa_supplicant</i>. Its development began around 2017-2018, aiming for better integration with <i>systemd</i> and focusing solely on wireless connectivity, delegating IP management to other system services. It has steadily gained traction and is now the default wireless backend in several Linux distributions, offering a simpler and more efficient approach to Wi-Fi management.


title: PARAMETERS
content:
<b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays raw event messages as received from the kernel, without parsing them into a human-readable format. This is useful for debugging or scripting purposes.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints a short description of the wireless event. This option provides a more concise output compared to the default verbose description.<br><br><b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prepends a timestamp to each event message, indicating when the event occurred. This is useful for analyzing event sequences over time.<br><br>


title: DESCRIPTION
content:
<i>iwevent</i> is a command-line utility from the <i>wireless-tools</i> package that monitors and displays wireless events generated by the kernel. These events provide real-time notifications about various occurrences on a wireless interface, such as changes in the associated access point, link quality fluctuations, roaming events, or disconnections.<br><br>It operates by reading from the kernel's wireless event stream, providing valuable diagnostic information for network administrators and users troubleshooting wireless connectivity issues. It can be particularly useful for observing how a wireless client behaves during network transitions or signal degradation.


title: CAVEATS
content:
- Requires root privileges to run, as it interacts directly with kernel event streams.<br>- Part of the <i>wireless-tools</i> package, which is older and largely deprecated in favor of the <i>iw</i> command for modern wireless configuration and monitoring.<br>- Its output format can vary slightly between kernel versions or distributions.<br>- May not work with all modern wireless drivers or hardware, especially those that rely exclusively on the Netlink API.


title: REAL-TIME MONITORING
content:
<i>iwevent</i> runs continuously until interrupted, making it suitable for real-time observation of wireless network behavior, especially during troubleshooting connectivity issues or observing roaming patterns.


title: SCRIPTING INTEGRATION
content:
Due to its command-line nature, <i>iwevent</i>'s output can be piped or redirected, allowing it to be integrated into scripts for automated monitoring or logging of wireless events.


title: HISTORY
content:
<i>iwevent</i> is a component of the <i>wireless-tools</i> suite, which was developed to configure and monitor wireless network interfaces on Linux using the Wireless Extensions API. This API and the associated tools became the standard for wireless management before the advent of <i>cfg80211</i> and <i>nl80211</i> (Netlink-based 802.11) in the Linux kernel.<br><br>While still available on many systems for backward compatibility, <i>wireless-tools</i> and <i>iwevent</i> have largely been superseded by the more modern <i>iw</i> command and direct Netlink interaction, which offer more robust and feature-rich management capabilities for contemporary wireless hardware and standards.


title: PARAMETERS
content:
<b><i>interface</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the wireless network interface (e.g., <i>wlan0</i>, <i>eth1</i>) to query. If omitted, <i>iwgetid</i> attempts to find the first available wireless interface.<br><br><b>-r, --raw</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output only the <i>ESSID</i> or <i>NWID</i>, suppressing the field name and interface name. Useful for scripting when only the identifier is needed.<br><br><b>-s, --s-raw</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Similar to <b>--raw</b>, but also suppresses any error messages. This is particularly useful for shell scripts where silent operation is required.<br><br><b>-a, --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output all available information for the specified interface, including <i>ESSID</i>, <i>BSSID</i>, and <i>NWID</i>.<br><br><b>-P, --protocol</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the wireless protocol name (e.g., <i>IEEE 802.11</i>).<br><br><b>-F, --freq</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the current operating frequency of the wireless network.<br><br><b>-C, --channel</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the current operating channel of the wireless network.<br><br><b>-H, --hwaddr</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the <i>BSSID</i> (Basic Service Set Identifier), which is the MAC address of the connected Access Point.<br><br><b>-L, --ap</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the <i>BSSID</i> (MAC address of the Access Point). Functionally identical to <b>--hwaddr</b>.<br><br><b>-N, --nwid</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the <i>NWID</i> (Network ID), an older 16-bit identifier for the network.<br><br><b>-E, --essid</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the <i>ESSID</i> (Extended Service Set Identifier), the human-readable name of the wireless network.<br><br><b>-p, --privacy</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the privacy status (whether encryption is enabled or disabled) for the network.<br><br><b>-G, --getmode</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the operating mode of the wireless interface (e.g., <i>Ad-Hoc</i>, <i>Managed</i>, <i>Master</i>, <i>Monitor</i>).<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information for the <b>Wireless-tools</b> package.<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display verbose version information, including compilation options.<br><br><b>-D, --debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debug output for troubleshooting.<br><br>


title: DESCRIPTION
content:
<i>iwgetid</i> is a utility from the <b>Wireless-tools</b> package designed to display the identifier of a wireless network connected to a specific interface.<br>It can report the <i>ESSID</i> (Extended Service Set Identifier), which is the human-readable network name, the older <i>NWID</i> (Network ID), or the <i>BSSID</i> (Basic Service Set Identifier), which is the MAC address of the access point.<br>This command is part of an older suite of tools that rely on the Linux <i>Wireless Extensions (WE)</i> API, making it suitable for systems using older wireless drivers or kernels where the modern <i>nl80211</i> framework (used by tools like <i>iw</i>) might not be fully adopted or preferred.


title: CAVEATS
content:
<i>iwgetid</i> is part of the older <b>Wireless-tools</b> suite, which relies on the <i>Wireless Extensions (WE)</i> API.<br>It has largely been superseded by newer tools like <i>iw</i>, which utilize the more modern <i>nl80211</i> kernel interface.<br>Consequently, <i>iwgetid</i> may not work correctly or provide complete information with very new wireless drivers or kernel versions that primarily support <i>nl80211</i>.<br>Its functionality is limited to querying certain network identifiers and parameters, not for configuration.


title: NETWORK IDENTIFIERS
content:
<i>iwgetid</i> is capable of reporting several types of wireless network identifiers:<br><ul><li><b>ESSID</b> (Extended Service Set Identifier): The human-readable name of the Wi-Fi network.</li><li><b>NWID</b> (Network ID): An older, numerical 16-bit identifier, less commonly used today.</li><li><b>BSSID</b> (Basic Service Set Identifier): The MAC address of the Access Point (AP) or base station that the wireless client is currently associated with.</li></ul>


title: WIRELESS EXTENSIONS (WE) API
content:
This command operates based on the Linux <i>Wireless Extensions (WE)</i> API. This is a set of standard kernel interfaces that allow userspace tools to configure and retrieve information from wireless <i>LAN</i> devices.<br>While historically significant, most modern Linux wireless drivers and utilities (like <i>iw</i>) have transitioned to using the more advanced and flexible <i>nl80211</i> kernel interface for wireless communication.


title: HISTORY
content:
<i>iwgetid</i> originated as part of the <b>Wireless-tools for Linux</b> project, developed by Jean Tourrilhes.<br>This project was crucial in providing wireless network configuration and information utilities for Linux systems in the early days of wireless networking.<br>It relies on the kernel's <i>Wireless Extensions</i> API, which was the standard method for interacting with wireless hardware for many years.<br>While still available on many distributions, its usage has declined significantly with the advent of the <i>nl80211</i> subsystem and the `iw` command, which offer more advanced and robust functionality.


title: SYNOPSIS
content:
<b>iwinfo</b> <i>[<device>] [<command> [<arguments>]]</i><br><b>iwinfo</b> <i><device> [<property>]</i>


title: PARAMETERS
content:
<b><i><device></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the wireless interface to query (e.g., wlan0, radio0).<br><br><b><i>info</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays comprehensive information about the specified wireless device, including mode, SSID, channel, frequency, transmit power, signal quality, noise, and encryption details.<br><br><b><i>scan</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates a scan for available wireless networks and lists the found SSIDs along with their properties like signal strength and security type.<br><br><b><i>assoclist</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When the device is operating in Access Point (AP) mode, this command lists all currently associated client devices, often including their MAC address, signal strength, and connection duration.<br><br><b><i>freqlist</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a list of supported frequencies and channels for the specified wireless device.<br><br><b><i>txpowerlist</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a list of supported transmit power levels (in dBm) for the wireless device.<br><br><b><i>event</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors and displays real-time wireless events, such as client association or de-association, useful for debugging and monitoring network changes.<br><br><b><i><property></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows querying a specific property of the wireless device directly (e.g., <i>channel</i>, <i>ssid</i>, <i>signal</i>) to get a single value output.<br><br>


title: DESCRIPTION
content:
The <i>iwinfo</i> command is a lightweight utility designed primarily for embedded Linux systems, such as OpenWrt, to query and display wireless device information and statistics. It serves as a simplified, unified interface to access data that might otherwise require more complex tools like <i>iw</i> (for netlink) or <i>iwconfig</i> (for wireless extensions).<br><br><i>iwinfo</i> provides concise and script-friendly output, making it ideal for automated monitoring, configuration scripts, and diagnostic purposes on resource-constrained devices. It can retrieve details like network mode, SSID, channel, frequency, transmit power, signal quality, noise level, and associated client lists. Its design focuses on ease of use and consistent output for various wireless drivers and hardware.


title: CAVEATS
content:
<i>iwinfo</i> is not a standard utility on all Linux distributions; it is predominantly found on embedded systems like OpenWrt and other custom Linux builds. Users on typical desktop Linux environments usually rely on <i>iw</i> or <i>iwconfig</i>. Its functionality can vary slightly based on the installed version and the specific wireless driver capabilities. Direct configuration of wireless parameters is not supported by <i>iwinfo</i>; it is solely for querying information.


title: SCRIPTING OUTPUT
content:
<i>iwinfo</i>'s output is often designed to be easily parseable by scripts, frequently presenting information in a structured, key-value format or as raw numerical data suitable for automation and integration into system monitoring tools.


title: DRIVER ABSTRACTION
content:
One of <i>iwinfo</i>'s key strengths is its ability to abstract away the underlying wireless driver and kernel interface details, providing a consistent way to query information regardless of whether the device uses cfg80211/nl80211 (Netlink) or the older Wireless Extensions API.


title: HISTORY
content:
<i>iwinfo</i> was developed as part of the OpenWrt project to provide a more consistent and simplified interface for retrieving wireless network information compared to the existing, often disparate, tools like <i>iw</i> (which uses Netlink) and <i>iwconfig</i> (which uses Wireless Extensions). Its inception aimed to address the specific needs of embedded systems, offering a unified API for various wireless drivers and making wireless diagnostics and scripting more straightforward within the OpenWrt ecosystem, abstracting away underlying kernel interface complexities.


title: SYNOPSIS
content:
<b>iwlist</b> <i>interface</i> [<i>command</i>] [<i>options</i>]<br><b>iwlist</b> --help<br><b>iwlist</b> --version


title: PARAMETERS
content:
<b><i>interface</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the wireless network interface (e.g., <b>wlan0</b>, <b>eth1</b>) to query.<br><br><b>scan</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a list of available wireless networks (Access Points) with detailed information like SSID, BSSID, channel, signal quality, and encryption.<br><br><b>frequency / channel</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the frequencies or channels supported and currently in use by the interface.<br><br><b>bitrate / rate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the supported and current bit rates for the wireless connection.<br><br><b>encryption / keys</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the encryption capabilities of the interface and any active encryption keys.<br><br><b>power / txpower</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the transmit power range and the current transmit power setting.<br><br><b>retry</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the retry limits and timings for wireless transmissions.<br><br><b>ap / accesspoints</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the access points currently associated with the interface or visible (similar to <b>scan</b> in some contexts).<br><br><b>event</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays wireless events (e.g., association, deassociation).<br><br><b>auth</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows authentication parameters for the wireless connection.<br><br><b>rts</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the RTS (Request To Send) threshold settings.<br><br><b>frag</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the fragmentation threshold settings.<br><br><b>stats</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows comprehensive wireless statistics including packets transmitted/received, errors, and signal levels.<br><br><b>peers</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the peers associated with the interface, typically in ad-hoc mode.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays usage information and available commands for <b>iwlist</b>.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version of the <i>wireless-tools</i> package that <b>iwlist</b> belongs to.<br><br>


title: DESCRIPTION
content:
The <i>iwlist</i> command is a powerful tool for scanning and displaying detailed information about wireless networks and interfaces on Linux systems. It is part of the <i>wireless-tools</i> package, designed to interact with wireless extensions in the Linux kernel. Unlike <i>iwconfig</i>, which primarily configures wireless interfaces, <i>iwlist</i> focuses on providing read-only data, such as available Wi-Fi networks (SSIDs), signal strengths, channels, encryption types, and various other operational parameters. It's frequently used for troubleshooting wireless connectivity issues, discovering nearby access points, and verifying network settings. Its output is typically human-readable, though parsing it programmatically can be challenging due to its unstructured nature.


title: CAVEATS
content:
<b>Root Privileges:</b> Most <i>iwlist</i> commands, especially <b>scan</b>, require root privileges (or sudo) to execute successfully.<br><b>Output Format:</b> The output is primarily designed for human readability, making it somewhat challenging to parse reliably with scripts due to varying formats and whitespace.<br><b>Deprecation:</b> On modern Linux distributions, <i>iwlist</i> and the <i>wireless-tools</i> suite are largely superseded by the <i>iw</i> command, which uses the newer Netlink-based nl80211 interface for more robust and consistent wireless management. While still functional, <i>iw</i> is generally preferred for new development and scripting.<br><b>Driver Support:</b> Functionality depends on the wireless driver's support for Linux wireless extensions. Newer drivers might offer more comprehensive information via <i>iw</i>.


title: PROGRAMMATIC PARSING
content:
While <i>iwlist</i>'s output is not ideal for scripting due to its unstructured nature, some utilities or manual parsing techniques (e.g., using <b>grep</b>, <b>awk</b>) can extract specific data points. For more robust programmatic interaction, the <i>iw</i> command's JSON output capabilities are often preferred.


title: REAL-TIME MONITORING
content:
Although not designed for continuous real-time monitoring, <b>iwlist scan</b> can be run in a loop (e.g., <b>watch -n 5 'sudo iwlist wlan0 scan'</b>) to periodically refresh and display network conditions or discover new access points.


title: HISTORY
content:
<i>iwlist</i> is a core component of the <i>wireless-tools</i> package, initially developed by Jean Tourrilhes. It emerged as a standard set of command-line utilities for managing wireless interfaces under Linux using the Wireless Extensions API. For many years, it was the primary tool for interacting with Wi-Fi hardware. With the advent of the more powerful and flexible nl80211 kernel interface, the newer <i>iw</i> command has gradually replaced <i>wireless-tools</i> for modern wireless management, though <i>iwlist</i> remains widely available and functional on many systems.


title: SEE ALSO
content:
iw(8): A new nl80211 based wireless configuration utility., iwconfig(8): Configure a wireless network interface (part of <i>wireless-tools</i>)., ifconfig(8): Configure network interfaces (generally deprecated, but still common for basic interface status).


title: SYNOPSIS
content:
<I>iwpriv</I> <I>interface</I><br><I>iwpriv</I> <I>interface</I> <I>private-command</I> [<I>arguments</I>...]<br><I>iwpriv</I> --version<br><I>iwpriv</I> --help


title: PARAMETERS
content:
<b><I>interface</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the wireless network interface (e.g., <I>wlan0</I>, <I>ra0</I>) to query or configure private settings for.<br><br><b><I>private-command</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A specific, driver-defined command or parameter name to interact with. These commands are not universal and vary significantly between wireless drivers.<br><br><b>[<I>arguments</I>...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional arguments or values required by the specified <I>private-command</I>.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information for the <I>iwpriv</I> utility.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and usage instructions for <I>iwpriv</I>.<br><br>


title: DESCRIPTION
content:
The <I>iwpriv</I> command is a specialized utility for configuring and displaying driver-specific parameters and extensions for wireless network interfaces in Linux. While <I>iwconfig</I> manages standard IEEE 802.11 settings like SSID, mode, and frequency, <I>iwpriv</I> provides access to <I>private</I> commands and capabilities exposed by a specific wireless driver. These private commands are highly dependent on the particular hardware and driver being used and are not part of the standard Wireless Extensions API. They are often utilized for advanced features, debugging, or accessing vendor-specific functionalities not covered by the standard wireless tools. It operates by sending specific ioctl calls to the kernel, leveraging the Wireless Extensions framework.


title: CAVEATS
content:
<b>Driver Dependency</b>: The available private commands and their behavior are entirely dependent on the specific wireless driver and hardware. Commands are not standardized across different devices.<br><b>Security Risks</b>: Misuse of <I>iwpriv</I> can potentially expose sensitive information or alter critical driver settings, leading to network instability or security vulnerabilities.<br><b>Deprecation</b>: For modern Linux kernels using the <I>nl80211</I> wireless subsystem, <I>iwpriv</I> has largely been superseded by the more advanced and standardized <I>iw</I> command. Its utility is primarily for older drivers or specific legacy hardware.<br><b>Lack of Documentation</b>: Private commands are often poorly documented or require direct inspection of driver source code to understand their functionality and parameters.


title: LISTING PRIVATE COMMANDS
content:
To see the private commands supported by a specific wireless interface's driver, simply run <I>iwpriv</I> followed by the interface name without any additional arguments. For example: <br><I>iwpriv wlan0</I><br>This will list all recognized private commands, often along with their expected argument count and read/write capabilities.


title: USING PRIVATE COMMANDS
content:
Once you know a private command, you can use it to get or set values. The syntax is <I>iwpriv &lt;interface&gt; &lt;private-command&gt; [arguments...]</I>. The arguments and their interpretation are entirely driver-dependent. For example, a driver might have a command like <I>set_power_level</I>:<br><I>iwpriv wlan0 set_power_level 20</I><br>Or to read a value, it might be:<br><I>iwpriv wlan0 get_statistic</I>


title: HISTORY
content:
<I>iwpriv</I> is part of the original Linux Wireless Extensions project, initiated by Jean Tourrilhes. It was developed alongside <I>iwconfig</I> to provide comprehensive control over wireless network interfaces in Linux. Its purpose was to bridge the gap where standard wireless settings were insufficient, allowing developers and advanced users to access vendor-specific features. With the advent of the <I>nl80211</I> kernel subsystem and the <I>iw</I> command-line utility, which offers a more unified and robust interface for wireless configuration, the reliance on <I>iwpriv</I> has significantly diminished. However, it remains relevant for managing legacy wireless hardware and drivers that do not fully support <I>nl80211</I>.


title: SYNOPSIS
content:
<b>iwspy</b> <I>interface</I> [ <I>command</I> [ <I>arguments</I>... ] ]<br><br>Common commands include:<br><b>iwspy</b> <I>interface</I> <b>stats</b><br><b>iwspy</b> <I>interface</I> <b>qual</b><br><b>iwspy</b> <I>interface</I> <b>scan</b><br><b>iwspy</b> <I>interface</I> <b>ap</b> [ <I>address</I> ]<br><b>iwspy</b> <I>interface</I> <b>freq</b> [ <I>frequency</I> ]<br><b>iwspy</b> <I>interface</I> <b>get_range</b><br><b>iwspy</b> <I>interface</I> <b>set_threshold</b> <I>type value</I>


title: PARAMETERS
content:
<b><I>interface</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the wireless network interface to monitor (e.g., <I>wlan0</I>, <I>wifi0</I>).<br><br><b><b>stats</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed statistics about the wireless interface, including link quality, signal level, noise level, and various discarded packet counts.<br><br><b><b>qual</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reports the current link quality, signal level, and noise level for the specified interface.<br><br><b><b>scan</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates a scan for nearby wireless access points (APs) and displays their signal quality and other relevant information.<br><br><b><b>ap</b> [ <I>address</I> ]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;If an <I>address</I> (MAC address) is provided, displays statistics for that specific Access Point. If no address is given, it lists known APs and their current signal quality.<br><br><b><b>freq</b> [ <I>frequency</I> ]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;If a <I>frequency</I> (in Hz, or as a channel number with 'ch') is provided, displays statistics related to that specific frequency. If no frequency is given, it lists known frequencies and their current signal quality.<br><br><b><b>get_range</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the range of acceptable values for various quality and level metrics that the driver supports.<br><br><b><b>set_threshold</b> <I>type value</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a threshold for a specific metric (<I>type</I>) to a given <I>value</I>. <I>type</I> can be: <I>signal</I>, <I>noise</I>, <I>quality</I>, <I>rts</I>, <I>frag</I>, <I>crypt</I>, <I>retry</I>, <I>misc</I>. This can be used for monitoring or logging purposes.<br><br>


title: DESCRIPTION
content:
<I>iwspy</I> is a command-line utility used to monitor and report statistics from wireless network interfaces. It's part of the older <I>wireless-tools</I> suite, which was designed to interact with the Linux kernel's <I>Wireless Extensions</I> API. The command allows users to inspect various aspects of a wireless connection, including signal quality, noise levels, and discarded packet counts (fragment, crypt, misc). It can also be used to scan for nearby access points or retrieve statistics about specific frequencies or access points.<br><br>While still available on many Linux distributions, <I>iwspy</I> and the <I>wireless-tools</I> package have largely been superseded by the more modern <I>iw</I> command and the <I>nl80211</I> kernel subsystem. However, it remains a useful tool for diagnosing basic wireless connectivity issues, such as poor signal strength, excessive noise, or packet loss, particularly on systems using older wireless drivers or for quick, snapshot-based diagnostics.


title: CAVEATS
content:
<I>iwspy</I> is part of the older <I>wireless-tools</I> package and is largely superseded by the <I>iw</I> command, which works with the more modern <I>nl80211</I> kernel subsystem. It may not function correctly or at all with newer wireless drivers or kernel versions that exclusively rely on <I>nl80211</I>. Running <I>iwspy</I> typically requires root privileges. The interpretation of its output, particularly for signal and noise levels, can sometimes be device-specific or require understanding of dBm values.


title: EXAMPLES
content:
Here are some common usage examples of <I>iwspy</I>:<br><br><b>1. Display current link quality:</b><br><b>iwspy</b> <I>wlan0</I> <b>qual</b><br><br><b>2. Show extended interface statistics:</b><br><b>iwspy</b> <I>wlan0</I> <b>stats</b><br><br><b>3. Scan for nearby access points:</b><br><b>iwspy</b> <I>wlan0</I> <b>scan</b><br><br><b>4. Get range of possible values for metrics:</b><br><b>iwspy</b> <I>wlan0</I> <b>get_range</b><br><br><b>5. Set a threshold for signal quality (e.g., 50 units):</b><br><b>iwspy</b> <I>wlan0</I> <b>set_threshold</b> <I>quality</I> <b>50</b>


title: OUTPUT INTERPRETATION
content:
When using commands like <I>stats</I> or <I>qual</I>, <I>iwspy</I> typically outputs fields such as:<br><br><b>Link Quality:</b> An abstract value indicating the overall quality of the connection, often a percentage or a fraction (e.g., 70/100). Higher is better.<br><br><b>Signal Level:</b> The strength of the received radio signal, usually in dBm (decibel-milliwatts). More negative values indicate weaker signals (e.g., -50 dBm is stronger than -80 dBm).<br><br><b>Noise Level:</b> The amount of background electrical noise detected, also in dBm. More negative values indicate less noise, which is better.<br><br><b>Discarded Packets:</b> Various counters for packets dropped due to fragmentation issues (frag), encryption errors (crypt), retransmissions (retry), or other miscellaneous reasons (misc).<br><br>Understanding these values is crucial for diagnosing wireless performance issues.


title: HISTORY
content:
<I>iwspy</I> emerged as part of the <I>wireless-tools</I> suite, developed by Jean Tourrilhes. This collection of utilities was designed to provide user-space control and information retrieval for wireless devices leveraging the Linux kernel's <I>Wireless Extensions</I> API. It was a foundational tool for wireless management before the advent of the <I>nl80211</I> kernel subsystem, which brought a more unified and robust API for wireless device management. While its development has largely ceased in favor of <I>iw</I>, <I>iwspy</I> remains available on many systems for compatibility with older hardware or for specific diagnostic needs.


title: SYNOPSIS
content:
<B>j</B> [<I>options</I>] [<I>directory_fragment</I>]<br><B>j</B> [<I>options</I>] <B>-s</B> | <B>--stat</B><br><B>j</B> [<I>options</I>] <B>--add</B> <I>directory</I><br><B>j</B> [<I>options</I>] <B>--rm</B> <I>directory</I><br><B>j</B> [<I>options</I>] <B>--purge</B>


title: PARAMETERS
content:
<b><B>-s</B>, <B>--stat</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display statistics and the full list of directories stored in the database, including their weights.<br><br><b><B>-a</B>, <B>--add</B> <I>&#60;directory&#62;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manually add a specified directory to the <B>autojump</B> database, boosting its weight as if it were visited.<br><br><b><B>-r</B>, <B>--rm</B> <I>&#60;directory&#62;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove a specific directory from the <B>autojump</B> database. This prevents future jumps to it.<br><br><b><B>-p</B>, <B>--purge</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clear the entire <B>autojump</B> database, resetting all learned history and weights.<br><br><b><B>-h</B>, <B>--help</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the help message with available options and exit.<br><br><b><B>--version</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the <B>autojump</B> version information and exit.<br><br>


title: DESCRIPTION
content:
<I>The "j" command is not a standard built-in Linux utility; rather, it is most commonly associated with <B>autojump</B>, a popular command-line tool designed for intelligent directory navigation. <B>autojump</B> learns your directory usage patterns, allowing you to jump to frequently visited directories with minimal typing. Instead of typing lengthy <B>cd</B> commands, users can simply type <B>j</B> followed by a partial name of the target directory. The tool maintains a weighted database of visited directories, where weights are determined by factors such as frequency and recency of access. When you invoke <B>j</B> <I>&#60;directory_fragment&#62;</I>, it intelligently searches this database for the best matching directory and then changes your current working directory to that location. This significantly enhances productivity for users who frequently navigate complex file hierarchies. Its primary goal is to minimize keystrokes and mental effort required for directory traversal, making the command line experience much more fluid and efficient.</I>


title: CAVEATS
content:
<I><B>j</B> is not a standard command included with most Linux distributions by default; it is a third-party utility (<B>autojump</B>) that requires separate installation. Its effectiveness depends on having an existing history of visited directories, meaning it won't be immediately useful upon first installation until you've navigated a few times. Furthermore, it integrates with your shell (e.g., Bash, Zsh) and often requires specific configuration in your shell's startup files (like <B>~/.bashrc</B> or <B>~/.zshrc</B>) to function correctly.</I>


title: <I>HOW AUTOJUMP LEARNS</I>
content:
<I>The core of <B>autojump</B>'s intelligence lies in its ability to automatically update a directory database. Each time you use the standard <B>cd</B> command to change directories, <B>autojump</B> intercepts this action and records the visited path. It assigns a "weight" to each directory, which increases with frequency and recency of visits. When you invoke <B>j</B> with a partial name, it queries this weighted database, using a smart algorithm to find the directory with the highest weight that matches your input, ensuring you land in the most relevant location.</I>


title: HISTORY
content:
<I><B>autojump</B> was created by <I>Jeremy Quast</I> and first released around 2009. It emerged from the need for more efficient command-line directory navigation, moving beyond the limitations of traditional <B>cd</B> commands. The project aimed to create a 'fuzzy' directory matcher that learns from user behavior. Since its inception, it has been an open-source project with contributions from a community of users, adapting to support various shells and improving its matching algorithms to offer a seamless and intelligent directory jumping experience.</I>


title: PARAMETERS
content:
<b>-d <i><driver></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the audio driver to use (e.g., <B>alsa</B>, <B>firewire</B>, <B>portaudio</B>, <B>dummy</B>). This is typically the first option after the command name.<br><br><b>-r <i><rate></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the sample rate in Hz (e.g., 44100, 48000, 96000). All JACK clients will operate at this rate.<br><br><b>-p <i><frames></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of frames per period (buffer size). Smaller values yield lower latency but require more CPU power.<br><br><b>-n <i><periods></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of periods/buffers per process cycle. Often set to 2 or 3 for stable operation.<br><br><b>-S</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the JACK server in <B>SUSPENDED</B> mode. It will not start processing audio until a client explicitly activates it.<br><br><b>-P <i><priority></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the real-time priority for the JACK server thread. Higher numbers (e.g., 85) indicate higher priority.<br><br><b>-t <i><milliseconds></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the server timeout in milliseconds. If no clients connect within this time, the server exits.<br><br><b>-X <i><server-name></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a unique name for this JACK server instance. Useful when running multiple JACK servers.<br><br><b>-m</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables memory locking (mlockall), preventing JACK's memory from being swapped out, which is crucial for real-time performance.<br><br>


title: DESCRIPTION
content:
<i>jackd</i> is the daemon for the <B>JACK Audio Connection Kit</B>, a professional sound server API and daemon that provides low-latency audio and MIDI connectivity between applications. It runs in the background, managing audio streams, synchronizing applications, and routing connections between them. Designed primarily for professional audio and music production on Linux, <i>jackd</i> offers features like sample-accurate synchronization, flexible routing capabilities, and support for various audio drivers such as ALSA, FFADO (FireWire), and PortAudio.<br><br>It enables a wide range of audio software, including DAWs, synthesizers, and effects processors, to work together seamlessly with minimal latency, making it an essential component for serious audio work on Linux.


title: CAVEATS
content:
Optimal performance of <i>jackd</i>, particularly very low latency, typically requires a real-time kernel and appropriate user permissions (e.g., being part of the 'audio' group). Without these, you may experience 'xruns' (buffer underruns/overruns) or higher latency.<br><br>Configuration can be complex; understanding the interplay of sample rate, period size, and number of periods is key to stable, low-latency operation. Interoperability with other sound systems like PulseAudio can also require careful configuration to ensure devices are released for JACK's exclusive use.


title: REAL-TIME PERFORMANCE
content:
For critical audio applications, it's highly recommended to run <i>jackd</i> on a Linux system configured with a <B>real-time kernel</B>. Additionally, the user running <i>jackd</i> and its clients should be a member of the 'audio' group, which typically grants permissions for real-time scheduling and memory locking. This setup minimizes latency and prevents audio dropouts (xruns).


title: CONFIGURATION TOOLS
content:
While <i>jackd</i> can be launched from the command line, most users find it much easier to manage and configure using a graphical front-end like <B>QjackCtl</B> (<i>qjackctl(1)</i>). QjackCtl provides an intuitive interface for starting/stopping the server, setting parameters, managing connections between applications, and monitoring performance.


title: HISTORY
content:
The JACK Audio Connection Kit was primarily developed by <B>Paul Davis</B>, with its initial public release around <I>2002</I>. It was created to address the need for a robust, low-latency audio interconnection system for Linux, similar to proprietary solutions on other operating systems. JACK quickly became the de-facto standard for professional audio and music production on the Linux platform, fostering a vibrant ecosystem of audio applications. Its design emphasizes stability, low latency, and flexible routing, which were significant advancements for open-source audio development at the time.


title: PARAMETERS
content:
<b>-d, --output-dir <DIR></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <i>output directory</i> where decompiled files will be saved. If not provided, output goes to the current directory.<br><br><b>-s, --show-bad-code</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables showing of decompiled code even if <i>errors occurred</i> during processing, potentially resulting in incomplete or less accurate output.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the <i>verbosity of output</i>, providing more detailed information about the decompilation progress.<br><br><b>-j, --threads <COUNT></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of <i>threads</i> to use for parallel decompilation, which can significantly speed up the process on multi-core systems.<br><br><b>--no-src</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the <i>decompilation of source code</i>, only extracting resources from the input file.<br><br><b>--no-res</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the <i>extraction of resources</i>, only decompiling source code from the input file.<br><br><b>--deobf</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates the <i>deobfuscation engine</i>, attempting to rename obfuscated class, method, and field names to more meaningful ones.<br><br><b>--log-level <LEVEL></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the <i>minimum log level</i> for messages displayed on the console (e.g., DEBUG, INFO, WARN, ERROR).<br><br><b>--skip-resources <PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows skipping specific resources or resource directories from being extracted, specified as a path pattern.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <i>jadx version</i> information and then exits.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the <i>command-line help message</i> with all available options and their descriptions.<br><br>


title: DESCRIPTION
content:
Jadx (<b>J</b>ava <b>A</b>nd <b>D</b>alvik e<b>X</b>tractoR) is a powerful open-source tool for decompiling Android applications (APKs) and Java bytecode (JAR, DEX, CLASS files) into readable Java source code. It serves as an invaluable utility for reverse engineering, security analysis, and understanding the functionality of compiled applications. Jadx aims to reconstruct the original source code as accurately as possible by performing various optimizations and transformations during the decompilation process, including inlining, renaming obfuscated elements, and reconstructing control flow.<br><br>It supports various obfuscation techniques and provides a rich set of command-line options to fine-tune the decompilation output. Besides its command-line interface, Jadx also offers a graphical user interface (GUI) for more interactive exploration of compiled code and resources.


title: CAVEATS
content:
While jadx is highly effective, <i>highly obfuscated</i> or encrypted applications may still produce hard-to-read or partially incorrect output. Decompilation is an approximation, and the reconstructed code might not be byte-for-byte identical to the original source. Large APKs with many resources can consume significant disk space and processing time during extraction.


title: GUI VERSION
content:
Jadx also provides a graphical user interface, invoked via the <code>jadx-gui</code> command, which offers an interactive environment for browsing classes, methods, and resources. This GUI makes the reverse engineering process more intuitive for many users by providing navigation, search, and syntax highlighting features.


title: CROSS-PLATFORM COMPATIBILITY
content:
Built with Java, jadx is inherently cross-platform and can run seamlessly on Linux, Windows, and macOS. It only requires a Java Runtime Environment (JRE) version 11 or higher to operate, ensuring broad accessibility for users across different operating systems.


title: HISTORY
content:
Jadx was created by Skylot and first released around 2015. It quickly gained popularity as a robust and actively maintained decompiler, particularly for Android applications, filling a crucial gap for a reliable open-source tool that could handle both Java bytecode and Dalvik executables effectively. Its continuous development has added support for newer Java and Android features, improved decompilation accuracy, and enhanced its deobfuscation capabilities, making it a staple in the reverse engineering community.


title: SYNOPSIS
content:
<b><I>jar</I></b> {<b><I>c</I></b>|<b><I>u</I></b>|<b><I>x</I></b>|<b><I>t</I></b>|<b><I>i</I></b>|<b><I>d</I></b>} [<b><I>options</I></b>] [<b><I>jar-file</I></b>] [<b><I>manifest-file</I></b>] [<b><I>entry-point</I></b>] [<b><I>-C dir</I></b>] <I>files...</I>


title: PARAMETERS
content:
<b><b><I>-c</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new JAR file.<br><br><b><b><I>-u</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Updates an existing JAR file by adding new files or replacing existing ones.<br><br><b><b><I>-x</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts files from a JAR file. If no files are specified, all files are extracted.<br><br><b><b><I>-t</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the table of contents for a JAR file without extracting its contents.<br><br><b><b><I>-i</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates an index file for a JAR archive (useful for faster class loading in certain scenarios).<br><br><b><b><I>-d</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Calculates and displays the difference between a JAR file and a directory. (Java 11+)<br><br><b><b><I>-f</I></b> <I>jar-file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the JAR file to be created or manipulated. Required for most operations.<br><br><b><b><I>-v</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates verbose output to standard output or standard error while processing.<br><br><b><b><I>-m</I></b> <I>manifest-file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes manifest information from the specified pre-existing manifest file.<br><br><b><b><I>-0</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stores the files in the JAR file without using ZIP compression (zero compression).<br><br><b><b><I>-C</I></b> <I>dir</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the directory to the specified <I>dir</I> and includes subsequent files from there. Useful for archiving specific directory structures.<br><br><b><b><I>-e</I></b> <I>main-class</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the application entry point for a standalone executable JAR file. This sets the 'Main-Class' attribute in the manifest.<br><br><b><b><I>-M</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not create a manifest file for the JAR archive.<br><br><b><b><I>-J</I></b> <I>option</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes <I>option</I> directly to the Java runtime environment (JVM) that <I>jar</I> is running on.<br><br><b><b><I>--module-version</I></b> <I>version</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When creating a modular JAR, specifies the module's version. (Java 9+)<br><br><b><b><I>--release</I></b> <I>version</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When creating a multi-release JAR, specifies the target release for subsequent files. (Java 9+)<br><br>


title: DESCRIPTION
content:
The <b><I>jar</I></b> command is a utility included with the Java Development Kit (JDK) that allows users to create, view, update, and extract files from Java Archive (JAR) files. <br><br>A JAR file is a package file format typically used to aggregate many Java class files, associated metadata, and resources (text, images, etc.) into a single file for distribution. It is built on the ubiquitous ZIP file format and can optionally include a manifest file that contains metadata about the archive's contents, such as the application's main class for executable JARs, version information, and more.<br><br>JAR files are crucial for Java application deployment, acting as a convenient way to bundle libraries, entire applications, or modules. They streamline distribution, allow for digital signing for security, and facilitate efficient loading of application components.


title: CAVEATS
content:
The <b><I>jar</I></b> command is primarily designed for Java-related packaging and does not support all features of the underlying ZIP format, such as arbitrary file comments or encryption. While it can create executable JARs, they require a Java Runtime Environment (JRE) to be installed on the user's system to run. Large archives can still take significant time to create or extract, and managing manifest files can sometimes be complex for advanced configurations.


title: HISTORY
content:
The <b><I>jar</I></b> utility has been a fundamental part of the Java Development Kit (JDK) since its early versions (JDK 1.1). It was introduced to standardize the packaging and distribution of Java applications, making it easier for developers to deploy their code. Over the years, its core functionality has remained consistent, but it has evolved to support new features of the Java platform, such as modular JARs and multi-release JARs with the advent of Java 9, and the ability to differentiate between JARs and directories (Java 11+).


title: SYNOPSIS
content:
<b>jarsigner</b> [<i>options</i>] <i>jar-file</i> <i>alias</i> <br><b>jarsigner</b> -verify [<i>options</i>] <i>jar-file</i>


title: PARAMETERS
content:
<b>-keystore <url></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the location of the keystore file. If not specified, the default keystore (<i>~/.keystore</i>) is used.<br><br><b>-storepass <password></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the password for the keystore. It is recommended to use a secure method for password entry rather than directly on the command line for production environments.<br><br><b>-keypass <password></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the password for the private key entry associated with the <i>alias</i>. If not provided, the keystore password is used.<br><br><b>-signedjar <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the signed JAR file to be generated. If omitted, the original <i>jar-file</i> is overwritten (not recommended).<br><br><b>-tsa <url></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the URL of a Timestamping Authority (TSA) to include a timestamp in the signature. This is crucial for long-term signature validity.<br><br><b>-verify</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Indicates that the command should verify the signatures on the <i>jar-file</i> rather than signing it.<br><br><b>-verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays additional information during the signing or verification process, such as signed entries and certificate details.<br><br><b>-certs</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When verifying, displays information about the certificates embedded in the signature.<br><br><b>-debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debugging output, providing more detailed information about the execution.<br><br><b>-sigalg <algorithm></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the signature algorithm to be used (e.g., <i>SHA256withRSA</i>). Defaults to an appropriate algorithm based on the key type.<br><br><b>-digestalg <algorithm></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the digest algorithm to be used for computing the hash of the JAR entries (e.g., <i>SHA-256</i>). Defaults to <i>SHA-256</i>.<br><br>


title: DESCRIPTION
content:
<b>jarsigner</b> is a command-line tool provided with the Java Development Kit (JDK) used to digitally sign JAR files and to verify the authenticity and integrity of already signed JAR files. When a JAR file is signed, a digital signature is embedded within the archive, which is typically generated using a private key from a code-signing certificate. This signature allows recipients to verify the origin of the code and to ensure that the file has not been tampered with since it was signed.<br><br>This utility is crucial for deploying Java applets, WebStart applications, and other Java applications that require security policy enforcement. It operates by adding a signature block and a signature file to the JAR's <i>META-INF</i> directory. For verification, <b>jarsigner</b> uses a corresponding public key to decrypt the signature and confirm it matches the JAR's current state and trusted certificate chains. It interacts with keystores to retrieve the necessary signing keys and certificates.


title: CAVEATS
content:
<b>jarsigner</b> heavily relies on a properly configured keystore, which is typically managed using the <b>keytool</b> utility. It is important to note that passing passwords directly on the command line (e.g., via <i>-storepass</i> or <i>-keypass</i>) can pose a security risk as they might be visible in process listings. For long-term validity of signed JARs, using a Timestamping Authority (TSA) via the <i>-tsa</i> or <i>-tsacert</i> options is highly recommended, as it protects against issues with certificate expiration. Finally, <b>jarsigner</b> is a component of the Java Development Kit (JDK), meaning it might not be available in environments where only the Java Runtime Environment (JRE) is installed.


title: <B>SIGNATURE VERIFICATION PROCESS</B>
content:
When verifying a JAR file using <b>jarsigner -verify</b>, the tool performs several critical checks. It first verifies the integrity of the JAR contents by comparing the cryptographic digest stored in the signature against a newly computed digest of the files. Simultaneously, it validates the digital signature itself using the public key associated with the signing certificate. Crucially, it also verifies the entire chain of trust of the signing certificate, ensuring it leads back to a trusted root certificate installed in the system's certificate stores. If any part of the JAR file has been modified since it was signed, or if the signature or certificate chain is invalid, expired, or untrusted, <b>jarsigner</b> will report an error or warning, indicating potential tampering or a breach of trust.


title: HISTORY
content:
<b>jarsigner</b> has been an integral part of the Java Development Kit (JDK) since its early versions, prominently featured from Java 1.2 (released in 1998) onwards. Its introduction marked a significant step in providing a robust mechanism for code signing within the Java ecosystem, enhancing trust and security for deployed Java applications. Over time, its development has focused on integrating support for new cryptographic algorithms, adhering to evolving security standards (such as timestamping and OCSP), and improving performance. It has consistently adapted to incorporate stronger security practices and remains a fundamental utility for ensuring the integrity and authenticity of Java archives.


title: PARAMETERS
content:
<b><b>-d</b> <I>directory</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the root directory where the compiler should place the generated <i>.class</i> files.<br><br><b><b>-cp</b> <I>path</I>, <b>--class-path</b> <I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the search path for user class files and annotation processors. Directory entries or JAR file entries are separated by platform-specific path separators (e.g., <i>:</i> on Linux, <i>;</i> on Windows).<br><br><b><b>-source</b> <I>release</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides source compatibility with the specified Java release. For example, <i>-source 8</i> compiles code compatible with Java 8.<br><br><b><b>-target</b> <I>release</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates class files that are compatible with the specified JVM version. For example, <i>-target 11</i> ensures the bytecode can run on a Java 11 or newer JVM.<br><br><b><b>-encoding</b> <I>encoding</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the character encoding used by the source files, such as <i>UTF-8</i> or <i>ISO-8859-1</i>.<br><br><b><b>-verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs messages about what the compiler is doing, including class loading and source file compilation.<br><br><b><b>-g</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates all debugging information, including local variables, line numbers, and source file information. This is useful for debugging with tools like <i>jdb</i>.<br><br><b><b>-Xlint</b>[:<I>option</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables recommended warnings. Common options include <i>all</i>, <i>unchecked</i>, <i>deprecation</i>, <i>rawtypes</i>.<br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the compiler version string and exits.<br><br><b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints a synopsis of standard options and exits.<br><br>


title: DESCRIPTION
content:
The <i>javac</i> command is the primary tool of the Java Development Kit (JDK) used for compiling Java source code into bytecode. It takes one or more <i>.java</i> source files as input and produces <i>.class</i> files, which contain platform-independent bytecode that can be executed by the Java Virtual Machine (JVM).<br><br><i>javac</i> performs rigorous syntax checking, type checking, and various optimizations during the compilation process. It resolves dependencies between classes, interfaces, and other types, ensuring that all required components are available and correctly referenced. This essential compilation step transforms human-readable Java code into the low-level instructions understood by the JVM, making it a foundational component for developing and deploying any Java application.


title: CAVEATS
content:
<b>javac</b> requires the Java Development Kit (JDK) to be installed, not just the Java Runtime Environment (JRE).<br>Managing large projects directly with <b>javac</b> can be cumbersome; build tools like Maven or Gradle are typically used for dependency management and build automation.<br>Careful attention is required for classpath management (<b>-cp</b>) to ensure all necessary libraries are found during compilation.<br>Mismatch between <b>-source</b> and <b>-target</b> options can lead to unexpected runtime issues if the target JVM is older than the source version.


title: COMPILATION PROCESS OVERVIEW
content:
When you run <i>javac</i>, it goes through several phases:<br>1) <b>Parsing</b>: The source code is broken down into a syntax tree.<br>2) <b>Semantic Analysis</b>: The compiler checks for type compatibility, resolves names, and builds a symbol table.<br>3) <b>Code Generation</b>: The syntax tree is translated into JVM bytecode instructions, which are then written to <i>.class</i> files. Error messages are produced at any stage if issues are found.


title: MODULE PATH (JAVA 9+)
content:
For projects utilizing Java's module system (introduced in Java 9), the <b>-p</b> or <b>--module-path</b> option is used instead of or in addition to <i>-cp</i>. It specifies the search path for application modules. This allows the compiler to resolve module dependencies and ensures proper encapsulation and strong type checking across module boundaries.


title: HISTORY
content:
<i>javac</i> was first introduced by Sun Microsystems (now Oracle) as a core component of the Java Development Kit (JDK) with the initial release of Java 1.0 in 1996. Its development has closely paralleled the evolution of the Java language itself, with new versions of <i>javac</i> being released to support new language features (e.g., generics in Java 5, lambdas in Java 8, modules in Java 9). It has remained a fundamental tool for Java developers, providing the bridge between human-readable source code and executable bytecode for the Java Virtual Machine.


title: SYNOPSIS
content:
<br><b>javadoc</b> <i>[options] [packagenames] [sourcefiles] [@files]</i><br><br><i>packagenames</i>: Specifies a series of package names to be documented. The <b>javadoc</b> tool searches for source files in the directories specified by <b>-sourcepath</b>.<br><i>sourcefiles</i>: Specifies one or more Java source files (e.g., <i>MyClass.java</i>) to be processed. The <b>javadoc</b> tool processes these files regardless of their package.<br><i>@files</i>: Reads command-line arguments (options, package names, source file names) from a file. Each argument can be separated by spaces or newlines.


title: PARAMETERS
content:
<b><b>-d</b> <i><directory></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the destination directory where <b>javadoc</b> saves the generated HTML files.<br><br><b><b>-sourcepath</b> <i><path></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path <b>javadoc</b> uses to find source files for package names.<br><br><b><b>-classpath</b> <i><path></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path <b>javadoc</b> uses to find referenced classes.<br><br><b><b>-doclet</b> <i><class></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative doclet to generate output in a different format (e.g., XML).<br><br><b><b>-tag</b> <i><tagname:locations:header></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows adding a custom tag. <i>locations</i> specifies where the tag is valid (e.g., <b>a</b> for all, <b>t</b> for types, <b>m</b> for methods).<br><br><b><b>-private</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows all classes and members (most permissive).<br><br><b><b>-protected</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows protected and public classes and members (default).<br><br><b><b>-package</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows package, protected, and public classes and members.<br><br><b><b>-public</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows only public classes and members (least permissive).<br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes the <b>@version</b> paragraph in the generated documentation.<br><br><b><b>-author</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes the <b>@author</b> paragraph in the generated documentation.<br><br><b><b>-link</b> <i><url></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates links to existing Javadoc documentation at the specified <i>url</i>.<br><br><b><b>-linksource</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes HTML versions of the source files and creates links to them from the standard HTML documentation.<br><br><b><b>-help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints a summary of the standard options.<br><br><b><b>-verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints messages about the Javadoc tool's status while it's running.<br><br><b><b>-encoding</b> <i><name></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the source file encoding name (e.g., <i>UTF-8</i>).<br><br><b><b>-charset</b> <i><name></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the HTML character set for the generated documentation (e.g., <i>UTF-8</i>).<br><br><b><b>-stylesheetfile</b> <i><path></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to an alternative HTML stylesheet file.<br><br><b><b>-windowtitle</b> <i><text></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the text to be placed in the browser window's title.<br><br><b><b>-doctitle</b> <i><html-text></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the title of the generated documentation, placed near the top of the overview summary page.<br><br><b><b>-header</b> <i><html-text></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies HTML text to be placed at the top of each output file.<br><br><b><b>-footer</b> <i><html-text></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies HTML text to be placed at the bottom of each output file.<br><br><b><b>-bottom</b> <i><html-text></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies HTML text to be placed at the very bottom of each output file, below the navigation bar.<br><br><b><b>-splitindex</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Splits the index into multiple files, one for each letter of the alphabet.<br><br><b><b>-nodeprecated</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes the generation of any deprecated API information.<br><br><b><b>-notree</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes the class/interface hierarchy from the generated documentation.<br><br><b><b>-noindex</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes the index from the generated documentation.<br><br><b><b>-nohelp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes the HELP link from the navigation bar.<br><br><b><b>-nonavbar</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes the navigation bar from the top and bottom of generated pages.<br><br><b><b>-serialwarn</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates warnings for Serializable classes that do not define a <b>serialVersionUID</b> field.<br><br>


title: DESCRIPTION
content:
The <b>javadoc</b> command is a crucial tool in the Java Development Kit (JDK) used to generate HTML-formatted API documentation directly from Java source files. It parses special "Javadoc" comments, which are multi-line comments starting with <b>/**</b> and ending with <b>*/</b>, preceding declarations of classes, interfaces, methods, and fields. These comments often contain structured tags like <b>@param</b>, <b>@return</b>, <b>@throws</b>, and <b>@see</b>, which <b>javadoc</b> interprets to produce well-organized and navigable documentation. The generated documentation typically includes an overview, package summaries, class and interface details, method and field descriptions, and cross-references, providing a comprehensive reference for developers. This process automates the creation of professional API documentation, significantly aiding in code understanding, maintenance, and collaboration across development teams. It transforms plain text comments into a structured, hyperlinked web of information, making it an indispensable part of the Java development workflow.


title: CAVEATS
content:
<b>javadoc</b> is part of the Java Development Kit (JDK) and requires a JDK installation to be present on the system. It heavily relies on the correct syntax and meaningful content of Javadoc comments within the source code; poor commenting leads to poor documentation. For very large projects, generating documentation can be time-consuming and resource-intensive. The quality and completeness of the generated API documentation are directly proportional to the quality and thoroughness of the Javadoc comments in the source code.


title: JAVADOC COMMENTS STRUCTURE
content:
Javadoc comments begin with <b>/**</b> and end with <b>*/</b>. They precede declarations and can include a main description followed by block tags. Common block tags include:<br><b>@param</b> <i>&lt;name&gt; &lt;description&gt;</i>: Describes a method parameter.<br><b>@return</b> <i>&lt;description&gt;</i>: Describes the return value of a method.<br><b>@throws</b> <i>&lt;class-name&gt; &lt;description&gt;</i>: Describes an exception that a method might throw.<br><b>@see</b> <i>&lt;reference&gt;</i>: Adds a 'See Also' link to related content (class, method, URL).<br><b>@author</b> <i>&lt;name&gt;</i>: Specifies the author(s) of the code.<br><b>@version</b> <i>&lt;text&gt;</i>: Specifies the version of the code.<br><b>@since</b> <i>&lt;version&gt;</i>: Indicates when the feature was added.<br>Javadoc comments can also contain inline HTML tags for richer formatting (e.g., <b>&lt;code&gt;</b> for code snippets, <b>&lt;pre&gt;</b> for preformatted text), though the output is restricted to <b>&lt;b&gt;</b>, <b>&lt;i&gt;</b>, <b>&lt;br&gt;</b> for this output format.


title: BASIC USAGE EXAMPLE
content:
To generate documentation for a single Java file <i>MyClass.java</i> in the current directory, outputting to a subdirectory named <i>docs</i>:<br><b>javadoc</b> <b>-d</b> <i>docs</i> <i>MyClass.java</i><br><br>To generate documentation for an entire package <i>com.example.mypackage</i>, assuming source files are in <i>src</i> directory:<br><b>javadoc</b> <b>-d</b> <i>api</i> <b>-sourcepath</b> <i>src</i> <i>com.example.mypackage</i>


title: HISTORY
content:
The <b>javadoc</b> tool was introduced as a core utility with the initial releases of the Java Development Kit (JDK), providing developers with an automated way to produce API documentation. It has evolved significantly with subsequent Java versions, incorporating new features, supporting additional Javadoc tags, and improving output customization options. From its inception, it has been the de facto standard for documenting Java APIs, making the vast libraries of Java readily understandable and accessible to developers worldwide. Its consistent presence and enhancements reflect its critical role in maintaining the discoverability and usability of Java codebases.


title: SYNOPSIS
content:
javap [options] <classes><br><br><i><classes> can be one or more class names (e.g., <b>MyClass</b>) or paths to <b>.class</b> files (e.g., <b>path/to/MyClass.class</b>). When providing class names, javap uses the classpath to locate them.</i>


title: PARAMETERS
content:
<b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disassembles the code attribute of methods, showing bytecode instructions.<br><br><b><b>-v</b> or <b>-verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints stack size, number of local variables, and arguments for methods. Also prints the constant pool.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints internal type signatures.<br><br><b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints line number and local variable tables.<br><br><b><b>-p</b> or <b>-private</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows all classes and members (public, protected, package, private).<br><br><b><b>-package</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows package/protected/public classes and members (default behavior).<br><br><b><b>-protected</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows protected/public classes and members.<br><br><b><b>-public</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows only public classes and members.<br><br><b><b>-classpath <path></b> or <b>-cp <path></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to search for class files.<br><br><b><b>-bootclasspath <path></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to search for bootstrap class files.<br><br><b><b>-sysinfo</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows system information (path to javap, current time, user, system properties).<br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints product version and exits.<br><br><b><b>-help</b> or <b>-?</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints a help message and exits.<br><br>


title: DESCRIPTION
content:
javap is a command-line utility included in the Java Development Kit (JDK) that disassembles compiled Java class files. It prints information about the fields, methods, and constructors present in a <b>.class</b> file, including the bytecode instructions for methods. This tool is invaluable for developers who need to understand the low-level structure of compiled Java code, debug issues related to class loading or bytecode generation, or analyze the performance characteristics of compiled methods. It can display various levels of detail, from a simple signature view to a verbose output, making it a powerful introspection tool for Java Virtual Machine (JVM) bytecode.


title: CAVEATS
content:
javap is primarily for analyzing compiled <b>.class</b> files and does not show the original Java source code. Its output, especially the bytecode, requires knowledge of JVM instructions to interpret fully. It's a low-level tool best used for debugging or deep understanding of Java compilation rather than general code review.


title: USAGE EXAMPLES
content:
<ul><li>To view the public members of <b>MyClass.class</b>:<br><i>javap MyClass</i></li><li>To view all members and disassemble methods with bytecode:<br><i>javap -private -c MyClass</i></li><li>To view constant pool and detailed information for a class not in the current directory:<br><i>javap -v -classpath /path/to/classes com.example.MyClass</i></li></ul>


title: PURPOSE
content:
javap is crucial for understanding compiler optimizations, debugging complex class loading issues, verifying bytecode generation for tools like AspectJ or code manipulators, and learning about the internals of the JVM.


title: HISTORY
content:
javap has been an integral part of the Java Development Kit (JDK) since its early versions. It was designed to provide developers with a means to inspect the bytecodes generated by the <b>javac</b> compiler, thereby offering insights into how Java source code is translated into instructions executable by the Java Virtual Machine (JVM). Its functionality has remained largely consistent over the years, with minor enhancements and bug fixes coinciding with new JDK releases. It remains a foundational tool for JVM bytecode analysis.


title: SYNOPSIS
content:
jbang [OPTIONS] [run] <script_path_or_url> [SCRIPT_ARGS...]<br>jbang <command> [OPTIONS] [arguments...]<br><br><i>Example:</i><br><code>jbang myscript.java Hello World</code><br><code>jbang init --template=cli mycli.java</code><br><code>jbang app --native mycli.java</code>


title: PARAMETERS
content:
<b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help information for JBang or a specific command.<br><br><b>--version, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display JBang version information.<br><br><b>--verbose, -V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more details about execution.<br><br><b>--debug, -d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debug output, useful for troubleshooting.<br><br><b>--quiet, -q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress non-essential output.<br><br><b>--force, -f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force an operation, overwriting existing files or ignoring warnings.<br><br><b>--fresh</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clear cached dependencies and rebuild.<br><br><b>--deps <gav></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(<i>run command</i>) Add additional dependencies directly via command line (e.g., <code>group:artifact:version</code>).<br><br><b>--cp <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(<i>run command</i>) Add additional paths to the classpath.<br><br><b>--main <class></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(<i>run command</i>) Specify the main class to execute.<br><br><b>--java <version></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(<i>run command</i>) Specify the Java version to use for execution.<br><br><b>--native</b><br>&nbsp;&nbsp;&nbsp;&nbsp;(<i>app/build command</i>) Build a native executable using GraalVM.<br><br><b>--template=<name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(<i>init command</i>) Specify a template to use for new scripts.<br><br><b>--alias=<name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(<i>alias command</i>) Specify the name for an alias.<br><br><b>--shell</b><br>&nbsp;&nbsp;&nbsp;&nbsp;(<i>run command</i>) Open a shell with the script's dependencies on the classpath.<br><br>


title: DESCRIPTION
content:
JBang is a command-line tool designed to make it easy to run Java, Groovy, and Kotlin code directly from source files, without needing a full build system like Maven or Gradle for simple tasks. It significantly simplifies the Java development experience for scripting, prototyping, and creating small utilities. JBang automatically handles compilation, resolves external dependencies (from Maven Central, local files, or URLs) declared via simple comments in the script, and manages the classpath. It supports running local files, remote URLs, and even pre-defined aliases. Beyond just running scripts, JBang offers commands to initialize new scripts, edit them in an IDE, build distributable JARs, or even compile them into native executables using GraalVM for fast startup and smaller footprint. Its goal is to bring the convenience of dynamic language scripting to the robust and performant Java ecosystem.


title: CAVEATS
content:
<br>-   <b>JDK Requirement:</b> JBang requires a Java Development Kit (JDK) to be installed. While it can often manage and download JDKs, a pre-installed JDK is recommended.<br>-   <b>Initial Performance:</b> The first run of a script might be slower due to compilation, dependency resolution, and caching. Subsequent runs are typically much faster.<br>-   <b>Native Image Building:</b> Building native executables with GraalVM (<code>--native</code> option) requires GraalVM to be configured and can be resource-intensive in terms of memory and time.<br>-   <b>Security Considerations:</b> When running scripts from untrusted URLs, be aware of potential security risks. JBang provides a <code>trust</code> command to manage trusted sources.


title: SHEBANG SUPPORT
content:
JBang scripts can be made directly executable on Unix-like systems by adding a shebang line (e.g., <code>#!/usr/bin/env jbang</code>) at the top of the script file. This allows scripts to be run directly like <code>myscript.java</code> after making them executable (<code>chmod +x myscript.java</code>).


title: DEPENDENCY MANAGEMENT
content:
JBang simplifies dependency management through special <code>//DEPS</code> comments directly within the source file (e.g., <code>//DEPS com.google.guava:guava:31.1-jre</code>). It automatically downloads and caches these dependencies from Maven Central or other configured repositories.


title: ALIASES
content:
JBang supports creating custom aliases for frequently used scripts or complex command combinations. These aliases can be defined globally and allow users to run scripts with a short, memorable name (e.g., <code>jbang alias add hello github.com/foo/bar/hello.java</code> then <code>jbang hello</code>).


title: IDE INTEGRATION
content:
JBang includes an <code>edit</code> command (<code>jbang edit <script></code>) which can generate a temporary project structure (e.g., Maven or Gradle) and open the script in a compatible IDE, providing full IDE features like code completion and debugging, then cleaning up the temporary project upon exit.


title: HISTORY
content:
JBang was created by Max Rydahl Andersen, a well-known figure in the Java ecosystem. It emerged around late 2019/early 2020 with the aim to simplify the execution of Java code, addressing the perceived complexity of setting up traditional Java projects for simple scripts or command-line tools. Inspired by the ease of use of scripting languages, JBang quickly gained traction within the Java community as a powerful tool for rapid prototyping, developing small utilities, and educational purposes, making Java more accessible for "scripting" use cases. Its continuous development focuses on improving user experience, performance, and integration with the wider Java toolchain.


title: SYNOPSIS
content:
<b>command | jc [options] --&lt;parser_name&gt;</b><br><b>jc [options] --&lt;parser_name&gt; &lt;file&gt;</b><br><b>jc --help</b><br><b>jc --version</b>


title: PARAMETERS
content:
<b><b>--&lt;parser_name&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects the specific parser to use for the input. For example, <i>--ls</i> parses <i>ls</i> output, <i>--ps</i> parses <i>ps</i> output. A comprehensive list of available parsers can be found using the <i>jc-docs</i> command or online documentation.<br><br><b><b>-p</b>, <b>--pretty</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pretty-prints the JSON output with indentation and line breaks for better readability.<br><br><b><b>--yaml</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the parsed data in YAML format instead of JSON.<br><br><b><b>--pickle</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the parsed data in Python pickle format. Useful for direct consumption in Python scripts.<br><br><b><b>-r</b>, <b>--raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the raw dictionary from the parser before any post-processing. Useful for debugging or when you need the data as close to the initial parsing as possible.<br><br><b><b>--mono</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables color output from <i>jc</i>, if any. (Synonymous with <i>--disable-color</i>).<br><br><b><b>--cp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Copies the original command output into the <i>_raw</i> field of the resulting JSON object. Useful for retaining the source text alongside the parsed data.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <i>jc</i> version information and exits.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits, showing available options and basic usage.<br><br>


title: DESCRIPTION
content:
<i>jc</i> (JSON Convert) is a powerful command-line tool that transforms the unstructured output of many common Linux commands into structured JSON (or YAML, or Python pickle) format. It acts as a wrapper or a filter, taking the output of a command via standard input (or directly from a file) and processing it through an appropriate parser before emitting the structured data to standard output.<br><br>This utility significantly simplifies scripting and automation tasks, allowing developers and system administrators to consume CLI output programmatically without resorting to complex regex parsing or custom scripts. Instead of parsing human-readable text, users can work with predictable JSON objects, making data extraction and manipulation much more robust and efficient. <i>jc</i> supports a vast and growing number of parsers for commands like <i>ls</i>, <i>ps</i>, <i>df</i>, <i>ifconfig</i>, <i>netstat</i>, <i>mount</i>, <i>stat</i>, and many more, making it an invaluable tool in modern DevOps and scripting environments.


title: CAVEATS
content:
<i>jc</i> relies on specific output formats of the commands it parses. Any significant changes to a command's output format by its maintainers could potentially break the corresponding <i>jc</i> parser until an update is released. It requires Python to run. While highly efficient, parsing very large command outputs can introduce a noticeable overhead.


title: AVAILABLE PARSERS
content:
<i>jc</i> includes a vast and continuously growing collection of parsers, each specifically designed for a particular command's output (e.g., <i>--ls</i> for <i>ls</i>, <i>--ps</i> for <i>ps</i>, <i>--ip-address</i> for <i>ip address</i>). To view the complete and up-to-date list of supported parsers and their documentation, use the dedicated <b>jc-docs</b> command or refer to the official <i>jc</i> project documentation online.


title: PIPING INPUT
content:
The most common and effective way to use <i>jc</i> is by piping the standard output of another command into <i>jc</i>'s standard input. This allows <i>jc</i> to act as a filter, converting the text stream into a structured JSON stream. For example: <b>ls -l | jc --ls</b>.


title: FILE INPUT
content:
While primarily used with pipes, <i>jc</i> can also parse the content of a file directly. This is useful if you have saved command output to a file and wish to parse it later. For example: <b>jc --ls my_ls_output.txt</b>.


title: HISTORY
content:
<i>jc</i> was created by Kelly Brazil to address the widespread need for structured data from standard Linux command-line tools. Its development was driven by the increasing demand for automation, API integration, and programmatic consumption of system information in modern IT environments. Since its inception, <i>jc</i> has rapidly gained traction within the DevOps, system administration, and scripting communities for its ease of use and significant reduction in the complexity of parsing CLI output.


title: SYNOPSIS
content:
<pre>jc [OPTIONS] &lt;COMMAND&gt; [ARGS...]</pre><br><pre>jc [OPTIONS] --&lt;PARSER_NAME&gt; [INPUT_DATA]</pre><br><pre>cat &lt;FILE&gt; | jc [OPTIONS] --&lt;PARSER_NAME&gt;</pre><br><pre>&lt;COMMAND&gt; | jc [OPTIONS] --&lt;PARSER_NAME&gt;</pre><br>Examples:<br><pre>jc ls -l</pre><br><pre>ls -l | jc --ls</pre><br><pre>jc --help</pre><br><pre>jc -p df -h</pre>


title: PARAMETERS
content:
<b>--pretty, -p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pretty-prints the JSON output, making it more human-readable.<br><br><b>--raw, -r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the raw, unformatted JSON (default).<br><br><b>--meta</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes metadata about the parsing process (e.g., parser version, timestamp) in the output.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug logging, useful for troubleshooting.<br><br><b>--quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses error messages from <b><I>jc</I></b> itself (errors from the executed command are still shown).<br><br><b>--mono</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables color output.<br><br><b>--force-platform <platform></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <b><I>jc</I></b> to use a specific platform's parser (e.g., `linux`, `osx`).<br><br><b>--parser-id <parser_id></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular parser by its ID if there's ambiguity or to override auto-detection.<br><br><b>--check</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verifies the parser's schema against its output for validation.<br><br><b>--list-parsers</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available parsers and their descriptions.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for <b><I>jc</I></b> or a specific parser.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the <b><I>jc</I></b> version.<br><br><b>--<PARSER_NAME></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly specifies the parser to use (e.g., `--ls`, `--ps`, `--df`). This is used when piping input or when <b><I>jc</I></b> is not executing the command itself.<br><br>


title: DESCRIPTION
content:
The <b><I>jc</I></b> command (not <i>jc.json</i>, which refers to its JSON output) is a powerful command-line tool designed to convert the unstructured output of many common Linux and macOS commands into a structured, easily parseable JSON format. This enables scripting and automation by allowing other tools, like <b><I>jq</I></b>, to process command output reliably without complex regular expressions or text parsing. <br><br>Instead of parsing lines of text, users can work with well-defined JSON objects and arrays, making data extraction and manipulation significantly simpler and more robust. <b><I>jc</I></b> acts as a universal parser, supporting a wide array of commands from `ls` and `ps` to `ifconfig` and `df`. It can be used in two primary ways: piping the output of a command into <b><I>jc</I></b> (e.g., `ls | jc --ls`) or having <b><I>jc</I></b> execute the command directly (e.g., `jc ls`). This capability is invaluable for DevOps, system administration, and data analysis tasks where precise data access is crucial.


title: CAVEATS
content:
<b><I>jc</I></b> is a third-party utility and is not typically pre-installed on Linux systems. It needs to be installed separately (e.g., via `pip`). <br><br>While highly robust, its parsers rely on consistent command output formats. If a command's output format changes significantly in a new version, the corresponding <b><I>jc</I></b> parser might need an update. <br><br>Processing very large command outputs through <b><I>jc</I></b> can introduce a slight performance overhead due to the parsing process. <br><br>The `.json` suffix in "jc.json" is misleading; <b><I>jc</I></b> is the command, and it <i>produces</i> JSON output.


title: HOW IT WORKS
content:
<b><I>jc</I></b> works by leveraging a collection of built-in parsers, each designed to understand the specific text output of a particular command. When you run `jc <COMMAND>`, it executes the command, captures its standard output, and then pipes that output to the appropriate internal parser, which converts the text into a JSON object or array. <br><br>If you pipe data into <b><I>jc</I></b> (e.g., `cat /etc/os-release | jc --os-release`), you must explicitly tell <b><I>jc</I></b> which parser to use with the `--<PARSER_NAME>` option.


title: EXTENSIBILITY
content:
The architecture of <b><I>jc</I></b> is designed to be extensible. Users can contribute new parsers for commands not yet supported, expanding its utility. This makes it a growing ecosystem of structured command output.


title: SCHEMA AWARENESS
content:
Many of <b><I>jc</I></b>'s parsers are schema-aware, meaning they often output predictable JSON structures. This allows tools like <b><I>jq</I></b> to query the data reliably without needing to inspect the structure each time.


title: HISTORY
content:
<b><I>jc</I></b> was created by Kelly Fox and initially released in 2020. The primary motivation was to address the perennial problem of parsing unstructured command-line output for scripting and automation. Before <b><I>jc</I></b>, developers and system administrators often resorted to complex and brittle regular expressions, `awk`, or `sed` scripts to extract specific data from text output. This made scripts fragile to minor output format changes.<br><br><b><I>jc</I></b> provides a consistent, robust, and programmer-friendly way to get structured data, thereby accelerating automation efforts and reducing errors by standardizing output into JSON. Its development is community-driven, with contributions for new parsers and improvements continually being added.


title: SYNOPSIS
content:
<b>jcal</b> [<i>OPTIONS</i>] [<i>MONTH</i> [<i>YEAR</i>]]<br><b>jcal</b> -j <i>GREGORIAN_DATE</i><br><b>jcal</b> -g <i>JULIAN_DATE</i>


title: PARAMETERS
content:
<b>-j <GREGORIAN_DATE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Converts a Gregorian date (e.g., 'YYYY-MM-DD' or 'MM/DD/YYYY') to its corresponding Julian day number. The output is a single integer.<br><br><b>-g <JULIAN_DATE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Converts a Julian day number back to its Gregorian date equivalent. The output typically includes the year, month, and day.<br><br><b>-J</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Julian day number for each day within the generated monthly or yearly calendar view, alongside the conventional Gregorian day number.<br><br><b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the Astronomical Julian Date (JD) for the current or specified date. This is a highly precise, continuous count of days and fractions of a day from a specific astronomical epoch.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints only the current Julian day number for today's date.<br><br><b>[MONTH [YEAR]]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the month (1-12) and year (e.g., 2023) for which to display the calendar. If omitted, <i>jcal</i> defaults to the current month and year, similar to <i>cal</i>.<br><br><b>-d <DATE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular date for operations like conversion or display. The format for DATE can vary, but commonly includes 'YYYY-MM-DD'.<br><br>


title: DESCRIPTION
content:
<i>jcal</i> is a specialized command-line utility used to display calendars, primarily focusing on Julian dates. Unlike the standard <i>cal</i> command which typically displays Gregorian calendars, <i>jcal</i> can show the Julian day number for a given date, convert between Gregorian and Julian dates, or display a calendar with Julian day numbers alongside conventional dates.<br><br>It's particularly useful for astronomers, historians, or anyone working with non-Gregorian date systems or requiring precise day numbering from a historical or scientific perspective. Some implementations can also display astronomical Julian dates, which are a continuous count of days and fractions of a day from a specific epoch (usually January 1, 4713 BC in the Julian calendar).


title: CAVEATS
content:
<i>jcal</i> is not part of standard GNU Coreutils and may not be installed by default on all Linux distributions. Its features and exact options can vary significantly between different implementations (e.g., versions from <i>bsd-calendar</i>, <i>astronomy</i> packages, or custom scripts). Users might need to install an astronomy or ephemeris package to obtain it.


title: HISTORY
content:
The concept of Julian dates predates modern computing, being used extensively in astronomy and history to provide a continuous count of days, simplifying calculations of elapsed time between widely separated events. The <i>jcal</i> utility provides a convenient command-line interface to these calculations, making it accessible for quick lookups and conversions. Its development is often tied to specialized astronomical software suites or utilities, reflecting its niche but important role in handling various date systems beyond the standard Gregorian calendar, particularly for scientific and historical purposes.


title: SYNOPSIS
content:
<i>No standard synopsis exists for 'jco'</i> <br><br> As 'jco' is not a standard Linux command, a universal synopsis cannot be provided. If it exists on your system, its syntax would be specific to its implementation. Generally, a custom script might be invoked as: <br><br> <i>jco [options] [arguments]</i>


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;No standard parameters exist for 'jco' as it is not a recognized Linux command. Any parameters would be custom-defined by its creator.<br><br>


title: DESCRIPTION
content:
The `jco` command is not a recognized or standard utility within most common Linux distributions. Unlike commands such as `ls`, `grep`, or `apt`, `jco` does not have a predefined function, dedicated man page, or general system-wide availability. Its appearance on a system likely indicates one of several possibilities: <br><br> 1. <i>Custom Script or Alias:</i> A user or administrator has created a custom shell script or alias named `jco` to perform a specific task unique to that environment. <br> 2. <i>Application-Specific Executable:</i> It might be an executable or utility bundled with a particular application (e.g., related to SAP Java Connector, where `jco` refers to the library, not a command-line tool directly). <br> 3. <i>Typographical Error:</i> It could be a misspelling of another common command (e.g., `jconsole`, `jq`, `jps`). <br><br> Therefore, its functionality, syntax, and parameters are entirely dependent on how it has been implemented on a specific system, making a general analysis impossible.


title: CAVEATS
content:
Since 'jco' is not a standard command, attempting to execute it on a system where it is not defined will result in a 'command not found' error. Its behavior, if it exists, can vary widely and might pose security risks if it's an unknown or untrusted script. Always verify the source and purpose of non-standard executables before running them.


title: IDENTIFYING 'JCO' ON YOUR SYSTEM
content:
If you encounter 'jco' on your system, you can try to locate its source and understand its nature:<br> - <i><code>which jco</code></i>: Shows the path to the executable if it's in your PATH.<br> - <i><code>type jco</code></i>: Indicates if it's an alias, function, or executable.<br> - <i><code>file $(which jco)</code></i>: Attempts to determine the file type (e.g., shell script, ELF executable).<br> - <i><code>cat $(which jco)</code></i>: If it's a script, this might display its content (use with caution for unknown executables, and avoid for binary files).


title: HISTORY
content:
There is no documented history of 'jco' as a standard or widely adopted Linux command because it does not exist in common distributions. Its 'history' would be confined to individual system implementations or specific application contexts (e.g., the evolution of SAP JCo libraries, which are not command-line tools themselves).


title: SYNOPSIS
content:
<b>jdeps</b> [<i>options</i>] <i>&lt;path_to_classes_or_jars&gt;</i><br><b>jdeps</b> [<i>options</i>] [<i>&lt;classes|jars|directories&gt;</i>]


title: PARAMETERS
content:
<b>--module-path <i>&lt;path&gt;</i> or -p <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the module path for resolving modules.<br><br><b>--summary or -s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints only the summary of dependencies.<br><br><b>--verbose or -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints all class-level dependencies, including platform dependencies.<br><br><b>--recursive or -r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recursively traverses dependencies.<br><br><b>--apionly</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows only dependencies on API classes.<br><br><b>--check <i>&lt;module-name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks dependencies of a specific module.<br><br><b>--multi-release <i>&lt;version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the version for analyzing multi-release JARs.<br><br><b>--list-deps</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists class-level dependencies.<br><br><b>--ignore-missing-deps</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continues processing even if some dependencies are missing.<br><br><b>--module <i>&lt;module-name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a module to analyze its dependencies.<br><br><b>--system <i>&lt;jdk|all&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies which system modules to include.<br><br><b>--dot-output <i>&lt;dir&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a DOT file for dependencies in the specified directory, visualizable with tools like Graphviz.<br><br>


title: DESCRIPTION
content:
<b>jdeps</b> is a powerful command-line utility provided with the Java Development Kit (JDK) designed to analyze Java class file dependencies. Its primary purpose is to help developers understand the static dependencies of their Java applications and libraries. This includes identifying dependencies on specific packages, classes, and crucially, on internal JDK APIs (like <i>sun.*</i> packages) that are not part of the stable Java SE specification and may be subject to removal or change in future Java versions. <b>jdeps</b> is instrumental in migrating applications to newer Java versions, especially when adopting the Java Platform Module System (JPMS) introduced in Java 9. It can analyze <i>.class</i> files, <i>JAR</i> files, or directories containing compiled Java code, providing insights into which Java SE modules an application explicitly or implicitly requires.


title: CAVEATS
content:
<b>jdeps</b> operates on compiled bytecode; it does not analyze Java source files directly. For very large applications, the default output can be extremely verbose, requiring careful use of filtering options like <b>--filter</b>, <b>--include</b>, or <b>--exclude</b>. Its accuracy relies on the complete and correct specification of the class path or module path where dependent classes and JARs reside. It requires a Java Development Kit (JDK) environment to execute, as it's not typically found in a Java Runtime Environment (JRE) distribution.


title: INTERNAL API IDENTIFICATION
content:
One of the most critical uses of <b>jdeps</b> is to identify dependencies on internal, non-standard APIs (e.g., those in <i>sun.*</i> or <i>com.sun.*</i> packages). Using such APIs can lead to compatibility issues across different JDK versions, as they are not guaranteed to be stable or even present.


title: JPMS MIGRATION AID
content:
<b>jdeps</b> is a key tool for migrating existing applications to the Java Platform Module System. It can help determine the required modules for a given set of JARs, identify split packages, and highlight cyclic dependencies, all of which are crucial steps in modularizing a legacy application.


title: DOT GRAPH GENERATION
content:
The <b>--dot-output</b> <i>&lt;dir&gt;</i> option allows <b>jdeps</b> to generate a <i>DOT</i> file, which can then be visualized using tools like <i>Graphviz</i>. This provides a graphical representation of the dependencies, making complex relationships easier to understand.


title: HISTORY
content:
<b>jdeps</b> was first introduced as a developer preview tool in <i>JDK 8</i>, emerging from <i>Project Jigsaw's</i> efforts to modularize the Java platform. Its capabilities were significantly expanded and solidified with the official release of the <i>Java Platform Module System (JPMS)</i> in <i>JDK 9</i>. Since then, it has become an indispensable utility for analyzing module dependencies, identifying internal API usage, and preparing applications for modular deployment, reflecting the ongoing evolution towards a more modular Java ecosystem.


title: PARAMETERS
content:
<b><i>(no arguments)</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches the JDownloader graphical user interface (GUI). This is the default and most common usage for interactive desktop environments.<br><br><b><b>--headless</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts JDownloader in a non-graphical (headless) mode. This is ideal for server environments or systems without a display, where control is typically managed remotely via My JDownloader or local CLI commands.<br><br><b><b>--cli</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates JDownloader's built-in command-line interface. When used, JDownloader will either present an interactive prompt for further commands or execute subsequent arguments as direct commands. This mode allows for scripting and automation.<br><br><b><b>--add-link</b> <i>&lt;url&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a specified URL (or a list of URLs) to JDownloader's download queue. This option is typically used in conjunction with <b>--cli</b> or when JDownloader is running in headless mode. Example: <b>jdownloader --cli --add-link https://example.com/file.zip</b>.<br><br><b><b>--start</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs JDownloader to begin processing its download queue and start all pending downloads. Often used with <b>--cli</b> or within automation scripts.<br><br><b><b>--stop</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pauses or stops all active downloads in JDownloader. This command is useful for temporarily halting operations, especially in automated or headless setups.<br><br><b><b>--exit</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shuts down the running JDownloader instance gracefully. This is typically used in scripts or when managing JDownloader in a headless environment.<br><br><b><b>--update</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates an update check and installation process for JDownloader's core components and plugins. While often handled automatically, this command can force an update.<br><br>


title: DESCRIPTION
content:
JDownloader is a free, open-source download manager written in Java, designed to simplify and automate the process of downloading files from the internet. It excels particularly with 'one-click hosters' and services that often require CAPTCHA solving or waiting times.<br><br>Key features include automatic CAPTCHA recognition, pausing and resuming downloads, managing multiple parallel downloads, bandwidth limitations, and automatic file extraction (e.g., RAR, ZIP). It's highly extensible through numerous plugins, supporting thousands of websites and services. JDownloader also integrates with browser extensions for easier link grabbing.<br><br>While primarily a graphical user interface (GUI) application, JDownloader offers various command-line options for launching, controlling, and interacting with it, making it suitable for server environments or automation scripts via its headless and CLI modes.


title: CAVEATS
content:
JDownloader requires a Java Runtime Environment (JRE) to be installed on the system. Its resource consumption can be significant, especially with many active downloads or complex link parsing. The exact command-line options and their behavior can sometimes vary slightly depending on the specific JDownloader installation method (e.g., official installer vs. community packages) and the version of the wrapper script.


title: MY JDOWNLOADER
content:
JDownloader offers a cloud-based service called My JDownloader, which allows users to remotely control their JDownloader instance from any web browser or mobile application. This enables managing downloads, adding links, and checking status from anywhere, complementing the headless and CLI modes for server installations.


title: EXTENSIBILITY VIA PLUGINS
content:
A core strength of JDownloader is its highly modular and extensible architecture. It supports thousands of plugins that add support for new hosters, decryption methods, automatic extraction, and various other features, allowing it to adapt to ever-changing internet download landscapes. Users can often find plugins for specific needs or develop their own.


title: HISTORY
content:
JDownloader was first released around 2008 by Appwork GmbH, quickly gaining popularity as an open-source solution for managing downloads, particularly from 'one-click hosters' that were prevalent at the time. Its comprehensive plugin system and ability to bypass various download barriers (like CAPTCHAs and wait times) made it a go-to tool. JDownloader 2 (JD2) represents a complete rewrite, introducing a more modern architecture and improved performance, continuing its development as a leading download manager.


title: PARAMETERS
content:
<b>-r, --recurse</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Recurse</i> into subdirectories to find duplicates.<br><br><b>-s, --summarize</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Summarize</i> duplicate file usage and statistics.<br><br><b>-d, --delete</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Delete</i> duplicate files. Defaults to interactive mode unless <b>-N</b> is used.<br><br><b>-L, --hardlink</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Hardlink</i> all duplicate files together, conserving disk space.<br><br><b>-m, --makelinks</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Replace</i> duplicate files with symlinks to the first occurrence.<br><br><b>-n, --noaction</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Do</i> not perform any actions; just print matches as if no other action option was specified.<br><br><b>-o, --omitempty</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Omit</i> zero-length files from consideration when searching for duplicates.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Verbose</i> output; print more information about the scanning and actions.<br><br><b>-z, --zeromatch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Match</i> zero-length files as duplicates (overrides <b>-o</b>).<br><br><b>-x, --exclude <i>DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Exclude</i> a specific directory from scanning. Can be used multiple times.<br><br><b>-N, --noprompt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Do</i> not prompt when deleting files; delete immediately without confirmation.<br><br><b>-I, --isolate-filesystem</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Do</i> not cross file system boundaries when recursing into directories.<br><br><b>-S, --size-only</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Match</i> files by size only, skipping the hash comparison. Less accurate, but faster.<br><br><b>-H, --nohardlinks</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Do</i> not consider files with more than one hard link as duplicates. Useful for finding truly unique files.<br><br><b>-j, --hash-threads <i>NUM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Set</i> the number of concurrent hashing threads for faster processing on multi-core systems.<br><br><b>-E, --symlinks</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Follow</i> symlinks and treat the files they point to as regular files.<br><br><b>-y, --print-json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Output</i> results in JSON format for programmatic parsing.<br><br>


title: DESCRIPTION
content:
jdupes is a powerful command-line utility designed to find and perform various actions on duplicate files within specified directories or paths. It is a highly optimized and robust rewrite of fdupes, focusing on performance and reliability, especially with large datasets. jdupes identifies duplicates by comparing file sizes, then performing a partial hash check, and finally a full file hash comparison if initial checks suggest a match. It can be used to simply list duplicates, delete them (interactively or automatically), create hard links or symlinks to conserve disk space, or summarize findings. Its efficient algorithm and C implementation make it suitable for managing vast collections of files, offering a flexible solution for disk space management and data organization.


title: CAVEATS
content:
jdupes deletion actions are permanent; always use <b>--noaction</b> or interactive mode first to verify.<br>By default, jdupes will not cross mount points, which can be overridden with <b>-I</b>.<br>Care must be taken when using options like <b>--hardlink</b> or <b>--makelinks</b> across different file systems, as these operations typically require files to reside on the same file system.<br>jdupes requires read access to all files and directories it scans.


title: ALGORITHM DETAILS
content:
jdupes finds duplicates using a multi-stage process:<br>1. It groups files by size.<br>2. It performs a partial 1-kilobyte hash on files of identical size.<br>3. For files that match the partial hash, it calculates a full file hash (MD5 by default, configurable during compile time) to confirm true duplicates. This approach minimizes disk I/O and CPU usage by avoiding full hash calculations on non-matching files.


title: EXIT STATUS
content:
jdupes typically exits with a status of <b>0</b> on success.<br>A non-zero exit status indicates an error or an invalid command-line invocation.


title: HISTORY
content:
jdupes began as a modernized and performance-focused fork of the popular <b>fdupes</b> utility. Written in C, its primary goal was to address performance bottlenecks and add new features like multithreading for hashing, making it more efficient for scanning very large file systems. It has evolved to include numerous options for output formatting, action types, and fine-tuning scanning behavior, positioning itself as a robust solution for duplicate file management on Linux and Unix-like systems.


title: PARAMETERS
content:
<b><b>build</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compiles the source files into a static website, typically outputting to the <<i>_site</i>> directory. Common options include: <br><i>--source <path></i>: Specify source directory.<br><i>--destination <path></i>: Specify output directory.<br><i>--config <file1,file2,...></i>: Specify configuration file(s).<br><i>--drafts</i>: Render posts in the <<i>_drafts</i>> folder.<br><i>--future</i>: Render posts with a future date.<br><i>--incremental</i>: Enable incremental regeneration.<br><br><b><b>serve</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds the site and serves it locally using a built-in web server. It also watches for file changes and rebuilds automatically. Common options include: <br><i>--host <address></i>: Specify host to bind to.<br><i>--port <number></i>: Specify port to listen on.<br><i>--open-url</i>: Open site in browser.<br><i>--detach</i>: Detach the server process.<br><br><b><b>new</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new Jekyll site scaffold at the specified path. <br><i>--blank</i>: Create a blank site without theme.<br><i>--skip-bundle</i>: Don't run <<i>bundle install</i>>.<br><br><b><b>doctor</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks your Jekyll site for potential compatibility issues or common configuration problems in your environment.<br><br><b><b>clean</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes the generated <<i>_site</i>> directory and the <<i>.jekyll-cache</i>> directory, effectively cleaning the build output.<br><br><b><b>help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information about Jekyll subcommands or global options. Use <<i>jekyll help <subcommand></i>> for specific help.<br><br>


title: DESCRIPTION
content:
Jekyll is a <b>static site generator</b> written in Ruby. It takes content authored in Markdown, Liquid, HTML, and CSS, processes it through a set of rules (like converting Markdown to HTML, applying layouts, rendering Liquid templates), and outputs a complete, ready-to-deploy static website. It's often used for blogs, portfolios, and documentation sites due to its simplicity, speed, and security (no database or server-side scripting needed at runtime). Jekyll builds the site once, and the resulting files (HTML, CSS, JS, images) can be served directly by any web server. It integrates well with version control systems like Git and hosting platforms like GitHub Pages, making it a popular choice for developers and content creators seeking a robust and maintainable web presence.


title: CAVEATS
content:
<b>Ruby Dependency</b>: Jekyll is built with Ruby, requiring a Ruby environment and <<i>Bundler</i>> for dependency management, which can be a setup hurdle for some users.<br><b>Static Nature</b>: As a static site generator, Jekyll cannot handle dynamic server-side logic (e.g., user authentication, database queries) directly. For such features, integration with external services or client-side JavaScript is necessary.<br><b>Build Times</b>: For very large sites with thousands of pages, Jekyll build times can become significant, though incremental builds help mitigate this.<br><b>No Built-in Admin UI</b>: Unlike traditional CMS platforms, Jekyll does not provide a graphical user interface for content management; content is typically managed via text files and Markdown.


title: GITHUB PAGES INTEGRATION
content:
Jekyll is the engine behind GitHub Pages, allowing users to host their Jekyll sites for free directly from a GitHub repository. This seamless integration simplifies deployment, version control, and collaboration for web projects.


title: THEMING AND PLUGINS
content:
Jekyll supports themes for easy site styling and layout, enabling quick setup and consistent design. It also has a powerful plugin system (RubyGems) for extending functionality, though GitHub Pages has limitations on which plugins can be used for security reasons.


title: LIQUID TEMPLATING LANGUAGE
content:
Jekyll leverages the Liquid templating language (created by Shopify) for dynamic content generation during the build process. Liquid allows for reusable layouts, includes, conditional logic, and data manipulation, enabling sophisticated static sites from plain text files.


title: HISTORY
content:
Jekyll was created by Tom Preston-Werner, co-founder of GitHub, and first released in 2008. It quickly gained significant popularity due to its adoption by GitHub Pages, which provides free hosting for Jekyll sites directly from Git repositories. Its design promoted a workflow centered around Git, Markdown, and static content, influencing the rise of the 'Jamstack' architecture and numerous other static site generators.


title: SYNOPSIS
content:
<b>jello</b> [<i>OPTIONS</i>] '<i>FILTER_EXPRESSION</i>' [<i>FILE...</i>]<br><b>jello</b> -f &lt;<i>FILTER_FILE</i>&gt; [<i>OPTIONS</i>] [<i>FILE...</i>]


title: PARAMETERS
content:
<b>-r, --raw-output</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output raw strings, without <b>JSON</b> string escaping. Useful for extracting simple text values.<br><br><b>-c, --compact-output</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produce compact (one-line) output. Eliminates pretty-printing and newline characters.<br><br><b>-s, --slurp</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read all input as a single array of <b>JSON</b> objects rather than processing line-by-line.<br><br><b>-n, --null-input</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not read any input from standard input. Useful when the filter expression itself generates data.<br><br><b>-f &lt;file&gt;, --from-file &lt;file&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read the filter expression from the specified file instead of a command-line argument.<br><br><b>-i &lt;num&gt;, --indent &lt;num&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the indentation level for pretty-printed output. Default is 2. (<i>Requires --compact-output not to be used</i>)<br><br><b>-S, --stream</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables streaming input and output, processing <b>JSON</b> elements as they arrive. Useful for very large files or continuous streams.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of the <b>jello</b> command.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a summary of command-line options and usage.<br><br>


title: DESCRIPTION
content:
<b>jello</b> is a powerful and lightweight command-line utility designed for processing <b>JSON</b> (JavaScript Object Notation) data. It serves as a modern alternative to tools like <i>jq</i>, built from the ground up in <i>C</i> to achieve high performance and efficiency, particularly with large datasets or streaming input.<br><br>The command allows users to filter, transform, and extract specific elements from <b>JSON</b> structures using a concise and expressive filter language, remarkably similar to that of <i>jq</i>. Its primary strength lies in its ability to quickly parse <b>JSON</b> input from standard input or files, apply complex transformations, and output the results in various formats, including raw strings, compact <b>JSON</b>, or pretty-printed <b>JSON</b>.<br><br>Whether you need to extract a single field, reshape an entire <b>JSON</b> object, or process a stream of <b>JSON</b> lines, <b>jello</b> provides the necessary tools for efficient <b>JSON</b> manipulation directly from your shell. It's ideal for scripting, data pipelines, and interactive exploration of <b>JSON</b> data.


title: CAVEATS
content:
While <b>jello</b> offers significant performance advantages due to its <i>C</i> implementation, it is a relatively newer tool compared to the established <i>jq</i>. This means its community support, extensive documentation, and the breadth of its filter language features might not yet match <i>jq's</i> mature ecosystem. Users migrating from <i>jq</i> may find some less common functions or behaviors slightly different or missing, though core functionality is highly compatible. Large-scale deployments might require more thorough testing of its stability and edge-case handling compared to <i>jq</i>.


title: FILTER EXPRESSIONS
content:
<b>jello</b> uses a powerful filter expression language to select and transform <b>JSON</b> data. This language is heavily inspired by <i>jq</i>, allowing users to navigate objects and arrays (e.g., <b>.key</b>, <b>.[index]</b>), chain operations with pipes (<b>|<i>filter</i></b>), and apply built-in functions. Understanding these expressions is key to effectively using <b>jello</b>.


title: INPUT AND OUTPUT
content:
<b>jello</b> can read <b>JSON</b> input from standard input (<i>stdin</i>) or from one or more specified files. It typically processes one <b>JSON</b> object per line by default, but the <b>--slurp</b> option allows treating all input as a single <b>JSON</b> array. Output can be pretty-printed <b>JSON</b> (default), compact <b>JSON</b> (<b>--compact-output</b>), or raw strings (<b>--raw-output</b>), depending on the specified options.


title: PERFORMANCE CHARACTERISTICS
content:
Being written in <i>C</i>, <b>jello</b> is designed for speed and low resource consumption. This makes it a strong contender for tasks involving very large <b>JSON</b> files, real-time data streaming, or integration into performance-sensitive scripts and pipelines. Its optimized parsing and processing logic aim to outperform similar tools in raw execution speed for many common <b>JSON</b> manipulation tasks.


title: HISTORY
content:
The <b>jello</b> command emerged as a response to the growing need for faster and more resource-efficient <b>JSON</b> processing on the command line. While <i>jq</i> revolutionized <b>JSON</b> manipulation, its <i>C-based</i> implementation sometimes faced performance limitations with extremely large files or high-throughput streaming scenarios. <b>jello</b> was developed to address these concerns by offering a highly optimized, lightweight alternative written entirely in <i>C</i>. Its development focuses on speed and simplicity, aiming to provide a <i>jq</i>-like experience with a smaller memory footprint and faster execution times, making it particularly suitable for environments where performance is critical, such as data pipelines or embedded systems.


title: SYNOPSIS
content:
<i>jenv &lt;subcommand&gt; [arguments...]</i><br>Common subcommands include: <i>add</i>, <i>remove</i>, <i>versions</i>, <i>global</i>, <i>local</i>, <i>shell</i>, <i>enable-plugin</i>, <i>disable-plugin</i>, <i>rehash</i>, <i>doctor</i>.


title: PARAMETERS
content:
<b>add <i>&lt;JDK_HOME&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Registers a JDK installation (e.g., <i>/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home</i>) with <i>jenv</i>, making it available for selection.<br><br><b>remove <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes a registered JDK by its unique name (e.g., <i>17.0.10</i>).<br><br><b>versions</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all JDK versions known to <i>jenv</i>, highlighting the currently active global, local, and shell versions.<br><br><b>global <i>&lt;version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the default Java version for all shells and directories where a specific version isn't otherwise specified.<br><br><b>local <i>&lt;version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Java version specific to the current directory and its subdirectories. This creates a <i>.java-version</i> file.<br><br><b>shell <i>&lt;version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Java version for the current shell session only. This overrides global and local settings.<br><br><b>enable-plugin <i>&lt;plugin&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates an optional <i>jenv</i> plugin (e.g., <i>export</i>, <i>maven</i>, <i>gradle</i>) to extend functionality.<br><br><b>disable-plugin <i>&lt;plugin&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deactivates a previously enabled <i>jenv</i> plugin.<br><br><b>plugins</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a list of all available <i>jenv</i> plugins and indicates which ones are currently enabled.<br><br><b>rehash</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rebuilds the <i>jenv</i> shim executables, ensuring all changes (like new JDKs or enabled plugins) are recognized. Crucial after adding a JDK or enabling a plugin.<br><br><b>doctor</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Diagnoses common issues with your <i>jenv</i> setup, providing recommendations for fixes.<br><br><b>version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the active Java version that <i>jenv</i> has selected for the current context.<br><br>


title: DESCRIPTION
content:
<i>jenv</i> is a powerful command-line utility designed to simplify the management of multiple Java Development Kit (JDK) versions on a single system. It empowers developers to seamlessly switch between different JDKs, ensuring that each project operates with its specific required Java version without conflicts. <i>jenv</i> achieves this by inserting <i>shims</i> into your <i>PATH</i> environment variable. These shims intercept commands like <i>java</i>, <i>javac</i>, <i>maven</i>, and <i>gradle</i>, delegating them to the correct JDK based on global settings, project-specific configurations, or current shell session preferences. This eliminates the tedious process of manually configuring <i>JAVA_HOME</i> and prevents version clashes, making it indispensable for environments where diverse Java projects coexist. <i>jenv</i> integrates smoothly with popular build tools and provides a clean, efficient way to handle your Java environments.


title: CAVEATS
content:
<i>jenv</i> requires proper shell initialization by sourcing <i>eval "$(jenv init -)"</i> in your shell's configuration file (e.g., <i>~/.bashrc</i>, <i>~/.zshrc</i>).<br>For <i>jenv</i> to function correctly, any manually set <i>JAVA_HOME</i> environment variable must be <i>unset</i> before <i>jenv</i> is initialized, as <i>jenv</i> manages this itself.<br><i>jenv</i> does not <i>install</i> JDKs; it only manages <i>existing</i> installations. Users must acquire JDKs separately.


title: <B>INSTALLATION AND SETUP</B>
content:
To use <i>jenv</i>, you first need to install it (e.g., via Homebrew on macOS, or by cloning its Git repository). After installation, it's crucial to add <i>eval "$(jenv init -)"</i> to your shell's startup file (like <i>~/.bashrc</i>, <i>~/.zshrc</i>, or <i>~/.config/fish/config.fish</i>). This command initializes <i>jenv</i>, adds its <i>shims</i> directory to your <i>PATH</i>, and sets up necessary shell functions, enabling <i>jenv</i>'s core functionality.


title: <B>PLUGIN SYSTEM</B>
content:
<i>jenv</i>'s capabilities are extensible through a robust plugin system. Key plugins include <i>export</i>, which automatically sets the <i>JAVA_HOME</i> environment variable to the currently selected JDK (essential for many IDEs and build tools that expect it); and <i>maven</i> / <i>gradle</i>, which re-shim the <i>mvn</i> and <i>gradle</i> commands to ensure they use the correct Java version without manual intervention. Plugins must be explicitly enabled using <i>jenv enable-plugin &lt;plugin_name&gt;</i> and changes applied with <i>jenv rehash</i>.


title: HISTORY
content:
Inspired by the success of version managers like <i>rbenv</i> (Ruby) and <i>pyenv</i> (Python), <i>jenv</i> emerged to address the need for a similar, streamlined Java version management solution. Before <i>jenv</i>, developers often relied on manual <i>JAVA_HOME</i> adjustments, which could be cumbersome and error-prone when juggling multiple projects with different Java version requirements. <i>jenv</i> aims to simplify this process, offering a lightweight and efficient alternative focusing solely on environment switching, rather than comprehensive SDK installation.


title: PARAMETERS
content:
<b><i>&lt;IMAGE_FILE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the input image file (e.g., <b>image.jpg</b>, <b>picture.png</b>) to be converted.<br><br><b><b>-w</b> <i>WIDTH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the desired width of the output ASCII art in characters. The tool will scale the image accordingly.<br><br><b><b>-H</b> <i>HEIGHT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the desired height of the output ASCII art in characters. Used in conjunction with <b>-w</b> to control dimensions, or independently for height-constrained output.<br><br><b><b>-c</b> <i>CHARSET</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the character set to be used for mapping pixel brightness. Common values include 'standard' (dense to sparse, e.g., <b>@#$%&XO*+=-. </b>) or 'inverted' character sequences.<br><br><b><b>-i</b> or <b>--invert</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inverts the character mapping, causing darker characters to represent lighter pixels and vice-versa. This can be useful for viewing on terminals with dark backgrounds.<br><br><b><b>-o</b> <i>OUTPUT_FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs the generated ASCII art to a specified file instead of printing it to standard output (stdout).<br><br>


title: DESCRIPTION
content:
<i>img2txt</i> is a utility that transforms graphical image files (such as JPEG, PNG, or GIF) into text-based representations, commonly known as ASCII art. It works by analyzing the pixel intensity or color values of the input image and mapping them to a predefined set of characters. Typically, characters with higher visual density (e.g., <b>@</b>, <b>#</b>, <b>$</b>) are used for darker areas, while characters with lower density (e.g., <b>.</b>, <b>,</b>, <b> </b>) represent lighter areas.<br><br>The primary purpose of <i>img2txt</i> is to enable the viewing of images in text-only environments like terminals, command-line interfaces, or plain text files. The quality and recognizable detail of the generated ASCII art depend on factors such as the character set employed, the output resolution, and the contrast of the original image. Many implementations allow customization of these parameters to achieve desired visual effects.


title: CAVEATS
content:
<i>img2txt</i> is not a standard, universally adopted Linux command. Its implementation, available options, and behavior can vary significantly between different scripts or packages. Users should consult the specific documentation for their installed version. Most implementations convert images to grayscale before generating ASCII art, so color fidelity is generally lost. The visual quality of the output ASCII art is highly dependent on the input image's resolution, aspect ratio, and contrast.


title: CHARACTER MAPPING PRINCIPLES
content:
<i>img2txt</i> algorithms typically quantize the image's brightness levels into a discrete number of steps, corresponding to the available characters in the chosen set. A common character set, ordered from densest (darkest perceived) to sparsest (lightest perceived), might look like: <b><i>@ # S % ? * + ; : , . </i> </b>. Each pixel's brightness is mapped to the most appropriate character from this sequence.


title: ASPECT RATIO CONSIDERATIONS
content:
Terminal characters are typically taller than they are wide (e.g., a 1:2 aspect ratio). When converting a square image to ASCII art, simply mapping pixels directly would result in a vertically stretched image. To maintain the original image's aspect ratio and prevent distortion, <i>img2txt</i> tools often adjust the output height or width, or use algorithms that account for the non-square nature of characters.


title: HISTORY
content:
The concept of converting images to text predates graphical user interfaces, stemming from early computing environments where printers and terminals were text-only. ASCII art became a popular medium for sharing images and creative expression. While there isn't a single definitive '<i>img2txt</i>' command with a unified history, various scripts and programs have been developed over time to automate this conversion. Many modern <i>img2txt</i> implementations leverage powerful image processing libraries like ImageMagick or Pillow (Python Imaging Library) to handle scaling, color reduction, and pixel analysis. Its usage persists primarily in command-line environments, for creative projects, and for displaying images where graphical capabilities are limited.


title: SYNOPSIS
content:
<b>immich-go</b> <i>command</i> [<i>options</i>] [<i>arguments</i>]<br><br><b>Common Commands:</b><br><b>immich-go</b> login<br><b>immich-go</b> upload [<i>path</i> ...]<br><b>immich-go</b> download <i>asset-ids</i><br><b>immich-go</b> album [<i>subcommand</i>]<br><b>immich-go</b> config [<i>subcommand</i>]<br><b>immich-go</b> status


title: PARAMETERS
content:
<b><b>--server</b> <i>URL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the URL of the Immich server (e.g., http://localhost:2283). Overrides the configuration file setting.<br><br><b><b>--key</b> <i>API_KEY</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the API key for authentication. This is an alternative to using <i>immich-go login</i>.<br><br><b><b>--config</b> <i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative path to the configuration file. Defaults to ~/.immich-go.yml.<br><br><b><b>--log-level</b> <i>LEVEL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging verbosity (e.g., <i>debug</i>, <i>info</i>, <i>warn</i>, <i>error</i>). Default is <i>info</i>.<br><br><b><b>--concurrency</b> <i>NUMBER</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the number of concurrent uploads/downloads. Improves performance for large batches.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulates the command without making any actual changes to the Immich server or local files. Useful for testing.<br><br><b><b>--recursive</b>, <b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(upload command)</i> Recursively scans subdirectories for media files to upload.<br><br><b><b>--checksum</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(upload command)</i> Forces checksumming of files for duplicate detection, even if not enabled by default.<br><br><b><b>--no-dupes</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(upload command)</i> Skips files that are already present on the Immich server based on checksum or filename.<br><br><b><b>--create-albums</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(upload command)</i> Creates albums on the Immich server based on the names of local directories being uploaded.<br><br><b><b>--exclude-patterns</b> <i>PATTERNS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(upload command)</i> Specifies a comma-separated list of glob patterns to exclude files or directories from being processed.<br><br>


title: DESCRIPTION
content:
<i>immich-go</i> is a powerful command-line interface (CLI) client designed to interact with an Immich server. Immich is an open-source, self-hosted photo and video backup solution, similar to Google Photos. This Go-based tool provides robust functionalities for managing media assets, primarily focusing on uploading and synchronizing large collections of photos and videos from local file systems to an Immich instance.<br><br>Key features include intelligent duplicate detection using checksums, recursive directory scanning, and the ability to organize uploads into albums based on directory structure or specified names. It supports various configuration options, including server URL, API key management, and concurrency settings for efficient transfers. Beyond uploads, <i>immich-go</i> can also facilitate downloading assets, managing existing albums, and performing administrative tasks, making it an essential utility for users who prefer automation, bulk operations, or command-line workflows for their Immich media library.


