# CommandSection

title: CAVEATS
content:
Requires a running Immich server instance to connect to.<br>Authentication (via API key or login) is mandatory for most operations.<br>Performance is highly dependent on network speed and server resources.<br>Compatibility: Ensure <i>immich-go</i> version is compatible with your Immich server's API version, especially after major Immich updates.<br>Not all Immich server features are exposed via the CLI; some advanced management may still require the web UI.


title: CONFIGURATION
content:
<i>immich-go</i> typically stores its configuration, including server URL and API key, in a YAML file, commonly located at ~/.immich-go.yml. This file can be manually edited or managed using the <i>immich-go config</i> subcommands. Settings can also be overridden by command-line options for specific operations.


title: AUTHENTICATION
content:
To authenticate with the Immich server, use the <i>immich-go login</i> command. This will prompt for the server URL and API key, saving them to the configuration file. Alternatively, the <i>--key</i> option can be used directly for single commands or scripting, especially useful in CI/CD environments or temporary sessions.


title: COMMON USAGE PATTERNS
content:
A frequent use case for <i>immich-go</i> is an initial bulk upload of an existing photo library: <i>immich-go upload --recursive --create-albums /path/to/my/photos</i>. For periodic synchronization, users might run a similar command, relying on duplicate detection to skip already uploaded files. It's also invaluable for downloading specific assets or managing albums programmatically.


title: HISTORY
content:
<i>immich-go</i> emerged as a community-driven initiative to provide a robust and efficient command-line client for the Immich self-hosted media solution. While Immich offers its own mobile applications and a web interface, there was a growing need for a dedicated CLI tool capable of handling large-scale uploads, automated backups, and scripting complex interactions. Developed independently in Go, <i>immich-go</i> benefits from Go's strong concurrency features and cross-platform capabilities, making it a reliable choice for users looking to manage their Immich libraries from the terminal. Its development closely tracks the Immich server's API, adapting to new features and changes to maintain compatibility and extend functionality.


title: SYNOPSIS
content:
<b>java</b> [<i>options</i>] <i>mainclass</i> [<i>args...</i>]<br><b>java</b> [<i>options</i>] <b>-jar</b> <i>jarfile</i> [<i>args...</i>]


title: PARAMETERS
content:
<b><b>-classpath</b> <i>path</i><br><b>-cp</b> <i>path</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies the search path for application classes and resources.</i> Directories are separated by `:` on Linux/macOS or `;` on Windows.<br><br><b><b>-jar</b> <i>jarfile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Executes a program encapsulated in a JAR (Java Archive) file.</i> The main class is specified by the `Main-Class` manifest header in the JAR.<br><br><b><b>-D</b><i><property>=<value></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets a system property value.</i> These properties can be accessed by the Java application at runtime using `System.getProperty()`.<br><br><b><b>-Xmx</b><i><size></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the maximum Java heap size.</i> For example, `-Xmx512m` for 512 megabytes or `-Xmx2g` for 2 gigabytes.<br><br><b><b>-Xms</b><i><size></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the initial Java heap size.</i> It's often recommended to set this to the same value as `-Xmx` to prevent resizing during execution.<br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prints the product version and exits.</i> Displays information about the Java runtime environment.<br><br><b><b>-help</b><br><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prints a help message for standard options and exits.</i><br><br><b><b>-agentlib:</b><i><libname>[=<options>]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Loads a native agent library.</i> Used for profiling, debugging, and monitoring JVM behavior.<br><br><b><b>-javaagent:</b><i><jarpath>[=<options>]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Loads a Java programming language agent.</i> Used for bytecode instrumentation, often by frameworks like AspectJ or monitoring tools.<br><br>


title: DESCRIPTION
content:
<i>The `java` command is the primary launcher for Java applications, serving as the interface to the Java Virtual Machine (JVM).</i><br><br><b>It interprets and executes Java bytecode, enabling platform-independent execution of compiled Java programs.</b><br><br>This command is fundamental for running any Java-based software, from simple command-line utilities to complex server-side applications. When invoked, `java` loads the specified class file or JAR archive, initializes the JVM, and begins executing the application's `main` method.<br><br>It handles various configurations through its extensive set of options, allowing users to control aspects like memory allocation, classpath, system properties, and debugging modes, making it a versatile tool for both development and deployment environments.


title: CAVEATS
content:
<i>While Java aims for 'write once, run anywhere', platform-specific differences can sometimes occur, particularly with native libraries or UI toolkits.</i><br><br><b>Memory management with the JVM can be complex; misconfigured heap sizes (e.g., `-Xmx`) can lead to 'Out Of Memory' errors or inefficient garbage collection.</b><br><br>Security is a crucial aspect; running untrusted Java applications or applets can pose risks, although modern Java security models are robust.<br><br><b>Version compatibility is another consideration; applications compiled with newer Java versions may not run on older JVMs, and vice-versa.</b>


title: <B>EXECUTION MODES</B>
content:
<i>The `java` command supports two primary execution modes:</i><br>1. <b>Directly executing a class file:</b> `java com.example.MyMainClass` requires the JVM to locate `MyMainClass.class` on the specified classpath.<br>2. <b>Executing a JAR file:</b> `java -jar myapp.jar` relies on the JAR's manifest file to specify the main class, simplifying deployment and packaging.


title: <B>JVM ARGUMENTS VS. APPLICATION ARGUMENTS</B>
content:
<i>Arguments passed directly after `java` (e.g., `-Xmx`, `-D`) are JVM arguments, controlling the virtual machine itself.</i><br><br><b>Arguments passed after the `mainclass` or `jarfile` (e.g., `arg1 arg2`) are application arguments, which are received by the Java application's `main` method.</b> This distinction is crucial for proper command invocation.


title: HISTORY
content:
<i>The Java programming language and its runtime environment were initially developed by James Gosling at Sun Microsystems and first released in 1995.</i><br><br><b>The `java` command has been central to the Java ecosystem since its inception, evolving alongside the language and JVM.</b> After Oracle acquired Sun Microsystems in 2010, the development continued under Oracle's stewardship, with significant contributions from the open-source OpenJDK community.<br><br>Its design principle of 'write once, run anywhere' rapidly propelled Java to prominence for enterprise applications, web services, and Android mobile development, making the `java` command an indispensable tool for developers and system administrators globally.


title: SEE ALSO
content:
<b>javac</b>(1) - <i>Java compiler, compiles Java source files to bytecode.</i>, <b>jar</b>(1) - <i>JAR archive tool, creates and manages JAR files.</i>, <b>javap</b>(1) - <i>Java class file disassembler, prints information about class files.</i>, <b>jps</b>(1) - <i>JVM Process Status Tool, lists instrumented HotSpot Java Virtual Machines on the target system.</i>


title: PARAMETERS
content:
<b>--coverage</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Collects <i>code coverage</i> information from your project.<br><br><b>--watch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enters a "watch mode," rerunning tests when source files change.<br><br><b>--watchAll</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Similar to <b>--watch</b>, but watches all files, even if not in a Git repo.<br><br><b>--config <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to a <i>Jest configuration file</i>.<br><br><b>--testPathPattern <regex></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs tests whose file paths match the provided <i>regular expression</i>.<br><br><b>--runInBand</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes all tests serially in the current process, useful for debugging.<br><br><b>--clearCache</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes the Jest cache directory, useful for resolving cache-related issues.<br><br><b>--forceExit</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces Jest to exit after test runs complete, even if there are open handles.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays individual test results and the full test suite hierarchy.<br><br><b>--silent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents tests from printing messages to the console during execution.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the installed <i>Jest version</i> and exits.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays all available <i>CLI options</i> for Jest.<br><br>


title: DESCRIPTION
content:
Jest is a widely-adopted <i>JavaScript testing framework</i> developed by Facebook (now Meta) for testing JavaScript and TypeScript codebases. It provides a comprehensive solution for <b>unit, integration, and snapshot testing</b>. Key features include its "zero-config" setup, offering a smooth onboarding experience, alongside exceptional performance through parallel test execution. Jest boasts an integrated assertion library, powerful mocking capabilities for isolating code, and built-in code coverage reporting, simplifying the development workflow. It is commonly utilized in diverse JavaScript environments, including React, Angular, Vue.js, and Node.js applications, significantly contributing to code quality, reliability, and maintainability across projects. Its focus on developer experience makes it a popular choice for modern web development.


title: CAVEATS
content:
Jest requires Node.js and a package manager like npm or yarn to be installed on your system. It can be resource-intensive for very large test suites, and advanced configurations might require a deeper understanding of its ecosystem. While Jest is versatile, its primary focus remains the JavaScript/TypeScript environment.


title: SNAPSHOT TESTING
content:
Jest's unique <b>snapshot testing</b> feature is used to test large objects or UI components by comparing a serialized representation (a snapshot) against a previously stored version. This quickly identifies unintended changes to the UI or data structure.


title: MOCKING
content:
Jest provides powerful <i>mocking capabilities</i> for functions, modules, and timers. This allows developers to isolate the code under test from its dependencies, controlling their behavior and ensuring consistent test results without side effects.


title: JSDOM
content:
While Jest tests typically run in a Node.js environment, for front-end components that rely on browser APIs, Jest uses <i>JSDOM</i>. JSDOM is a pure JavaScript implementation of web standards, allowing Jest to simulate a browser environment without requiring a real browser.


title: HISTORY
content:
Jest was developed by Facebook (now Meta) and open-sourced around 2014-2015, initially to test React components. Its innovative features, such as snapshot testing, and a focus on developer experience quickly propelled its adoption. It rapidly became a leading testing framework in the JavaScript ecosystem, continuing to be actively maintained and evolved by Meta and the open-source community.


title: SYNOPSIS
content:
<i>jf</i> [<i>global-options</i>] <<i>command</i>> [<i>command-options</i>] <<i>arguments</i>><br>For example: <i>jf rt upload</i> [<i>options</i>] <i><source> <target></i><br>Or: <i>jf config add</i>


title: PARAMETERS
content:
<b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the client version of the <i>JFrog CLI</i>.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a help message for the command or subcommand.<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Short alias for <i>--help</i>, shows a help message for the command or subcommand.<br><br><b>--config <name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a named configuration to use, bypassing the default or configured server.<br><br><b>--url <url></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the <i>JFrog Platform</i> URL for the current command execution, overriding configured values.<br><br><b>--user <user></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the username for authentication with the <i>JFrog Platform</i> for the current command.<br><br><b>--password <password></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the password for authentication with the <i>JFrog Platform</i> for the current command.<br><br><b>--apikey <apikey></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Authenticates using an API key instead of username/password for the current command.<br><br><b>--access-token <token></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Authenticates using an access token (<i>Pat/Bearer Token</i>) for the current command.<br><br><b>--server-id <id></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the credentials configured for a specific server ID for the current command.<br><br><b>--log-level <level></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging level (e.g., <i>DEBUG, INFO, WARN, ERROR</i>) for output.<br><br><b>--format <format></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format for command results (e.g., <i>JSON, TABLE, NONE</i>).<br><br><b>--insecure-tls</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows insecure <i>TLS</i> connections without certificate verification.<br><br><b>--no-progress</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the progress bar for file transfers and other operations.<br><br><b>--quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses most log output, showing only critical information.<br><br><b>-q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Short alias for <i>--quiet</i>, suppresses most log output.<br><br>


title: DESCRIPTION
content:
The <b>jf</b> command, commonly an alias for the <b>JFrog CLI</b>, is a powerful and versatile command-line interface designed to interact with the entire JFrog Platform. It provides a unified way to manage artifacts, builds, security scans, distribution, and other operations across JFrog products such as Artifactory, Xray, and Distribution. Built in Go, it offers a seamless integration with CI/CD pipelines, automating common tasks like uploading and downloading artifacts, managing build information, triggering security scans, and configuring platform settings. Its modular design allows users to interact with specific JFrog services through dedicated subcommands, making it an essential tool for developers and DevOps engineers working with binary management and software supply chain automation.


title: CAVEATS
content:
The <i>jf</i> command is not a standard Linux utility and must be installed separately. It functions primarily as a client for the <i>JFrog Platform</i>, requiring access to <i>JFrog Artifactory, Xray,</i> or other <i>JFrog</i> services to be fully functional. Its behavior is highly dependent on the configured <i>JFrog</i> server and the specific subcommands used.


title: SUBCOMMANDS OVERVIEW
content:
The <i>jf</i> command operates primarily through a rich set of subcommands, each designed to interact with a specific <i>JFrog</i> product or perform a particular task. Key subcommands include: <br><i><b>rt</b></i> (for Artifactory operations), <br><i><b>xr</b></i> (for Xray security scans), <br><i><b>ds</b></i> (for Distribution operations), <br><i><b>bt</b></i> (for build tools integration), <br><i><b>config</b></i> (for managing JFrog platform connections), <br><i><b>plugin</b></i> (for managing CLI plugins), and <br><i><b>completion</b></i> (for shell command completion). Each subcommand has its own set of specific options and arguments.


title: INSTALLATION
content:
The <i>JFrog CLI</i> can be installed by downloading the executable binary directly from the <i>JFrog</i> website, or via various package managers like <i>Homebrew</i> (macOS), <i>scoop</i> (Windows), <i>apt</i> (Debian/Ubuntu), or <i>yum</i> (RHEL/CentOS). Users often create a shell alias (e.g., <i>alias jf=jfrog</i>) for convenience.


title: CONFIGURATION
content:
Before using most <i>jf</i> commands, it's necessary to configure connection details to your <i>JFrog Platform</i> instance. This is typically done using the <i>jf config add</i> command, which prompts for the <i>JFrog</i> URL, credentials, and an optional server ID. This configuration is then saved for future use.


title: HISTORY
content:
The <i>JFrog CLI</i>, often aliased as <i>jf</i>, originated as <i>jfrog-cli-go</i>, reflecting its implementation in the <i>Go</i> programming language. It was developed by <i>JFrog</i> to provide a consistent and powerful command-line interface for its suite of products, including <i>Artifactory, Xray,</i> and <i>Distribution</i>. Over time, it has evolved to become a universal CLI, integrating deeply with <i>CI/CD</i> pipelines and offering extensive automation capabilities for software supply chain management.


title: SYNOPSIS
content:
<b>jfrog</b> <i>[global options]</i> <b>&lt;command&gt;</b> <i>[command options/arguments]</i><br><br>Examples of common top-level commands include:<br>    *   <b>jfrog rt &lt;subcommand&gt;</b> (for Artifactory operations)<br>    *   <b>jfrog xr &lt;subcommand&gt;</b> (for Xray operations)<br>    *   <b>jfrog ds &lt;subcommand&gt;</b> (for Distribution operations)<br>    *   <b>jfrog config &lt;subcommand&gt;</b> (for CLI configuration)<br>    *   <b>jfrog --version</b><br>    *   <b>jfrog --help</b>


title: PARAMETERS
content:
<b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the JFrog CLI version.<br><br><b><b>--help</b> / <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides help information for the <b>jfrog</b> command or its subcommands.<br><br><b><b>--url &lt;JFROG_PLATFORM_URL&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the JFrog Platform URL, overriding any configured value.<br><br><b><b>--user &lt;USERNAME&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the username for authentication, overriding any configured value.<br><br><b><b>--password &lt;PASSWORD&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the password for authentication, overriding any configured value. <i>(Not recommended for automation; use access tokens)</i><br><br><b><b>--access-token &lt;TOKEN&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the access token for authentication, overriding any configured value. <i>(Recommended for automation)</i><br><br><b><b>--interactive</b> / <b>-i</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the command in interactive mode, guiding the user through configuration or input.<br><br><b><b>--log-level &lt;LEVEL&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging verbosity level (e.g., <i>DEBUG</i>, <i>INFO</i>, <i>WARN</i>, <i>ERROR</i>).<br><br><b><b>--config &lt;FILE_PATH&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to a custom CLI configuration file.<br><br><b><b>--skip-update-check</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips the check for JFrog CLI updates on execution.<br><br>


title: DESCRIPTION
content:
The JFrog CLI is a compact and smart client that provides a single interface to automate and simplify your CI/CD pipelines. It interacts seamlessly with JFrog products like <b>Artifactory</b>, <b>Xray</b>, and <b>Distribution</b>, offering functionalities such as artifact management, security scanning, and distribution control. It's designed for developers and DevOps engineers to script and manage their software development lifecycle efficiently. Key features include intelligent artifact uploading and downloading, build integration, dependency management, and security scanning capabilities. The CLI optimizes network transfers, handles metadata, and ensures data integrity, making it an essential tool for robust and repeatable software delivery processes.


title: CAVEATS
content:
Authentication: Ensure correct JFrog Platform URL, username/password, or access token are configured or provided, especially in CI/CD environments. <i>Access tokens</i> are generally preferred for automation.<br>Version Compatibility: Always check the JFrog CLI documentation for compatibility with your JFrog Platform and product versions to avoid unexpected behavior.<br>Network Connectivity: The CLI requires stable network connectivity to the JFrog Platform. <i>Proxies</i> might need to be configured.<br>Permissions: The user authenticated with the CLI must have the necessary permissions on the JFrog platform to perform the requested operations.


title: CONFIGURATION MANAGEMENT
content:
The <b>jfrog config</b> command group is essential for managing CLI configurations. It allows you to add, edit, or remove JFrog Platform instances, set default parameters, and manage access tokens. This ensures that the CLI can securely and efficiently interact with your JFrog instances without requiring repeated manual input of credentials for every command.


title: BUILD INTEGRATION
content:
One of the key strengths of JFrog CLI is its deep integration with popular build tools like <b>Maven</b>, <b>Gradle</b>, <b>npm</b>, <b>Docker</b>, and others. It can automatically collect build information, dependencies, and artifacts, then publish this data to <b>Artifactory</b>. This <i>"build info"</i> is crucial for traceability, reproducibility, and enabling <b>Xray</b> security scans, providing a comprehensive view of your software supply chain.


title: HISTORY
content:
The JFrog CLI evolved as the primary command-line tool for interacting with the JFrog Platform. Initially, specific tools or direct API calls were used, but the CLI was developed to unify and simplify operations across different JFrog products (<b>Artifactory</b>, <b>Xray</b>, <b>Distribution</b>, etc.). Its continuous development focuses on improving performance, adding support for new features in the JFrog Platform, and enhancing user experience, especially for automation in CI/CD pipelines. It provides advanced features like checksum deployment, build info collection, and dependency resolution, making it a cornerstone for DevOps automation with JFrog products.


title: SYNOPSIS
content:
Interaction with JFS debugfs entries is performed via standard shell commands after ensuring the <I>debugfs</I> filesystem is mounted. <br><br>To mount <I>debugfs</I> (if not already mounted):<br><B>mount -t debugfs none /sys/kernel/debug</B><br><br>To list available JFS debug entries for a specific device (e.g., <I>sdb1</I>):<br><B>ls /sys/kernel/debug/jfs/sdb1/</B><br><br>To read a debug entry (e.g., <I>dirty_pages</I>):<br><B>cat /sys/kernel/debug/jfs/sdb1/dirty_pages</B><br><br>To modify a tunable debug entry (e.g., <I>max_dirty_pages</I>):<br><B>echo <I>new_value</I> > /sys/kernel/debug/jfs/sdb1/max_dirty_pages</B>


title: DESCRIPTION
content:
The term 'jfs_debugfs' refers to the JFS (Journaled File System) specific entries exposed through the Linux kernel's <I>debugfs</I> virtual filesystem. Unlike a standalone command with its own set of options, 'jfs_debugfs' is not a dedicated executable. Instead, it represents the interface for inspecting and sometimes modifying internal JFS parameters and statistics at runtime. <br><br>Administrators and developers can interact with these debugfs entries by navigating the virtual directory structure, typically located under <B>/sys/kernel/debug/jfs/</B>, and using standard shell commands such as <B>cat</B> to read values, <B>echo</B> to write values (for tunable parameters), and <B>ls</B> to list available entries. This mechanism provides a low-level view into the JFS module's operational state, aiding in debugging, performance analysis, and understanding filesystem behavior.


title: CAVEATS
content:
Interacting with kernel debugfs entries, including those for JFS, requires <B>root privileges</B>. Modifying values in <I>debugfs</I> can have significant and potentially <B>unstable impacts</B> on system behavior, filesystem integrity, or performance. This interface is primarily intended for kernel developers and advanced users for debugging purposes. It is <B>not a stable API</B> and its structure or available entries may change between kernel versions. Users should exercise extreme caution and fully understand the implications of any changes made via this interface.


title: COMMON JFS DEBUGFS PATHS AND INFORMATION
content:
The exact paths and available entries under <B>/sys/kernel/debug/jfs/<I>device_name</I>/</B> can vary depending on the kernel version and specific JFS module. However, common types of information found include:<br><ul><li><B>Statistics:</B> Counters related to I/O operations, transaction commits, inode usage, and buffer management.</li><li><B>Tunable Parameters:</B> Settings that can influence JFS behavior, such as dirty page thresholds or transaction logging verbosity.</li><li><B>Internal State:</B> Details about the filesystem's internal data structures, such as transaction logs, inode maps, or allocation bitmaps, often presented in a human-readable format for diagnostic purposes.</li></ul>


title: HISTORY
content:
JFS (Journaled File System), originally developed by IBM for OS/2 and AIX, was introduced into the Linux kernel around version 2.4.20. The <I>debugfs</I> mechanism itself was added to the Linux kernel to provide a simple way for kernel developers to export debugging information and control parameters. The JFS module, like many other kernel components, integrated its internal debugging interface with <I>debugfs</I> to allow for runtime inspection and diagnostics, making the 'jfs_debugfs' interface a part of the broader kernel debugging ecosystem.


title: PARAMETERS
content:
<b><i>device</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The special file (e.g., /dev/hda1, /dev/sdb2) corresponding to the device or partition containing the JFS filesystem.<br><br><b><i>-f</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the filesystem check even if the filesystem is marked as clean.<br><br><b><i>-V</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details about the checking process.<br><br>


title: DESCRIPTION
content:
<b>jfs_fsck</b> is the utility used to check and optionally repair a Journaled File System (JFS). JFS is a 64-bit journaled file system developed by IBM, originally for AIX and later ported to OS/2 and Linux. Like other <b>fsck</b> utilities, <b>jfs_fsck</b> examines the consistency of a JFS filesystem's metadata. If inconsistencies are found, it attempts to correct them to restore the filesystem to a usable state.<br><br>This process is crucial for recovering data integrity after system crashes, power failures, or other events that might lead to an unclean filesystem shutdown. It's imperative that the filesystem being checked is <i>not</i> mounted during the operation to prevent further corruption or data loss. The utility reads the filesystem's journal and applies any uncommitted transactions to ensure a consistent state before performing a full metadata check.


title: CAVEATS
content:
The JFS filesystem <i>must</i> be unmounted before running <b>jfs_fsck</b>. Running it on a mounted filesystem can lead to severe data corruption and potential data loss.<br><br>While <b>jfs_fsck</b> attempts to repair inconsistencies, there is always a risk of data loss, especially when significant corruption exists. Backups are highly recommended before attempting a repair on a critical filesystem.<br><br>Checking large filesystems can be time-consuming, during which the filesystem will be inaccessible. Typically, <b>jfs_fsck</b> requires root privileges to operate on block devices.


title: EXIT CODES
content:
<b>jfs_fsck</b> returns different exit codes depending on the outcome of the operation:<br><ul><li><b>0</b>: No errors were found.</li><li><b>1</b>: Filesystem errors were corrected.</li><li><b>2</b>: Filesystem errors were found but not corrected.</li><li><b>4</b>: An operation error occurred (e.g., cannot open device).</li><li><b>8</b>: A usage error occurred (e.g., invalid arguments).</li></ul>


title: TYPICAL USAGE
content:
This command is typically used after an unclean system shutdown (e.g., power loss) when the system detects that a JFS filesystem was not properly unmounted. It can also be run periodically for preventative maintenance, although the journaling feature significantly reduces the frequency required for manual checks. In many Linux distributions, <b>jfs_fsck</b> might be automatically invoked by the generic <b>fsck</b> utility during boot if the filesystem's check count or last check time exceeds a configured threshold, or if the filesystem was not cleanly unmounted.


title: HISTORY
content:
JFS, the Journaled File System, was originally developed by IBM for its AIX Unix operating system in the early 1990s. It was later ported to OS/2 as JFS2. The Linux kernel gained JFS support in 2001, primarily driven by IBM's contributions to the open-source community. <b>jfs_fsck</b> is part of the <b>jfsutils</b> package, which provides the necessary user-space tools to manage JFS filesystems on Linux. While JFS is not as widely adopted as Ext4 or XFS on Linux, it remains a stable and reliable option. The development of <b>jfs_fsck</b> and the entire <b>jfsutils</b> suite ensures the maintainability and integrity of JFS volumes on Linux.


title: PARAMETERS
content:
<b><i>device</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the JFS device (e.g., /dev/sda1) to operate on. This is a mandatory argument.<br><br><b><i>-c</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clears the JFS fsck log. This action should be performed with caution, as it removes diagnostic information that might be needed for post-mortem analysis.<br><br><b><i>-d</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps and displays the contents of the JFS fsck log to standard output. This is the default action if no other options are specified, providing details like the last check time and file system state.<br><br><b><i>-p</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if there are any pending log entries that indicate an incomplete journal replay operation. This is useful to determine if the file system was unmounted cleanly and whether a replay is still required.<br><br><b><i>-V</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information for the <b>jfs_fscklog</b> utility, including the JFS utilities package version.<br><br>


title: DESCRIPTION
content:
The <b>jfs_fscklog</b> command is a utility specifically designed for the Journaled File System (JFS). It allows administrators to inspect, clear, or check the status of the file system check (fsck) log stored within the JFS superblock of a given device. This log records crucial information about the last time <i>jfs_fsck</i> was run on the file system, including the outcome, timestamp, and whether any journal replays were performed due to an unclean shutdown.<br><br>This utility is invaluable for diagnosing issues after a system crash or improper shutdown, as it provides insights into the integrity of the file system and whether it has been properly checked and repaired. While JFS is less commonly used than some other modern file systems like ext4 or XFS, <b>jfs_fscklog</b> remains an essential tool for managing JFS volumes.


title: CAVEATS
content:
This command is exclusively for JFS file systems; attempting to use it on other file system types will result in an error. It typically requires root privileges (or equivalent) to access and modify raw block devices. Clearing the fsck log (using <i>-c</i>) removes valuable diagnostic history, so it should only be done when you are certain the file system is clean and no longer need the log information for troubleshooting.


title: LOG CONTENTS
content:
When the fsck log is dumped (using the <i>-d</i> option), the output typically includes details such as the timestamp of the last <i>jfs_fsck</i> run, the file system's state (e.g., clean, dirty), and indicators for whether a journal replay was initiated or completed. This information is crucial for understanding the history of the file system's integrity and recovery operations following unexpected shutdowns.


title: USAGE SCENARIOS
content:
Common usage scenarios for <b>jfs_fscklog</b> include: after a system crash, to verify if <i>jfs_fsck</i> ran and what its outcome was; before mounting a JFS file system in read-write mode, to confirm its cleanliness; or as part of a routine maintenance check to monitor file system health and ensure proper shutdown procedures are followed.


title: HISTORY
content:
The Journaled File System (JFS) was originally developed by IBM for their AIX operating system in the late 1990s, focusing on high performance and quick recovery. It was subsequently ported to Linux, becoming an officially supported file system within the kernel. <b>jfs_fscklog</b> is an integral part of the standard JFS utilities package for Linux, designed to complement <i>jfs_fsck</i> by providing a direct interface to the file system's internal health records, reinforcing JFS's emphasis on data integrity and rapid post-crash recovery.


title: PARAMETERS
content:
<b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all log entries sequentially from the beginning of the journal, providing a comprehensive view of recorded transactions.<br><br><b>-a <address></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps log entries starting from the specified hexadecimal <I>address</I> within the journal, useful for targeted analysis.<br><br><b><device></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The special file (e.g., <I>/dev/sda1</I>) corresponding to the JFS filesystem partition whose journal is to be dumped.<br><br>


title: DESCRIPTION
content:
The <b>jfs_logdump</b> command is a utility designed to read and display the raw contents of the journal log for a JFS (Journaled File System) partition. JFS uses a journal to record metadata changes before they are written to the main filesystem, enabling rapid recovery after system crashes or power failures without requiring a full filesystem check.<br><br>This command is primarily a diagnostic and debugging tool for filesystem developers and advanced administrators. It allows users to examine the sequence of transactions and operations recorded in the journal, which can be invaluable for understanding filesystem behavior, diagnosing corruption, or recovering specific information from the log. The output is typically raw, hexadecimal, and requires a deep understanding of the JFS log format to interpret effectively.


title: CAVEATS
content:
Requires root privileges to access the raw device. The output is highly technical, often raw hexadecimal, and difficult to interpret without a deep understanding of JFS internal structures and journal formats. This command is primarily for advanced debugging and development purposes rather than routine administration. JFS is also less commonly used on modern Linux distributions compared to other journaling filesystems like ext4, XFS, or Btrfs.


title: TYPICAL USE CASES
content:
While not a common user command, <b>jfs_logdump</b> can be invaluable during filesystem development, for post-mortem analysis of JFS filesystem corruption, or when attempting to understand specific operations that led to an issue on a JFS volume. It helps in verifying the integrity of the journal and identifying specific transaction boundaries for deeper investigation.


title: HISTORY
content:
JFS (Journaled File System) was originally developed by IBM for its AIX and OS/2 operating systems. JFS version 2 (JFS2) was open-sourced by IBM in 2000 and subsequently integrated into the Linux kernel, starting around version 2.4.18. The <b>jfs_logdump</b> utility is part of the <I>jfsutils</I> package, which provides various tools for managing JFS filesystems on Linux. Its development is tied to the evolution and maintenance of the JFS filesystem support within the Linux ecosystem, primarily serving as a diagnostic component for an older, though still supported, filesystem.


title: SYNOPSIS
content:
<I>jfs_mkfs</I> [ <I>-c</I> ] [ <I>-J journal_device</I> ] [ <I>-j journal_size</I> ] [ <I>-L volume_label</I> ] [ <I>-q</I> ] [ <I>-r</I> ] [ <I>-s block_size</I> ] [ <I>-v</I> ] [ <I>-V</I> ] [ <I>-z stripe_unit_size</I> ] <I>device</I>


title: PARAMETERS
content:
<b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks the device for bad blocks before creating the filesystem.<br><br><b>-J journal_device</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an external device to be used for the JFS journal.<br><br><b>-j journal_size</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the size of the internal journal in megabytes. The default is 32MB.<br><br><b>-L volume_label</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a volume label to the filesystem, up to 16 characters.<br><br><b>-q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operates in quiet mode, suppressing most output.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a read-only check of the device. This option does not create a filesystem.<br><br><b>-s block_size</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the block size of the filesystem in bytes (512, 1024, 2048, or 4096). Default is 4096 bytes.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operates in verbose mode, showing more detailed progress information.<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information for <I>jfs_mkfs</I> and exits.<br><br><b>-z stripe_unit_size</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the stripe unit size in bytes for RAID configurations, influencing data allocation.<br><br><b>device</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The block special device (e.g., /dev/sdb1) on which to create the JFS filesystem. This is a mandatory argument.<br><br>


title: DESCRIPTION
content:
The <I>jfs_mkfs</I> command (also invoked as <I>mkfs.jfs</I>) is used to construct a Journaled File System (JFS) on a specified block device. JFS is a robust and high-performance journaling filesystem developed by IBM, initially for its AIX operating system and later ported to Linux. <br><br>When <I>jfs_mkfs</I> is executed, it initializes the device by creating the necessary JFS metadata structures, including the superblock, inode maps, and allocation maps. This process irrevocably erases all existing data on the target device. The command offers various options to customize the filesystem creation, such as specifying block size, setting a volume label, checking for bad blocks, or configuring an external journal. JFS's journaling capabilities ensure data integrity and faster recovery after system crashes or power failures by logging changes before they are committed to the main filesystem.


title: CAVEATS
content:
<b>Data Loss:</b> Using <I>jfs_mkfs</I> will permanently erase all data on the specified <I>device</I>. Ensure you have backed up any critical information before proceeding.<br><b>Root Privileges:</b> This command typically requires superuser (root) privileges to operate on block devices.<br><b>Journaling:</b> JFS is a journaling filesystem. While an internal journal is created by default, understand the implications if you choose to use an external journal or specify a custom size.<br><b>Block Size:</b> Choosing an inappropriate block size (with <I>-s</I>) can impact performance or storage efficiency, depending on the typical file sizes stored on the filesystem.


title: USAGE EXAMPLE
content:
To create a JFS filesystem on <I>/dev/sdb1</I> with a volume label "MY_JFS_DISK": <br><code>sudo jfs_mkfs -L MY_JFS_DISK /dev/sdb1</code>


title: HISTORY
content:
Journaled File System (JFS) was originally developed by IBM for its AIX operating system in the early 1990s. The first version, JFS1, was designed for high-performance servers. JFS2 (also known as JFS on Linux) was introduced later, bringing enhanced features and scalability. <br><br>The Linux port of JFS2 was initiated by IBM developers and became part of the mainline Linux kernel in 2001. While it offers a robust and mature journaling solution, JFS is less commonly used on Linux compared to filesystems like Ext4, XFS, or Btrfs. Despite this, it remains a fully supported and stable option for specific use cases or environments preferring its design characteristics.


title: SYNOPSIS
content:
<b>jfs_tune</b> [ <i>-l</i> | <i>-s</i> ] [ <i>-p</i> ] [ <i>-r <max_recs></i> ] [ <i>-d <delay></i> ] [ <i>-o <options></i> ] <i><device></i><br>


title: PARAMETERS
content:
<b><i><device></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The block device (e.g., /dev/sda1) or file containing the JFS filesystem to be tuned.<br><br><b><i>-l</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the current tunable parameters of the JFS filesystem on the specified device.<br><br><b><i>-s</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the raw contents of the JFS superblock, primarily for debugging or advanced analysis.<br><br><b><i>-p</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Makes any specified changes permanent by writing them to the filesystem's superblock. Without this option, changes might only be temporary.<br><br><b><i>-r <max_recs></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum number of journal records (transactions) to be written before a commit. A higher value might reduce journal I/O but increase recovery time.<br><br><b><i>-d <delay></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum journal commit delay in milliseconds. This determines how long data can remain in memory before being committed to the journal.<br><br><b><i>-o <options></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets specific JFS filesystem options. Examples include <i>barrier</i> to enable I/O barriers for data integrity or <i>nobarrier</i> to disable them for potential performance gains (at increased risk).<br><br>


title: DESCRIPTION
content:
<b>jfs_tune</b> is a command-line utility used to examine and modify various tunable parameters of a Journaled File System (JFS). JFS is a robust journaling filesystem originally developed by IBM. This command allows administrators to view current filesystem settings, such as journal record limits (<i>max_recs</i>) and commit delays, and adjust them to optimize performance or behavior for specific workloads. It can persistently write these changes to the filesystem's superblock, ensuring they survive reboots and remounts. Understanding and carefully applying <b>jfs_tune</b> can help in fine-tuning JFS performance, though improper use can lead to instability or data loss. While JFS is less prevalent in modern Linux distributions compared to alternatives like ext4 or XFS, <b>jfs_tune</b> remains essential for managing existing JFS installations.


title: CAVEATS
content:
Using <b>jfs_tune</b> requires root privileges. <br>Modifying filesystem parameters without proper understanding can lead to filesystem corruption, performance degradation, or data loss. Always back up critical data before making significant changes. <br>Some changes, particularly those made without the <i>-p</i> option, might not persist across remounts or reboots. <br>JFS is less commonly used in modern Linux environments compared to more current filesystems like ext4 or XFS.


title: APPLYING CHANGES
content:
Changes made with <b>jfs_tune</b>, especially those using the <i>-p</i> option, are written to the filesystem's superblock. For these changes to take full effect, it may be necessary to unmount and then remount the filesystem, although some parameters might be applied immediately on a mounted filesystem.


title: PERFORMANCE CONSIDERATIONS
content:
Tuning parameters like <i>max_recs</i> and <i>delay</i> involves a trade-off between performance and data integrity/recovery time. Larger <i>max_recs</i> or <i>delay</i> values can improve write performance by batching journal operations but might increase the risk of data loss or the time required for filesystem recovery after an unclean shutdown.


title: HISTORY
content:
JFS (Journaled File System) was originally developed by IBM for its AIX and OS/2 operating systems. It was subsequently ported to Linux, becoming one of the early journaling filesystems available. <b>jfs_tune</b>, as part of the <b>jfsutils</b> package, has been maintained to provide administrators with the ability to fine-tune JFS specific parameters, reflecting the design principles and tunability capabilities inherited from its IBM origins. While its usage has declined on Linux in favor of newer filesystems, it remains a robust utility for environments still utilizing JFS.


title: PARAMETERS
content:
<b>-port <port-number></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the port for the HTTP server. The default port is 7000.<br><br><b>-exclude <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a file containing a list of data members to exclude from the reachable objects query.<br><br><b>-stack false|true</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turns off or on the tracking of object allocation call stacks. Default is <b>true</b>. Setting to <b>false</b> can save memory.<br><br><b>-refs false|true</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turns off or on tracking of references to objects. Default is <b>true</b>. Setting to <b>false</b> can save memory.<br><br><b>-debug <level></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the debug level for <i>jhat</i>. Higher levels provide more verbose output.<br><br><b>-force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces parsing of the heap dump even if errors are encountered during the process.<br><br><b>-J<flag></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes <flag> directly to the underlying JVM that runs <i>jhat</i>. Useful for setting JVM memory limits (e.g., <b>-Xmx</b>).<br><br>


title: DESCRIPTION
content:
<i>jhat</i> (Java Heap Analysis Tool) is a command-line utility bundled with older Java Development Kit (JDK) versions. It parses a Java heap dump file and launches a web server, allowing users to browse and query the objects within the heap dump using a web browser. It's particularly useful for diagnosing memory leaks and understanding memory consumption patterns in Java applications. After a heap dump is generated (often using <i>jmap -dump</i>), <i>jhat</i> can be pointed to this file to provide an interactive view of objects, their references, and paths to Garbage Collection (GC) roots. While powerful for basic analysis, <i>jhat</i> can be memory-intensive for large heap dumps and has been superseded by more advanced and efficient tools in newer JDK versions.


title: CAVEATS
content:
<i>jhat</i> can consume significant amounts of memory, potentially more than the heap dump itself, especially for large heap files. Its performance can be slow, and the interactive web interface might become sluggish with extensive data.<br>A critical limitation is its deprecation and subsequent removal starting from <b>JDK 9</b>. For modern Java development, more robust and efficient tools like Eclipse Memory Analyzer (MAT), YourKit Java Profiler, or the <i>jcmd</i> utility (which can perform heap analysis via <i>jcmd <pid> GC.heap_dump</i> and then use external tools) are recommended for in-depth heap analysis.


title: <I>WEB INTERFACE NAVIGATION</I>
content:
After <i>jhat</i> successfully parses a heap dump and starts its HTTP server, you can access the analysis through a web browser (e.g., <i>http://localhost:7000/</i>). The interface typically offers:<br> - <b>All Classes</b>: A list of all loaded classes.<br> - <b>Show heap histogram</b>: A summary of object counts and sizes.<br> - <b>Show instance counts for all classes (excluding platform)</b>: Similar to histogram but excluding system classes.<br> - <b>Show roots</b>: Displays Garbage Collection roots.<br> - <b>OQL Query</b>: Allows execution of Object Query Language (OQL) queries to find specific objects or object patterns.


title: <I>TYPICAL USAGE WORKFLOW</I>
content:
1.  <b>Generate Heap Dump</b>: Use <i>jmap</i> to create a heap dump.<br>    <i>Example:</i> <code>jmap -dump:format=b,file=/tmp/heapdump.hprof <pid></code><br>2.  <b>Analyze with jhat</b>: Run <i>jhat</i> against the generated dump file.<br>    <i>Example:</i> <code>jhat -port 8000 /tmp/heapdump.hprof</code><br>3.  <b>Browse</b>: Open a web browser to <i>http://localhost:8000/</i> to explore the heap contents.<br>4.  <b>Query</b>: Use the OQL interface to run specific queries for objects, references, and paths to GC roots.


title: HISTORY
content:
<i>jhat</i> was introduced as part of the Java Development Kit (JDK) 6 to provide a built-in tool for heap dump analysis. Its primary goal was to offer a convenient, accessible way to explore memory issues without requiring complex external tools. However, due to its significant memory footprint, performance limitations, and the emergence of more sophisticated profiling and analysis tools, <i>jhat</i> was deprecated in <b>JDK 8</b> and completely removed from the JDK distribution starting with <b>JDK 9</b>. The functionality is now typically covered by <i>jcmd</i> for dump generation and external tools for analysis.


title: PARAMETERS
content:
<b><b>-de</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete the entire EXIF header from the image.<br><br><b><b>-autorot</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Losslessly auto-rotate JPEG images based on their EXIF orientation tag. This physically rotates the image data without recompression, preserving quality.<br><br><b><b>-ft</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the file modification date to the EXIF date/time. Useful for correcting file system timestamps.<br><br><b><b>-P</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserve the original file modification time when writing changes back to the file. By default, modification time is updated.<br><br><b><b>-st</b> <i>&lt;date-time&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set all image timestamps (EXIF and file modification) to the specified date and time. Format: <i>YYYY:MM:DD-HH:MM:SS</i>.<br><br><b><b>-ts</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the timestamp for the image (EXIF date/time).<br><br><b><b>-rkt</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove the EXIF thumbnail from the header. This can reduce file size slightly.<br><br><b><b>-rt</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove all EXIF tags except for the orientation tag. Useful for privacy or reducing metadata clutter.<br><br><b><b>-dt</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete the JPEG comment field from the image.<br><br><b><b>-mkfile</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create an empty EXIF header if one is missing from the image.<br><br><b><b>-n</b><i>&lt;fmt&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rename files based on their EXIF date/time. The format string <i>&lt;fmt&gt;</i> supports specifiers like <i>%%Y</i> (year), <i>%%m</i> (month), <i>%%d</i> (day), <i>%%H</i> (hour), <i>%%M</i> (minute), <i>%%S</i> (second).<br><br><b><b>-te</b> <i>&lt;target-dir&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a target directory where renamed files should be moved. Used in conjunction with <b>-n</b>.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more details about operations.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable quiet output, suppressing most messages.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br>


title: DESCRIPTION
content:
<i>jhead</i> is a command-line utility designed for interacting with EXIF (Exchangeable Image File Format) data embedded within JPEG image files. It allows users to read, modify, and delete EXIF information, which includes details like capture date and time, camera model, exposure settings, GPS coordinates, and image orientation. <br><br>Beyond simply displaying metadata, <i>jhead</i> can perform useful operations such as losslessly rotating JPEG images based on their EXIF orientation tag, renaming files according to the capture date, or adjusting timestamps. It's particularly useful for photographers and image organizers who need to manage large collections of digital photos and ensure metadata accuracy or consistency. Its simplicity and command-line interface make it suitable for scripting and batch processing.


title: CAVEATS
content:
<i>jhead</i> operates directly on JPEG files and, like any direct file manipulation tool, carries a risk of data loss or corruption if misused or in case of unexpected file issues. Always back up important files before performing extensive modifications.<br><br>While excellent for EXIF, it does not offer comprehensive support for other metadata standards like XMP or IPTC, for which tools like <i>exiftool</i> are more suitable.<br><br>Lossless rotation with <b>-autorot</b> is guaranteed only if image dimensions are multiples of 8 or 16 (depending on chroma subsampling). Otherwise, the image may be recompressed, leading to generational loss.


title: LOSSLESS ROTATION CAPABILITY
content:
One of <i>jhead</i>'s standout features is its ability to perform true lossless JPEG rotation. Unlike recompression, which degrades image quality, <i>jhead</i> manipulates the JPEG header and image data blocks directly, preserving the original image quality. This is particularly valuable for correcting image orientation from cameras without losing detail.


title: BATCH PROCESSING FOR PHOTO ORGANIZATION
content:
Due to its command-line nature, <i>jhead</i> is highly effective for batch processing. It can be easily integrated into shell scripts or used with commands like <i>find</i> and <i>xargs</i> to automate tasks such as renaming entire directories of photos based on their capture dates, correcting timestamps, or stripping unnecessary metadata from large collections.


title: HISTORY
content:
<i>jhead</i> was created by Matthias W. Neeracher, with its development starting around the late 1990s/early 2000s. It emerged as digital cameras became commonplace and the need for a simple, command-line tool to manage EXIF data in JPEG files grew. It filled a niche for lightweight, efficient batch operations like renaming files by capture date and performing lossless rotations, making it a valuable utility for photographers and system administrators before more comprehensive cross-format metadata tools became widely available.


title: SYNOPSIS
content:
<b>jhsdb</b> <i>&lt;subcommand&gt;</i> [<i>&lt;options&gt;</i>] [<i>&lt;pid&gt;</i> | <i>&lt;executable&gt;</i> <i>&lt;core_file&gt;</i>]<br><br>Common Subcommands:<br><i><b>jhsdb debugd</b></i> [<i>-debug</i>] [<i>-client</i> | <i>-server</i>] <i>&lt;pid&gt;</i><br><i><b>jhsdb hsdb</b></i> [<i>-debug</i>] [<i>-client</i> | <i>-server</i>] [<i>&lt;pid&gt;</i> | <i>&lt;executable&gt;</i> <i>&lt;core_file&gt;</i>]<br><i><b>jhsdb jstack</b></i> [<i>-exe &lt;executable&gt;</i>] [<i>-core &lt;core_file&gt;</i>] [<i>-l</i>] [<i>-e</i>] [<i>-m</i>] [<i>-F</i>] [<i>&lt;pid&gt;</i>]<br><i><b>jhsdb jinfo</b></i> [<i>-sysprops</i>] [<i>-flags</i>] [<i>-l</i>] [<i>-e</i>] [<i>&lt;pid&gt;</i> | <i>&lt;executable&gt;</i> <i>&lt;core_file&gt;</i>]<br><i><b>jhsdb jmap</b></i> [<i>-heap</i>] [<i>-histo</i>] [<i>-dump:&lt;options&gt;</i>] [<i>&lt;pid&gt;</i> | <i>&lt;executable&gt;</i> <i>&lt;core_file&gt;</i>]<br><i><b>jhsdb jsync</b></i> [<i>&lt;pid&gt;</i> | <i>&lt;executable&gt;</i> <i>&lt;core_file&gt;</i>]<br><i><b>jhsdb clrstat</b></i>


title: PARAMETERS
content:
<b>debugd</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches a HotSpot Serviceability Agent (SA) debug server. Used for remotely debugging Java applications or analyzing core dumps, allowing other SA clients (like another jhsdb instance or a GUI debugger) to connect.<br><br><b>hsdb</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches the HotSpot Debugger. This subcommand provides either a command-line or graphical debugger (if supported by the environment) for inspecting the internal state of a running JVM or analyzing a core dump. It's the primary interactive interface for SA tools.<br><br><b>jstack</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints Java thread stack traces for the specified Java process or core file. Useful for diagnosing deadlocks, long-running operations, or unresponsive applications. Options like '-l' provide more detail on locks.<br><br><b>jinfo</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints Java configuration information for a specified process or core file. This includes Java system properties, JVM command-line flags, and other environment details. Useful for verifying JVM settings.<br><br><b>jmap</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints memory-related statistics for a Java process or core file. It can show heap usage, object counts, or dump the heap to a file for offline analysis with tools like Eclipse Memory Analyzer. Options like '-heap' and '-histo' are common.<br><br><b>jsync</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints Java thread synchronization information for a specified process or core file. This can help identify issues related to monitor contention and synchronization blocks.<br><br><b>clrstat</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clears internal HotSpot VM performance counter statistics. This is primarily used in development or testing scenarios to reset VM counters without restarting the process.<br><br>


title: DESCRIPTION
content:
<i>jhsdb</i> is a powerful command-line utility in the Java Development Kit (JDK) for debugging and analyzing Java HotSpot Virtual Machines. Introduced in JDK 9, it consolidates the functionalities of several older tools like <i>hsdb</i> and <i>jsadebugd</i>, providing a unified interface for the HotSpot Serviceability Agent (SA) tools.<br><br>This tool is essential for advanced troubleshooting, post-mortem analysis of core dumps, and live debugging of Java processes. It allows developers and administrators to inspect the internal state of a running JVM or a core dump, providing insights into threads, memory, classloaders, and other low-level VM structures. Its subcommands enable various diagnostic tasks, from printing thread stack traces (similar to <i>jstack</i>) and heap summaries (similar to <i>jmap</i>) to launching a full debugger UI (<i>hsdb</i>) or a remote debugging server (<i>debugd</i>). It's crucial for diagnosing complex issues like deadlocks, memory leaks, or native crashes within the JVM.


title: CAVEATS
content:
<i>jhsdb</i> requires appropriate permissions to attach to a running process or read a core dump. On Linux, this often means running as <i>root</i> or with <i>sudo</i>, or ensuring the user has necessary capabilities (e.g., via <i>ptrace</i> permissions).<br><br>Analyzing core dumps typically requires the original executable that generated the core dump, especially for complex scenarios or if debugging symbols are needed. The effectiveness of <i>jhsdb</i> relies on the presence of these symbols, which might be stripped in production environments.<br><br>While powerful, <i>jhsdb</i> is primarily designed for advanced users, VM developers, and experienced troubleshooters due to its low-level nature and the complexity of the information it provides.


title: SERVICEABILITY AGENT (SA)
content:
<i>jhsdb</i> is built upon the HotSpot Serviceability Agent (SA) framework. The SA is a Java library that provides an API for inspecting the internal state of a running HotSpot JVM or a core dump. It's an out-of-process tool, meaning it doesn't run within the target JVM, preventing interference with the application being debugged.


title: CORE DUMP ANALYSIS
content:
One of the most powerful features of <i>jhsdb</i> is its ability to perform post-mortem analysis on Java process core dumps. This allows for detailed investigation of application and JVM state at the time of a crash, without affecting a live production system. Ensure the core dump includes the necessary JVM memory regions.


title: HISTORY
content:
<i>jhsdb</i> was introduced in JDK 9 as part of a significant modularization effort and consolidation of diagnostic tools. Prior to JDK 9, the functionalities now encompassed by <i>jhsdb</i> were provided by separate tools such as <i>hsdb</i> (the HotSpot Debugger) and <i>jsadebugd</i> (the Serviceability Agent debug server).<br><br>The motivation behind <i>jhsdb</i> was to provide a single, consistent command-line interface for the HotSpot Serviceability Agent (SA) tools, making it easier for users to access and utilize these powerful low-level debugging and analysis capabilities without needing to learn multiple commands.


title: SYNOPSIS
content:
<b>jinfo</b> [<i>options</i>] <i>&lt;pid&gt;</i><br><b>jinfo</b> [<i>options</i>] <i>&lt;executable&gt; &lt;core&gt;</i>


title: PARAMETERS
content:
<b>-flags</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Prints the VM flags (command-line arguments passed to the JVM). This includes both standard and non-standard options.<br><br><b>-sysprops</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Prints the Java system properties for the target JVM. These are key-value pairs accessible via <i>System.getProperty()</i>.<br><br><b>-F</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Forces an operation on a hung or unresponsive Java process. Use with caution as it may have side effects.<br><br><b>-h, -help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Displays the command's help message and exits.<br><br><b>&lt;pid&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>The process ID of the target Java Virtual Machine.<br><br><b>&lt;executable&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>The Java executable from which the core dump was produced (used with <i>&lt;core&gt;</i>).<br><br><b>&lt;core&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>The core dump file of the Java process (used with <i>&lt;executable&gt;</i>).<br><br>


title: DESCRIPTION
content:
<b>jinfo</b> is a command-line utility provided with the Java Development Kit (JDK) designed for inspecting a running Java Virtual Machine (JVM). Its primary function is to print Java configuration information, including JVM system properties and command-line flags, for a specified Java process or a core file. This tool is invaluable for diagnosing issues, verifying runtime configurations, and understanding how a Java application is running without restarting it. It allows developers and administrators to quickly ascertain the active JVM arguments and properties that influence application behavior, memory settings, garbage collection, and more. <b>jinfo</b> provides a snapshot of the JVM's current configuration, aiding in troubleshooting and performance tuning efforts.


title: CAVEATS
content:
<b>jinfo</b> requires appropriate permissions to attach to the target Java process, typically meaning the same user or root privileges. Attaching to a running JVM might momentarily pause the application, although this impact is generally minimal for <b>jinfo</b> compared to tools like <b>jstack</b> or <b>jmap</b>. It is exclusively for Java processes; attempting to use it on non-Java processes will result in an error.


title: FINDING THE PID
content:
To use <b>jinfo</b>, you first need the Process ID (PID) of the target Java application. This can be obtained using the <b>jps</b> (Java Virtual Machine Process Status Tool) command, or standard Linux utilities like <b>ps aux | grep java</b>.


title: VM FLAGS VS. SYSTEM PROPERTIES
content:
JVM flags are command-line arguments passed directly to the Java executable (e.g., <i>-Xmx512m</i>, <i>-XX:+UseG1GC</i>). They control the JVM's internal behavior and resource allocation. Java system properties are key-value pairs set either via <i>-Dproperty=value</i> on the command line or programmatically using <i>System.setProperty()</i>. They provide configuration information to the Java application itself.


title: HISTORY
content:
The <b>jinfo</b> utility has been a staple diagnostic tool within the Java Development Kit (JDK) since JDK 5. Its purpose was to provide insights into a running JVM's configuration. However, with the evolution of the JDK and the introduction of more comprehensive tools, <b>jinfo</b> has been deprecated starting from JDK 11. Its functionality has been largely superseded and integrated into the more versatile <b>jcmd</b> command, which offers a broader range of diagnostic capabilities, and also accessible via <b>jhsdb jinfo</b> for attaching to processes and core dumps.


title: SYNOPSIS
content:
<pre>jmeter [options]</pre><br>Example:<br><pre>jmeter -n -t my_test_plan.jmx -l results.jtl -e -o report_dashboard</pre>


title: PARAMETERS
content:
<b>-n, --nongui</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies JMeter should run in non-GUI (command-line) mode. Essential for automated and large-scale test executions.<br><br><b>-t &lt;test_plan.jmx&gt;, --testfile &lt;test_plan.jmx&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the JMeter test plan (.jmx file) to be executed.<br><br><b>-l &lt;results.jtl&gt;, --logfile &lt;results.jtl&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the file where test results (e.g., sample data) will be saved. Usually a .jtl file.<br><br><b>-e, --report-generate-dashboard</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates an HTML dashboard report after the test run. This option typically requires the `-o` option.<br><br><b>-o &lt;output_folder&gt;, --report-output &lt;output_folder&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output folder for the generated HTML dashboard report. This folder must be empty or non-existent.<br><br><b>-D &lt;property=value&gt;, --systemproperty &lt;property=value&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines a Java system property. Can be used to override default JMeter behavior or configure plugins.<br><br><b>-J &lt;property=value&gt;, --jmeterproperty &lt;property=value&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines a JMeter property. These properties are accessible within the test plan.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information and a list of available command-line options.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the JMeter version information.<br><br><b>-s, --server</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts JMeter in server mode, typically used for distributed testing.<br><br><b>-r, --remote_enable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables remote execution of tests on servers defined in `jmeter.properties`.<br><br><b>-R &lt;host1,host2...&gt;, --remote_hosts &lt;host1,host2...&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a comma-separated list of remote JMeter server hosts to run the test on.<br><br><b>-X, --remoteexit</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exits the remote JMeter servers gracefully after the test completes when used with `-r`.<br><br>


title: DESCRIPTION
content:
Apache JMeter is a <i>100% pure Java</i> application designed to load test functional behavior and measure performance. The `jmeter` command is the primary entry point for launching the JMeter application. It can operate in two main modes: a <b>Graphical User Interface (GUI) mode</b> for creating and debugging test plans, and a <b>Non-GUI (command-line) mode</b> for executing large-scale tests without the overhead of the GUI. JMeter can simulate heavy loads on servers, groups of servers, networks, or objects to test their strength and analyze overall performance under various load types. It supports a wide range of protocols and technologies, including Web (HTTP/HTTPS), FTP, Database via JDBC, LDAP, JMS, Mail (SMTP, POP3, IMAP), and more. Its extensible architecture allows for custom plugins and scripting to meet diverse testing needs.


title: CAVEATS
content:
<ul><li><b>Resource Intensive:</b> JMeter, especially in GUI mode or with large test plans, can consume significant CPU and memory resources.</li><li><b>JVM Tuning:</b> Optimal performance often requires proper Java Virtual Machine (JVM) tuning, such as adjusting heap size for the JMeter process.</li><li><b>Not a Browser:</b> By default, JMeter is a protocol-level tool. It does not execute JavaScript, render HTML, or process CSS like a real web browser. Simulating complex browser-side actions might require additional configuration or plugins.</li><li><b>Test Plan Complexity:</b> Poorly designed or excessively complex test plans can lead to inaccurate results or inefficient resource consumption.</li><li><b>Monitoring:</b> It is crucial to monitor both the JMeter client/server and the target system's resources thoroughly during a load test for accurate analysis.</li></ul>


title: GUI VS. NON-GUI OPERATION
content:
The `jmeter` command can launch JMeter in two distinct modes. The <b>GUI mode</b> (default when no options are provided) is primarily used for building, debugging, and analyzing test plans interactively. The <b>Non-GUI mode</b> (activated with the `-n` option) is optimized for executing tests, especially large-scale or automated runs, as it consumes fewer resources by omitting the graphical interface. It's a common best practice to design and debug test plans in GUI mode, then execute them in non-GUI mode.


title: AUTOMATED REPORT GENERATION
content:
With the combination of `-e` and `-o` options in non-GUI mode, JMeter can automatically generate a comprehensive HTML dashboard report after the test execution. This report provides various metrics, graphs, and statistics, offering a quick overview of performance trends, errors, and throughput without needing to manually process the raw JTL results. This feature significantly streamlines result analysis.


title: EXTENSIBILITY VIA PLUGINS
content:
JMeter's functionality can be significantly extended through a rich ecosystem of third-party and community-contributed plugins. These plugins add support for new protocols, listeners, samplers, functions, and more. Users can install plugins, often through the JMeter Plugins Manager, to tailor the tool to specific testing requirements, demonstrating the flexibility and adaptability of the `jmeter` command's underlying application.


title: HISTORY
content:
Apache JMeter was originally developed by <i>Stefano Mazzocchi</i> of Apache Software Foundation in 1998, primarily for testing the performance of Apache JServ. It was later redesigned to become a general-purpose load testing tool capable of testing a wide range of services and protocols. JMeter became a Top-Level Apache Project in 2004 and has since seen continuous development and a growing community, expanding its capabilities to support modern web technologies and distributed testing.


title: SYNOPSIS
content:
<b>jmtpfs</b> [<i>options</i>] <i>&lt;mountpoint&gt;</i><br><b>jmtpfs</b> <i>--list</i><br><b>jmtpfs</b> <i>--help</i><br><b>jmtpfs</b> <i>--version</i>


title: PARAMETERS
content:
<b><b>--list</b>, <b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available MTP devices and their respective USB bus and device numbers.<br><br><b><b>--device</b> <i>&lt;busnum&gt;,&lt;devnum&gt;</i>, <b>-d</b> <i>&lt;busnum&gt;,&lt;devnum&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular MTP device to mount using its USB bus and device numbers. These can be found via <b>--list</b>.<br><br><b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information about the command and its options, then exits.<br><br><b><b>--version</b>, <b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of <i>jmtpfs</i> and exits.<br><br><b><b>--verbose</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, which can be helpful for debugging connection or transfer issues.<br><br><b><b>--single</b>, <b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Mounts only the first detected storage unit on the MTP device, useful for devices with multiple internal or external storage options.<br><br><b><b>-o</b> <i>&lt;fuse_option&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes specific options directly to the FUSE mount command (e.g., <i>allow_other</i> to permit other users to access the mount, <i>ro</i> for read-only mount, <i>uid</i>, <i>gid</i>).<br><br>


title: DESCRIPTION
content:
<i>jmtpfs</i> is a <b>FUSE</b> (Filesystem in Userspace) driver designed to mount <b>Media Transfer Protocol (MTP)</b> devices as standard Linux filesystems. MTP is a common protocol for data transfer on devices like Android smartphones, tablets, and digital cameras.<br><br>This command simplifies accessing and managing files on these devices by allowing them to be treated as regular directories. Once mounted, users can leverage standard command-line utilities such as <b>ls</b>, <b>cp</b>, <b>mv</b>, <b>rm</b>, and <b>rsync</b> to interact with files directly on the MTP device. It uses the <b>libmtp</b> library for robust device communication, offering a lightweight and flexible alternative to other MTP access methods, especially for command-line users or scripting.


title: CAVEATS
content:
<b>Unmounting Safely</b>: Always use <b>umount</b> on the <i>jmtpfs</i> mount point before disconnecting the device to prevent data corruption.<br><b>Permissions</b>: Depending on your system and USB device access rules, <i>jmtpfs</i> might require <b>sudo</b> or appropriate udev rules for full access.<br><b>MTP Quirks</b>: The MTP protocol can be finicky. Some devices or specific operations (like direct file renaming/moving between directories) might exhibit unexpected behavior or be slower than expected.<br><b>Performance</b>: MTP transfer speeds can be slower compared to direct USB mass storage access.<br><b>No Linux-specific features</b>: MTP does not support symbolic links, hard links, or granular file permissions (all files will appear executable).


title: DEPENDENCIES
content:
<i>jmtpfs</i> relies on the <b>libmtp</b> library for MTP protocol communication and <b>libfuse</b> for integrating with the Linux kernel's FUSE framework. Ensure these libraries are installed on your system for <i>jmtpfs</i> to function correctly.


title: MOUNT POINT
content:
The directory specified as the <i>&lt;mountpoint&gt;</i> must be an existing and empty directory that the user executing <i>jmtpfs</i> has write permissions to.


title: TROUBLESHOOTING
content:
If your MTP device isn't detected or isn't mounting, ensure it's set to 'File Transfer' or 'MTP' mode on the device itself. Use <b>jmtpfs --list</b> to check for device detection. Review <b>dmesg</b> or <b>lsusb</b> output for any underlying USB connection issues.


title: HISTORY
content:
<i>jmtpfs</i> was developed as a more robust and user-friendly alternative to earlier MTP FUSE filesystems, notably <i>mtpfs</i>. It leverages the underlying <b>libmtp</b> library for communication with devices, which provides a consistent and widely supported interface. Being open-source, it's widely adopted and available in most Linux distribution repositories, offering a stable solution for MTP device access from the command line.


title: SYNOPSIS
content:
<b>jo</b> [<i>options</i>] [<i>key=value</i> ...]<br><b>jo</b> -a [<i>options</i>] [<i>value</i> ...]


title: PARAMETERS
content:
<b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a JSON array instead of an object.<br><br><b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pretty-print the JSON output for readability.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force string interpretation for the following values, overriding automatic type detection.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force null interpretation for the following values.<br><br><b>-b</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force boolean interpretation for the following values (e.g., 'true', 'false').<br><br><b>-i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force integer interpretation for the following values.<br><br><b>-F <i>file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read content from <i>file</i> and embed it as a JSON string value.<br><br><b>-L <i>file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read content from <i>file</i> and embed it as a literal (unescaped) JSON value. Use with caution.<br><br><b>-e</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Escape forward slashes (<b>/</b>) in string values.<br><br><b>-u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unbuffered output; flush after each write.<br><br><b>-B</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print output to standard error instead of standard output.<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b>--</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Marks the end of options, allowing arguments that start with <b>-</b> to be treated as keys or values.<br><br>


title: DESCRIPTION
content:
<i>jo</i> is a lightweight command-line utility designed to simplify the creation of JSON objects and arrays directly from shell arguments. It automates the often tedious process of correctly quoting, escaping, and formatting JSON data, making it ideal for shell scripting and rapid prototyping. <i>jo</i> intelligently infers data types, distinguishing between strings, numbers, booleans (<b>true</b>/<b>false</b>), and <b>null</b> values. It supports various ways to build complex structures, including nesting objects and arrays, and embedding file contents. Its ease of use makes it a powerful companion to tools like <i>curl</i> for sending API requests or <i>jq</i> for parsing and manipulating JSON, streamlining workflows where JSON data needs to be programmatically generated.


title: CAVEATS
content:
<i>jo</i> is a third-party utility and is not part of the standard GNU core utilities; it must be installed separately (e.g., via a package manager like <b>apt</b>, <b>dnf</b>, or <b>brew</b>). Its automatic type inference, while convenient, may require explicit type forcing (e.g., with <b>-s</b> for strings) for ambiguous cases or specific formatting needs. Complex nested structures or very large inputs might be more efficiently handled by programming languages or libraries dedicated to JSON parsing/generation.


title: AUTOMATIC TYPE INFERENCE
content:
<i>jo</i> intelligently attempts to determine the data type of each value provided (string, number, boolean, null) based on its format, simplifying command syntax and reducing manual effort.


title: HANDLING FILE CONTENT
content:
Arguments like <b><i>key=@filename</i></b> or options like <b>-F</b> and <b>-L</b> allow embedding the content of files directly into JSON objects or arrays, useful for including large text blocks or pre-formatted JSON snippets.


title: NESTED STRUCTURES AND PIPING
content:
Complex JSON structures can be built by nesting <i>jo</i> commands, where the output of one <i>jo</i> command is piped as an argument to another, enabling the creation of intricate objects and arrays dynamically.


title: HISTORY
content:
<i>jo</i> was created by <b>J. M. S. de Oliveira</b> and first released around 2017. Its development aimed to provide a simple, robust, and intuitive way to generate JSON data directly from the shell, addressing the common need in scripting to construct well-formed JSON payloads without relying on more complex solutions like <i>Python</i> or <i>Node.js</i> scripts, or cumbersome string manipulations with <i>sed</i> and <i>awk</i>. It quickly gained popularity in the DevOps and scripting communities due to its efficiency and ease of integration.


title: PARAMETERS
content:
<b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays more information, including the Process ID (PID) of each job.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists only jobs whose status has changed since the last notification.<br><br><b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows only the Process ID (PID) of each job, without any other information.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restricts the display to only running jobs.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restricts the display to only stopped jobs.<br><br><b>[<i>jobspec</i> ...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more jobs to display. A job can be specified by its job number (e.g., <i>%1</i>), a string prefix of its command name (e.g., <i>%vim</i>), or special symbols like <i>%%</i> or <i>%+</i> for the current job, and <i>%-</i> for the previous job.<br><br>


title: DESCRIPTION
content:
The <b>jobs</b> command is a shell built-in that displays the status of jobs started in the current shell session. It allows users to monitor processes that have been suspended (stopped) or are running in the background. Each job is assigned a unique job number within the shell, distinct from its Process ID (PID). <b>jobs</b> provides an overview of these backgrounded or stopped tasks, showing their state (e.g., 'Running', 'Stopped', 'Done') and the command line that initiated them. This command is crucial for job control, enabling users to manage multiple concurrent tasks within a single terminal session, often in conjunction with commands like <b>fg</b> (foreground) and <b>bg</b> (background). It helps maintain an organized and efficient interactive shell environment.


title: CAVEATS
content:
The <b>jobs</b> command is a shell built-in, meaning its exact behavior and available options can vary slightly between different shells (e.g., Bash, Zsh, Dash). It only displays jobs associated with the <i>current</i> shell session; it cannot list processes or jobs started from other terminals or system-wide daemon processes.


title: JOB CONTROL OVERVIEW
content:
Job control is a feature of Unix shells that allows a user to control the execution of processes. It enables the user to stop, background, or foreground processes launched from the shell. The <b>jobs</b> command is the primary tool for viewing the state of these controlled processes.


title: JOB ID VS. PID
content:
When a command is sent to the background or stopped, the shell assigns it a 'job ID' (e.g., [1], [2]). This ID is distinct from the system's Process ID (PID). Job IDs are unique to the current shell session and are used for shell built-ins like <b>fg</b>, <b>bg</b>, and <b>kill</b> (when specifying <i>jobspecs</i>), while PIDs are system-wide unique identifiers for processes.


title: OUTPUT FORMAT
content:
By default, <b>jobs</b> displays each job with its job ID (e.g., [1]), its status (e.g., 'Running', 'Stopped', 'Done'), and the command line that was executed. If the <b>-l</b> option is used, the Process ID (PID) is also included. The '+' symbol indicates the current job (the one that would be affected by <b>fg</b> or <b>bg</b> without arguments), and '-' indicates the previous job.


title: HISTORY
content:
Job control, including the concept of background jobs and the ability to list them via commands like <b>jobs</b>, was a significant enhancement introduced in Unix-like operating systems, notably with the 4.1BSD release. This feature allowed users to manage multiple processes from a single terminal, suspending and resuming tasks as needed. The <b>jobs</b> command has since become a standard and integral part of all POSIX-compliant shells, reflecting its fundamental role in interactive shell management.


title: SYNOPSIS
content:
<b>joe</b> [<I>options</I>] [<I>file</I> ...]<br><b>jmacs</b> [<I>options</I>] [<I>file</I> ...]<br><b>jstar</b> [<I>options</I>] [<I>file</I> ...]<br><b>rjoe</b> [<I>options</I>] [<I>file</I> ...]


title: PARAMETERS
content:
<b>-wordwrap</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Toggles word wrap mode on for the current buffer.<br><br><b>-autoindent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Toggles auto-indent mode on for the current buffer.<br><br><b>-lightoff</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turns off the cursor and block highlighting, using inverse video instead.<br><br><b>-isearch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the editor in incremental search mode.<br><br><b>-ex-editor</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Emulates the <i>ex</i> editor behavior for scripting purposes.<br><br><b>-noxon</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables XON/XOFF flow control, useful for some terminals.<br><br><b>-nonewlines</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <i>joe</i> from adding a newline character at the end of files if missing.<br><br><b>-help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a summary of command-line options and usage.<br><br><b>-rcfile <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative configuration file to load instead of the default.<br><br><b>-concept <concept></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows help for a specific concept or keybinding (e.g., 'ctrl-k').<br><br><b><file> ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more files to open and edit. Multiple files open in separate buffers.<br><br>


title: DESCRIPTION
content:
<i>joe</i> (Joe's Own Editor) is a full-featured, user-friendly terminal-based text editor widely available on Unix-like operating systems. It is designed to be intuitive for new users, especially those familiar with WordStar, Turbo C/Pascal, or common PC text editors, due to its familiar control-key commands.<br><br><i>joe</i> offers a rich set of features, including syntax highlighting for many programming languages, multiple open windows (buffers), regular expression search and replace, spell checking, auto-indentation, and customizable key bindings. It supports pipes, filters, and macro recording, making it powerful for both simple text editing and complex programming tasks. <i>joe</i> aims to strike a balance between the simplicity of <i>nano</i> and the power of <i>vi</i> or <i>emacs</i>, providing a comfortable editing environment in the terminal.


title: CAVEATS
content:
While user-friendly, some advanced features might require consulting the documentation. Its default keybindings, while intuitive for some, might be unfamiliar to users accustomed to <i>vi</i> or <i>emacs</i> out-of-the-box. As a terminal-based editor, it relies on the terminal's capabilities and lacks graphical user interface (GUI) features.


title: KEYBINDINGS
content:
<i>joe</i> is famous for its intuitive and consistent control-key commands. Many operations start with <B>Ctrl+K</B> (the command prefix), followed by another key. For example, <B>Ctrl+K H</B> brings up help, <B>Ctrl+K F</B> for find, <B>Ctrl+K D</B> for delete line, <B>Ctrl+K W</B> to save a file, and <B>Ctrl+K X</B> to exit. It also supports <B>Ctrl+C</B> for break and <B>Ctrl+Z</B> for undo, similar to common GUI editors.


title: DIFFERENT MODES
content:
<i>joe</i> can be invoked using different names, which makes it emulate other editors or modes:<br><B>jmacs</B>: Emulates Emacs keybindings.<br><B>jstar</B>: Emulates WordStar keybindings.<br><B>rjoe</B>: A restricted version of <i>joe</i>, often used in locked-down environments, which prevents access to shell commands or file operations outside the current directory.


title: HISTORY
content:
Joe's Own Editor (<i>joe</i>) was created by Joseph H. Allen and first released in 1988. It was developed to offer a powerful yet intuitive text editing experience on Unix-like systems, filling a niche between simpler editors like <i>ed</i> and the more complex <i>vi</i> or <i>emacs</i>. Its design philosophy centered on providing common PC-style control-key combinations, making it immediately familiar to users coming from DOS or other PC environments (like WordStar or Borland's Turbo series). Over the years, <i>joe</i> has been maintained and updated, gaining features like syntax highlighting, multiple windows, and a robust macro language, solidifying its place as a viable and popular text editor for terminal environments.


title: SYNOPSIS
content:
john [OPTIONS] [PASSWORD_FILES]<br><br>Common usage examples:<br><i>john --wordlist=WORDLIST_FILE [PASSWORD_FILE]</i><br><i>john --incremental[=MODE] [PASSWORD_FILE]</i><br><i>john --single [PASSWORD_FILE]</i><br><i>john --show [PASSWORD_FILE]</i><br><i>john --format=FORMAT [PASSWORD_FILE]</i>


title: PARAMETERS
content:
<b><b>--wordlist=<i>FILE</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a wordlist file for dictionary attacks.<br><br><b><b>--rules[=<i>NAME</i>]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Applies wordlist rules (e.g., appending numbers, changing case) during dictionary attacks.<br><br><b><b>--incremental[=<i>MODE</i>]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables incremental (brute-force) mode. <i>MODE</i> defines the character set and attack strategy (e.g., <i>ASCII</i>, <i>ALNUM</i>, <i>DIGITS</i>).<br><br><b><b>--single</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables single crack mode, attempting permutations based on user information.<br><br><b><b>--format=<i>NAME</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the hash format to use (e.g., <i>crypt</i>, <i>raw-MD5</i>, <i>nt</i>, <i>sha512crypt</i>). Use <i>--list=formats</i> to see available options.<br><br><b><b>--session=<i>NAME</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a name to the current cracking session for later resumption.<br><br><b><b>--restore[=<i>NAME</i>]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restores a previously saved cracking session.<br><br><b><b>--show</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays all successfully cracked passwords for the specified input files.<br><br><b><b>--stdout</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs generated candidate passwords to standard output instead of cracking.<br><br><b><b>--stdin</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads candidate passwords from standard input for cracking.<br><br><b><b>--mask=<i>MASK</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables mask mode, a flexible brute-force attack with fixed parts and unknown characters.<br><br><b><b>--dev=<i>TYPE</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the OpenCL/CUDA device to use for GPU-accelerated cracking.<br><br><b><b>--fork=<i>N</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forks <i>N</i> processes for parallel cracking on multi-core CPUs.<br><br><b><b>--test</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a benchmark of supported hashing algorithms on the current system.<br><br><b><b>--pot=<i>FILE</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the location of the <i>john.pot</i> file, where cracked passwords are stored.<br><br>


title: DESCRIPTION
content:
<i>John the Ripper</i> (JtR) is a free and open-source password cracking software tool. Its primary purpose is to detect weak system passwords, supporting hundreds of hash and cipher types, including various network protocols and encrypted filesystems.<br><br>JtR combines several password cracking modes, such as <i>dictionary attacks</i> (using wordlists), <i>brute-force attacks</i> (incremental mode), and <i>single crack mode</i> (using user information). It can automatically detect hash types and features session saving/restoring, allowing long cracking sessions to be paused and resumed.<br><br>Widely used by security professionals for auditing password strength and by penetration testers to uncover weak credentials, JtR is often used with other tools to extract hashes from various sources like `/etc/shadow` or encrypted archives. The <i>Jumbo</i> version extends its capabilities with even more hash types and features.


title: CAVEATS
content:
<b>Ethical Use:</b> <i>John the Ripper</i> is a powerful security auditing tool. Its use should be strictly limited to systems where explicit permission has been granted, as misuse can have severe legal consequences.<br><br><b>Performance:</b> Cracking speed is highly dependent on hash complexity, password strength, and available hardware (CPU/GPU). Longer and more complex passwords require significantly more time and computational resources.<br><br><b>Hash Pre-processing:</b> Often, password hashes need to be extracted and converted into a format <i>John the Ripper</i> understands using helper utilities like <i>unshadow</i>, <i>zip2john</i>, or <i>rar2john</i>.


title: EXTERNAL UTILITIES
content:
<i>John the Ripper</i> is often used in conjunction with a suite of specialized helper utilities designed to extract password hashes from various file types or system formats. These include tools like <i>zip2john</i>, <i>rar2john</i>, <i>pdf2john</i>, <i>office2john</i>, <i>ssh2john</i>, and <i>wpapsk2john</i>, which convert archives, documents, or network captures into a format consumable by JtR.


title: POT FILE (JOHN.POT)
content:
The <i>john.pot</i> file, by default located in JtR's run directory, serves as a crucial database where all successfully cracked password hashes and their corresponding plaintexts are stored. This prevents John from re-cracking the same hash multiple times and allows users to easily review all recovered credentials from past sessions.


title: HISTORY
content:
<i>John the Ripper</i> was originally created by <i>Solar Designer</i> (Alexander Peslyak) in 1996, primarily for auditing weak Unix <i>crypt(3)</i> hashes. Over the years, its capabilities have vastly expanded to support hundreds of hash types and cracking modes. The <i>Jumbo</i> community-enhanced version, which includes numerous additional features and formats, has gained significant popularity and is widely maintained and used today, making JtR a cornerstone tool in password security auditing.


title: PARAMETERS
content:
<b>-a FILENUM</b><br>&nbsp;&nbsp;&nbsp;&nbsp;In addition to the default output, print a line for each unpairable line in file <I>FILENUM</I> (1 or 2).<br><br><b>-e EMPTY</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replace empty output fields with the string <I>EMPTY</I>.<br><br><b>-i, --ignore-case</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore differences in case when comparing fields.<br><br><b>-j FIELD</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Equivalent to <i>-1 FIELD -2 FIELD</i>, joining on the specified <I>FIELD</I> in both files.<br><br><b>-o FORMAT</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Construct the output line according to the specified <I>FORMAT</I>. <I>FORMAT</I> consists of space-separated field specifications (e.g., '1.1 2.2' for first field of file 1 and second of file 2).<br><br><b>-t CHAR</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use <I>CHAR</I> as the input and output field separator. By default, whitespace is used.<br><br><b>-v FILENUM</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Like <i>-a FILENUM</i>, but suppress paired output lines. Only unpairable lines from <I>FILENUM</I> are printed.<br><br><b>-1 FIELD</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Join on the specified <I>FIELD</I> of FILE1.<br><br><b>-2 FIELD</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Join on the specified <I>FIELD</I> of FILE2.<br><br><b>--check-order</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Check that the input files are properly sorted on the join field. Exit with error if not.<br><br><b>--nocheck-order</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not check that input files are sorted. This can lead to incorrect output if files are unsorted.<br><br><b>--header</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat the first line of each file as field headers, which are not compared for joining but are printed as part of the output.<br><br>


title: DESCRIPTION
content:
The <i><tt>join</tt></i> command is a powerful utility in Linux that performs an operation similar to a database <i>JOIN</i> on two text files. It merges lines from two different files that share a common field, referred to as the 'join field' or 'key'. By default, <i><tt>join</tt></i> assumes fields are separated by whitespace (spaces, tabs, newlines) and uses the first field of each file as the join key. For the command to work correctly, both input files <b>must be sorted</b> on the specified join field in ascending order. If the files are not sorted, <i><tt>join</tt></i> might produce incorrect or incomplete output. The output consists of the join field, followed by the remaining fields of the first matching line from FILE1, then the remaining fields of the first matching line from FILE2. If a key is present in one file but not the other, by default, those lines are not printed. Options allow for inclusion of unmatched lines, custom delimiters, specific join fields, and output formatting.


title: CAVEATS
content:
<b>Sorted Input is Crucial:</b> The most common pitfall when using <i><tt>join</tt></i> is not ensuring that both input files are sorted on the join key. If files are unsorted, <i><tt>join</tt></i> will likely produce incorrect or incomplete results without warning (unless <i>--check-order</i> is used). Use the <i><tt>sort</tt></i> command beforehand to prepare your files.<br><b>Default Delimiter:</b> By default, <i><tt>join</tt></i> treats sequences of whitespace as a single delimiter. If your fields contain spaces or your delimiter is a single space, it's safer to explicitly use <i>-t ' '</i> to define a single space as the delimiter.<br><b>Handling Missing Fields:</b> When using <i>-o FORMAT</i>, if a specified field doesn't exist on a line, <i><tt>join</tt></i> will output an empty string by default. This can be controlled with the <i>-e</i> option.


title: DEFAULT BEHAVIOR
content:
By default, <i><tt>join</tt></i> uses the first field of each file as the join key and treats any sequence of whitespace (spaces, tabs, newlines) as a single field delimiter. If no options are specified, it will output the common join field, followed by the remaining fields from FILE1, then the remaining fields from FILE2, for lines that have a matching key in both files.


title: SORTING FILES FOR JOIN
content:
It is critical to sort both input files on the join key before passing them to <i><tt>join</tt></i>. For example, to join on the first field: <br><i><tt>sort -k1 file1.txt > file1_sorted.txt</tt></i><br><i><tt>sort -k1 file2.txt > file2_sorted.txt</tt></i><br><i><tt>join file1_sorted.txt file2_sorted.txt</tt></i><br>If joining on a different field, say the third: <br><i><tt>sort -k3 file1.txt > file1_sorted.txt</tt></i><br><i><tt>sort -k3 file2.txt > file2_sorted.txt</tt></i><br><i><tt>join -j 3 file1_sorted.txt file2_sorted.txt</tt></i>


title: OUTPUT FORMAT CUSTOMIZATION
content:
The <i>-o FORMAT</i> option provides fine-grained control over the output. Fields are referenced as <i>FILENUM.FIELDNUM</i> (e.g., '1.3' for the third field of the first file). You can specify the order and inclusion of fields. For instance, to output the join key, the second field of file 1, and the third field of file 2: <br><i><tt>join -o '1.1 1.2 2.3' file1 file2</tt></i>


title: HISTORY
content:
The <i><tt>join</tt></i> command is a venerable Unix utility, part of the core toolset since early versions of Unix. Its design reflects the philosophy of providing powerful, focused text processing tools that can be chained together. Its functionality, akin to relational database joins, highlights how early Unix systems provided sophisticated data manipulation capabilities through command-line tools. It has been a standard component of POSIX (Portable Operating System Interface) since its inception, ensuring its widespread availability and consistent behavior across various Unix-like operating systems.


title: SEE ALSO
content:
<tt>sort(1)</tt>, <tt>awk(1)</tt>, <tt>cut(1)</tt>, <tt>paste(1)</tt>, <tt>comm(1)</tt>, <tt>uniq(1)</tt>


title: PARAMETERS
content:
<b>-u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output only unique records based on the primary key identified from the input data. If multiple records share the same primary key, only the first encountered will be output.<br><br><b>-m</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output only the fields explicitly specified as arguments (<i>field1</i>, <i>field2</i>, etc.) and the primary key fields. By default, without this option, it might include more fields from the matched records.<br><br><b><i>field1</i> [<i>field2 ...</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more field names to be included in the output. These fields will be extracted from the joined records. The order specified here will be preserved in the output.<br><br><b><i>file1</i> [<i>file2 ...</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Paths to input files in Debian control file format. If no files are specified, <b>join-dctrl</b> reads from standard input (stdin).<br><br><b>--</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Marks the end of options and the beginning of positional arguments (file names), useful if a file name might start with a hyphen.<br><br>


title: DESCRIPTION
content:
<b>join-dctrl</b> is a specialized utility designed to merge and process records from Debian control files (dctrl format). It operates similar to the standard <i>join(1)</i> command but is tailored to handle the specific multi-field paragraph structure found in Debian package control files, changelogs, or other dctrl-formatted data. <br><br>Typically, it reads records from two or more input files (or standard input), identifies common records based on implicit primary keys (like 'Package' and 'Version' or 'Source' and 'Version'), and outputs merged records with selected fields. It's not commonly invoked directly by users but serves as an internal component for other <i>dpkg-dev</i> tools, such as <i>dpkg-mergechangelogs(1)</i>, to combine and rationalize control information.


title: CAVEATS
content:
This command is primarily an internal utility of the <i>dpkg-dev</i> package and lacks a standard man page on most systems. Its direct use by end-users is uncommon.<br>It expects input data to be in the Debian control file format, where records are separated by empty lines and fields within a record are 'Field-Name: Value'.<br>The primary key used for joining (e.g., 'Package'/'Version' or 'Source'/'Version') is implicitly determined by the script based on the available fields, which might not always be what a user intends for complex joining scenarios.


title: INPUT FORMAT
content:
<b>join-dctrl</b> expects input to conform to the Debian control file format. This means data consists of paragraphs (records) separated by one or more blank lines. Each line within a paragraph represents a field in the format '<i>Field-Name</i>: <i>Value</i>'.


title: OUTPUT FORMAT
content:
The output is also in Debian control file format, with merged records. Each output record will contain the primary key fields and the fields explicitly requested by the user. If the <b>-m</b> option is not used, it might include additional fields from the matched records.


title: HISTORY
content:
<b>join-dctrl</b> is part of the <i>dpkg-dev</i> package, which provides tools for unpacking, building, and managing Debian packages. It has been an integral, though internal, component since at least the early 2000s, primarily serving the purpose of intelligently merging control information from various sources during package building and management processes. Its design reflects the specific needs of Debian's package metadata format.


title: PARAMETERS
content:
<b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available command-line options and exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the JOSM version information and exits.<br><br><b><b>--download=</b><I>URL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads OSM data from the specified geographic bounding box URL (e.g., from an <I>openstreetmap.org</I> export link) directly into JOSM.<br><br><b><b>--download-and-zoom=</b><I>URL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Similar to <b>--download</b>, but also zooms the map view to the downloaded data's extent.<br><br><b><b>--load=</b><I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads a local OSM data file (<I>.osm</I>, <I>.osc</I>) or GPS trace file (<I>.gpx</I>) into a new data layer in JOSM.<br><br><b><b>--select=</b><I>ID</I>[,<I>ID</I>...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects one or more objects (nodes, ways, relations) by their OSM ID after loading data.<br><br><b><b>--language=</b><I>LANG</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the user interface language for the current session (e.g., <I>en</I> for English, <I>de</I> for German).<br><br><b><b>--splitview</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches JOSM with the editor window split into two views, useful for comparing data or different layers.<br><br><b><b>--geometry=</b><I>WxH+X+Y</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial window size and position. <I>W</I> and <I>H</I> are width and height, <I>X</I> and <I>Y</I> are coordinates.<br><br>


title: DESCRIPTION
content:
JOSM, the <b>J</b>ava <b>O</b>pen<b>S</b>treet<b>M</b>ap editor, is a powerful desktop application primarily designed for creating, editing, and uploading geographic data to the OpenStreetMap (OSM) project. It provides an extensive set of tools for drawing new features, correcting existing data, and resolving mapping conflicts. Users can download raw OSM data from the server, perform detailed edits, and then upload their changes.<br><br>JOSM supports various data types, including GPS traces (<I>.gpx</I> files) and OSM XML (<I>.osm</I>) data. It is highly extensible through a robust plugin architecture, allowing mappers to customize its functionality with additional validation rules, rendering styles, and specialized tools. While primarily a graphical user interface (GUI) application, JOSM also supports command-line options for specific tasks like loading files or downloading data directly. It is a favored tool for experienced mappers due to its advanced capabilities for data cleaning, complex tag editing, and large-scale data manipulation, making it an indispensable part of the OpenStreetMap ecosystem.


title: CAVEATS
content:
JOSM is primarily a graphical application and not typically designed for extensive command-line scripting. It requires a Java Runtime Environment (JRE) to run. Processing very large datasets or working with many layers can consume significant system memory and CPU resources, potentially leading to performance issues on less powerful machines.


title: JAVA APPLICATION
content:
As its name suggests, JOSM is a Java-based application. This means it requires a compatible Java Runtime Environment (JRE) to be installed on the system to execute the <b>josm</b> command successfully. Its cross-platform nature and ability to run on various operating systems are direct benefits of being written in Java.


title: EXTENSIBLE PLUGIN ARCHITECTURE
content:
One of JOSM's most significant strengths is its highly extensible plugin architecture. Users can browse and install a wide variety of plugins from within the application, adding new functionalities such as advanced validation tools, data analysis features, specialized drawing modes, and support for additional GIS data formats. This extensibility allows users to tailor JOSM precisely to their specific mapping needs and workflows.


title: HISTORY
content:
JOSM was initially developed by Immanuel Scholz and first released in 2005. As one of the earliest and most enduring editors for OpenStreetMap, it quickly became a cornerstone tool for the OSM community due to its advanced features and flexibility. Over nearly two decades, JOSM has played a crucial role in the growth and quality of the OpenStreetMap database, maintained and continuously improved by a dedicated community of developers.


title: PARAMETERS
content:
<b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pad all numbers to the same width by padding with spaces.<br><br><b>-b <value></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <i>begin</i> value for the sequence (default: 1).<br><br><b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret numbers as ASCII characters instead of numeric values.<br><br><b>-e <value></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <i>end</i> value for the sequence (default: <i>count</i> if given, otherwise <i>begin</i>).<br><br><b>-f <format></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use <i>format</i> string for floating-point output (e.g., "%f").<br><br><b>-i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Invert the meaning of 'begin' and 'end' processing.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not append a newline character to the output.<br><br><b>-p <precision></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the precision for floating-point numbers.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate random numbers instead of sequential numbers.<br><br><b>-s <value></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <i>step</i> value for the sequence (default: 1 or -1 if begin > end).<br><br><b>-t <string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use <i>string</i> as a separator instead of newline.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Invert the test for checking if begin is greater than end.<br><br><b>-w <format></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Format the output using <i>format</i>, a <b>printf</b>-style string.<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Act like <b>xargs</b>, reading arguments from standard input.<br><br><b>-z</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not pad numbers with leading zeros or spaces.<br><br>


title: DESCRIPTION
content:
<b>jot</b> is a versatile command-line utility used to generate sequential or random data. It can print numbers, characters, or repeated strings, making it invaluable for scripting, testing, and creating test data.<br><br>Unlike simpler tools like <b>seq</b>, <b>jot</b> offers extensive control over the output. Users can specify the <i>count</i> of items, the <i>begin</i> and <i>end</i> values, and the <i>step</i> size. It supports both integer and floating-point arithmetic. Beyond simple sequences, <b>jot</b> excels at generating random numbers, repeating arbitrary strings, or outputting characters based on their ASCII values. Its <b>printf</b>-style formatting (the <b>-w</b> option) allows for highly customized output.<br><br>Common applications include creating large files with predictable content, iterating through ranges in shell scripts, generating unique IDs, or supplying arguments to other commands via its <b>xargs</b>-like mode. Its flexibility and power make it a preferred choice for advanced shell programming tasks.


title: CAVEATS
content:
When only <i>count</i> is specified, it defaults to the <i>end</i> value if <i>begin</i> and <i>step</i> are omitted, leading to potentially unexpected output if not understood.<br>Floating-point calculations can sometimes lead to minor precision inaccuracies.<br>Performance might degrade significantly when generating an extremely large number of items due to memory and output overhead.


title: DEFAULT ARGUMENT INTERPRETATION
content:
The interpretation of <b>jot</b> arguments depends on how many numeric arguments are provided:<br><i>jot count</i>: Outputs <i>count</i> numbers from 1 to <i>count</i>.<br><i>jot count begin</i>: Outputs <i>count</i> numbers starting at <i>begin</i>, incrementing by 1.<br><i>jot count begin end</i>: Outputs <i>count</i> numbers between <i>begin</i> and <i>end</i> (inclusive if possible), adjusting the step automatically.


title: PRACTICAL USE CASES
content:
<i>Generate 10 random numbers between 1 and 100</i>: <I>jot -r 10 1 100</I><br><i>Generate a sequence of 5 ASCII characters from 'a'</i>: <I>jot -c 5 a</I><br><i>Create 3 files named 'file01.txt' to 'file03.txt'</i>: <I>jot -w 'file%02d.txt' 3 | xargs touch</I>


title: HISTORY
content:
<b>jot</b> originated in 4.3BSD and is a standard utility in various BSD-derived operating systems like FreeBSD, OpenBSD, and NetBSD.<br>While not part of the GNU Core Utilities (which include <b>seq</b>), it is widely available on GNU/Linux distributions, typically provided by packages like `bsdutils`, extending the shell scripting capabilities.


title: PARAMETERS
content:
<b><b>-f</b>, <b>--follow</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continuously display new journal entries as they are added, similar to <b>tail -f</b>.<br><br><b><b>-e</b>, <b>--pager-end</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Jump to the end of the journal output in the pager, instead of showing the beginning.<br><br><b><b>-n</b> <I>NUMBER</I>, <b>--lines=</b><I>NUMBER</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the specified number of most recent journal entries.<br><br><b><b>-r</b>, <b>--reverse</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display entries in reverse chronological order (newest first).<br><br><b><b>-u</b> <I>UNIT</I>, <b>--unit=</b><I>UNIT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter messages from a specific systemd unit (e.g., <b>ssh.service</b>, <b>nginx.service</b>).<br><br><b><b>-b</b> [<I>ID</I>|<b>0</b>], <b>--boot=</b>[<I>ID</I>|<b>0</b>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter by a specific boot. <b>-b</b> without an ID shows the current boot. <b>-b 0</b> shows the previous boot. Use <b>--list-boots</b> to see available boot IDs.<br><br><b><b>-k</b>, <b>--dmesg</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show only kernel messages, similar to the output of <b>dmesg</b>.<br><br><b><b>-p</b> <I>LEVEL</I>, <b>--priority=</b><I>LEVEL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter by message priority level (e.g., <i>emerg</i>, <i>alert</i>, <i>crit</i>, <i>err</i>, <i>warning</i>, <i>notice</i>, <i>info</i>, <i>debug</i>).<br><br><b><b>-S</b> <I>DATE</I>, <b>--since=</b><I>DATE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show entries from the specified date and time onwards. Date formats like 'YYYY-MM-DD HH:MM:SS', 'yesterday', or 'now'.<br><br><b><b>-U</b> <I>DATE</I>, <b>--until=</b><I>DATE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show entries until the specified date and time.<br><br><b><b>-o</b> <I>FORMAT</I>, <b>--output=</b><I>FORMAT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Control the output format. Common formats include <i>short</i>, <i>verbose</i>, <i>json</i>, <i>json-pretty</i>, <i>cat</i>, <i>export</i>.<br><br><b><b>--disk-usage</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the current disk usage of the journal files.<br><br><b><b>--vacuum-size=</b><I>BYTES</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reduce the journal size to the specified amount by deleting older entries. Requires root privileges.<br><br><b><b>--no-pager</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print all output directly to stdout without piping through a pager like <b>less</b>.<br><br>


title: DESCRIPTION
content:
The <b>journalctl</b> command is a powerful utility used to query and display messages from the <i>systemd journal</i>. The systemd journal is a centralized logging system that collects and stores log data from the kernel, systemd services, user processes, and other sources. Unlike traditional syslog files, the journal stores logs in a structured, indexed, and often binary format, making <b>journalctl</b> an indispensable tool for accessing and analyzing this data.<br><br>It offers robust filtering capabilities, allowing users to view logs by specific systemd units, time ranges, boot IDs, message priorities, and more. This makes it a primary tool for system administrators and developers to diagnose issues, monitor system activity, and audit events on systems running systemd.


title: CAVEATS
content:
Access to all journal logs, especially those of other users or system processes, typically requires root privileges or membership in the <b>adm</b> or <b>systemd-journal</b> groups.<br><br>The systemd journal can consume significant disk space if not managed properly. Regular vacuuming or size limits should be configured for persistent journals.<br><br>Journal entries are stored in a binary format, meaning they cannot be directly viewed or manipulated with standard text tools (like <b>cat</b> or <b>grep</b>) and require <b>journalctl</b> for proper interpretation and filtering.


title: PERSISTENT VS. VOLATILE STORAGE
content:
By default, journal logs are stored in <b>/run/log/journal/</b>, which is a volatile filesystem and means logs are lost on reboot. For persistent storage across reboots, the directory <b>/var/log/journal/</b> must exist. If it exists, <b>systemd-journald</b> will store logs there automatically.


title: STRUCTURED LOGGING
content:
Unlike traditional log files, journal entries are structured, consisting of multiple fields (e.g., <i>_SYSTEMD_UNIT</i>, <i>_PID</i>, <i>MESSAGE</i>). This structured nature allows for powerful and precise filtering (e.g., <b>journalctl _PID=1234</b>) and integration with other tools when using JSON output (<b>-o json</b> or <b>-o json-pretty</b>).


title: HISTORY
content:
<b>journalctl</b> is an integral part of the <i>systemd</i> init system, which was first released in 2010. It was developed to provide a unified, structured, and persistent logging solution that could replace and consolidate the various logging mechanisms (like <i>syslog</i> and <i>dmesg</i>) traditionally used on Linux systems. Its introduction marked a significant shift from plain-text log files to a centralized, binary journal database, offering enhanced filtering, indexing, and management capabilities that <b>journalctl</b> exposes to the user.


title: PARAMETERS
content:
<b><i>--width=N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output width in characters. Default is 80.<br><br><b><i>--height=N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output height in characters.<br><br><b><i>--ratio</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserves the image's aspect ratio (this is the default behavior).<br><br><b><i>--stretch</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stretches the image to fit the specified width and height, ignoring aspect ratio.<br><br><b><i>--chars=STRING</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the custom character set to use for ASCII art, ordered from darkest to lightest intensity.<br><br><b><i>--invert</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inverts the black/white (or dark/light) mapping, useful for light terminal backgrounds.<br><br><b><i>--color</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables color output using ANSI escape codes. By default, output is monochrome.<br><br><b><i>--html</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs HTML code instead of plain text, suitable for web display.<br><br><b><i>--output=FILENAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects the output to a specified file instead of standard output.<br><br><b><i>--grayscale</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Converts the image to grayscale before processing, affecting color and intensity mapping.<br><br><b><i>--ansi</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ensures output uses ANSI escape codes for terminal color and formatting.<br><br><b><i>--term-width</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically sets the output width to the current terminal width.<br><br>


title: DESCRIPTION
content:
<b>jp2a</b> is a command-line utility designed to convert graphical images into ASCII art, suitable for display in a text-based terminal. It supports popular image formats like JPEG, PNG, BMP, and GIF.<br><br>Users can control various aspects of the output, such as dimensions, character set, color rendering, and output destination. It processes image pixels and maps them to ASCII characters based on intensity or color, creating a textual representation of the original image. This makes it a versatile tool for creative display or simple image preview in environments without graphical capabilities.


title: CAVEATS
content:
The quality of the ASCII art heavily depends on the source image's characteristics and the chosen character set. Very complex or high-resolution images may not translate well, appearing abstract or unrecognizably detailed. Performance can vary with image size and system resources. Color output is dependent on terminal emulator capabilities.


title: HTML OUTPUT CAPABILITIES
content:
Beyond terminal display, <b>jp2a</b> can generate HTML output (using the <i>--html</i> option), making it possible to embed ASCII art images directly into web pages. This feature includes options for setting HTML width, character usage instead of pixels, and adding borders.


title: CUSTOM CHARACTER SETS
content:
A powerful feature of <b>jp2a</b> is the ability to define a custom character set using the <i>--chars</i> option. This allows users to fine-tune the granularity and visual style of the ASCII art, mapping specific characters to different pixel intensity levels, from dark (first character) to light (last character).


title: HISTORY
content:
<b>jp2a</b> emerged as a practical tool for ASCII art conversion in the command-line environment. While its exact initial release date is not widely publicized, it has been a staple in Linux distributions for a considerable period, often included in standard repositories. Its development has focused on providing a lightweight and efficient way to transform images into textual representations, catering to both artistic expression and simple visual previewing in terminal-centric workflows.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help information and exit.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output version information and exit.<br><br><b>-d, --dest=<I>dir</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a destination directory for optimized files. Original files remain untouched.<br><br><b>-f, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force optimization even if the file size does not decrease. Overwrites the original file by default.<br><br><b>-n, --noaction</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not actually optimize files; just print statistics. Useful for testing or previewing changes.<br><br><b>-m, --max=<I>quality</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum image quality factor (0-100, default: 95). Lower values result in smaller files but lower quality.<br><br><b>-s, --strip-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip all markers (comments, EXIF, IPTC, etc.) from the JPEG file, achieving maximum metadata removal.<br><br><b>-o, --overwrite</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overwrite the source file with the optimized version (this is the default behavior).<br><br><b>-p, --preserve</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserve the original file modification times after optimization.<br><br><b>-t, --threshold=<I>size</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optimize only if the file size is reduced by at least the specified size (in kBytes).<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing detailed statistics for each processed file.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable quiet mode, suppressing most output messages.<br><br><b>-b, --bits=<I>N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the file to N bits. Useful for converting to progressive JPEG by forcing 8-bit output.<br><br><b>-P, --preserve-perms</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserve original file permissions after optimization.<br><br><b>-T, --csv</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output optimization statistics in CSV (Comma Separated Values) format.<br><br><b>-D, --pedantic</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not ignore non-fatal errors during processing, leading to stricter error checking.<br><br><b>-X, --stdout</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the optimized image to standard output (implies --noaction).<br><br><b>-S, --size=<I>size</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Try to optimize the file to a target size (e.g., '100K'). This may involve lossy compression.<br><br><b>-k, --keep-meta</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keep all metadata (EXIF, IPTC, comments, ICC profile) during optimization. Overrides stripping options.<br><br><b>--all-normal</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optimize all images to normal (baseline) JPEG/JFIF format.<br><br><b>--all-progressive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optimize all images to progressive JPEG/JFIF format, which allows images to load gradually.<br><br><b>--all-lossless</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optimize all images losslessly (removes unneeded data without changing quality).<br><br><b>--strip-comments</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip only JPEG comments.<br><br><b>--strip-exif</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip only EXIF (Exchangeable Image File Format) markers.<br><br><b>--strip-iptc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip only IPTC (International Press Telecommunications Council) markers.<br><br><b>--strip-icc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip only ICC (International Color Consortium) profile.<br><br><b>--enable-gamma</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable gamma correction during processing.<br><br><b>--disable-gamma</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable gamma correction during processing.<br><br><b>--gamma-factor=<I>factor</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the gamma factor (default: 2.2).<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output statistics in JSON format (implies --noaction).<br><br><b>--stdin</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read image data from standard input (implies --stdout and --noaction).<br><br><b>--use-arithmetic</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use arithmetic coding for JPEG compression (can sometimes yield smaller files but less widely supported).<br><br><b>--no-arithmetic</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not use arithmetic coding (default is usually Huffman).<br><br><b>--disable-dqt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable DQT (Discrete Quantization Table) optimization.<br><br><b>--disable-cpi</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable CPI (conditional progressive encoding) optimization.<br><br><b>--strip-jfif</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strip JFIF (JPEG File Interchange Format) header.<br><br>


title: DESCRIPTION
content:
<b>jpegoptim</b> is a command-line utility designed for optimizing and compressing JPEG image files. It can perform both lossless and lossy optimizations.<br><br><i>Lossless optimization</i> removes unnecessary metadata (like comments, EXIF, IPTC, ICC profiles) and applies Huffman table optimization without altering image quality. <i>Lossy optimization</i>, on the other hand, allows you to reduce the image quality factor to achieve significantly smaller file sizes, though this comes at the cost of some image fidelity. The tool is highly efficient and useful for web developers, photographers, or anyone needing to reduce the file size of large collections of JPEG images for faster loading, reduced storage, or better email attachment sizes. It supports various options to control the compression level, metadata stripping, preservation of file attributes, and batch processing.


title: CAVEATS
content:
<ul><li><b>jpegoptim</b> specifically works with JPEG files; it cannot process other image formats like PNG, GIF, or WebP.</li><li>While lossless optimization is safe, using lossy compression (with <code>-m</code> or <code>-S</code>) permanently reduces image quality to achieve smaller file sizes. Once quality is reduced, it cannot be fully recovered.</li><li>When optimizing a large number of files, it's advisable to test with <code>-n</code> (no action) first, or create backups before running the command to ensure desired results.</li><li>The effectiveness of <b>jpegoptim</b> might vary depending on the original JPEG file's quality and how it was saved. Heavily optimized JPEGs might see little further reduction.</li></ul>


title: BATCH PROCESSING
content:
<b>jpegoptim</b> is particularly effective for batch processing directories full of JPEG images, often combined with commands like <b>find</b> or <b>xargs</b> to automate optimization tasks across many files.


title: LOSSLESS VS. LOSSY
content:
Users should understand the distinction between lossless optimizations (which preserve visual quality by removing unneeded data) and lossy optimizations (which reduce quality for greater file size reduction), choosing the appropriate mode based on their needs.


title: HISTORY
content:
<b>jpegoptim</b> was created by Simon Peter. It has been developed and maintained over the years as a reliable tool for optimizing JPEG images, often included in Linux distributions' official repositories. Its focus on efficiency and straightforward command-line usage has made it a popular choice for scripting and automated image processing workflows.


title: SYNOPSIS
content:
<I>jpegtopnm</I> [<B>-verbose</B>] [<B>-plain</B>] [<B>-grayscale</B>] [<B>-rgb</B>] [<B>-scale </B><I>N</I>] [<B>-maxmemory </B><I>M</I>] [<B>-dct </B><I>method</I>] [<B>-no-block-smoothing</B>] [<B>-icc</B>] [<I>jpegfile</I>]


title: PARAMETERS
content:
<b>-verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays informational messages about the decoding process, including image dimensions, color space, and memory usage.<br><br><b>-plain</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the PNM image in plain (ASCII) text format rather than the default raw (binary) format. Plain format files are larger but human-readable.<br><br><b>-grayscale</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Converts the output image to grayscale, producing a PGM (Portable Graymap) file even if the input JPEG was color.<br><br><b>-rgb</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the output to be a color PPM (Portable Pixmap) in RGB format, even if the input JPEG was a grayscale image.<br><br><b>-scale N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scales the output image down by a factor of 1/N. Valid values for <I>N</I> are 1, 2, 4, or 8, resulting in 100%, 50%, 25%, or 12.5% size respectively. Useful for quick previews or processing large images.<br><br><b>-maxmemory M</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the maximum amount of memory (in kilobytes) that the command will use for decompression buffers. Useful for preventing excessive memory consumption on systems with limited RAM.<br><br><b>-dct method</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Discrete Cosine Transform (DCT) method to use for decompression. <I>method</I> can be 'fast' (fast integer), 'accurate' (accurate integer), or 'float' (floating-point, most accurate but slowest).<br><br><b>-no-block-smoothing</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the block-smoothing post-processing step during decompression. This can sometimes result in sharper images but may show more block artifacts.<br><br><b>-icc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads and processes any embedded ICC color profile information present in the JPEG file. This can help ensure accurate color reproduction.<br><br>


title: DESCRIPTION
content:
<i>jpegtopnm</i> is a utility from the Netpbm suite that converts JPEG image files into one of the Netpbm portable pixmap formats: PBM (Portable Bitmap), PGM (Portable Graymap), or PPM (Portable Pixmap). This conversion is crucial for interoperability, allowing JPEG images to be processed by the extensive collection of Netpbm tools, which operate exclusively on the PNM family of formats.<br><br>The command reads a JPEG image from a specified file or standard input and writes the corresponding PNM data to standard output. This design makes <i>jpegtopnm</i> highly suitable for piping operations in shell scripts, enabling complex image manipulation workflows. It handles various JPEG subformats and supports options for scaling, grayscale conversion, and controlling the decompression algorithm for optimal balance between speed and accuracy.


title: CAVEATS
content:
<i>jpegtopnm</i> is designed specifically for converting JPEG to PNM. It does not perform encoding or advanced image editing (like cropping, resizing beyond simple scaling, or applying filters) directly; these operations are typically handled by other Netpbm utilities after conversion to PNM. Since JPEG is a lossy compression format, repeated cycles of JPEG encoding and decoding (e.g., JPEG -> PNM -> JPEG) can lead to cumulative quality degradation.


title: INPUT AND OUTPUT
content:
By default, <i>jpegtopnm</i> reads a JPEG image from standard input (stdin) if no <I>jpegfile</I> argument is provided. It writes the resulting PNM data (PPM, PGM, or PBM) to standard output (stdout). This stream-based I/O design facilitates piping the output directly to other Netpbm commands or redirecting it to a file.


title: NETPBM INTEGRATION
content:
As a member of the Netpbm family, <i>jpegtopnm</i> serves as a vital bridge between the common JPEG format and the internal PNM formats used by Netpbm tools. This allows users to leverage the vast array of Netpbm utilities (e.g., <I>pamscale</I>, <I>pnmgamma</I>, <I>pnmflip</I>) for processing JPEG images, simply by piping the output of <i>jpegtopnm</i> to another Netpbm command.


title: UNDERSTANDING PNM FORMATS
content:
PNM is a family of pixelmap formats: <B>PBM</B> (Portable Bitmap) for black & white images, <B>PGM</B> (Portable Graymap) for grayscale images, and <B>PPM</B> (Portable Pixmap) for color images. <i>jpegtopnm</i> automatically determines the appropriate PNM format based on the input JPEG's content and specified options (like <B>-grayscale</B>).


title: HISTORY
content:
<i>jpegtopnm</i> is an integral part of the Netpbm project, a comprehensive suite of graphics programs that originated in the early Unix environment. Its core functionality relies on the widely used <i>libjpeg</i> library for JPEG decompression. The command's consistent presence and utility reflect the Netpbm project's enduring commitment to providing foundational tools for image manipulation and format conversion in a modular, Unix-philosophy manner.


title: SYNOPSIS
content:
<b>jpegtran</b> [<i>options</i>] [<i>input_file</i>] [<i>output_file</i>]<br><i>input_file</i> can be omitted to read from standard input. If <i>output_file</i> is omitted, output is written to standard output.


title: PARAMETERS
content:
<b>-copy <none|comments|all></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies which markers (metadata) to copy from the input file to the output. <i>none</i> copies no markers, <i>comments</i> copies only comment markers, and <i>all</i> copies all markers.<br><br><b>-crop <WxH+X+Y></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Crops the image to the specified width (W) and height (H) starting at X,Y coordinates. Dimensions are in pixels.<br><br><b>-flip <horizontal|vertical></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Flips the image horizontally or vertically.<br><br><b>-perfect</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Causes <b>jpegtran</b> to abort if the transformation cannot be performed losslessly (e.g., due to dimensions not being multiples of MCU size).<br><br><b>-optimize</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optimizes the Huffman coding tables for smaller file size without changing image quality. Also known as <i>-optim</i>.<br><br><b>-progressive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a progressive JPEG file, which loads in multiple passes, typically preferred for web display.<br><br><b>-outfile <name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output file name. If not used, output goes to standard output.<br><br><b>-rotate <90|180|270></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rotates the image clockwise by the specified degrees (90, 180, or 270).<br><br><b>-trim</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Trims off any partial MCU (Minimum Coded Unit) blocks from the edges when cropping or rotating, ensuring transformations remain on whole blocks.<br><br><b>-transpose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a transpose operation (flips along top-left to bottom-right diagonal).<br><br><b>-transverse</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a transverse transpose operation (flips along top-right to bottom-left diagonal).<br><br><b>-grayscale</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Converts the image to grayscale. Note that this operation is <i>lossy</i> as it discards color information.<br><br><b>-verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing details about the transformation process.<br><br>


title: DESCRIPTION
content:
<b>jpegtran</b> is a powerful command-line utility for performing <i>lossless</i> transformations on JPEG image files. Unlike typical image editors that decompress and recompress an image (which introduces generation loss), <b>jpegtran</b> manipulates the JPEG data directly at the Minimum Coded Unit (MCU) block level. This enables operations such as rotating images by 90, 180, or 270 degrees, flipping them horizontally or vertically, and cropping them without any degradation in visual quality.<br>Beyond geometrical transformations, <b>jpegtran</b> can also be used to optimize Huffman tables for smaller file sizes (via the <i>-optimize</i> or <i>-progressive</i> options), remove or selectively copy metadata (<i>-copy</i>), and convert an image to a progressive JPEG format for faster web loading. Its primary advantage lies in preserving the original image fidelity while making common adjustments, making it an indispensable tool for photographers, web developers, and anyone managing large collections of JPEG images.


title: CAVEATS
content:
<b>jpegtran</b> operates on JPEG's internal block structure (MCUs). While most transformations are lossless for the data, certain operations like cropping or rotation of images with dimensions not perfectly divisible by the MCU block size (typically 8x8 or 16x16 pixels) might result in minor edge artifacts or require the use of <i>-trim</i> to preserve block alignment. The <i>-grayscale</i> option, despite being available in <b>jpegtran</b>, is inherently lossy as it converts color information to shades of gray.


title: COMMON USE CASES
content:
<b>jpegtran</b> is frequently used in scenarios where image quality is paramount and file size optimization is desired, such as rotating photos without recompression, preparing images for web display, or bulk processing of images to remove sensitive metadata.<br>For example, to rotate an image 90 degrees clockwise and optimize its size: <br><i>jpegtran -rotate 90 -optimize input.jpg > output.jpg</i>


title: HISTORY
content:
<b>jpegtran</b> is an integral part of the widely used <i>libjpeg</i> library distribution, which is maintained by the Independent JPEG Group (IJG). It emerged as a dedicated utility for performing transformations on JPEG data without requiring a full decode-encode cycle, thereby preserving image quality. Its development has closely tracked the evolution of the <i>libjpeg</i> library itself, making it a foundational tool for JPEG manipulation on Linux and Unix-like systems. It's also included in modern forks like <i>mozjpeg</i>.


title: PARAMETERS
content:
<b>-q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the output of the class name, JAR file name, and arguments passed to the <I>main</I> method. Only the LVMID is displayed.<br><br><b>-m</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the arguments passed to the <I>main</I> method. This can be useful for identifying different instances of the same application or for quickly seeing startup parameters.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the full package name for the application's main class or the full path name to the application's JAR file. This helps in distinguishing between different versions or installations of an application.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the arguments passed to the JVM itself. This includes options like heap size settings (e.g., <I>-Xmx</I>), garbage collector settings, and other JVM-specific flags, which are crucial for diagnostics.<br><br><b><I>hostid</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the remote host to list JVMs on. For this to work, the <I>jstatd</I> daemon must be running on the remote host and configured correctly for remote monitoring. If omitted, <B>jps</B> lists JVMs on the local machine.<br><br>


title: DESCRIPTION
content:
The <b>jps</b> (Java Virtual Machine Process Status Tool) is a command-line utility included with the Java Development Kit (JDK). It serves to list the instrumented HotSpot Java Virtual Machines (JVMs) currently running on the target system.<br><br>For each detected JVM, <b>jps</b> typically displays the JVM's local VM identifier (LVMID), which is usually the process ID (PID) of the Java process, along with the name of the main class or JAR file. This tool is invaluable for developers and system administrators as it provides a quick and efficient way to identify and monitor running Java applications. It is frequently used during debugging, performance troubleshooting, and general system management to quickly locate specific Java processes without sifting through generic process lists.


title: CAVEATS
content:
<b>jps</b> primarily lists HotSpot JVMs; other JVM implementations might not be detected. It requires a JDK/JRE installation to be present on the system. Security policies and user permissions can restrict visibility; by default, <b>jps</b> only lists JVMs running under the same user ID. To see all JVMs, it often needs to be run as a privileged user (e.g., <I>root</I>). Remote monitoring using <I>hostid</I> depends on the <I>jstatd</I> daemon running on the target system.


title: <I>SECURITY CONSIDERATIONS</I>
content:
By default, <b>jps</b> only displays JVMs that belong to the user executing the command. To list JVMs belonging to other users or system-wide JVMs, <b>jps</b> must be executed with appropriate privileges, such as by the <I>root</I> user. However, even with root privileges, JVMs can be configured to restrict attach permissions via security policies (e.g., <I>management.properties</I> or the <I>sun.jvm.hotspot.tools.jps.disable</I> system property), potentially preventing their listing.


title: <I>HOW IT WORKS</I>
content:
<b>jps</b> identifies running HotSpot JVMs by scanning for temporary files created in the JVM's working directory or specific system directories (like <I>/tmp/hsperfdata_<user></I> on Linux/Unix). These files contain information about the running JVM, including its PID and unique identifier. It relies on the JVM having the 'attach mechanism' enabled, which is standard for HotSpot JVMs by default unless explicitly disabled for security reasons.


title: HISTORY
content:
The <b>jps</b> command was introduced with JDK 5 (1.5.0) as part of a new set of monitoring and management tools for the Java platform. Before its introduction, identifying specific Java processes often involved manually parsing the output of generic process listing commands like <I>ps</I> for Java-related keywords. <b>jps</b> streamlined this process by providing a dedicated, Java-aware utility, making it a cornerstone for Java diagnostics and troubleshooting.


title: SYNOPSIS
content:
<b>jrnl</b> [<i>OPTIONS</i>] [<i>DATE/TIME</i> | <i>ENTRY TEXT</i> | <i>SEARCH QUERY</i>]<br><b>jrnl</b> [<i>OPTIONS</i>] <i>--edit</i> [<i>JOURNAL</i>]<br><b>jrnl</b> [<i>OPTIONS</i>] <i>--export</i> [<i>FORMAT</i>]<br><b>jrnl</b> [<i>OPTIONS</i>] <i>--encrypt</i> | <i>--decrypt</i><br><b>jrnl</b> [<i>OPTIONS</i>] <i>[SUBCOMMAND]</i>


title: PARAMETERS
content:
<b>-f <file_path>, --file <file_path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify an alternative journal file to use.</i><br><br><b>-n <num>, --limit <num></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Show only the last <num> entries.</i><br><br><b>-g <pattern>, --grep <pattern></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Filter entries by a regex pattern.</i><br><br><b>-d <date_range>, --date <date_range></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Filter entries by a specific date or date range (e.g., "yesterday", "last week", "2 days ago to today").</i><br><br><b>-s, --star</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Show only starred entries.</i><br><br><b>-t <tags>, --tags <tags></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Filter entries by tags (e.g., "@work", "#idea").</i><br><br><b>-p, --private</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Add an entry as private (only visible if explicitly configured or through encryption).</i><br><br><b>-e, --edit</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Edit existing entries using the default editor.</i><br><br><b>-x <format>, --export <format></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Export journal entries to a specified format (e.g., "json", "txt", "md").</i><br><br><b>-c, --encrypt, --decrypt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Encrypt or decrypt the journal file. Requires a password.</i><br><br><b>--purge</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Permanently delete marked entries.</i><br><br><b>--check</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Check journal for corruption.</i><br><br><b>--stats</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display journal statistics.</i><br><br><b>--config [<key> <value>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display or set configuration options.</i><br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Show jrnl's version number.</i><br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Show the help message and exit.</i><br><br>


title: DESCRIPTION
content:
<b>jrnl</b> is a Python-based command-line utility designed for maintaining a personal journal. It allows users to quickly add entries with timestamps, search through past entries using keywords, dates, or tags, and even encrypt their journals for privacy. Entries are stored in a simple plaintext file (or encrypted binary if enabled), making them easily portable and readable. It supports multiple journals, tagging, starring entries, and integrates with the default system editor for more extensive entry management. Its primary focus is on simplicity and efficiency, making it ideal for daily note-taking and reflection directly from the terminal. <b>jrnl</b> aims to be unobtrusive and highly customizable, adapting to various workflows for personal record-keeping.


title: CAVEATS
content:
<b>jrnl</b> is written in Python, so its functionality depends on a compatible Python environment. Encryption requires the <i>pycrypto</i> or <i>cryptography</i> library to be installed; if these are missing, encryption features will be unavailable. By default, journals are stored as plaintext files, meaning sensitive information is unencrypted unless the user explicitly enables encryption. While robust, file corruption can occur, though <b>jrnl</b> provides a <i>--check</i> command to verify integrity. Users should be mindful of the default journal location (<i>~/.jrnl</i>) when managing or backing up their data.


title: JOURNAL LOCATION AND MULTIPLE JOURNALS
content:
By default, <b>jrnl</b> uses a file named <i>jrnl.json</i> (or <i>jrnl.txt</i> for older versions) in the user's home directory (<i>~/.jrnl</i>). Users can create and manage multiple journals by specifying a journal name in the configuration file, e.g., <i>work.jrnl</i>, <i>personal.jrnl</i>. You can interact with a specific journal using <b>jrnl -f &lt;journal_name&gt;</b>.


title: TAGGING AND STARRING ENTRIES
content:
Entries can be tagged by prefixing words with <b>@</b> or <b>#</b> (e.g., <i>Today was good. #mood @home</i>). Entries can also be "starred" using an asterisk (<b>*</b>) at the beginning of the entry text, making them easily retrievable with the <i>--star</i> option.


title: CONFIGURATION
content:
<b>jrnl</b> is highly configurable via <i>~/.jrnl_config</i> (or <i>~/.config/jrnl/jrnl_config</i>). This file allows setting the default editor, journal paths, date formats, and custom colors, among other options, enabling users to tailor <b>jrnl</b> to their specific preferences and workflows.


title: HISTORY
content:
<b>jrnl</b> was created by Igor Guerrero and first released around 2012, quickly gaining popularity as a minimalist yet powerful command-line journaling solution. Developed in Python, it leverages the language's cross-platform capabilities and extensive libraries. Its development has been community-driven, with contributions and improvements from various developers on platforms like GitHub. The project maintains a focus on simplicity, ease of use, and privacy through optional encryption, evolving steadily to include features like multiple journal support, enhanced search capabilities, and various export formats, while staying true to its core philosophy of being a lightweight journaling tool.


title: SYNOPSIS
content:
<b>jshon</b> [<i>OPTIONS</i>] [<i>FILE</i>]<br><br><b>jshon</b> is typically invoked with one or more options to perform actions on JSON data. If <i>FILE</i> is not provided, <b>jshon</b> reads JSON from standard input.


title: PARAMETERS
content:
<b>-i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Implicitly pretty-print the output. This is often combined with other operations.<br><br><b>-s <string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the current JSON value to a string. Used for creating or modifying string values.<br><br><b>-e <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extract or navigate to a value at a specified JSON path. Paths can use dot notation for object keys (e.g., 'key.subkey') or square brackets for array indices (e.g., 'array[0]').<br><br><b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create an empty JSON array.<br><br><b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pretty-print the JSON output, adding indentation for readability.<br><br><b>-Q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Quote string output. Ensures that string values are wrapped in double quotes.<br><br><b>-u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unquote string output. Removes surrounding double quotes from string values.<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Validate the input JSON. Outputs an error and exits non-zero if the input is not valid JSON.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of <i>jshon</i> and exit.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a brief help message and exit.<br><br>


title: DESCRIPTION
content:
<i>jshon</i> is a lightweight command-line utility designed for parsing, manipulating, and creating JSON data within shell scripts. Following the Unix philosophy, it is a small, focused tool that reads JSON input from standard input or a specified file and outputs results to standard output. It supports querying specific elements using path expressions, setting new values, adding elements to objects or arrays, and pretty-printing JSON output. Unlike larger JSON processing tools, <i>jshon</i> prioritizes simplicity and integration with standard shell utilities, making it ideal for automating tasks that involve interacting with JSON-based APIs or configuration files. It handles all standard JSON types, including objects, arrays, strings, numbers, booleans, and null. Its design makes it particularly useful for shell environments where external dependencies should be minimized.


title: CAVEATS
content:
While highly useful for shell scripting, <i>jshon</i> has some limitations:<br><br><b>Limited Error Reporting</b>: It provides basic error messages for malformed JSON, but debugging complex issues might require more robust tools.<br><br><b>No Stream Processing</b>: <i>jshon</i> loads the entire JSON document into memory, which can be inefficient for extremely large JSON files.<br><b>Path Syntax Simplicity</b>: Its path syntax is simpler compared to tools like <i>jq</i>, which offers more advanced filtering and transformation capabilities.<br><br><b>Deprecated Options</b>: The <i>-x</i> option for array extraction is deprecated; <i>-e</i> should be used instead.


title: INPUT AND OUTPUT
content:
<i>jshon</i> typically reads JSON data from standard input (stdin) or a specified file argument. All results, whether extracted values or modified JSON structures, are printed to standard output (stdout), making it easy to pipe <i>jshon</i>'s output to other shell commands.


title: JSON PATH EXPRESSIONS
content:
Path expressions used with the <i>-e</i> option allow precise navigation within JSON objects and arrays. Object keys are accessed directly (e.g., <i>-e key</i>), and nested keys are separated by dots (e.g., <i>-e parent.child</i>). Array elements are accessed using zero-based indices within square brackets (e.g., <i>-e array[0]</i>). Multiple path segments can be chained.


title: CHAINING OPERATIONS
content:
<i>jshon</i> allows chaining multiple operations by repeating options. For instance, <i>jshon -e key1 -e key2</i> would first navigate to <i>key1</i>, and then from that resulting object, navigate to <i>key2</i>. This enables complex data transformations in a single command.


title: JSON CONSTRUCTION
content:
While primarily a parser, <i>jshon</i> can also be used to construct simple JSON. For example, <i>jshon -s 'value'</i> creates a JSON string, <i>jshon -a</i> creates an empty array, and <i>jshon -s key -s value</i> creates a JSON object <i>{"key": "value"}</i>, which can be useful for dynamic JSON generation.


title: HISTORY
content:
<i>jshon</i> was created by Michael P. Jung (miku) as a minimalist and highly portable JSON parser for POSIX shell environments. Its development aimed to provide a simple, single-file executable that adheres to the Unix philosophy of doing one thing well. It gained popularity among shell scripters looking for a less feature-rich but more lightweight alternative to other JSON tools, particularly for quick extraction and manipulation tasks within scripts where installing larger dependencies might be undesirable. Its design emphasizes ease of use and direct integration with standard shell commands.


title: SYNOPSIS
content:
<b>json5</b> [<i>options</i>] [<i>file...</i>]<br><b>json5</b> [<i>options</i>] <i>&lt; input.json5</i>


title: PARAMETERS
content:
<b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version number of the <b>json5</b> utility.<br><br><b><b>-s</b>, <b>--stringify</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Parses the input JSON5 and outputs it as standard (minified) JSON. This is often the default behavior if no other output-related options are specified.<br><br><b><b>-p</b>, <b>--pretty</b> [<i>indent</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pretty-prints the JSON5 or JSON output. The optional <i>indent</i> argument specifies the number of spaces to use for indentation (default is 2). Use 0 for no indentation (similar to <b>--stringify</b> but might retain some structure).<br><br><b><b>-V</b>, <b>--validate</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Validates the input JSON5 syntax without producing any output. The command exits with a status code of 0 for valid JSON5 and 1 for invalid JSON5.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the usage information and a list of available options for the <b>json5</b> command.<br><br>


title: DESCRIPTION
content:
The <b>json5</b> command-line utility provides a convenient way to work with JSON5 (JavaScript Object Notation, Fifth Edition) files. JSON5 is a superset of JSON, offering features like comments, trailing commas, unquoted keys, single-quoted strings, and hexadecimal numbers, making configuration files and data structures more human-readable and writable. <br><br>This command can read JSON5 input from standard input or specified files, then perform various operations: it can convert JSON5 into standard JSON, pretty-print JSON5 content, or simply validate its syntax without producing any output. It is particularly useful for environments where configuration files benefit from the relaxed syntax of JSON5, allowing for clearer and more maintainable data.


title: CAVEATS
content:
The <b>json5</b> command-line utility is typically implemented as a Node.js package and thus requires a Node.js runtime environment to be installed on the system. It is not a standard utility found in most Linux distributions by default and usually needs to be installed via a package manager like `npm` (e.g., `npm install -g json5`). It is specifically designed for JSON5 and does not offer the extensive querying and manipulation capabilities of tools like <b>jq</b> for generic JSON.


title: INPUT/OUTPUT
content:
By default, <b>json5</b> reads from standard input if no files are specified. If one or more <i>file</i> arguments are provided, it reads content from those files. Output is directed to standard output. When <b>--validate</b> is used, there is no output to standard output, only an exit code indicating success or failure.


title: EXIT STATUS
content:
The <b>json5</b> command typically exits with a status of 0 on success (e.g., successful parsing, stringification, or validation). A non-zero exit status (e.g., 1) indicates an error, such as invalid JSON5 input, file access issues, or other runtime errors, especially when using the <b>--validate</b> option.


title: HISTORY
content:
JSON5 was conceived as a human-friendly alternative to JSON, addressing its strictness for use cases like configuration files. The project aims to make data interchange formats easier for humans to write and maintain, while still being compatible with the JavaScript ecosystem. The <b>json5</b> command-line tool emerged as a practical utility to bridge the gap between JSON5 and standard JSON, allowing developers to leverage the enhanced readability of JSON5 in their workflows, often by converting it to standard JSON for consumption by stricter parsers or APIs. Its development closely tracks the evolution of the JSON5 specification, providing a reliable parser and serializer.


title: SYNOPSIS
content:
<b>jsonlint</b> [<i>options</i>] [<i>file...</i>]<br><br><i>file...</i>: One or more JSON files to process. If no files are specified, <i>jsonlint</i> reads from standard input (stdin).


title: PARAMETERS
content:
<b><b>--help</b>, <b>-H</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays usage information and exits.<br><br><b><b>--version</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the current version number of <i>jsonlint</i>.<br><br><b><b>--compact</b>, <b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the JSON in a compact, minified format (no whitespace or line breaks).<br><br><b><b>--pretty</b>, <b>-p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the JSON in a human-readable, pretty-printed format (often the default behavior).<br><br><b><b>--indent</b> <i>N</i>, <b>-i</b> <i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of spaces (<i>N</i>) to use for indentation when pretty-printing. The default is typically 2 spaces.<br><br><b><b>--indent-with-tabs</b>, <b>-t</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses tab characters instead of spaces for indentation when pretty-printing.<br><br><b><b>--sort-keys</b>, <b>-o</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sorts the keys within JSON objects alphabetically, ensuring consistent output.<br><br><b><b>--silent</b>, <b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses output on successful validation or formatting. Only error messages are printed.<br><br><b><b>--quiet</b>, <b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all output, including errors. The success or failure can only be determined by the exit status.<br><br><b><b>--validate</b>, <b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strictly validates the input as JSON without performing any reformatting, primarily checking for syntax correctness.<br><br>


title: DESCRIPTION
content:
<i>jsonlint</i> is a command-line utility designed for validating and formatting JSON (JavaScript Object Notation) data.<br><br>It meticulously checks if a given JSON input adheres to the strict JSON specification, reporting any syntax errors or structural issues, thereby ensuring data integrity. Beyond mere validation, <i>jsonlint</i> also offers robust reformatting capabilities, allowing users to pretty-print JSON with consistent indentation for enhanced readability, or conversely, to compact it into a single line for storage and transmission efficiency.<br><br>This indispensable tool is widely used by developers and system administrators working with JSON-based APIs, configuration files, and data serialization. It can process input from standard input (stdin) or directly from specified files, making it highly flexible for integration into shell scripts, automated workflows, and data pipelines.


title: CAVEATS
content:
It's important to note that different distributions or packages might provide varying implementations of <i>jsonlint</i> (e.g., Node.js-based, Python-based), which may lead to slight differences in available options or specific behaviors.<br><br>Additionally, <i>jsonlint</i> primarily focuses on <b>syntactic</b> validation of JSON. It does not perform <b>semantic</b> validation, meaning it won't check if the JSON content conforms to a specific schema or data model, only if its structure is valid JSON.


title: <B>USAGE EXAMPLES</B>
content:
Here are some common ways to use <i>jsonlint</i>:<br><br><b>Validate JSON from standard input:</b><br><i>echo '{"name": "Alice", "age": 30}' | jsonlint</i><br><br><b>Validate and pretty-print a JSON file:</b><br><i>jsonlint mydata.json</i><br><br><b>Minify a JSON file to a new file:</b><br><i>jsonlint --compact input.json > minified.json</i><br><br><b>Pretty-print with 4-space indentation:</b><br><i>jsonlint --indent 4 config.json</i><br><br><b>Validate quietly for scripting:</b><br><i>if jsonlint --quiet some_api_response.json; then echo "Valid JSON"; else echo "Invalid JSON"; fi</i>


title: <B>EXIT STATUS</B>
content:
<i>jsonlint</i> typically utilizes standard Unix exit codes to indicate the outcome of its operation:<br><br><b>0</b>: Indicates that the input JSON was successfully validated and/or formatted.<br><b>1</b> (or any non-zero value): Indicates that an error occurred, such as invalid JSON syntax or an issue with file access. This makes <i>jsonlint</i> highly suitable for use in shell scripts to automate validation checks.


title: HISTORY
content:
The development of <i>jsonlint</i> as a command-line tool closely followed the rapid adoption of JSON as a ubiquitous data interchange format.<br><br>While JSON itself originated from JavaScript, <i>jsonlint</i> implementations quickly emerged across various programming language ecosystems (like Node.js, Python, Ruby) to provide developers with a quick and reliable way to validate and pretty-print JSON data directly from the terminal or within build pipelines.<br><br>Its straightforward utility for ensuring data integrity and improving readability made it an essential tool for anyone regularly interacting with JSON.


title: SYNOPSIS
content:
<b>jstack</b> [ <i>options</i> ] <i>&lt;pid&gt;</i><br><b>jstack</b> [ <i>options</i> ] <i>&lt;executable&gt; &lt;core&gt;</i>


title: PARAMETERS
content:
<b><i>&lt;pid&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The process ID of the target Java application. This is the most common way to use <b>jstack</b>.<br><br><b><i>&lt;executable&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the Java executable that generated the <i>&lt;core&gt;</i> dump. Used when analyzing a core dump.<br><br><b><i>&lt;core&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the core dump file to be analyzed. Used in conjunction with <i>&lt;executable&gt;</i>.<br><br><b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a long listing. Prints additional information about <i>java.util.concurrent</i> locks. This is especially useful for detecting deadlocks involving these types of locks, showing owned and waiting monitors.<br><br><b><b>-F</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces a stack dump. Use this option if the initial <b>jstack</b> <i>&lt;pid&gt;</i> command is unresponsive (e.g., due to the JVM being in a hung or unresponsive state). This option can only be used with a <i>&lt;pid&gt;</i>.<br><br><b><b>-m</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints both Java and native C/C++ frames (mixed mode). This is helpful when debugging issues involving Java Native Interface (JNI) calls or native libraries, as it shows the complete call stack across language boundaries.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message for the command and exits.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of the <b>jstack</b> utility and exits.<br><br>


title: DESCRIPTION
content:
The <b>jstack</b> command is a utility provided with the Java Development Kit (JDK) that prints Java stack traces of all Java threads for a given Java process or core dump. It is an invaluable tool for diagnosing issues such as deadlocks, performance bottlenecks, or understanding the runtime state of a Java application. By analyzing the output, developers can determine what each thread is doing, which methods are being executed, and which locks are held or waited upon. It attaches to a running Java Virtual Machine (JVM) process, or can analyze a core dump file generated from a crashed JVM, providing a snapshot of the thread activity at that moment. This tool is essential for deep-dive troubleshooting of Java applications.


title: CAVEATS
content:
Requires the Java Development Kit (JDK) to be installed on the system, not just the Java Runtime Environment (JRE).<br>The user running <b>jstack</b> must have sufficient permissions to inspect the target Java process (e.g., running as the same user as the JVM, or with root privileges).<br>While generally non-intrusive, <b>jstack</b> may momentarily pause the target JVM for a very short duration while collecting thread information.<br>Using the <b>-F</b> (force) option should be done with caution, as it bypasses normal communication and might sometimes be more disruptive, though it is usually safe for diagnostics.<br>The output can be very large for applications with a high number of active threads, requiring careful analysis.


title: UNDERSTANDING JSTACK OUTPUT
content:
The output of <b>jstack</b> provides a detailed snapshot of each thread's state, crucial for diagnostics:<br><i>Thread State</i>: Indicates whether a thread is <i>RUNNABLE</i> (actively executing), <i>BLOCKED</i> (waiting for a monitor lock), <i>WAITING</i> (indefinitely waiting for another thread to perform an action), or <i>TIMED_WAITING</i> (waiting for a specified time).<br><i>Stack Trace</i>: The sequence of method calls that led to the current execution point of the thread, showing the exact line number where the thread is paused or executing.<br><i>Lock Information</i>: For <i>BLOCKED</i> or <i>WAITING</i> threads, it shows which monitor or lock the thread is waiting for, and which object it is trying to acquire. The <b>-l</b> option provides more granular detail on <i>java.util.concurrent</i> locks.<br><br>Analyzing this output helps identify common issues such as deadlocks (where two or more threads are <i>BLOCKED</i>, each waiting for a resource held by another), infinite loops, or performance bottlenecks caused by contention for shared resources or long-running operations.


title: HISTORY
content:
<b>jstack</b> has been a fundamental diagnostic tool within the Java Development Kit (JDK) since its early versions, prominently available since Java SE 5. Its primary function of providing thread dumps has remained consistent, evolving alongside Java's concurrency utilities and debugging capabilities. It serves as a staple utility for profiling and troubleshooting Java applications in both production and development environments, reflecting the continuous need for detailed runtime insights.


title: SYNOPSIS
content:
<b>jstat</b> [ <i>options</i> ] &lt;<i>vmid</i>&gt; [ &lt;<i>interval</i>&gt; [ &lt;<i>count</i>&gt; ]]<br><br>Where:<br> &lt;<i>vmid</i>&gt;: The Virtual Machine Identifier, typically the Process ID (PID) of the target Java application.<br> &lt;<i>interval</i>&gt;: Sampling interval in milliseconds. An optional 's' suffix can be used for seconds (e.g., '1s').<br> &lt;<i>count</i>&gt;: The number of samples to take. If omitted, <i>jstat</i> will run continuously until terminated.


title: PARAMETERS
content:
<b>&lt;<i>vmid</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The Virtual Machine Identifier, usually the operating system's Process ID (PID) of the target Java application.<br><br><b>&lt;<i>interval</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The sampling interval, specified in milliseconds. Optionally, append 's' for seconds (e.g., '1s').<br><br><b>&lt;<i>count</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The number of samples to take. If omitted, <i>jstat</i> will display statistics continuously.<br><br><b>-class</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays statistics on the behavior of the class loader.<br><br><b>-compiler</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays statistics on the behavior of the HotSpot Just-In-Time (JIT) compiler.<br><br><b>-gc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays statistics on garbage collection activity.<br><br><b>-gccapacity</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays statistics on the capacities of the generations and their corresponding spaces.<br><br><b>-gcnew</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays statistics on the behavior of the new generation (Eden and Survivor spaces).<br><br><b>-gcnewcapacity</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays statistics on the capacities of the new generation.<br><br><b>-gcold</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays statistics on the behavior of the old generation.<br><br><b>-gcoldcapacity</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays statistics on the capacities of the old generation.<br><br><b>-gcutil</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays garbage collection statistics with information on the utilization of each memory area.<br><br><b>-gcmetacapacity</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays statistics on the capacities of the Metaspace.<br><br><b>-gcmetautil</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays statistics on the utilization of the Metaspace.<br><br><b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a timestamp column at the beginning of the output.<br><br><b>-h&lt;lines&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays column headers every specified number of <i>lines</i> of data samples.<br><br><b>-J&lt;option&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes &lt;option&gt; directly to the Java VM where <i>jstat</i> is running (e.g., for setting heap size).<br><br>


title: DESCRIPTION
content:
<br><i>jstat</i> (Java Statistics Monitoring Tool) is a command-line utility provided with the Java Development Kit (JDK) designed to monitor the performance and resource consumption of an instrumented HotSpot Java Virtual Machine (JVM). It provides various categories of statistics, including garbage collection (GC) behavior, heap memory usage, class loading, and JIT compilation activity.<br><br>This tool is invaluable for diagnosing performance bottlenecks, identifying potential memory leaks, and gaining a deeper understanding of how a Java application behaves under different loads. By connecting to a running JVM process via its Process ID (PID), <i>jstat</i> can display real-time or snapshot data. It supports a continuous monitoring mode, similar to tools like <i>top</i> or <i>vmstat</i>, allowing users to observe trends over time by specifying an update interval and an optional sample count. Its primary use case is direct server-side JVM monitoring, providing raw data for quick analysis.


title: CAVEATS
content:
<br>• <b>Permissions:</b> <i>jstat</i> typically requires the user running the command to have the same user privileges as the target JVM process, or elevated permissions (e.g., root) to attach to it.<br>• <b>Local Monitoring:</b> By default, <i>jstat</i> is designed for local monitoring. For remote JVM monitoring, the <i>jstatd</i> daemon must be running on the target host with appropriate security policies configured.<br>• <b>Output Interpretation:</b> The raw numerical output from <i>jstat</i> can be challenging to interpret without a solid understanding of the JVM's memory model (Eden, Survivor, Old Gen, Metaspace) and various Garbage Collection algorithms.<br>• <b>Performance Impact:</b> While generally low, continuous monitoring with very short intervals can introduce a minor performance overhead on the monitored JVM.<br>• <b>Modern Alternatives:</b> For more detailed diagnostics, especially for heap analysis or thread dumps, other JDK tools like <i>jcmd</i> or graphical tools like <i>JConsole</i> and <i>JVisualVM</i> might offer more comprehensive features.


title: UNDERSTANDING OUTPUT METRICS
content:
The columns in <i>jstat</i>'s output vary by report type. For example, with <i>-gcutil</i>, you might see columns like S0C (Survivor 0 Capacity), S1U (Survivor 1 Used), EC (Eden Capacity), EU (Eden Used), OC (Old Gen Capacity), OU (Old Gen Used), MC (Metaspace Capacity), MU (Metaspace Used), YGC (Young GC Count), FGC (Full GC Count), and GCT (Total GC Time). Interpreting these requires familiarity with JVM memory areas and GC cycles.


title: REMOTE MONITORING WITH JSTATD
content:
To monitor a JVM on a remote host using <i>jstat</i>, the <i>jstatd</i> daemon must be running on the target machine. This daemon acts as a RMI server, allowing remote tools like <i>jstat</i> to connect and retrieve JVM statistics. Proper security policies (`java.policy` file) must be configured to allow remote access to the JVM's instrumentation.


title: LISTING AVAILABLE OPTIONS
content:
To see the specific report options available for your installed JDK version, you can run the command <code>jstat -options</code>. This is useful as the set of available options can sometimes vary slightly between JDK versions or custom JVM builds.


title: HISTORY
content:
<i>jstat</i> has been a fundamental part of the Java Development Kit (JDK) since early versions, notably appearing in JDK 1.4.2 and becoming a standard tool in JDK 5.0 and beyond. Its primary purpose has always been to provide command-line access to internal JVM performance counters. Over time, it has been updated to reflect changes in JVM memory management (e.g., the introduction of Metaspace replacing PermGen) and new garbage collection algorithms. While its core functionality remains consistent, the broader landscape of JVM diagnostic tools has evolved, with tools like <i>jcmd</i> and robust graphical interfaces offering more advanced capabilities. Despite these advancements, <i>jstat</i> remains a quick and efficient utility for real-time, basic JVM health checks and performance insights directly from the command line.


title: PARAMETERS
content:
<b>-c <i>columns</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a comma-separated list of column names to display. <br> This allows for reordering or selecting a subset of available columns.<br><br><b>-C <i>header</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the provided string as a single header for all columns, <br> overriding automatically detected headers.<br><br><b>-i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignores missing columns. If a specified column <br> is not found in a JSON object, it will be treated as empty <br> instead of causing an error.<br><br><b>-H</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the table in <b>HTML</b> format.<br><br><b>-M</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the table in <b>Markdown</b> format.<br><br><b>-S</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the table as <b>SQL INSERT</b> statements.<br><br><b>-L</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the table in <b>LaTeX</b> format.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the table in plain text format (this is the <i>default</i>).<br><br><b>-f <i>key</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts a specific top-level field/key from each JSON object <br> and uses its content as the data source for the table.<br><br><b>-d <i>delimiter</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom delimiter character for <br> plain text or CSV output (default is space or comma respectively).<br><br><b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the output of a table header, even if no <br> columns are explicitly specified or detected.<br><br><b>-nh</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the output of the header row.<br><br><b>-ns</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the separator line in plain text table output.<br><br><b>-nr</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses row numbers in the output.<br><br><b>-o <i>output_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the generated table output to the specified file <br> instead of standard output.<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Escapes output values, particularly useful for <br> HTML to prevent injection issues or ensure proper display.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more information <br> about the processing.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of <b>jtbl</b> and exits.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with usage instructions and options, then exits.<br><br><b>--</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Marks the end of command-line options, allowing subsequent arguments <br> to be treated as filenames even if they start with a hyphen.<br><br>


title: DESCRIPTION
content:
The <b>jtbl</b> command is a specialized utility designed to transform <br> JSON data into various human-readable or machine-readable table formats. <br> It is a companion tool to <b>jo</b> (JSON output) and is typically used <br> to process JSON arrays of objects, where each object represents a row <br> and its keys correspond to column headers. <br><br> <b>jtbl</b> reads JSON from standard input or specified files and <br> can generate output in formats such as plain text, <br> Comma-Separated Values (CSV), HTML, Markdown, SQL INSERT statements, <br> or LaTeX tables. This makes it highly versatile for <br> data presentation, report generation, or database import tasks. <br><br> Users can specify which columns to include, <br> define custom headers, and control the output styling. <br> It's particularly useful in shell scripting pipelines <br> where structured JSON output from other commands <br> needs to be quickly formatted for display or further processing. <br> Its ability to handle missing columns gracefully <br> and escape output values for web contexts <br> adds to its robustness.


title: CAVEATS
content:
It is important to note that <b>jtbl</b> is <br> <i>not</i> a standard utility found in most <br> core GNU/Linux distributions. It typically requires <br> separate installation, usually as part of the <b>jo</b> <br> (JSON output) package. <br><br> The command expects valid JSON input, <br> specifically an array of JSON objects, where each object <br> represents a row of data. <br> Incorrect JSON formatting or a different structure <br> may lead to errors or unexpected output.


title: TYPICAL USAGE WITH JO
content:
<b>jtbl</b> is frequently used in conjunction with <br> <b>jo</b> to create and then format JSON data. <br> For example, <i>jo -a name=Alice age=30 | jtbl</i> <br> would create a JSON array with one object and <br> then format it into a plain text table.


title: EXPECTED JSON INPUT STRUCTURE
content:
For <b>jtbl</b> to function correctly, the input <br> JSON should typically be an array of objects. <br> Each object within the array is treated as a row, <br> and the keys within each object are interpreted as <br> column headers. For instance: <br> <i>[{"name":"Bob", "age":25}, {"name":"Charlie", "age":35}]</i> <br> would result in a table with 'name' and 'age' columns.


title: HISTORY
content:
The <b>jtbl</b> utility is a component of the <br> <b>jo</b> project, an open-source initiative by <br> J.P. Mens. <b>jo</b> was initially released around <br> 2017 with the aim of simplifying JSON generation <br> from the command line. <b>jtbl</b> was developed <br> as a complementary tool to provide structured <br> table formatting capabilities for the JSON <br> output produced by <b>jo</b> or other sources. <br> Its development reflects a growing need for <br> flexible command-line tools to process and present <br> JSON data in various contexts.


title: SYNOPSIS
content:
<b>julia</b> [options] [file] [args...]<br><b>julia</b> [options] -e "code"<br><b>julia</b> [options] -E "code"<br><b>julia</b> [options] -L file


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays usage information and available options.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the Julia version information and exits.<br><br><b><b>-e</b>, <b>--eval &lt;expr&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Evaluates the given Julia expression.<br><br><b><b>-E</b>, <b>--print &lt;expr&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Evaluates the given Julia expression and prints its result.<br><br><b><b>-L</b>, <b>--load &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads a Julia source file into the current session before other arguments are processed.<br><br><b><b>-i</b>, <b>--interactive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts an interactive REPL session after command-line arguments are processed.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses printing the Julia banner at startup.<br><br><b><b>-P</b>, <b>--procs &lt;n&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a specified number of worker processes for distributed computing.<br><br><b><b>-t</b>, <b>--threads &lt;n&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of execution threads available for multi-threading.<br><br><b><b>--project[=&lt;dir&gt;]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates a specified Julia project environment, defaulting to the current directory.<br><br><b><b>--sysimage=&lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a custom precompiled system image file instead of the default.<br><br><b><b>--startup-file={yes|no|&lt;file&gt;}</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls loading of the user's custom startup file (<i>~/.julia/config/startup.jl</i>).<br><br><b><b>--check-bounds={yes|no|auto}</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables or disables array bounds checking at runtime.<br><br><b><b>--optimize={0|1|2|3}</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the optimization level for compiled code (higher number for more optimization).<br><br><b><b>--color={yes|no|auto}</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables or disables colored output in the REPL and for warnings/errors.<br><br><b><b>--depwarn={yes|no|error}</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls how deprecation warnings are handled (print, ignore, or error).<br><br><b><b>--history-file={yes|no}</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables or disables loading and saving of REPL command history.<br><br>


title: DESCRIPTION
content:
Julia is a <b>high-level, high-performance, dynamic programming language</b> designed for technical computing, data science, and artificial intelligence. It combines the ease of use of scripting languages with the speed of compiled languages. The `julia` command invokes the Julia interpreter, providing a versatile interface for various tasks: running Julia scripts from files, launching an interactive REPL (Read-Eval-Print Loop) for direct code execution and experimentation, executing Julia code snippets directly from the command line, managing project environments and packages, and configuring runtime behavior such as optimization levels, threading, and distributed computing.<br><br>Its Just-In-Time (JIT) compilation to native code enables exceptional performance, making it suitable for demanding computational workloads.


title: CAVEATS
content:
Julia's Just-In-Time (JIT) compilation means that the <i>first execution</i> of a function can be slower due to compilation overhead. Subsequent calls are typically much faster. A full Julia installation is required for the `julia` command to function. Memory usage can be significant for large-scale scientific computations.


title: INTERACTIVE REPL
content:
Running `julia` without any arguments launches an interactive Read-Eval-Print Loop (REPL). This is an excellent environment for trying out code snippets, debugging, and interactive data analysis.


title: SCRIPT EXECUTION
content:
To execute a Julia script, simply provide the path to the <i>.jl</i> file as an argument: `julia my_script.jl arg1 arg2`. Any arguments following the script file are passed to the script.


title: PACKAGE MANAGEMENT
content:
The Julia REPL includes a powerful built-in package manager. By typing `]` in the REPL, users can enter package manager mode to easily add, remove, update, and manage project dependencies and environments.


title: HISTORY
content:
Julia was initially announced to the public in 2012, with version 1.0 released in August 2018. From its inception, the `julia` command-line utility has been the primary interface for users to interact with the language. Its design has evolved to incorporate advanced features like multi-threading, distributed computing, and flexible package management, reflecting Julia's growth into a robust platform for high-performance technical computing. The CLI options provide fine-grained control over the runtime environment, critical for diverse applications ranging from scripting to complex simulations.


title: SYNOPSIS
content:
jupyter <I>subcommand</I> [<I>options</I>] [<I>arguments</I>]<br><br>Common subcommands include:<br><b>jupyter notebook</b>: Launches the classic Jupyter Notebook interface.<br><b>jupyter lab</b>: Launches the newer, more integrated JupyterLab interface.<br><b>jupyter console</b>: Starts an interactive console for a kernel.<br><b>jupyter qtconsole</b>: Starts an enhanced interactive console using Qt.<br><b>jupyter kernelspec</b>: Manages Jupyter kernels.<br><b>jupyter serverextension</b>: Manages Jupyter server extensions.<br><b>jupyter nbextension</b>: Manages Jupyter notebook extensions (legacy).<br><b>jupyter troubleshoot</b>: Gathers information for debugging.


title: PARAMETERS
content:
<b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the version number of the Jupyter application.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a help message and exit. When used with a subcommand (e.g., <I>jupyter notebook --help</I>), it shows help for that specific subcommand.<br><br>


title: DESCRIPTION
content:
Jupyter is a widely used open-source project that supports interactive data science and scientific computing across all programming languages. The <I>jupyter</I> command serves as the primary entry point to the Jupyter ecosystem on a Linux system. It allows users to launch various Jupyter applications, most notably Jupyter Notebook and JupyterLab, which provide web-based interactive computing environments. These environments combine live code, equations, visualizations, and narrative text into a single document called a notebook.<br><br>Jupyter is language-agnostic, supporting over 100 programming languages through 'kernels.' A kernel is a program that runs and introspects the user's code. For instance, the IPython kernel allows Python code execution. The <I>jupyter</I> command simplifies the process of starting these environments, configuring server settings, managing kernels, and performing other administrative tasks related to the Jupyter installation. It is a fundamental tool for data scientists, researchers, and educators for rapid prototyping, data analysis, machine learning model development, and sharing reproducible research.


title: CAVEATS
content:
<b>Resource Consumption</b>: Jupyter Notebook/Lab can consume significant system resources (CPU, RAM), especially with large datasets or complex computations. Running multiple instances or notebooks with heavy loads can impact system performance.<br><b>Security Implications</b>: Running Jupyter on a public server without proper security measures (e.g., token-based authentication, SSL, firewall rules) can expose your system. Avoid running as root (<I>--allow-root</I>) in production environments due to inherent security risks.<br><b>Browser Dependency</b>: Jupyter's interactive interface is web-based, requiring a modern web browser to function. Headless server environments might need configuration to prevent automatic browser launch.<br><b>Kernel Management</b>: Installing and managing different language kernels (e.g., Python, R, Julia) requires careful environment management, often using tools like <I>pip</I> or <I>conda</I>, which can sometimes lead to dependency conflicts.


title: SUBCOMMANDS ARE KEY
content:
The <I>jupyter</I> command itself acts as a dispatcher. Most functionality is exposed through its various subcommands, such as <I>jupyter notebook</I>, <I>jupyter lab</I>, <I>jupyter kernelspec</I>, etc. Each subcommand has its own specific set of options and arguments, which can be viewed using <I>jupyter &lt;subcommand&gt; --help</I>. For instance, <I>jupyter notebook --port 8889 --no-browser</I> launches a notebook server on port 8889 without opening a web browser automatically.


title: KERNELS
content:
Jupyter's power comes from its 'kernels.' A kernel is a separate process responsible for running user code and communicating results back to the Jupyter frontend. While the default is the IPython kernel for Python, numerous other kernels exist for languages like R, Julia, Node.js, and many more, enabling a truly polyglot computing environment.


title: HISTORY
content:
The Jupyter project originated from the <B>IPython Notebook</B>, initially released in 2011 as a web-based interface for interactive Python computing. It evolved significantly, and in 2014, the Project Jupyter (JUlia, PYThon, R) was born to encompass broader language support and extend the interactive computing paradigm beyond Python.<br><br>The core idea was to separate the user interface from the execution engine (the 'kernel'), allowing support for over 100 programming languages. The <B>jupyter</B> command line tool was introduced as the unified entry point for this expanded ecosystem. <B>JupyterLab</B>, a next-generation interactive development environment, was released in 2018, offering a more flexible and powerful workspace than the classic Notebook. The project has since become a cornerstone for data science, machine learning research, and education globally.


title: SEE ALSO
content:
<b>python(1)</b>: The primary programming language interpreter often used with Jupyter., <b>pip(1)</b>: Python package installer, commonly used to install Jupyter and its dependencies., <b>conda(1)</b>: Cross-platform package and environment manager, an alternative to pip for managing environments and packages, including Jupyter., <b>tmux(1)</b> / <b>screen(1)</b>: Terminal multiplexers useful for running Jupyter server processes persistently in the background., <b>htop(1)</b> / <b>top(1)</b>: System monitoring tools to observe resource usage of Jupyter processes., <b>curl(1)</b> / <b>wget(1)</b>: Command-line tools for transferring data with URLs, useful for downloading data into Jupyter environments or accessing API endpoints.


title: PARAMETERS
content:
<b><b>--no-browser</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not automatically open a browser when the server starts. The server URL will be printed to the console.<br><br><b><b>--port</b> <<i>port</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the port number for the server to listen on. The default port is 8888. If the port is in use, it will attempt to find the next available port.<br><br><b><b>--ip</b> <<i>ip</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the IP address on which the server will listen. Default is 127.0.0.1 (localhost). Use '0.0.0.0' to listen on all available IPs.<br><br><b><b>--notebook-dir</b> <<i>dir</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The directory to serve notebooks and other files from. This directory will be the root of the file browser within <i>JupyterLab</i>.<br><br><b><b>--config</b> <<i>file</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load the configuration from a specific file path instead of the default <i>jupyter_lab_config.py</i>.<br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug logging, providing more verbose output for troubleshooting purposes.<br><br><b><b>--ServerApp.token</b>=<<i>token</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the authentication token required to access the <i>JupyterLab</i> server. This is useful for automated access or when running a headless server.<br><br><b><b>--ServerApp.password</b>=<<i>hashed_password</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a hashed password for authentication. A hashed password can be generated using <b>jupyter lab password</b> or programmatically.<br><br>


title: DESCRIPTION
content:
<i>JupyterLab</i> is an open-source, web-based interactive development environment (IDE) for <i>Jupyter notebooks</i>, code, and data.<br><br>It offers all the familiar building blocks of the classic Jupyter Notebook (notebooks, terminals, text editors, file browser, console) in a flexible and extensible user interface. Users can arrange multiple documents and activities side by side in the work area, customize the interface with themes, and install extensions to add new features. It's designed to be highly modular and extensible, allowing for deeper integration with data science workflows, educational tools, and scientific computing.


title: CAVEATS
content:
<i>JupyterLab</i> can be resource-intensive (memory and CPU), particularly when running many notebooks or complex computations simultaneously.<br><br>Running the server as the root user (using <b>--allow-root</b>) is strongly discouraged due to significant security implications.<br><br>Network configuration, especially when accessing the server remotely, requires careful consideration of IP addresses, ports, and firewall rules.


title: EXTENSIONS AND CUSTOMIZATION
content:
<i>JupyterLab</i> boasts a rich ecosystem of extensions that can add new functionalities, support new file types, or integrate with external services. These extensions can be installed using the <b>jupyter lab extension install</b> command. Users can also extensively customize the interface, themes, and layout to suit their preferences.


title: CONFIGURATION FILES
content:
Beyond command-line arguments, <i>JupyterLab</i>'s behavior can be configured persistently through configuration files. The primary configuration file is typically found at <b>~/.jupyter/jupyter_lab_config.py</b>, which allows for advanced customization of server settings, extensions, and more.


title: SECURITY CONSIDERATIONS
content:
When running <i>JupyterLab</i>, especially on accessible networks, it's crucial to consider security. Using tokens or passwords (<b>--ServerApp.token</b>, <b>--ServerApp.password</b>), configuring SSL, and setting appropriate IP addresses (<b>--ip</b>) are highly recommended to prevent unauthorized access to your server and data.


title: HISTORY
content:
<i>JupyterLab</i> was developed as the ambitious successor to the classic <i>Jupyter Notebook</i>, aiming to provide a more flexible, extensible, and IDE-like environment.<br><br>Its development began around 2015 within Project Jupyter, with the first stable release (version 1.0) announced in 2018. It integrates various components like notebooks, terminals, text editors, and consoles into a single, cohesive user interface, designed for modern data science and scientific computing workflows.


title: SYNOPSIS
content:
<b>jupytext</b> [OPTIONS] <notebook_file>...<br><b>jupytext</b> <b>--to</b> <format> [OPTIONS] <input_file>...<br><b>jupytext</b> <b>--sync</b> [OPTIONS] <notebook_file>...


title: PARAMETERS
content:
<b><b>--to <format></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Convert the input notebook to the specified text format (e.g., py, md, myst, ipynb).<br><br><b><b>--from <format></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret the input file as the specified format before converting or syncing. Useful when processing non-.ipynb files.<br><br><b><b>--sync</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Synchronize the input notebook (.ipynb) with its paired text representation (e.g., .py or .md). Changes in one are propagated to the other.<br><br><b><b>--output <file></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the output to a specific file instead of using the default naming convention.<br><br><b><b>--overwrite</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overwrite existing output files without prompting.<br><br><b><b>--set-formats <formats></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the output formats for a notebook. Example: <b>ipynb,py:percent</b>.<br><br><b><b>--set-metadata <metadata></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set specific notebook or cell metadata (e.g., '{"jupytext":{"formats":"ipynb,py:percent"}}').<br><br><b><b>--execute</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Execute the notebook after conversion. This is similar to <b>nbconvert --execute</b>.<br><br><b><b>--diff</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show differences between a notebook and its paired text file, or between two notebooks.<br><br><b><b>--check</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Check if the notebook and its text representation are identical, returning a non-zero exit code if they differ.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the version number of <i>jupytext</i>.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br>


title: DESCRIPTION
content:
<i>jupytext</i> is a command-line tool that enables <b>two-way conversion</b> between Jupyter notebooks (.ipynb files) and various plain text formats, including Python scripts (.py), Markdown documents (.md), MyST Markdown (.myst), R scripts (.R), and Julia scripts (.jl). Its primary purpose is to make Jupyter notebooks more <b>version control friendly</b>. By representing notebooks as plain text, it becomes significantly easier to track changes, perform diffs, and merge conflicts using standard Git tools. <i>jupytext</i> allows users to edit the text representation of a notebook (e.g., a .py file with code cells and markdown comments) and then convert it back to an .ipynb file, preserving cell outputs and metadata. It also supports <b>synchronization</b>, keeping both the .ipynb and its text representation in sync. This facilitates collaborative development and integration of notebooks into traditional software development workflows.


title: CAVEATS
content:
While <i>jupytext</i> excels at managing notebook source, some aspects like <b>rich cell outputs</b> (e.g., plots, interactive widgets) are inherently difficult to represent in plain text and are typically stored only in the .ipynb file. When converting from .ipynb to a text format, cell outputs are generally stripped to keep the text file clean and diffable. Also, <b>notebook-level metadata</b> can be complex; ensure proper configuration (e.g., via <b>jupytext.toml</b> or embedded in the text file) to avoid unintended changes or loss of information when round-tripping. For complete execution and rich output handling, the original .ipynb file is usually required.


title: PAIRED NOTEBOOKS
content:
One of <i>jupytext</i>'s most powerful features is the concept of <b>paired notebooks</b>. This allows you to maintain both an .ipynb file and a plain text representation (e.g., a .py script or .md file) of the same notebook side-by-side. When you modify one, <i>jupytext</i> can synchronize the changes to the other using the <b>--sync</b> option. This enables editing the notebook in a text editor for easier code review and diffing, while still having the fully executable .ipynb with outputs available for interactive use or sharing.


title: CONFIGURATION
content:
<i>jupytext</i> can be configured globally via Jupyter's configuration files (e.g., <b>~/.jupyter/jupyter_notebook_config.py</b> or <b>~/.jupyter/jupyter_server_config.py</b>), or locally per project using a <b>jupytext.toml</b> file. These configurations can specify default pairing formats, metadata filters, and other behaviors, making it easier to enforce consistent workflows across projects or teams without manually setting options for every conversion.


title: HISTORY
content:
<i>jupytext</i> was created by <b>Marc Wouts</b> to address a fundamental challenge with Jupyter notebooks: their native .ipynb format, being a JSON file, makes them difficult to manage effectively with traditional <b>version control systems</b> like Git. The tool's development aimed to provide a robust solution for tracking changes, reviewing code, and merging contributions in a more granular and human-readable way. Since its initial release, <i>jupytext</i> has gained significant traction within the data science and software development communities as a key component for enabling Git-friendly workflows for Jupyter notebooks, becoming a standard practice for many collaborative projects.


title: PARAMETERS
content:
<b><b>--list</b>, <b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available recipes defined in the <i>justfile</i>.<br><br><b><b>--dry-run</b>, <b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the commands that <b>just</b> would run without executing them.<br><br><b><b>--dump</b>, <b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <i>justfile</i> to standard output after parsing and interpolation.<br><br><b><b>--evaluate</b>, <b>-e</b> <i>&lt;EXPRESSION&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Evaluates and prints the value of a variable or a recipe expression.<br><br><b><b>--shell</b> <i>&lt;SHELL&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the shell to use for executing recipes (e.g., <i>bash</i>, <i>zsh</i>).<br><br><b><b>--shell-arg</b> <i>&lt;ARG&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds an argument to pass to the shell. Can be used multiple times.<br><br><b><b>--set</b> <i>&lt;VAR&gt; &lt;VALUE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a variable to a specific value, overriding <i>justfile</i> definitions.<br><br><b><b>--init</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a boilerplate <i>justfile</i> in the current directory.<br><br><b><b>--color</b> <i>&lt;WHEN&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls when <b>just</b> outputs colors (auto, always, never).<br><br>


title: DESCRIPTION
content:
<b>just</b> is a command runner that simplifies project automation by providing a straightforward way to define and execute project-specific commands. It's often seen as a modern alternative to <b>make</b>, offering a simpler syntax and improved error messages. <b>just</b> finds a <i>justfile</i> (or <i>Justfile</i>) in the current directory or its parents, which contains "recipes" – sequences of commands. Users can then execute these recipes by typing <i>just &lt;recipe-name&gt;</i>. It automatically parallelizes recipes where possible, provides robust argument handling, and integrates well with shell environments. Its primary goal is to make common development tasks, such as building, testing, or deploying, easily runnable and discoverable for anyone working on a project.


title: CAVEATS
content:
While powerful, <b>just</b> is primarily a command runner, not a full-fledged build system like CMake or Bazel. Its simplicity comes from its focus on executing shell commands, which means complex dependency graphs or cross-compilation setups might be better handled by dedicated build tools. Security considerations are important; as <i>justfiles</i> execute arbitrary commands, they should be reviewed before running them from untrusted sources, similar to <i>Makefile</i>s.


title: <I>JUSTFILE</I> SYNTAX
content:
<b>just</b> recipes are defined in a file named <i>justfile</i> (or <i>Justfile</i>) located in the project root or parent directories. Recipes are declared as <i>recipe_name:</i> followed by a block of indented commands. It supports variables, parameters, and conditional execution.


title: AUTOMATIC PARALLELIZATION
content:
When multiple recipes are invoked (e.g., <i>just foo bar</i>), <b>just</b> can automatically run independent recipes in parallel, potentially speeding up execution time.


title: ARGUMENTS TO RECIPES
content:
Recipes can accept arguments, which are passed as positional parameters to the underlying shell commands (e.g., <i>just build debug</i>). This allows for flexible and reusable task definitions.


title: HISTORY
content:
<b>just</b> was created by Casey Rodarmor and first released around 2017. It emerged from a desire for a simpler, more robust command runner than <b>make</b>, particularly appealing to developers working with modern toolchains like Rust. Its development focused on providing better error messages, simpler syntax, and automatic parallelization, addressing common pain points with traditional build systems. It gained significant traction within the Rust community due to its ease of use and often being included as a recommended task runner in Rust projects, though its utility extends to any language or project requiring task automation.


title: SYNOPSIS
content:
<b>just-js</b> [<i>OPTIONS</i>] [<i>SCRIPT_FILE</i>] [<i>SCRIPT_ARGUMENTS...</i>]<br><b>just-js</b> -e | --eval <i>JS_CODE</i>


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available options for the interpreter.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the version information of the <i><b>just-js</b></i> interpreter.<br><br><b><b>-e</b> <i>&lt;js_code&gt;</i>, <b>--eval</b> <i>&lt;js_code&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the provided JavaScript code string directly from the command line.<br><br><b><i>&lt;script_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the JavaScript file to be executed by the interpreter.<br><br><b>[<i>SCRIPT_ARGUMENTS...</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Additional arguments passed directly to the executed JavaScript script. These are typically accessible within the script via a global array (e.g., <i>scriptArgs</i> or <i>argv</i>).<br><br>


title: DESCRIPTION
content:
<i><b>just-js</b></i> is a lightweight, barebones JavaScript interpreter designed for executing standalone JavaScript files and inline code snippets directly from the command line. Unlike larger runtimes such as Node.js or Deno, <i><b>just-js</b></i> focuses on providing a minimal environment, often leveraging embeddable engines like QuickJS or Duktape. This makes it ideal for shell scripting, quick utility tasks, and environments where resource efficiency and a small footprint are paramount. It typically lacks built-in modules for network, file system, or complex system interactions, concentrating solely on core JavaScript execution. Its simplicity allows for rapid startup times and minimal overhead, making it a valuable tool for automating simple tasks or processing data with JavaScript without the need for a full-fledged development environment. Due to its minimalist nature, <i><b>just-js</b></i> implementations can vary, often being custom scripts or wrappers built for specific purposes.


title: CAVEATS
content:
<i><b>just-js</b></i> is often a custom implementation or a wrapper around an embedded JavaScript engine (e.g., QuickJS, Duktape). As such, its exact features, available global objects, and command-line options can vary significantly. It typically does <b>not</b> provide the extensive API surface found in Node.js (e.g., <i>require</i>, <i>fs</i>, <i>http</i> modules) or browser environments. It is primarily for core JavaScript execution and simple scripting tasks. Users should verify the specific capabilities of their <i><b>just-js</b></i> distribution, as there is no single standardized implementation.


title: TARGET AUDIENCE
content:
Primarily aimed at developers and system administrators who require a lightweight, fast-starting JavaScript interpreter for shell scripts, automation, or simple data processing tasks without the overhead or feature set of larger JavaScript runtimes.


title: CORE FUNCTIONALITY
content:
Its core functionality is limited to executing standard ECMAScript code. Any advanced features like network requests, file system access beyond basic standard I/O, or module loading mechanisms are typically absent unless explicitly compiled or scripted into a specific <i><b>just-js</b></i> implementation.


title: HISTORY
content:
The concept behind <i><b>just-js</b></i> stems from the desire for highly portable and low-overhead JavaScript execution environments, distinct from large runtimes like Node.js. It reflects the increasing utility of JavaScript as a general-purpose scripting language for tasks traditionally handled by Bash or Python. While no single, canonical <i><b>just-js</b></i> project exists, the name likely refers to simple wrappers or direct executables built using embeddable JavaScript engines such as QuickJS (developed by Fabrice Bellard) or Duktape. These engines allow developers to embed a JavaScript runtime into their applications or create standalone command-line interpreters with minimal dependencies, catering to needs in embedded systems, command-line tooling, or rapid prototyping. The usage of "<i><b>just-js</b></i>" as a command name often signifies a highly focused, purpose-built JavaScript executor.


title: PARAMETERS
content:
<b><b>-l</b>, <b>--list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available recipes, including hidden ones.<br><br><b><b>-n</b>, <b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints commands that would be executed without actually running them.<br><br><b><b>-f</b> &lt;FILE&gt;, <b>--justfile</b> &lt;FILE&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative <i>Justfile</i> to use instead of the default.<br><br><b><b>-c</b> &lt;DIR&gt;, <b>--working-directory</b> &lt;DIR&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the current working directory before searching for the <i>Justfile</i>.<br><br><b><b>-s</b> &lt;SHELL&gt;, <b>--shell</b> &lt;SHELL&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes recipes using a specific shell program.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details about execution.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all non-error output during execution.<br><br><b><b>--shell-arg</b> &lt;ARG&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes an argument directly to the specified shell.<br><br><b><b>-p</b> &lt;PATH&gt;, <b>--search-path</b> &lt;PATH&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds an additional directory to search for <i>Justfiles</i>.<br><br><b><b>--set</b> &lt;KEY&gt;=&lt;VALUE&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overrides or sets a variable during execution.<br><br><b><b>--dump</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints a copy of the <i>Justfile</i> with variables expanded.<br><br><b><b>--init</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a boilerplate <i>Justfile</i> in the current directory.<br><br><b><b>--choose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interactively prompts the user to select a recipe to run.<br><br><b><b>--show-justfile</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the absolute path to the <i>Justfile</i> being used.<br><br><b><b>--no-dotenv</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <i>just</i> from loading environment variables from <b>.env</b> files.<br><br><b><b>--dotenv-path</b> &lt;PATH&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom path for the <b>.env</b> file.<br><br><b><b>--dotenv-filename</b> &lt;FILENAME&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom filename for the <b>.env</b> file (e.g., <b>.env.development</b>).<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <i>just</i> version information and exits.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the help message and exits.<br><br>


title: DESCRIPTION
content:
<i>just</i> is a convenient and lightweight command runner designed for executing project-specific tasks, serving as an alternative to traditional build systems like <b>make</b>. It allows developers to define 'recipes' (commands) in a <i>Justfile</i>, which <i>just</i> automatically discovers in the current directory or its parent. Key features include a simpler, more intuitive syntax compared to <b>make</b>, automatic <i>Justfile</i> discovery, support for variables and command-line arguments, and integration with <b>.env</b> files for environment variable management. <i>just</i> aims to streamline development workflows by providing a consistent, human-readable interface for common operations such as building, testing, or deploying, without requiring a shell for recipes by default.


title: CAVEATS
content:
<i>just</i> is optimized for simplicity and running predefined recipes, not for complex build systems requiring intricate dependency tracking between files. While it offers recipe dependencies, it lacks the advanced file-level dependency analysis and incremental build features found in tools like <b>make</b>. It's best suited for scripting common project tasks rather than managing a highly complex build graph.


title: JUSTFILE STRUCTURE
content:
A <i>Justfile</i> (or <b>justfile</b>) defines recipes and optional variables. Recipes are declared with a name followed by a colon, and their commands are indented.<br>Example:<br><b>build:</b><br><b>    echo "Building project..."</b><br><b>    gcc main.c -o myapp</b><br>Variables can be defined globally or within recipes to store values or expressions.


title: RECIPE ARGUMENTS
content:
Recipes can accept arguments, similar to shell functions. These are passed positionally when invoking the recipe.<br>Example:<br><b>greet NAME:</b><br><b>    echo "Hello, {{NAME}}!"</b><br>To run this: <b>just greet Alice</b>. Arguments are accessible as variables within the recipe.


title: JUSTFILE DISCOVERY
content:
When <i>just</i> is invoked without specifying a <i>Justfile</i>, it automatically searches for files named <b>Justfile</b>, <b>justfile</b>, <b>.Justfile</b>, or <b>.justfile</b> in the current directory. If not found, it recursively searches parent directories until a <i>Justfile</i> is located or the root directory is reached. This simplifies invocation as you typically don't need to specify the file path.


title: DOTENV INTEGRATION
content:
<i>just</i> automatically loads environment variables from a <b>.env</b> file found in the same directory as the <i>Justfile</i>. This provides a convenient way to manage project-specific environment configurations without polluting the global shell environment. This behavior can be customized or disabled using the <b>--no-dotenv</b>, <b>--dotenv-path</b>, or <b>--dotenv-filename</b> options.


title: HISTORY
content:
<i>just</i> was created by Casey Rodarmor and first publicly released around 2017. It emerged as a modern, user-friendly alternative to traditional command runners, primarily <b>make</b>. Its design prioritizes clear syntax, automatic <i>Justfile</i> discovery, and ease of use, aiming to simplify project scripting. <i>just</i> quickly gained popularity, particularly within the Rust programming ecosystem, due to its robust features and lightweight nature, becoming a widely adopted tool for managing development tasks across various programming languages and project types.


title: SYNOPSIS
content:
<br><b>node</b> <i>just.js</i> [<i>options</i>] [<i>arguments</i>]<br><b>./just.js</b> [<i>options</i>] [<i>arguments</i>] <i>(if executable and with shebang)</i>


title: PARAMETERS
content:
<b><i>[options]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Any command-line options are specific to the JavaScript code within the 'just.js' file itself. These are not standardized and depend entirely on how the script is programmed to parse arguments (e.g., using libraries like <b>minimist</b>, <b>yargs</b>, or <b>commander</b>).<br><br><b><i>[arguments]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Any positional arguments are also custom and are processed by the 'just.js' script. Their meaning and number are determined solely by the script's internal logic.<br><br>


title: DESCRIPTION
content:
The name 'just.js' refers to a JavaScript source file, not a standard or pre-installed Linux command. Unlike native commands like <b>ls</b> or <b>grep</b>, a <i>.js</i> file requires a JavaScript runtime environment (such as Node.js, Deno, or Bun) to be installed and available on the system. For 'just.js' to function as a command, it typically needs to be invoked explicitly with its interpreter, for example, <code><b>node</b> <i>just.js</i></code>. Alternatively, if the script is made executable (e.g., <code><b>chmod +x just.js</b></code>) and includes a 'shebang' line (e.g., <code><i>#!/usr/bin/env node</i></code>) at its very beginning, it can be executed directly as <code><b>./just.js</b></code> or, if placed in a directory listed in the system's <b>PATH</b>, simply as <code><b>just.js</b></code>. The specific functionality, accepted options, and arguments of 'just.js' are entirely defined by the JavaScript code written within that particular file. It could be anything from a simple utility script to a complex command-line application.


title: CAVEATS
content:
<b>Not a Standard Command:</b> 'just.js' is not a globally recognized or pre-installed Linux command. Its existence and functionality depend entirely on a local file.<br><b>Runtime Dependency:</b> Requires a JavaScript runtime (e.g., Node.js) to be installed on the system to execute.<br><b>Custom Functionality:</b> Its behavior, options, and arguments are entirely defined by the content of the JavaScript file, leading to highly variable usage.<br><b>Security:</b> Executing arbitrary <i>.js</i> files from unknown sources can pose security risks, as they can perform various actions on your system.


title: MAKING IT EXECUTABLE
content:
To run 'just.js' directly without explicitly invoking the interpreter (e.g., <code><b>node just.js</b></code>), you must first make the file executable using <code><b>chmod +x just.js</b></code>. Additionally, the very first line of the file must be a 'shebang' indicating the interpreter, such as <code><i>#!/usr/bin/env node</i></code> or <code><i>#!/usr/bin/node</i></code>.


title: LOCAL VS. GLOBAL AVAILABILITY
content:
'just.js' typically refers to a local script. For it to be available as a command globally (i.e., callable from any directory without specifying its path), it would need to be placed in a directory listed in the system's <code><b>PATH</b></code> environment variable (e.g., <code>/usr/local/bin</code>) or linked there.


title: HISTORY
content:
There is no specific 'history' for a generic filename like 'just.js'. The concept of executing JavaScript files as command-line utilities gained prominence with the advent of server-side JavaScript runtimes like Node.js (released in 2009), which enabled JavaScript to be used outside web browsers for general-purpose scripting and CLI tool development.


title: SYNOPSIS
content:
<b>jwt</b> <I>command</I> [options] [arguments]<br><br>Common commands:<br>  <b>jwt decode</b> <I>&lt;token&gt;</I> [options]<br>  <b>jwt encode</b> [options] <I>&lt;payload_json_or_file&gt;</I><br>  <b>jwt sign</b> <I>&lt;token&gt;</I> [options]<br>  <b>jwt verify</b> <I>&lt;token&gt;</I> [options]


title: PARAMETERS
content:
<b><b>--secret</b>, <b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specify the secret (or key file) used for signing or verifying tokens.</I><br><br><b><b>--algorithm</b>, <b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Set the cryptographic algorithm (e.g., HS256, RS256) for encoding or verification.</I><br><br><b><b>--header</b>, <b>-H</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Provide a JSON string or file for the JWT header. Used when encoding.</I><br><br><b><b>--payload</b>, <b>-P</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Provide a JSON string or file for the JWT payload. Used when encoding.</I><br><br><b><b>--issuer</b>, <b>--iss</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Set the "iss" (issuer) claim in the payload.</I><br><br><b><b>--subject</b>, <b>--sub</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Set the "sub" (subject) claim in the payload.</I><br><br><b><b>--audience</b>, <b>--aud</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Set the "aud" (audience) claim in the payload.</I><br><br><b><b>--expiresIn</b>, <b>--exp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Set the "exp" (expiration time) claim, e.g., "1h", "30d".</I><br><br><b><b>--notBefore</b>, <b>--nbf</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Set the "nbf" (not before) claim, e.g., "5m".</I><br><br><b><b>--no-verify</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Skip signature verification when decoding or processing a token.</I><br><br><b><b>--json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Input/output format as JSON. Useful for piping data.</I><br><br><b><b>--output</b>, <b>-o</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specify output format (e.g., text, json, compact).</I><br><br><b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Display help message for the command or subcommand.</I><br><br><b><b>--version</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Display the version information.</I><br><br>


title: DESCRIPTION
content:
The <I>jwt</I> command-line utility provides tools for interacting with JSON Web Tokens (<I>JWTs</I>). <I>JWTs</I> are compact, URL-safe means of representing claims to be transferred between two parties. This tool allows developers and security professionals to easily inspect, decode, encode, sign, and verify these tokens directly from the terminal. It simplifies common tasks such as debugging authentication flows, creating sample tokens for testing, or verifying the integrity of received tokens. While not a standard Linux utility, it's widely adopted by installing a third-party package, often written in Go, Node.js, or Python. Its primary functions include parsing a <I>JWT</I> to display its header and payload, crafting new <I>JWTs</I> with specified claims and algorithms, and validating the signature of a token against a given secret or public key, ensuring its authenticity and integrity.


title: CAVEATS
content:
The <I>jwt</I> command is not a standard part of most Linux distributions and typically requires installation as a third-party package (e.g., via <I>npm</I>, <I>pip</I>, or a standalone binary). There are multiple implementations of <I>jwt</I> CLI tools, and their exact options and subcommands might vary slightly. When handling sensitive secrets on the command line, be aware of shell history and process visibility. Always ensure the tool's source is trusted.


title: DECODING TOKENS
content:
<I>jwt decode &lt;token&gt;</I><br>This is the most common use case, allowing users to quickly see the decoded header and payload of a <I>JWT</I> without needing to write code.


title: ENCODING NEW TOKENS
content:
<I>jwt encode --secret &lt;secret&gt; '{"user":"test"}'</I><br>This command is used to craft new <I>JWTs</I> for testing or development purposes, allowing full control over claims and algorithms.


title: VERIFICATION
content:
<I>jwt verify &lt;token&gt; --secret &lt;secret&gt;</I><br>Critical for security, this verifies the signature of a token against a known secret or public key, ensuring it hasn't been tampered with.


title: HISTORY
content:
JSON Web Tokens (<I>JWTs</I>) themselves were standardized by the IETF as <I>RFC 7519</I> in 2015, building upon earlier work. Command-line tools like <I>jwt</I> emerged as practical utilities to interact with these tokens, driven by the widespread adoption of <I>JWTs</I> in web authentication and APIs. Different <I>jwt</I> CLI implementations have been developed independently by various communities (e.g., Go, Node.js, Python), reflecting the diverse ecosystems where <I>JWTs</I> are used.


title: SYNOPSIS
content:
<B>k3d</B> <I>[command]</I> <I>[options]</I><br><br><B>k3d cluster</B> <I>[subcommand]</I><br><B>k3d image</B> <I>[subcommand]</I><br><B>k3d registry</B> <I>[subcommand]</I><br><B>k3d node</B> <I>[subcommand]</I><br><B>k3d completion</B><br><B>k3d help</B><br><B>k3d version</B><br><br>The most common usage pattern is: <B>k3d cluster create</B> <I>[cluster_name]</I> <I>[flags]</I>


title: PARAMETERS
content:
<b><B>--debug</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debug messages for enhanced verbosity.<br><br><b><B>--verbose</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose messages.<br><br><b><B>--trace</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable trace messages.<br><br><b><B>-h, --help</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help message for a command or subcommand.<br><br><b><B>--version</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the <i>k3d</i> version.<br><br><b><b>cluster create</b><br>   <B>-c, --config</B> <I>string</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a <i>k3d</i> cluster configuration file.<br><br><b><b>cluster create</b><br>   <B>-n, --name</B> <I>string</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the new cluster (default is 'k3d-k3s-default').<br><br><b><b>cluster create</b><br>   <B>--api-port</B> <I>string</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the host port for the Kubernetes API server (default is random).<br><br><b><b>cluster create</b><br>   <B>--image</B> <I>string</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the Docker image to use for the <i>k3s</i> nodes (e.g., 'rancher/k3s:v1.27.5-k3s1').<br><br><b><b>cluster create</b><br>   <B>--servers</B> <I>int</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of server nodes to create for the cluster (default is 1).<br><br><b><b>cluster create</b><br>   <B>--agents</B> <I>int</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of agent (worker) nodes to create for the cluster (default is 0).<br><br><b><b>cluster create</b><br>   <B>--port</B> <I>string</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Map ports from the cluster's load balancer to the host, e.g., '8080:80@loadbalancer'.<br><br><b><b>cluster create</b><br>   <B>--k3s-arg</B> <I>strings</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pass additional arguments directly to the <i>k3s</i> binary on nodes.<br><br><b><b>cluster create</b><br>   <B>--no-lb</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable the creation of a load balancer container (useful for single-server clusters).<br><br><b><b>cluster create</b><br>   <B>--registry-use</B> <I>string</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connect the cluster to a <i>k3d</i>-managed image registry.<br><br><b><b>cluster create</b><br>   <B>--wait</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Wait for the cluster to be ready before exiting the command.<br><br><b><b>cluster delete</b><br>   <I>[cluster_name]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete a specified <i>k3d</i> cluster.<br><br><b><b>cluster list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all existing <i>k3d</i> clusters.<br><br><b><b>image import</b><br>   <I>&lt;image_path&gt; [cluster_name]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Import local Docker images into a <i>k3d</i> cluster's image cache.<br><br>


title: DESCRIPTION
content:
<i>k3d</i> is a powerful and lightweight tool designed for running <I>k3s</I> Kubernetes clusters in Docker. <br><br>Built upon Rancher Labs' highly available and certified <I>k3s</I> distribution, <i>k3d</i> simplifies the process of setting up local Kubernetes environments for rapid development and testing. It allows users to quickly create, delete, and manage multiple isolated <I>k3s</I> clusters, with each cluster operating within its own set of Docker containers.<br><br>This makes <i>k3d</i> an excellent choice for developers who need to test applications against a real Kubernetes environment without the significant resource overhead of a full-blown <I>minikube</I> or <I>kind</I> setup. <i>k3d</i> supports single-node, multi-node clusters, and advanced features like image import, integrated registries, and load balancing, all leveraging Docker's robust capabilities.


title: CAVEATS
content:
<ul><li><b>Docker Dependency:</b> <i>k3d</i> relies entirely on Docker. The Docker daemon must be installed and running on your system.</li><li><b>Ephemeral Nature:</b> By default, <i>k3d</i> clusters are ephemeral. All cluster state and data within containers are lost when a cluster is deleted, unless specific volume mounts are configured.</li><li><b>Resource Consumption:</b> Each node in a <i>k3d</i> cluster is a Docker container. While lightweight, multi-node clusters can consume significant CPU and RAM resources.</li><li><b>Development Focus:</b> <i>k3d</i> is primarily designed for local development and testing environments, not for production deployments.</li><li><b>Networking Complexity:</b> Advanced networking scenarios or custom host network interactions may require careful configuration due to Docker's container networking model.</li></ul>


title: KUBECONFIG INTEGRATION
content:
Upon cluster creation, <i>k3d</i> automatically generates and merges the cluster's <I>kubeconfig</I> entry into your default <I>~/.kube/config</I> file. This seamless integration allows you to immediately interact with your new <i>k3d</i> cluster using the standard <I>kubectl</I> command-line tool, without manual configuration steps.


title: CONTAINER IMAGES AND REGISTRIES
content:
<i>k3d</i> leverages standard Docker images for its nodes. You can specify a custom <i>k3s</i> image version or even import local Docker images directly into your <i>k3d</i> cluster's image cache. Furthermore, <i>k3d</i> provides built-in capabilities to create and manage local Docker registries, which can be connected to your <i>k3d</i> clusters, streamlining the process of testing applications with private images.


title: LOAD BALANCER AND NETWORKING
content:
For multi-node clusters, <i>k3d</i> automatically provisions a dedicated Docker container acting as a load balancer (based on <I>haproxy</I>) to expose the Kubernetes API server and other services. It also sets up a dedicated Docker network for each cluster, ensuring proper isolation and communication between nodes and the load balancer, simplifying network configuration for local testing.


title: HISTORY
content:
<i>k3d</i> was created by Rancher Labs (now part of SUSE) as a complementary tool to <I>k3s</I>. <I>k3s</I> itself was designed to be a lightweight, single-binary Kubernetes distribution tailored for IoT and Edge environments. <br><br><i>k3d</i> extends this philosophy by providing an exceptionally easy and fast way to run <I>k3s</I> clusters inside Docker containers, making it highly portable and reproducible for local development workflows. Its development aimed to offer a faster and lighter alternative to existing local Kubernetes solutions like <I>minikube</I> or <I>kind</I>, especially for scenarios where rapid cluster provisioning and teardown are crucial. It quickly gained popularity for its speed, low resource footprint, and seamless integration with Docker.


title: SYNOPSIS
content:
<b>k6</b> [<i>global options</i>] <<i>command</i>> [<i>command options</i>] [<i>arguments</i>]<br><br>Common Commands:<br><i>k6 run &lt;script.js&gt;</i><br><i>k6 archive &lt;script.js&gt;</i><br><i>k6 cloud &lt;script.js&gt;</i><br><i>k6 login &lt;token&gt;</i><br><i>k6 inspect &lt;script.js&gt;</i>


title: PARAMETERS
content:
<b><code>-v</code>, <code>--version</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <b>k6</b> version number and exits.<br><br><b><code>--config &lt;file&gt;</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a configuration file to load. Settings from this file will override defaults but can be further overridden by command-line options.<br><br><b><code>--log-output &lt;path&gt;</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects logs from <b>k6</b> to a specified file or <code>stdout</code>/<code>stderr</code>. Defaults to <code>stderr</code>.<br><br><b><code>--no-color</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables colored output in the terminal.<br><br><b><code>--summary-export &lt;path&gt;</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports the end-of-test summary to a JSON file at the specified path.<br><br><b><code>--console-output &lt;path&gt;</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects output from <code>console.log()</code> statements within the JavaScript test script to a specified file.<br><br>


title: DESCRIPTION
content:
<b>k6</b> is an open-source load testing tool designed for developer experience and automation. It allows performance tests to be written in JavaScript (ES2015+), providing a rich API for making HTTP requests, defining checks, and setting thresholds. Unlike traditional tools that often simulate full browser actions, <b>k6</b> focuses on API and protocol-level testing, making it efficient for testing backend services, microservices, and network protocols like HTTP, WebSockets, and gRPC.<br><br>Written in Go, <b>k6</b> is performant and resource-efficient, making it suitable for generating high loads from a single machine. It integrates well into CI/CD pipelines, supporting automation and enabling continuous performance testing. Its strong emphasis on scripting flexibility, extensibility, and detailed metric output makes it a preferred choice for modern DevOps and SRE teams.


title: CAVEATS
content:
While <b>k6</b> excels at API and protocol-level load testing, it does not simulate full browser rendering or user interaction in a browser. For browser-level performance testing (e.g., evaluating page load times with full DOM rendering), it may need to be combined with other tools like Playwright or Selenium. Test scripting requires JavaScript knowledge.


title: <B>TEST SCRIPTING LANGUAGE</B>
content:
<i>k6</i> tests are written in standard JavaScript (ES2015+), allowing developers to define complex test scenarios, virtual user behavior, and assertions using familiar programming constructs. This enables version control, code review, and reusability of test scripts, making performance testing a more integrated part of the software development lifecycle.


title: <B>METRICS AND RESULTS</B>
content:
<i>k6</i> generates detailed metrics about test execution, including request durations, response times, throughput, and error rates. These metrics can be outputted to various formats (e.g., JSON, CSV, InfluxDB, Prometheus, Datadog) and integrated with monitoring systems for comprehensive analysis and visualization. Crucially, <i>k6</i> supports defining 'thresholds' – pass/fail criteria for test metrics – directly within the script or via command-line options, enabling automated test gating in CI/CD environments.


title: HISTORY
content:
<b>k6</b> was created by Grafana Labs (initially by the R&D team behind Load Impact) and open-sourced in 2017. The project aimed to address perceived shortcomings of existing load testing tools, focusing on a developer-centric workflow, ease of automation, and modern scripting capabilities. By leveraging Go for its performance and JavaScript for scripting, <b>k6</b> quickly gained traction as a modern alternative, emphasizing integration into CI/CD pipelines and supporting continuous performance testing as a DevOps practice.


title: SEE ALSO
content:
JMeter(1) - A popular open-source Apache tool for load testing functional behavior and measuring performance., Locust(1) - An open-source load testing tool written in Python, allowing tests to be scripted as Python code., Gatling(1) - A powerful open-source load testing tool written in Scala, known for its DSL and performance.


title: SYNOPSIS
content:
<b>k8s-unused-secret-detector</b> [<i>OPTIONS</i>]<br>or<br><b>k8s-unused-secret-detector</b> --<i>all-namespaces</i><br>or<br><b>k8s-unused-secret-detector</b> --<i>namespace</i> <i>my-app-ns</i>


title: PARAMETERS
content:
<b>-n, --namespace <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular Kubernetes namespace to scan for unused secrets. Only secrets within this namespace will be analyzed.<br><br><b>-A, --all-namespaces</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs the detector to scan all available namespaces in the cluster. This is often the default behavior if no namespace is specified.<br><br><b>-c, --context <i>&lt;context&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a specific Kubernetes context from your <i>kubeconfig</i> file to connect to the cluster. This allows targeting different clusters.<br><br><b>-o, --output <i>&lt;format&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the output format for the identified unused secrets. Common formats include <i>text</i> (default), <i>json</i>, or <i>yaml</i>.<br><br><b>--kubeconfig <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative path to the <i>kubeconfig</i> file, overriding the default location (<i>~/.kube/config</i>).<br><br><b>--exclude-namespace <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes one or more specific namespaces from the scan, even when <i>--all-namespaces</i> is used. Can be specified multiple times.<br><br><b>--ignore-secret <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the detector from reporting specific secrets by name, even if they are found to be unused. Useful for known exceptions.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the scanning process and the analysis performed.<br><br>


title: DESCRIPTION
content:
The <b>k8s-unused-secret-detector</b> command is a specialized utility designed to identify Kubernetes secrets that are no longer referenced or utilized by active workloads (such as <i>Pods</i>, <i>Deployments</i>, <i>StatefulSets</i>, <i>DaemonSets</i>, <i>Jobs</i>, or <i>CronJobs</i>) within your cluster. It operates by querying the Kubernetes API to gather a comprehensive list of all existing secrets and then cross-references them against resource definitions to determine active usage. This tool is invaluable for maintaining a secure and tidy Kubernetes environment by pinpointing credentials that could pose a security risk if left unmanaged. Regularly identifying and cleaning up unused secrets helps reduce the attack surface, improves operational hygiene, and simplifies compliance efforts by ensuring only necessary secrets persist. It provides actionable insights, helping administrators prioritize the removal or investigation of dormant secret resources.


title: CAVEATS
content:
<b>RBAC Permissions</b>: The command requires appropriate <i>Read</i> permissions (<i>get</i>, <i>list</i>, <i>watch</i>) for <i>Secrets</i> and all relevant workload resources (<i>Pods</i>, <i>Deployments</i>, etc.) across the targeted namespaces. Insufficient permissions will lead to incomplete or failed scans.<br><b>Dynamic Secret Usage</b>: This tool primarily detects secrets referenced statically within Kubernetes resource definitions. It may not identify usage patterns where applications dynamically fetch secrets using client libraries or custom operators that do not explicitly link secrets in standard ways.<br><b>False Positives/Negatives</b>: While robust, edge cases or non-standard configurations might lead to false positives (reporting a used secret as unused) or false negatives (missing an unused secret). Always verify findings manually before taking action.<br><b>System Secrets</b>: Many secrets in <i>kube-system</i> or other system namespaces are automatically managed (e.g., service account tokens). The tool typically filters these, but exercise caution when analyzing system namespaces.


title: SECURITY BEST PRACTICES
content:
Regularly running <b>k8s-unused-secret-detector</b> is a critical component of a comprehensive Kubernetes security strategy. Removing unused secrets reduces the attack surface, minimizes potential exposure in case of a breach, and helps ensure compliance with security policies.


title: OPERATIONAL EFFICIENCY
content:
Identifying and cleaning up unused secrets contributes to a cleaner, more manageable Kubernetes environment. It reduces clutter in API responses, speeds up audits, and simplifies troubleshooting by eliminating irrelevant resources.


title: HISTORY
content:
As Kubernetes adoption soared, the complexity of managing resources, especially sensitive ones like secrets, increased significantly. The need for robust tools to maintain cluster hygiene and security became apparent. <b>k8s-unused-secret-detector</b> emerged from the necessity to automate the identification of dormant secrets, a common issue in dynamic environments where applications are frequently deployed, updated, and decommissioned, leaving behind unreferenced artifacts. This tool reflects a broader trend in the Kubernetes ecosystem towards automated security auditing and resource optimization.


title: SEE ALSO
content:
<i>kubectl</i>(1): The primary command-line tool for interacting with Kubernetes clusters. Essential for managing secrets and workloads.<br>, <i>grep</i>(1): A powerful utility for searching plain-text data sets for lines that match a regular expression. Useful for manual verification of secret usage within manifest files.<br>, <i>jq</i>(1): A lightweight and flexible command-line JSON processor. Ideal for parsing and filtering the output of <b>k8s-unused-secret-detector</b> when using <i>json</i> output format.


title: SYNOPSIS
content:
<b>kaggle</b> <I>command</I> [<I>options</I>] [<I>arguments</I>]<br>Where <I>command</I> is one of the main functionalities (e.g., datasets, competitions, kernels), each having its own subcommands and options.


title: PARAMETERS
content:
<b>datasets</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interact with Kaggle datasets (download, upload, list, create, etc.).<br><br><b>competitions</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manage Kaggle competitions (download data, submit predictions, list, etc.).<br><br><b>kernels</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Work with Kaggle notebooks/kernels (push, pull, run, list, etc.).<br><br><b>models</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interact with Kaggle models (download, upload, list, etc.).<br><br><b>config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manage Kaggle API configuration settings (e.g., proxy settings).<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the Kaggle API client version.<br><br><b>--help / -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help message for the command or subcommand.<br><br>


title: DESCRIPTION
content:
The <b>kaggle</b> command is a powerful command-line interface (CLI) tool that allows users to interact directly with the Kaggle platform without needing to use the website. It's a Python package that provides functionalities to download datasets, submit to competitions, create and manage Kaggle notebooks (kernels), interact with Kaggle models, and manage configuration settings. This CLI is invaluable for data scientists, machine learning engineers, and researchers who frequently work with Kaggle, enabling automation of common tasks like downloading large datasets, fetching competition details, or submitting predictions directly from their local development environment or servers. It streamlines workflows, making it easier to integrate Kaggle activities into scripts and automated pipelines.


title: CAVEATS
content:
Using the <b>kaggle</b> command requires a valid Kaggle API token (kaggle.json) to be correctly placed in the `~/.kaggle/` directory (or equivalent for Windows). <br>All operations require active internet connectivity. <br>Downloading large datasets can consume significant disk space and bandwidth. <br>Specific subcommand options and arguments can be complex; users should consult `kaggle <I>command</I> --help` for detailed usage instructions.


title: AUTHENTICATION
content:
To use the <b>kaggle</b> command, you need to authenticate with the Kaggle API. This involves generating an API token (a `kaggle.json` file) from your Kaggle account settings (Profile -> Account -> 'Create New API Token') and placing it in the correct directory: <br>For Linux/macOS: `~/.kaggle/kaggle.json` <br>For Windows: `C:\Users\<Windows-username>\.kaggle\kaggle.json`


title: INSTALLATION
content:
The <b>kaggle</b> CLI is installed as a Python package using `pip`. It typically requires Python 3.6 or later: <br><code>pip install kaggle</code>


title: HISTORY
content:
The <b>kaggle</b> command-line interface is distributed as part of the `kaggle` Python package. It was developed by Kaggle itself to provide a more direct and programmatic way for users to interact with the platform's vast resources. Its development has focused on simplifying common tasks for data scientists, allowing for easier integration into automated scripts and workflows, and reducing reliance on the web UI for repetitive actions. The CLI has evolved with the Kaggle platform, adding support for new features like Kaggle Models and expanding capabilities for datasets and notebooks.


title: SYNOPSIS
content:
<I>kak</I> [<I>options</I>] [<I>file</I>...]<br><I>kak</I> <b>-c</b> <I>session</I> [<I>file</I>...]<br><I>kak</I> <b>-s</b> <I>session</I> [<I>file</I>...]


title: PARAMETERS
content:
<b><b>-c</b> <I>session</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connect to an existing editing session by its ID. If no files are specified, it connects to the default client of that session.<br><br><b><b>-s</b> <I>session</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Start a new editing session with the specified ID. If files are provided, they are opened in this new session.<br><br><b><b>-e</b> <I>command</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Execute a Kakoune command string after loading files. Useful for scripting or one-off operations.<br><br><b><b>-p</b> <I>client-id</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Send keys to a specific client. Primarily used for programmatic interaction or scripting.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not load the user's <I>kakrc</I> configuration file at startup. Useful for troubleshooting.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run in quiet mode, suppressing diagnostic messages during startup.<br><br>


title: DESCRIPTION
content:
<b>Kakoune</b> (often invoked as <I>kak</I>) is a modern, open-source, modal code editor that aims to improve on the Vim editing model. Its core philosophy is 'selection first', meaning you select text or a range of lines before applying an action, which often provides interactive previews. Unlike Vim, where commands operate on an implicit selection or cursor position, Kakoune makes selections explicit and central to its workflow. It features multiple concurrent selections, allowing efficient parallel editing. Kakoune is built with a client-server architecture, enabling multiple windows/terminals to connect to the same editing session. It's highly extensible through shell scripting, offering a powerful and flexible editing environment for programmers.


title: CAVEATS
content:
Users accustomed to traditional editors (e.g., VS Code, Sublime Text) will find Kakoune's modal editing and 'selection first' paradigm to have a significant learning curve. Even Vim users might need to adapt to its distinct command model. Being a terminal-based editor, it lacks GUI features, relying on external tools for certain advanced functionalities like integrated debuggers or rich graphical interfaces for plugins. Its community and plugin ecosystem, while active, are smaller compared to Vim or Emacs.


title: CLIENT-SERVER ARCHITECTURE
content:
<b>Kakoune</b> uses a client-server model, where a single server process manages editing sessions, and multiple clients (terminal windows) can connect to the same session. This allows for persistent editing sessions, collaborative editing by connecting multiple clients to the same session, and easy recovery from terminal disconnections.


title: MULTIPLE SELECTIONS
content:
A defining feature of <b>Kakoune</b> is its robust support for multiple, simultaneous selections. Users can easily create and manipulate multiple selections, allowing them to apply the same editing command to disparate parts of a file efficiently, significantly boosting productivity for repetitive tasks.


title: EXTENSIBILITY
content:
<b>Kakoune</b> is highly extensible and configurable. Its configuration is done via a simple scripting language, often leveraging standard shell commands. This allows users to deeply customize keybindings, integrate external tools, and create complex macros without needing to learn a proprietary language.


title: HISTORY
content:
<b>Kakoune</b> development was started by Maxime Chevalier-Boisvert around 2013, with the goal of rethinking the Vim editing model. It aims to improve on Vim's core ideas by making selections explicit and central to the editing workflow, often providing interactive previews of changes. The editor is written in C++ and has steadily gained a following among users who appreciate its fresh take on modal editing, its powerful multiple selection capabilities, and its client-server architecture which allows seamless session management across multiple terminals.


title: SYNOPSIS
content:
<b>katana</b> <i>[OPTIONS]</i> <b>-u</b> <i>&lt;TARGET_URL&gt;</i> | <b>-l</b> <i>&lt;URL_LIST_FILE&gt;</i><br><b>katana</b> <i>[OPTIONS]</i> <b>-rl</b> <i>&lt;RAW_REQUEST_FILE&gt;</i>


title: PARAMETERS
content:
<b><b>-u</b> <i>&lt;target_url&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target URL to start crawling from.<br><br><b><b>-l</b> <i>&lt;list_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a file containing a list of URLs to crawl.<br><br><b><b>-rl</b> <i>&lt;raw_request_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a file containing raw HTTP requests to use as entry points for crawling.<br><br><b><b>-o</b> <i>&lt;output_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the crawling results to the specified output file.<br><br><b><b>-json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the results in JSON format.<br><br><b><b>-depth</b> <i>&lt;level&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum crawling depth (default: unlimited).<br><br><b><b>-headless</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables headless browser support for JavaScript-rendered content. Requires Chrome/Chromium installation.<br><br><b><b>-js-crawl</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs JavaScript-based crawling using the headless browser.<br><br><b><b>-c</b> <i>&lt;concurrency&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum number of concurrent requests.<br><br><b><b>-timeout</b> <i>&lt;seconds&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum timeout for HTTP requests in seconds.<br><br><b><b>-exclude-cdn</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes URLs belonging to known CDN providers.<br><br><b><b>-passive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables passive source discovery (e.g., from CommonCrawl, WayBack Machine).<br><br><b><b>-proxy</b> <i>&lt;proxy_url&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses an HTTP/SOCKS proxy for all requests (e.g., http://127.0.0.1:8080).<br><br><b><b>-H</b> <i>&lt;header&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a custom HTTP header to requests (e.g., 'User-Agent: Katana Crawler').<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details during crawling.<br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current version of Katana.<br><br><b><b>-config</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom configuration file for Katana.<br><br><b><b>-field-config</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom field configuration file for data extraction.<br><br><b><b>-crawl-duration</b> <i>&lt;duration&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum duration for crawling (e.g., '5m' for 5 minutes).<br><br><b><b>-rate-limit</b> <i>&lt;rpm&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a rate limit for requests per minute.<br><br>


title: DESCRIPTION
content:
Katana is a powerful, Go-based web crawling and spidering framework designed for speed and extensibility. Developed by ProjectDiscovery, it's widely used in reconnaissance, bug bounty hunting, and penetration testing workflows. Katana excels at efficiently discovering URLs, forms, and other interactable elements within a target scope. It supports various input methods, including single URLs or lists of URLs, and can output results in diverse formats like plain text or JSON. A key feature is its ability to perform JavaScript-based crawling using headless browsers, allowing it to navigate modern web applications that rely heavily on client-side rendering. This makes it highly effective for uncovering hidden endpoints and functionalities that traditional static crawlers might miss. Its modular design allows users to integrate it seamlessly into larger automation pipelines.


title: CAVEATS
content:
Katana's headless browser functionality requires additional system resources (memory and CPU), especially for complex web applications or high concurrency. Users must ensure they have explicit permission before crawling any target website to avoid legal issues or service disruptions. Excessive crawling can also lead to IP blocking or server overload. Proper scope definition is crucial to prevent unintended crawling of out-of-scope assets.


title: INTEGRATION WITH PROJECTDISCOVERY TOOLS
content:
Katana is often used in conjunction with other ProjectDiscovery tools for comprehensive reconnaissance and vulnerability analysis. For instance, URLs discovered by Katana can be piped directly to <b>httpx</b> for active probe and status code checks, or to <b>nuclei</b> for automated vulnerability scanning. This creates a powerful, automated workflow for security assessments.


title: PASSIVE SOURCE DISCOVERY
content:
Beyond active crawling, Katana can also perform passive source discovery using the <b>-passive</b> flag. This allows it to gather URLs from publicly available datasets like CommonCrawl and WayBack Machine, significantly expanding the target surface without actively hitting the target website.


title: HISTORY
content:
Katana was developed by ProjectDiscovery, a team known for creating open-source tools for bug bounty hunters and penetration testers. It emerged as a modern alternative to older web crawlers, focusing on speed, efficiency, and the ability to handle contemporary web technologies like JavaScript-heavy applications. Its development leveraged Go's concurrency model for high performance, and it quickly gained popularity within the cybersecurity community due to its integration capabilities with other ProjectDiscovery tools like Nuclei and Httpx.


title: PARAMETERS
content:
<b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help about command line options and exits.<br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br><b><i>--display <displayname></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use the X-display specified by <i>displayname</i>.<br><br><b><i>--geometry <geometry></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the client geometry of the main window (e.g., 800x600+0+0).<br><br><b><i>--start-line <line></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial cursor line for the first opened file (default is 1).<br><br><b><i>--start-column <column></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial cursor column for the first opened file (default is 1).<br><br><b><i>--encoding <encoding></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the encoding for the opened file (e.g., <i>utf-8</i>, <i>iso-8859-1</i>). This overrides auto-detection.<br><br><b><i>--use-session <session></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens <i>Kate</i> with the specified session. If no session with this name exists, a new one is created.<br><br><b><i>--new-session</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <i>Kate</i> to open in a new, independent session instead of reusing an existing one.<br><br><b><i>--block</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts <i>Kate</i> in block selection mode.<br><br><b><i>--line <line></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Alias for <i>--start-line</i>.<br><br><b><i>--column <column></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Alias for <i>--start-column</i>.<br><br><b><i>[files...]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more file paths or URLs to open. These will be loaded into the editor.<br><br>


title: DESCRIPTION
content:
<i>Kate</i> is a powerful and feature-rich text editor part of the KDE Applications suite, designed for programmers, developers, and general text editing.<br><br>Key features include <b>syntax highlighting</b> for numerous programming languages, <b>code folding</b>, block selection mode, a <b>built-in terminal</b>, multi-document interface (MDI) with tabbed views, session management, and project integration. It supports a wide array of <b>plugins</b> to extend its functionality, such as Git integration, Python scripting, and a D-Bus interface. <i>Kate</i> is built on top of the <i>KTextEditor</i> framework, which is also used by other KDE applications like <i>KDevelop</i>.


title: CAVEATS
content:
While <i>Kate</i> functions well on most Linux distributions, it is primarily designed for <b>KDE/Qt environments</b>. On GTK-based desktops (like GNOME), it might have more dependencies to install or feel less integrated visually, though its core functionality remains robust.<br><br>For extremely large files (gigabytes), simpler editors like <i>vi</i> or <i>nano</i> might offer faster startup and navigation due to <i>Kate</i>'s advanced features and parsing capabilities.


title: PLUGINS AND EXTENSIBILITY
content:
<i>Kate</i> supports a wide range of <b>plugins</b> that significantly extend its functionality. These include integration with version control systems (like Git), scripting capabilities (e.g., Python), and specialized tools for web development, markdown, and more. Users can also write custom scripts to automate tasks.


title: BUILT-IN TERMINAL
content:
A highly convenient feature of <i>Kate</i> is its <b>integrated terminal window</b>. This allows users to execute shell commands, compile code, run scripts, or interact with version control systems directly from within the editor, eliminating the need to switch to a separate terminal application.


title: SESSION MANAGEMENT
content:
<i>Kate</i> offers powerful <b>session management</b> capabilities. Users can save and restore entire editing sessions, including multiple open files, their cursor positions, window layouts, and project-specific settings. This is invaluable for managing complex multi-project workflows or picking up exactly where you left off.


title: HISTORY
content:
<i>Kate</i> (KDE Advanced Text Editor) was first released with <b>KDE 2.2 in 2001</b>, quickly establishing itself as a robust and feature-rich editor for developers within the KDE ecosystem. It has continuously evolved, integrating modern features like LSP (Language Server Protocol) support, Git integration, and improved performance.<br><br>It's built on the <i>KTextEditor</i> framework, which allows other KDE applications (like <i>KDevelop</i> and <i>Kile</i>) to embed its powerful editing components. Its development is ongoing as a core part of the KDE Applications project, focusing on usability, performance, and extensibility.


title: SYNOPSIS
content:
<i>katoolin</i> operates as an interactive Python script after cloning its repository.<br><br><b>Typical Installation and Execution:</b><br><i>git clone https://github.com/samyoyo/katoolin.git</i><br><i>cd katoolin</i><br><i>sudo python3 katoolin.py</i>


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>katoolin</i> does not accept command-line parameters or options in the conventional sense. It functions as an interactive, menu-driven script upon execution, guiding the user through its features via numbered choices.<br><br>


title: DESCRIPTION
content:
<i>katoolin</i> is a Python script designed to simplify the process of installing various Kali Linux tools on other Debian-based distributions, such as Ubuntu or Linux Mint. It acts as a wrapper, automating the addition of Kali Linux repositories to your system's <i>sources.list</i> and then providing a menu-driven interface to select and install specific tools or tool categories.<br><br>While it aims to provide convenience for users who wish to leverage Kali's extensive toolkit without installing Kali Linux itself, it's crucial to understand that <i>katoolin</i> is <b>not</b> an official tool supported by Offensive Security (the developers of Kali Linux). Its primary function involves modifying system repositories, which can potentially lead to dependency conflicts, system instability, or security vulnerabilities if not handled with extreme caution. Users typically clone the <i>katoolin</i> repository from GitHub and then execute the main script.


title: CAVEATS
content:
<b>Unofficial Tool:</b> <i>katoolin</i> is not officially supported or endorsed by Offensive Security or the Kali Linux project. Use it at your own risk.<br><b>System Instability:</b> Adding Kali Linux repositories to a non-Kali system (like Ubuntu or Debian) can lead to severe dependency conflicts, broken packages, or even render your operating system unstable due to mismatched package versions and libraries.<br><b>Security Risks:</b> Mixing repositories from different distributions can introduce unvetted software or create security vulnerabilities.<br><b>Root Privileges:</b> The script requires root privileges (<i>sudo</i>) to modify system repositories and install packages, amplifying the risk if the script is compromised or behaves unexpectedly.<br><b>Compatibility Issues:</b> May not work reliably on all Debian/Ubuntu versions due to changes in repository structures or tool dependencies over time.


title: INSTALLATION PROCESS
content:
To utilize <i>katoolin</i>, you typically need to clone its Git repository and then execute the main Python script. The common steps are:<br>1. Ensure Git is installed: <i>sudo apt update && sudo apt install git</i><br>2. Clone the repository: <i>git clone https://github.com/samyoyo/katoolin.git</i><br>3. Navigate into the cloned directory: <i>cd katoolin</i><br>4. Run the script with root privileges: <i>sudo python3 katoolin.py</i>


title: INTERACTIVE MENU OPTIONS
content:
Once executed, <i>katoolin</i> presents an interactive menu from which users can select desired actions. The primary menu options commonly include:<br><i>1) Add Kali Linux repositories & Update</i>: Adds Kali's official package repositories to your system's sources and then updates the package lists.<br><i>2) View Categories</i>: Allows navigation into sub-menus to select and install tools from specific Kali Linux categories (e.g., Information Gathering, Vulnerability Analysis, Web Applications, etc.).<br><i>3) Install ClassicMenu Indicator</i>: Installs a desktop menu indicator (primarily for Ubuntu desktop environments).<br><i>4) Install Boot Repair</i>: Installs the Boot Repair utility.<br><i>5) Install Mininet</i>: Installs the Mininet network emulator.<br><i>6) Remove all Kali Linux repositories</i>: Reverts changes made to <i>sources.list</i> by removing previously added Kali repositories.<br><i>7) Exit</i>: Terminates the <i>katoolin</i> script.


title: HISTORY
content:
<i>katoolin</i> was developed by the GitHub user <i>samyoyo</i> as an unofficial utility to facilitate the installation of Kali Linux tools on Debian and Ubuntu-based distributions. It emerged as a popular choice for users who desired specific Kali tools without committing to a full Kali Linux installation. Its development is community-driven, with updates typically responding to changes in Kali Linux repositories, tool availability, or Python versions.


title: PARAMETERS
content:
<b><i>(no arguments)</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reports the current keyboard mode in a long, descriptive format.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reports the current keyboard mode in a short, concise format.<br><br><b><b>-a</b>, <b>--ascii</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the keyboard mode to <i>XLATE</i> (ASCII) mode. This is the default and most common mode for general console use, translating keys to ASCII characters.<br><br><b><b>-u</b>, <b>--unicode</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the keyboard mode to <i>UNICODE</i> mode, allowing input of Unicode characters directly from the keyboard.<br><br><b><b>-k</b>, <b>--raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the keyboard mode to <i>RAW</i> mode. In this mode, raw keyboard scancodes are returned directly, bypassing character translation. This is typically used by low-level utilities.<br><br><b><b>--specl</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the keyboard to <i>SPECL</i> (Special) mode. This mode is less common and often used for specific hardware or embedded systems where only function keys might be translated.<br><br>


title: DESCRIPTION
content:
The <b>kbd_mode</b> command is used to display or alter the keyboard translation mode for the Linux console. The Linux kernel supports several keyboard modes, each dictating how raw keyboard scancodes are interpreted and translated into characters or events.<br><br>The primary modes are <i>XLATE</i> (ASCII), which is the default for most interactive console use and translates keys into their ASCII equivalents; <i>RAW</i>, which provides untranslated scancodes, typically used by low-level utilities like <i>loadkeys</i> or <i>setfont</i> during system boot; and <i>UNICODE</i>, which translates keys into Unicode characters, enabling broader character set support. A less common <i>SPECL</i> mode exists for special keyboard configurations.<br><br>Understanding and setting the correct keyboard mode is crucial for proper input handling on the console, especially when dealing with different keyboard layouts, character encodings, or specific system utilities that require direct access to keyboard scancodes.


title: CAVEATS
content:
Changing the keyboard mode, especially to <i>RAW</i> or <i>SPECL</i>, can significantly alter keyboard behavior, making normal text input difficult or impossible. These modes are typically used by specific utilities or for specialized configurations, not for everyday interactive use. Ensure you know how to revert the mode (e.g., using <b>kbd_mode -a</b>) if unintended behavior occurs.


title: KEYBOARD MODES EXPLAINED
content:
The Linux kernel supports distinct keyboard translation modes:<br><i>XLATE</i> (or ASCII): The default mode, translating key presses into their ASCII equivalents. Suitable for standard text input.<br><i>RAW</i>: Provides direct, untranslated scancodes from the keyboard. Essential for utilities that need to program or analyze the keyboard at a low level.<br><i>UNICODE</i>: Translates key presses into Unicode characters, enabling support for a wider range of international characters directly from the keyboard.<br><i>SPECL</i>: A special mode where only certain keys (like function keys) are translated, with others remaining raw. Less commonly used.


title: HISTORY
content:
The <b>kbd_mode</b> command is part of the <i>kbd</i> (keyboard utilities) package, which provides various console-specific tools for Linux. These utilities have been fundamental to Linux console management since its early days, evolving alongside kernel keyboard drivers to support different input modes and character sets. Its function reflects the kernel's underlying capabilities for keyboard input translation.


title: PARAMETERS
content:
<b>--short-info, -s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the 'variable=value' prefix, printing only the raw value of the queried information.<br><br><b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays usage information for the command and then exits.<br><br><b>--version, -V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of the <i>kbdinfo</i> utility and then exits.<br><br>


title: DESCRIPTION
content:
The <i>kbdinfo</i> command is a utility designed to retrieve and display information about the current state of the Linux console and keyboard. It provides insights into various aspects, ranging from keyboard modes and LED states to console screen dimensions and cursor properties. When invoked without any specific arguments, <i>kbdinfo</i> outputs a comprehensive list of all available information, typically presented in a "variable=value" format, which makes it easy to parse for scripting or analysis. Users can also specify particular variables as arguments to query only the information they need, such as the current keyboard mode (<i>kmode</i>), the state of the Scroll Lock, Num Lock, and Caps Lock LEDs (<i>leds</i>), or the virtual console number (<i>console-vc-number</i>). This command is particularly useful for system administrators, developers, and users who need to diagnose keyboard or console-related issues, monitor system settings, or integrate console state checks into automated scripts. It provides a programmatic way to inspect the underlying console and keyboard configuration without relying on interactive tools.


title: CAVEATS
content:
When using the <i>setterm -term linux</i> command, the console cursor type might be reset to default, potentially affecting the accuracy of the <i>console-cursor-type</i> information reported by <i>kbdinfo</i>.


title: QUERYABLE VARIABLES
content:
<i>kbdinfo</i> can query various aspects of the keyboard and console. If no specific variables are provided, it prints all known information. Common categories of variables include:<br><b>Keyboard Mode and State</b>: <i>kmode</i> (keyboard mode), <i>leds</i> (LED status: SCR, NUM, CAP), <i>shift-state</i> (active modifiers like SHIFT, CTRL, ALT).<br><b>Bell Settings</b>: <i>bell-pitch</i>, <i>bell-duration</i>, <i>bell-state</i>.<br><b>Console Screen Information</b>: <i>console-screen-size</i> (columns and rows), <i>console-cursor-position</i>, <i>console-font-range</i>.<br><b>Device Information</b>: <i>kbd-device</i> (keyboard input device), <i>console-device</i> (console output device).<br><b>Keymap Details</b>: <i>keymap-name</i>, <i>keymap-path</i>, <i>current-kb-table</i>.<br><b>Input Event Details</b>: <i>last-keypress-time</i>, <i>last-keypress-keycode</i>.<br><b>Compose and Dead Key State</b>: <i>compose-state</i>, <i>dead-state</i>.<br>The special variable <i>all</i> queries all known information.


title: PARAMETERS
content:
<b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display current keyboard repeat rate and delay settings.<br><br><b>-r rate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the keyboard repeat rate in characters per second (CPS). Valid values are floating-point numbers between 2.0 and 30.0.<br><br><b>-d delay</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the delay before key repeat begins, in milliseconds (ms). Valid values are integers between 250 and 1000.<br><br>


title: DESCRIPTION
content:
The <b>kbdrate</b> command allows users to adjust the keyboard repeat rate and delay settings on the Linux console (TTY). The repeat rate determines how many characters per second are generated when a key is held down, while the delay specifies the initial pause before the key starts repeating. These settings primarily affect the behavior of the keyboard in text-mode consoles and virtual terminals. <br><br>While modern graphical desktop environments (like GNOME, KDE, Xfce) usually manage their own keyboard settings independently of <b>kbdrate</b>, this command remains relevant for server environments, embedded systems, or when working directly in a non-graphical Linux console. By fine-tuning these parameters, users can customize the keyboard's responsiveness to their preference, making typing more comfortable and efficient. <br><br>The command provides options to set both the repeat rate (in characters per second, ranging from 2.0 to 30.0) and the delay (in milliseconds, ranging from 250 to 1000). It can also display the currently active settings.


title: CAVEATS
content:
<i>kbdrate</i> primarily affects the keyboard behavior on the Linux console (TTYs). It generally does not influence keyboard settings within graphical desktop environments (like X.Org or Wayland), which manage their own input device configurations. Changes made with <i>kbdrate</i> are typically temporary and revert to default upon reboot unless configured to be loaded at startup (e.g., via init scripts or systemd services).


title: INTERACTION WITH GRAPHICAL ENVIRONMENTS
content:
While <i>kbdrate</i> sets the system-wide keyboard parameters for the console, graphical environments like X.Org have their own mechanisms to control keyboard settings, often configured via utilities like <i>xset</i> or desktop environment-specific settings panels. Therefore, changes made with <i>kbdrate</i> might not be reflected in your graphical session.


title: PERSISTENCE
content:
Changes made with <i>kbdrate</i> are not persistent across reboots by default. To make them permanent, you would typically need to add the command to a system startup script (e.g., <i>/etc/rc.local</i>, or a systemd unit file) or a user's shell profile.


title: HISTORY
content:
The <i>kbdrate</i> command is part of the <i>kbd</i> package, which provides various utilities for configuring the Linux console keyboard. Its functionality dates back to the early days of Linux, providing a simple and direct way to control fundamental keyboard characteristics for text-mode environments. While its usage has decreased in prominence with the widespread adoption of graphical user interfaces, it remains a stable and reliable tool for its intended purpose on the console.


title: PARAMETERS
content:
<b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays usage information and available commands.<br><br><b><b>--server</b> <i>&lt;URL&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the base URL of the Keycloak server, e.g., 'https://localhost:8443'.<br><br><b><b>--realm</b> <i>&lt;realm&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the target realm for subsequent commands. Defaults to 'master' if not specified.<br><br><b><b>--user</b> <i>&lt;username&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the Keycloak admin username for authentication.<br><br><b><b>--password</b> <i>&lt;password&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the Keycloak admin password for authentication. <b>Caution:</b> visible in command history.<br><br><b><b>--token</b> <i>&lt;token&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a pre-obtained access token for authentication, bypassing username/password.<br><br><b><b>--output</b> <i>&lt;format&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the output format for data retrieval commands, commonly 'json' or 'csv'.<br><br><b><b>--no-config</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the CLI from loading configurations from the default configuration file (<i>~/.keycloak/kcadm.config</i>).<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details about the command execution and API calls.<br><br><b><b>--truststore</b> <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom Java truststore file for SSL/TLS connections.<br><br><b><b>--trustpass</b> <i>&lt;password&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the password for the custom truststore.<br><br>


title: DESCRIPTION
content:
<i>kcadm.sh</i> is the command-line administration tool for <I>Keycloak</I>, an open-source identity and access management solution.<br>It enables administrators to programmatically manage Keycloak realms, clients, users, roles, and other configurations by interacting with the Keycloak REST Admin API. This script is essential for automating administrative tasks, scripting, and integrating Keycloak management into CI/CD pipelines, offering a powerful alternative to the web-based Keycloak Admin Console.<br>It handles authentication and communication with the Keycloak server, allowing complex operations like creating realms, adding users, or assigning roles to be executed from the command line.


title: CAVEATS
content:
<i>kcadm.sh</i> requires a running Keycloak instance to connect to.<br>It is typically found in the <i>bin/</i> directory of a Keycloak installation. Directly passing passwords via <b>--password</b> on the command line can be a security risk as they might be recorded in shell history or process listings. Using the <b>login</b> command or environment variables is often more secure. The specific commands and options available can vary slightly between different Keycloak versions.


title: CORE COMMANDS
content:
<i>kcadm.sh</i> supports a wide array of sub-commands for various administrative tasks:<br><b>config</b>: Manages the CLI's persistent configuration.<br><b>login</b>: Authenticates the CLI session to Keycloak.<br><b>logout</b>: Clears stored credentials.<br><b>get</b>: Retrieves resources (e.g., users, realms, clients).<br><b>create</b>: Creates new resources.<br><b>update</b>: Modifies existing resources.<br><b>delete</b>: Removes resources.<br><b>set-password</b>: Changes a user's password.<br>Each command often has its own specific options and arguments.


title: CONFIGURATION FILES
content:
The <i>kcadm.sh</i> tool can store persistent configuration in a file, typically located at <i>~/.keycloak/kcadm.config</i>. This file can store common parameters like the Keycloak server URL, target realm, and authentication details, reducing the need to specify them with every command.<br>The <b>config credentials</b> and <b>config realms</b> commands are used to manage these persistent settings, improving usability and scripting efficiency.


title: HISTORY
content:
The <i>kcadm.sh</i> script, or its underlying Java Admin CLI tool, has been an integral part of Keycloak's functionality since its early development. It was introduced to provide robust programmatic administration capabilities, complementing the web-based Admin Console. Its evolution has been closely tied to Keycloak's releases, continuously adapting to new features and security requirements to support modern automation and DevOps practices for identity and access management.


title: SYNOPSIS
content:
<b>kcat</b> [-b <i>broker-list</i>] [-t <i>topic</i>] [<i>options</i>]<br><b>kcat</b> -P [-b <i>broker-list</i>] -t <i>topic</i> [<i>producer-options</i>]<br><b>kcat</b> -C [-b <i>broker-list</i>] -t <i>topic</i> [<i>consumer-options</i>]<br><b>kcat</b> -L [-b <i>broker-list</i>] [<i>metadata-options</i>]


title: PARAMETERS
content:
<b>-b <i>broker-list</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of Kafka brokers (e.g., "localhost:9092").<br><br><b>-t <i>topic</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The Kafka topic to produce to or consume from.<br><br><b>-P</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operate in producer mode, reading messages from stdin and sending to Kafka.<br><br><b>-C</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operate in consumer mode, reading messages from Kafka and printing to stdout.<br><br><b>-L</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operate in metadata list mode, displaying cluster, topic, and partition information.<br><br><b>-G <i>group-id</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Consumer group ID for consumer mode.<br><br><b>-o <i>offset</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Start consuming from a specific offset (e.g., beginning, end, stored, <absolute_offset>).<br><br><b>-c <i>count</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exit after consuming 'count' messages.<br><br><b>-Z</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable Kafka protocol's built-in gzip/snappy/lz4/zstd compression for producers.<br><br><b>-K <i>key-delimiter</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Key delimiter for producer (input) or consumer (output). E.g., ':' for 'key:value'.<br><br><b>-X <i>property=value</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pass <i>librdkafka</i> configuration properties. Can be used multiple times.<br><br><b>-F <i>format</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Format string for consumed messages (e.g., %T for topic, %K for key, %V for value).<br><br><b>-e</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exit consumer on EOF (end of file) or last message (if -c is used).<br><br><b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;All topics and partitions. Automatically subscribe to all topics in consumer mode or list all topics in metadata mode.<br><br>


title: DESCRIPTION
content:
<b>kcat</b>, formerly known as <i>kafkacat</i>, is a powerful and lightweight command-line utility designed for interacting with Apache Kafka brokers. Built upon the <i>librdkafka</i> C library, it provides a simple yet versatile interface for producing messages to Kafka topics, consuming messages from them, and inspecting cluster metadata such as broker information, topic configurations, and partition assignments. It serves as an invaluable tool for developers, system administrators, and DevOps engineers for rapid prototyping, debugging Kafka applications, scripting common Kafka operations, and performing ad-hoc data manipulation directly from the terminal. Its ability to handle various data formats and integrate seamlessly with standard Unix pipes makes it exceptionally flexible for a wide range of Kafka-related tasks, from simple message testing to complex data stream processing.


title: CAVEATS
content:
<b>kcat</b> is primarily designed for development, debugging, and ad-hoc scripting, not as a robust production client. It relies on the <i>librdkafka</i> library, inheriting its capabilities and occasional limitations. While powerful for quick interactions, configuring advanced Kafka features like SSL, SASL authentication, or Kerberos can require a deep understanding of <i>librdkafka</i> properties passed via the <b>-X</b> option, which might be less straightforward than using high-level Kafka client libraries.


title: COMMON USE CASES
content:
<b>kcat</b> is extensively used for quick Kafka interactions, including:<br><i>Producing messages:</i> Piping log files or other data directly into a Kafka topic (e.g., <code>cat file.log | kcat -P -t mytopic</code>).<br><i>Consuming messages:</i> Monitoring real-time data streams for debugging or inspection (e.g., <code>kcat -C -t mytopic -o end -q</code>).<br><i>Metadata inspection:</i> Quickly checking broker availability, topic partition layouts, or consumer group offsets (e.g., <code>kcat -L -b localhost:9092</code> or <code>kcat -L -G mygroup</code>).<br><i>Scripting:</i> Integrating Kafka operations into shell scripts for automation purposes.


title: CONFIGURATION VIA -X
content:
The <b>-X</b> option is highly powerful, allowing users to pass any valid <i>librdkafka</i> configuration property. This includes network settings, security protocols (SSL, SASL), client IDs, debug options, and more. For a complete list of properties, refer to the <i>librdkafka</i> documentation or the <b>kcat</b> man page (usually <code>man kcat</code>). Examples include <code>-X security.protocol=SASL_SSL</code> or <code>-X ssl.ca.location=/path/to/ca.pem</code>.


title: HISTORY
content:
Developed by Magnus Edenhill, the lead developer of the <i>librdkafka</i> C library, <b>kcat</b> was originally known as <i>kafkacat</i>. It quickly gained popularity as a versatile and fast command-line tool for Kafka due to its direct integration with the high-performance <i>librdkafka</i>. In 2021, the project was officially renamed to <b>kcat</b> to mitigate potential trademark concerns related to the Apache Kafka brand, while maintaining its core functionality and user base.


title: PARAMETERS
content:
<b>--build &lt;projects|all&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds specified projects or all configured projects.<br><br><b>--update</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Updates source repositories for all configured projects.<br><br><b>--status</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the current build status of projects (e.g., checked out, built).<br><br><b>--list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all known projects that kde-builder can manage.<br><br><b>--clean &lt;projects|all&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Cleans the build directories of specified projects or all projects.<br><br><b>--reconfigure &lt;projects|all&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reconfigures specified projects or all projects without recompiling.<br><br><b>--prefix &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the installation prefix (where software will be installed).<br><br><b>--source-dir &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory where source code will be cloned.<br><br><b>--build-dir &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory where build artifacts will be created.<br><br><b>--install-dir &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory for final installation (alternative to --prefix, often for temporary installs).<br><br><b>--branch &lt;branch_name&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Git branch to use for all projects.<br><br><b>--enable-debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug symbols in the build, useful for developers.<br><br><b>--disable-tests</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables building of tests to speed up compilation.<br><br><b>--jobs &lt;N&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses N parallel compilation jobs.<br><br><b>--config-file &lt;file&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative configuration file.<br><br>


title: DESCRIPTION
content:
kde-builder is a powerful command-line utility designed to simplify the complex process of compiling KDE software from its source code. It automates fetching the latest source from Git repositories, managing build dependencies, configuring projects with CMake, compiling, and installing them. This tool is invaluable for KDE developers, testers, and users who wish to run the bleeding-edge development versions of KDE applications and frameworks, or contribute to KDE's development.<br><br>It provides features like parallel builds, updating existing source trees, cleaning build directories, and managing different branches and build types (e.g., debug or release builds). By abstracting away the manual steps of <b>git clone</b>, <b>cmake</b>, <b>make</b>, and <b>make install</b> for numerous KDE projects, kde-builder significantly reduces the effort and potential errors associated with building large software collections like KDE Plasma and its applications.


title: CAVEATS
content:
Building KDE from source using kde-builder can be a resource-intensive process. It requires a significant amount of disk space (tens of gigabytes), a powerful CPU, and a considerable amount of RAM. Compilation times can be very long, ranging from several hours to a full day, depending on hardware specifications and the number of projects being built. Users must also ensure that all necessary build tools and development libraries are installed on their system before initiating a build. Incorrect configurations or missing dependencies can lead to build failures.


title: <B>CONFIGURATION FILE</B>
content:
kde-builder heavily relies on a configuration file, typically located at <i>~/.config/kde-builderrc</i>. This file defines the list of projects to build, their Git repositories, build options, and installation paths. Users can customize this file to include or exclude specific projects, specify custom branches, or override default build settings. This centralized configuration makes it easy to manage a complex build environment.


title: <B>BUILD ORDER MANAGEMENT</B>
content:
One of the key features of kde-builder is its intelligent dependency resolution and build order management. It understands the interdependencies between various KDE projects (e.g., KDE Frameworks components, Plasma, applications) and ensures that projects are built in the correct order to satisfy all requirements, preventing common compilation errors related to missing libraries or headers.


title: HISTORY
content:
kde-builder emerged as an essential tool to simplify the developer workflow for KDE, especially as the project grew in complexity and moved to more decentralized version control systems like Git. It streamlined the process that previously involved manually cloning numerous repositories, managing build order, and configuring each project individually. Its development has mirrored the evolution of KDE's build infrastructure, adapting to changes from older build systems to CMake and more recently, supporting the modular structure of KDE Frameworks and Plasma 5/6. It has been a cornerstone for daily development builds and continuous integration within the KDE community for many years.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help information and exit.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br><b>-S, --sleep</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inhibit automatic system sleep or suspend.<br><br><b>-L, --screen-locker</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inhibit the screen from automatically locking.<br><br><b>-P, --power-save</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inhibit power-saving features like screen blanking or dimming.<br><br><b>-s, --session</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inhibit session logout or shutdown actions.<br><br><b>-f, --fire-and-forget</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not wait for the specified command to exit. <i>kde-inhibit</i> will exit immediately after launching the command, but the inhibition will remain active.<br><br><b>-W <window_id>, --window <window_id></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Apply the inhibition only when the specified window (identified by its XID) is active.<br><br><b>-A <application_id>, --application <application_id></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Apply the inhibition only when the specified application (identified by its .desktop ID) is active.<br><br><b>-D, --dialog</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a dialog allowing the user to override the inhibition.<br><br><b>-t <reason>, --reason <reason></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provide a human-readable reason for the inhibition, which might be displayed to the user.<br><br><b>-u <uri>, --uri <uri></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Associate a URI with the inhibition (primarily for KWin rules or specific D-Bus contexts).<br><br>


title: DESCRIPTION
content:
<br><i>kde-inhibit</i> is a command-line utility for <b>KDE Plasma</b> environments that allows users to temporarily prevent certain session management actions like screen locking, system sleep, or power-saving features. It's commonly used when running a long-running task, watching a video, or giving a presentation, ensuring the system doesn't unexpectedly go to sleep or lock the screen.<br><br>The inhibition can be applied globally or tied to the lifespan of a specific command. When used with a command, <i>kde-inhibit</i> runs the command and automatically releases the inhibition when the command exits. It leverages <b>D-Bus</b> to communicate with KDE's power management and screen locking services.


title: CAVEATS
content:
<ul><li>Requires a <b>KDE Plasma</b> desktop environment for full functionality, as it interacts directly with KDE's D-Bus services (e.g., PowerDevil, KScreenLocker).</li><li>Does not prevent manual user actions (e.g., explicitly pressing the power button to shut down).</li><li>The effectiveness of inhibition depends on the configured KDE power management policies and may be subject to system-wide settings or PolicyKit rules.</li><li>If <i>kde-inhibit</i> is killed or crashes, the inhibition will be released.</li></ul>


title: COMMON USE CASES
content:
<br><i>kde-inhibit</i> is particularly useful for scenarios where uninterrupted system operation is crucial. For example, running <br><i>kde-inhibit --sleep --screen-locker your_long_command</i><br> will prevent the system from sleeping or locking the screen while <i>your_long_command</i> is executing. Similarly, <br><i>kde-inhibit --power-save vlc movie.mp4</i><br> ensures the screen remains active during video playback without user interaction.


title: D-BUS INTERACTION
content:
<br>Underneath, <i>kde-inhibit</i> communicates via <b>D-Bus</b> with KDE services. It acts as a client requesting an inhibition lock. When the command exits (or if <i>--fire-and-forget</i> is used), <i>kde-inhibit</i> releases this lock, allowing normal power management and screen locking behavior to resume.


title: HISTORY
content:
<br><i>kde-inhibit</i> is an integral part of the KDE Plasma desktop environment, specifically designed to interact with KDE's session management components like <b>PowerDevil</b> (for power management) and <b>KScreenLocker</b> (for screen locking). Its development parallels the evolution of KDE Plasma's power and session management capabilities, providing a user-friendly command-line interface to D-Bus inhibition mechanisms. It was introduced to offer a KDE-specific alternative to more generic tools like <i>systemd-inhibit</i> that integrates seamlessly with Plasma's user experience.


title: PARAMETERS
content:
<b><I>project_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the specified Kdenlive project file (e.g., <b>.kdenlive</b>). If no file is provided, Kdenlive launches with a new, empty project.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with common command-line options and exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Kdenlive version information and exits.<br><br>


title: DESCRIPTION
content:
Kdenlive is a free and open-source non-linear video editing software for Linux, FreeBSD, macOS, and Windows. It is built on the Qt framework and KDE Frameworks, utilizing the powerful FFmpeg libraries for media processing. Kdenlive provides a rich set of features for video creators, including multi-track editing, a wide array of effects and transitions, a flexible titler, and support for various audio and video formats. It is designed to be accessible for beginners while offering advanced capabilities for professional workflows, making it a versatile tool for anything from simple cuts to complex multi-layered compositions.


title: CAVEATS
content:
Kdenlive is primarily a graphical user interface (GUI) application. While it can be launched and configured with some command-line options, it is not designed for headless operation or extensive scripting of editing tasks purely via the command line. Video editing can be resource-intensive; ensure sufficient RAM and CPU for optimal performance.


title: KEY FEATURES
content:
<b>Multi-track editing:</b> Edit multiple audio and video tracks simultaneously.<br><b>Wide format support:</b> Utilizes FFmpeg, allowing it to import and export nearly any audio/video format.<br><b>Customizable Interface:</b> Dockable panels allow users to arrange the interface to suit their workflow.<br><b>Proxy Editing:</b> Create lower-resolution copies of clips for smoother editing, especially with high-resolution footage.<br><b>Advanced Effects:</b> Includes a wide range of video and audio effects, color correction tools, and transitions.<br><b>Titler Tool:</b> Create 2D titles directly within the application.


title: PROJECT FILES
content:
Kdenlive uses XML-based project files with the <b>.kdenlive</b> extension. These files store all editing decisions, clip references, and effect parameters, but not the media itself. It's crucial to keep your media files organized and accessible for projects to load correctly.


title: HISTORY
content:
Kdenlive was first released by Jason Wood in 2002. Initially built on MLT and KDE 3, it joined the KDE project in 2007. A significant rewrite began in 2014, leading to the release of version 15.04 in 2015, which fully adopted the Qt 5 and KDE Frameworks 5 technologies, enhancing its stability, performance, and cross-platform compatibility.


title: PARAMETERS
content:
<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;Show the program's version number and exit.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulate the build process without performing any actual actions (e.g., cloning, compiling).<br><br><b>--no-confirm</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Proceed with actions without asking for user confirmation.<br><br><b>--rebuild [<module>|all]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force a complete rebuild of the specified module or all configured modules, ignoring previous build states.<br><br><b>--install [<module>|all]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Install the specified module or all modules after they have been successfully built.<br><br><b>--resume-from <module></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continue the build process starting from a specific module, useful after an interruption or failure.<br><br><b>--stop-on-failure</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Halt the entire build process immediately if any module fails to compile or configure.<br><br><b>--list-modules</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a list of all recognized KDE modules that can be built by the command.<br><br><b>--build-type <type></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the CMake build type for all modules (e.g., 'debug', 'release', 'relwithdebinfo').<br><br><b>--prefix <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the base installation directory for all built KDE software components.<br><br><b>--source-dir <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Define the root directory where all KDE source code repositories will be cloned.<br><br><b>--build-dir <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the base directory where all build artifacts (compiled files, intermediate objects) will be stored.<br><br><b>--log-dir <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the directory where detailed build logs for each module will be saved.<br><br><b>--branch <name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the Git branch to checkout for modules (e.g., 'master', 'kf5').<br><br><b>--git-protocol <protocol></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Choose the Git protocol to use for cloning repositories (e.g., 'https', 'ssh', 'git').<br><br><b>--no-src-sync</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip the step of synchronizing (pulling updates for) source repositories, only building existing ones.<br><br><b>--rc-file <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative configuration file to use instead of the default <i>~/.config/kdesrc-buildrc</i>.<br><br><b>--generate-config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate a sample <i>kdesrc-buildrc</i> configuration file in the current directory.<br><br>


title: DESCRIPTION
content:
<i>kdesrc-build</i> is a powerful command-line utility designed to automate the process of building and installing KDE software from its source code. It simplifies common developer tasks by managing source repository fetching (primarily Git), handling build directory configurations, invoking CMake for project setup, and compiling with tools like Make or Ninja.<br><br>The tool effectively manages module dependencies, allows for selective building of individual components or entire groups, and integrates seamlessly with a user-defined configuration file (<i>kdesrc-buildrc</i>) for persistent settings. It's an indispensable utility for KDE developers, contributors, and users who wish to run the latest development versions of KDE applications, frameworks, or the Plasma desktop environment directly from source.


title: CAVEATS
content:
Building the entire KDE stack from source requires substantial disk space (tens of gigabytes) and can consume significant time and computational resources.<br>A stable and fast internet connection is crucial for cloning large repositories and fetching dependencies.<br>Initial configuration via the <i>kdesrc-buildrc</i> file, especially for specific development setups, can be complex for new users.


title: CONFIGURATION FILE (KDESRC-BUILDRC)
content:
The command heavily relies on a user-specific configuration file, typically located at <i>~/.config/kdesrc-buildrc</i>.<br>This file is highly flexible, allowing users to define global settings like source, build, and installation directories, preferred Git protocols, and default build types.<br>It also supports module-specific overrides, allowing fine-grained control over how individual KDE projects are built, along with environment variable settings and module grouping.


title: MODULE SYSTEM
content:
<i>kdesrc-build</i> organizes KDE software into 'modules', which generally correspond to individual Git repositories (e.g., 'kio', 'dolphin', 'plasma-workspace').<br>The tool intelligently recognizes dependencies between these modules and attempts to build them in the correct topological order.<br>Users can either specify individual modules to build on the command line or define module groups within their <i>kdesrc-buildrc</i> file to build larger sets of KDE components efficiently.


title: HISTORY
content:
<i>kdesrc-build</i> emerged as an essential tool within the KDE community to streamline the developer workflow, particularly during the transition from KDE 3 to KDE 4 and then to the modular KDE Frameworks 5 (KF5) architecture. It was developed to abstract the complexities of managing numerous Git repositories, CMake configurations, and Make/Ninja commands for individual KDE components.<br><br>Over the years, it has continuously evolved to support new build systems, Git features, and KDE's changing module structure, solidifying its role as the primary method for developers to build and test the latest KDE software.


title: PARAMETERS
content:
<b><b>-A</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Destroys all credential caches in the collection. This is useful when multiple caches exist, for instance, due to different ticket types or identities.<br><br><b><b>-c</b> <i>cache_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path or name of the credential cache to be destroyed. If omitted, <b>kdestroy</b> operates on the default cache, typically specified by the KRB5CCNAME environment variable or a system default location.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs in quiet mode. No output or messages are displayed upon successful execution, which is useful for scripting.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If all credential caches are destroyed (either explicitly or via <b>-A</b>), this option instructs <b>kdestroy</b> to shut down the KCM (Kerberos Credential Manager) process if it was managing the caches.<br><br>


title: DESCRIPTION
content:
The <b>kdestroy</b> command is used to permanently delete a user's active Kerberos tickets and associated credential caches. This action invalidates any current Kerberos authentication sessions, meaning the user will lose access to Kerberos-protected services until new tickets are obtained (e.g., via <b>kinit</b>). It is typically used for security reasons, such as logging out of a system or ensuring that credentials are not left on a shared machine.<br><br>By default, <b>kdestroy</b> destroys the default credentials cache. However, it can be instructed to destroy specific caches or all caches belonging to the user.


title: CAVEATS
content:
Destroying Kerberos tickets is an irreversible action for the current session; new tickets must be acquired to regain access to Kerberos-protected resources. Ensure you have finished all tasks requiring Kerberos authentication before running <b>kdestroy</b>, especially on shared systems.


title: ENVIRONMENT VARIABLES
content:
The <b>KRB5CCNAME</b> environment variable can be used to specify the default credentials cache. If this variable is set, <b>kdestroy</b> will operate on the cache it points to, unless overridden by the <b>-c</b> option.


title: HISTORY
content:
<b>kdestroy</b> is a fundamental utility that has been a part of the MIT Kerberos distribution for a long time, evolving alongside the Kerberos protocol itself. Its core function of securely removing credential caches has remained consistent, reflecting its essential role in Kerberos security and session management.


title: SYNOPSIS
content:
<i>kdialog</i> [<i>options</i>]<br><br>Example: <i>kdialog</i> --title "Simple Message" --msgbox "Hello, this is a <b>kdialog</b> message!"<br>Example: <i>kdialog</i> --inputbox "What is your name?" "Guest"


title: PARAMETERS
content:
<b>--title <i>text</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the title of the dialog window.<br><br><b>--msgbox <i>text</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a simple message box with an 'OK' button. Returns 0 on 'OK'.<br><br><b>--yesno <i>text</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a message box with 'Yes' and 'No' buttons. Returns 0 for 'Yes', 1 for 'No'.<br><br><b>--inputbox <i>text</i> [<i>default</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a text input box. Outputs the entered text to standard output.<br><br><b>--password</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a password input box (text hidden). Outputs the entered password to standard output.<br><br><b>--textbox <i>file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the content of a specified file in a scrollable text viewer.<br><br><b>--progressbar <i>text</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a progress bar with a label. Progress can be updated by sending commands to <i>kdialog</i>'s standard input.<br><br><b>--notification <i>text</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a passive desktop notification (pop-up) with the given text.<br><br><b>--passivepopup <i>text</i> [<i>delay</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a transient popup message that disappears after a specified delay in seconds (default 5s).<br><br><b>--getopenfilename [<i>path</i>] [<i>filter</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a file selection dialog for opening files. Outputs the selected file path.<br><br><b>--getsavename [<i>path</i>] [<i>filter</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a file selection dialog for saving files. Outputs the selected file path.<br><br><b>--getexistingdirectory [<i>path</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a directory selection dialog. Outputs the selected directory path.<br><br><b>--menu <i>text</i> <i>tag1</i> <i>item1</i> ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a menu list. Outputs the tag of the selected item.<br><br><b>--checklist <i>text</i> <i>tag1</i> <i>item1</i> <i>state1</i> ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a checklist. Outputs the tags of selected items, separated by <i>--results-separator</i> (if specified).<br><br><b>--radiolist <i>text</i> <i>tag1</i> <i>item1</i> <i>state1</i> ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a radio button list (single selection). Outputs the tag of the selected item.<br><br><b>--combobox <i>text</i> <i>item1</i> <i>item2</i> ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a dropdown combobox. Outputs the selected item.<br><br><b>--getcolor [<i>color</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a color picker. Outputs the selected color in RGB hex format (e.g., #RRGGBB).<br><br><b>--getfont [<i>font</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a font selector. Outputs the selected font description string (e.g., 'Sans,10,-1,5,50,0,0,0,0,0').<br><br><b>--geometry <i>width</i>x<i>height</i>+<i>x</i>+<i>y</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial size and position of the dialog window.<br><br><b>--always-on-top</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keeps the dialog window visible on top of other windows.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <i>kdialog</i> version information and exits.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a concise help message with common options and exits.<br><br>


title: DESCRIPTION
content:
<i>kdialog</i> is a powerful utility for displaying user-friendly graphical dialog boxes from shell scripts or command-line applications within the KDE desktop environment. It offers a simple and efficient way to interact with users without requiring complex GUI programming. Script writers can leverage <i>kdialog</i> to present various types of dialogs, including informational messages, warnings, errors, yes/no questions, text input fields, password prompts, file/directory selectors, color pickers, font choosers, and different types of list-based selections (e.g., menus, checklists, radiolists).<br><br>The command outputs user selections or entered data to standard output and indicates user actions (e.g., OK, Cancel, Yes, No) via its exit code. This makes <i>kdialog</i> an invaluable tool for creating interactive and automated scripts in a graphical Linux environment, especially for users of KDE Plasma. It serves a purpose similar to <b>zenity</b> for GNOME or <b>dialog</b> for console-based interfaces.


title: CAVEATS
content:
<b>KDE/Qt Dependency:</b> <i>kdialog</i> is tightly integrated with the KDE desktop environment and relies on the Qt toolkit. It will not function on systems where KDE/Qt libraries are not installed or in purely command-line environments (e.g., SSH sessions without X forwarding).<br><br><b>Graphical Environment Required:</b> It necessitates a running X server or Wayland compositor to display its dialogs.<br><br><b>Blocking Behavior:</b> Most <i>kdialog</i> calls are blocking, meaning the script execution will pause until the user interacts with and closes the dialog window.<br><br><b>Limited Customization:</b> While versatile, it offers less granular visual customization compared to building a full-fledged GUI application.


title: RETURN CODES
content:
<i>kdialog</i> typically returns a specific exit code to indicate the user's action: <b>0</b> for success (e.g., 'OK', 'Yes'), <b>1</b> for 'No', and other non-zero values (e.g., <b>2</b>, <b>255</b>) for 'Cancel' or errors. These codes can be checked in shell scripts using the <b>$?</b> variable immediately after the <i>kdialog</i> command.


title: STANDARD OUTPUT USAGE
content:
For dialog types that solicit user input (e.g., <b>--inputbox</b>, <b>--getopenfilename</b>, <b>--menu</b>), the selected value or entered text is printed to <i>kdialog</i>'s standard output (stdout). This allows shell scripts to easily capture and process the user's response using command substitution (e.g., `<i>variable=$(kdialog --inputbox "Prompt:")</i>`).


title: STANDARD ERROR FOR MESSAGES
content:
Any error messages, warnings, or debug information generated by <i>kdialog</i> itself are typically outputted to standard error (stderr), keeping stdout clean for the intended user input.


title: HISTORY
content:
<i>kdialog</i> has been a core utility within the KDE desktop environment since its early iterations, providing a crucial bridge between command-line scripting and graphical user interfaces. Its development has paralleled that of KDE itself, leveraging advancements in the Qt toolkit to offer robust and user-friendly dialog capabilities. It embodies KDE's philosophy of empowering users with accessible scripting tools, enabling them to create interactive experiences and automate tasks without needing to write complex GUI application code. Its focus on simplicity and direct functionality has made it a valuable asset for quick prompts, file selections, and user feedback in the KDE ecosystem.


title: PARAMETERS
content:
<b>@server</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the IP address or hostname of the DNS server to query instead of the default configured server.<br><br><b>name</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The domain name, hostname, or IP address for which to perform the DNS lookup (e.g., <b>example.com</b>, <b>_kerberos._tcp.example.com</b>).<br><br><b>type</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The type of resource record to query (e.g., <b>A</b> for IPv4 address, <b>AAAA</b> for IPv6, <b>MX</b> for mail exchanger, <b>SRV</b> for service records, <b>DNSKEY</b> for DNSSEC keys, <b>PTR</b> for reverse lookups). Defaults to <b>A</b> if not specified.<br><br><b>class</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The query class (e.g., <b>IN</b> for Internet, <b>CH</b> for Chaosnet, <b>HS</b> for Hesiod). Defaults to <b>IN</b>.<br><br><b>+dnssec</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables DNSSEC processing, requesting DNSSEC records and validating responses if supported by the server. This is a key option for <i>kdig</i>'s intended use in secure environments.<br><br><b>+trace</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Traces the delegation path from the root servers for the query, showing the full chain of DNS servers involved.<br><br><b>+short</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a concise output, showing only the answer section. Useful for scripting or quick checks.<br><br><b>+tcp</b> or <b>+vc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces queries to use TCP instead of UDP. Essential for larger responses (like DNSSEC records) or zone transfers.<br><br><b>+multi</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows multiple queries to be specified on the command line, processing each one sequentially.<br><br><b>-x <IP address></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a reverse DNS lookup (PTR query) for the specified IP address, resolving it to a hostname.<br><br>


title: DESCRIPTION
content:
<i>kdig</i> is not a standalone command in the same vein as <i>dig</i> or <i>host</i>. Instead, it is frequently provided as a symlink or wrapper script around the <i>dig</i> utility, specifically within environments heavily utilizing Kerberos authentication or DNSSEC. Its primary purpose is to simplify or pre-configure DNS lookups pertinent to Kerberos operations, such as resolving SRV records for KDCs (Key Distribution Centers) or validating DNSSEC records. While <i>dig</i> is a general-purpose DNS lookup utility, <i>kdig</i> often implies a context where DNS security (DNSSEC) and service discovery for Kerberos are critical. Users might find <i>kdig</i> bundled with MIT Kerberos packages or <i>bind-utils</i>, acting as a convenient alias for <i>dig</i> commands often invoked with specific options like <b>+dnssec</b> or when querying <b>_kerberos._tcp</b> SRV records. It leverages <i>dig</i>'s powerful querying capabilities while subtly hinting at its intended use in secure, authenticated network environments.


title: CAVEATS
content:
<i>kdig</i> is commonly a symbolic link or a shell script wrapper for the <i>dig</i> command. As such, it generally does not possess unique command-line options beyond what <i>dig</i> provides. Its specific behavior and availability are often tied to the installation of Kerberos clients or <i>bind-utils</i> packages, where it serves as a convenient alias for <i>dig</i> invocations relevant to Kerberos-related DNS lookups and DNSSEC validation. Users should consult the <i>dig(1)</i> man page for a comprehensive list of available options and functionalities.


title: COMMON USE CASES
content:
<i>kdig</i> is frequently used for:<br><ul><li><b>DNSSEC Validation</b>: Verifying the authenticity and integrity of DNS responses by requesting and checking DNSSEC records (e.g., <b>kdig +dnssec example.com DNSKEY</b>).</li><li><b>Kerberos Service Discovery</b>: Locating Kerberos Key Distribution Centers (KDCs) and other services by querying SRV records (e.g., <b>kdig _kerberos._tcp.example.com SRV</b>).</li><li><b>Troubleshooting DNS Issues in Secure Environments</b>: Diagnosing DNS resolution problems where DNSSEC or Kerberos service location might be a factor.</li></ul>


title: HISTORY
content:
<i>kdig</i> does not have an independent development history. Its existence is primarily as a specialized invocation or alias of the <i>dig</i> command, which has been a staple DNS lookup utility provided by the Internet Systems Consortium (ISC) as part of the BIND (Berkeley Internet Name Domain) tools since the early 1990s. The <i>kdig</i> alias gained prominence with the increased adoption of DNSSEC for secure DNS lookups and the reliance of Kerberos authentication systems on DNS SRV records for service discovery. Its role is to streamline the execution of <i>dig</i> commands pertinent to these security-critical functionalities, often pre-configuring <i>dig</i> for DNSSEC validation or specific SRV record queries relevant to Kerberos.


title: SYNOPSIS
content:
<b>kdocker</b> [<i>DOCKER_COMMAND</i>] [<i>DOCKER_ARGUMENTS...</i>]<br><br><i>Explanation:</i> <b>kdocker</b> functions primarily as a prefix to standard Docker commands. It does not typically have its own command-line options but instead passes the subsequent <i>DOCKER_COMMAND</i> (e.g., <b>run</b>, <b>build</b>, <b>pull</b>) and its <i>DOCKER_ARGUMENTS</i> directly to the underlying Docker client and daemon within a <i>proot</i>-managed environment. Any configuration for <b>kdocker</b> itself is usually managed via environment variables or internal script logic, not command-line parameters.


title: DESCRIPTION
content:
<b>kdocker</b> is a utility designed to enable the execution of Docker containers without requiring root privileges on the host system. It achieves this by leveraging <i>proot</i>, a user-space implementation of <i>chroot</i> that allows programs to run with an altered root directory and emulates certain kernel calls, effectively creating a 'fake root' environment.<br><br>The primary purpose of <b>kdocker</b> is to enhance security by isolating Docker operations from the host's root user, and to enable Docker usage in environments where root access is restricted or undesirable (e.g., shared servers, CI/CD pipelines). It acts as a wrapper, taking typical Docker commands and executing them within its <i>proot</i>-managed, unprivileged environment. This allows users to perform standard Docker operations like <b>docker run</b>, <b>docker build</b>, etc., as if they were root, but within a confined and non-privileged context.


title: CAVEATS
content:
<b>Performance Overhead:</b> Running Docker through <i>proot</i> can introduce a slight performance overhead due to the emulation layer.<br><br><b>Limited Functionality:</b> While most basic Docker operations work, complex scenarios involving advanced networking, device passthrough, or specific kernel capabilities might not function correctly or might require significant configuration.<br><br><b>Security Scope:</b> While it enhances security by removing the need for root privileges, the underlying <i>proot</i> environment is still subject to its own limitations and potential vulnerabilities. It's not a full sandbox.<br><br><b>Alternative:</b> Modern Docker versions include native "rootless mode" which is often preferred for its tighter integration and better performance, making <i>kdocker</i> less necessary for new setups.


title: HOW IT WORKS
content:
<b>kdocker</b> primarily works by setting up a pseudo-root environment using <i>proot</i>. When you invoke <b>kdocker</b>, it intercepts the <i>Docker</i> command. Inside the <i>proot</i> environment, it sets up necessary symlinks and mounts to mimic a root filesystem, allowing the <i>Docker</i> client to believe it's running with full privileges, while in reality, all operations are confined to the user's home directory or a designated workspace, without actual root access on the host.


title: TYPICAL USAGE
content:
Instead of running <b>docker run -it ubuntu bash</b>, you would typically run <b>kdocker run -it ubuntu bash</b>.<br>Similarly, for building images: <b>kdocker build -t myimage .</b><br><b>kdocker</b> essentially prepends your standard <i>Docker</i> commands.


title: HISTORY
content:
<i>kdocker</i> emerged as a community-driven solution to address the long-standing demand for running <i>Docker</i> without root privileges. Prior to <i>Docker</i>'s native "rootless mode" (introduced in later versions), tools like <i>kdocker</i> provided a crucial workaround for users and administrators who needed to utilize <i>Docker</i> in unprivileged environments due to security policies or lack of root access.<br><br>Its development was often informal, consisting of shell scripts leveraging <i>proot</i>, filling a gap in <i>Docker</i>'s capabilities. With the advent of native rootless <i>Docker</i>, the necessity of <i>kdocker</i> has diminished for new deployments, but it remains relevant for legacy systems or specific niche use cases where native rootless Docker might not be feasible or desired.


title: SYNOPSIS
content:
As <i>'keep-header'</i> is not a standalone command, there is no direct command synopsis for it. Instead, the functionality is achieved through various command-line utilities and scripting techniques, which collectively form the 'keep-header' pattern. The general approach involves separating the header from the data, processing the data, and then rejoining the header with the processed data. For instance, a conceptual representation of how one might preserve a header from a file <code>data.csv</code> while processing it might look like:<br><br><code><b>header=$(head -n 1 data.csv)</b></code><br><code><b>processed_data=$(tail -n +2 data.csv | YOUR_PROCESSING_COMMANDS)</b></code><br><code><b>echo -e "$header\n$processed_data"</b></code><br><br>Alternatively, tools like <b>awk</b> or <b>sed</b> can handle this in a single pass using conditional logic (e.g., <code>NR==1</code> in <b>awk</b>).


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Since <i>'keep-header'</i> is not a specific command, it does not have its own parameters. The options and arguments used are those of the individual Linux commands (like <b>awk</b>, <b>sed</b>, <b>head</b>, <b>tail</b>) that are employed to implement the header preservation pattern. Each of these commands has its own set of parameters to control their specific operations.<br><br>


title: DESCRIPTION
content:
The term <i>'keep-header'</i> refers to a common data processing pattern in Linux and Unix-like environments, rather than a standalone command. It describes the technique of preserving the first line (or a set of initial lines) of a text file, typically a header, while applying transformations or filters to the remaining data lines. This pattern is crucial when working with structured text files like CSV, TSV, or log files, where the header provides essential context (column names) for the data below. Tools like <b>awk</b>, <b>sed</b>, <b>head</b>, and <b>tail</b> are frequently combined to achieve this. The basic idea is to treat the header row(s) differently from the body of the file, either by printing it directly before processing the rest of the file or by skipping it during the main processing step and then prepending it back.


title: CAVEATS
content:
The most important caveat is that <i>'keep-header'</i> is not a distinct Linux command or utility available in standard distributions. It is a conceptual pattern that must be implemented using existing command-line tools and scripting. Therefore, its exact 'syntax' or 'behavior' is entirely dependent on how a user chooses to combine and configure other commands. There is no <code>man keep-header</code> page. Users must be familiar with text processing tools like <b>awk</b>, <b>sed</b>, <b>head</b>, and <b>tail</b> to effectively apply this pattern.


title: EXAMPLE: USING AWK TO KEEP HEADER AND PROCESS DATA
content:
This example processes a file <code>data.csv</code> (assuming comma-separated values) by printing the header (first line) as is, and then converting all data lines to uppercase.<br><br><code><b>awk 'NR==1 {print; next} {print toupper($0)}' data.csv</b></code><br><br>Here, <code>NR==1</code> checks if it's the first record (line number); if so, it prints the line and skips to the next. Otherwise, it processes the line (converts to uppercase).


title: EXAMPLE: USING SED TO KEEP HEADER AND PROCESS DATA
content:
This example uses <b>sed</b> to keep the header and substitute 'old' with 'new' in the rest of the lines.<br><br><code><b>sed '1!s/old/new/g' data.csv</b></code><br><br>Here, <code>1!</code> means 'not the first line'. So, the substitution <code>s/old/new/g</code> is applied to all lines except the first.


title: EXAMPLE: USING HEAD AND TAIL TO KEEP HEADER
content:
A common pattern is to split the file, process the data, and then merge back. This example sorts the data part of a file while keeping the header.<br><br><code><b>(head -n 1 data.csv && tail -n +2 data.csv | sort) > sorted_data.csv</b></code><br><br>This command first prints the header, then pipes the rest of the file to <code>sort</code>, and the entire output is redirected to <code>sorted_data.csv</code>.


title: HISTORY
content:
The need to process data files while preserving header information has existed since the early days of computing, particularly with the rise of structured text data formats like CSV and TSV. In the Unix philosophy, tools are designed to do one thing well. Thus, specialized tools like <b>awk</b> and <b>sed</b> evolved to handle complex text manipulations, allowing users to implement patterns like <i>'keep-header'</i> using their conditional processing capabilities. The concept isn't tied to a specific command's development but rather to the flexible and composable nature of Unix command-line utilities, which allows users to chain commands and apply conditional logic to achieve sophisticated data transformations.


title: PARAMETERS
content:
<b><i>DATABASE_FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the <b>KeePass</b> database file (e.g., <i>.kdbx</i>, <i>.kdb</i>) to open upon launch.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a list of available command-line options and their descriptions.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the <b>KeePass</b> application version information.<br><br><b><b>--pw &lt;password&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the master password for the specified database directly on the command line. <br><i>(<b>Warning:</b> This method is insecure as the password can be exposed in system logs or process lists.)</i><br><br><b><b>--keyfile &lt;path&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the absolute or relative path to the master key file for the database.<br><br><b><b>--pw-prompt</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the display of the master password and/or key file dialog upon opening the database, even if credentials were provided via other command-line arguments.<br><br><b><b>--new-instance</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches a new, separate instance of <b>KeePass</b>, even if another instance is already running.<br><br><b><b>--config &lt;path&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative configuration file (e.g., <i>KeePass.config.xml</i>) to use instead of the default.<br><br><b><b>--minimize</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts <b>KeePass</b> minimized to the system tray area instead of opening the main window.<br><br><b><b>--tray</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts <b>KeePass</b> in the system tray. When the main window is closed, the application will automatically minimize to the tray instead of exiting.<br><br><b><b>--entries:&lt;RefID&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the database and directly selects an entry by its unique reference ID (UUID). This requires the database to be opened successfully first.<br><br>


title: DESCRIPTION
content:
<b>KeePass 2</b> is a free, open-source, cross-platform password manager designed to securely store and manage your digital credentials. It encrypts all your passwords, usernames, URLs, and notes in a single database file, protected by a master password, a key file, or both. On Linux, <b>KeePass 2</b> typically runs using the <i>Mono</i> framework, which is a free and open-source implementation of Microsoft's .NET Framework. It offers features like strong password generation, auto-typing capabilities for logins, organization of entries into groups, and support for plugins to extend its functionality. Its robust encryption algorithms (AES-256, ChaCha20) ensure the security of your sensitive data.


title: CAVEATS
content:
<b>KeePass 2</b> on Linux relies on the <i>Mono</i> runtime; ensure it is properly installed and configured for optimal performance. <br> Providing sensitive information like the master password directly via command-line arguments using <b>--pw</b> is highly insecure, as it can be visible in process listings (e.g., from <b>ps</b> command) and stored in shell history files. For security, prefer using a key file, or allow <b>KeePass</b> to prompt for credentials via its GUI or <b>--pw-prompt</b>. <br> While <b>KeePass</b> is cross-platform, some features or plugins might behave differently or require specific configurations on Linux compared to Windows.


title: RUNNING ON LINUX
content:
The <b>keepass2</b> command on Linux is often a wrapper script that invokes the <i>KeePass.exe</i> assembly using the <b>mono</b> command. This allows the .NET application to run seamlessly on Unix-like systems. Ensure that the <i>mono-runtime</i> package is installed on your system for <b>KeePass 2</b> to function correctly.


title: PLUGIN ARCHITECTURE
content:
<b>KeePass 2</b> boasts a powerful plugin architecture, allowing users to extend its functionality significantly. Plugins can provide features such as cloud synchronization, browser integration, advanced import/export options, and custom entry fields. These plugins are typically <i>.plgx</i> or <i>.dll</i> files that are placed in the application's plugin directory.


title: HISTORY
content:
<b>KeePass</b> was originally developed by Dominik Reichl. The first major version, <b>KeePass 1.x</b> (Classic Edition), was written in C++ for Windows. Recognizing the need for cross-platform compatibility, <b>KeePass 2.x</b> (Professional Edition) was rewritten in C# for the .NET Framework, enabling it to run on Linux, macOS, and other platforms via the <i>Mono</i> runtime. First publicly released around 2007, <b>KeePass 2.x</b> quickly gained popularity due to its robust security, open-source nature, and highly extensible plugin architecture, becoming a widely adopted solution for password management across various operating systems.


title: PARAMETERS
content:
<b><b>-h, --help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for <i>keepassxc-cli</i> or a specific command.<br><br><b><b>-v, --version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version of <i>keepassxc-cli</i>.<br><br><b><b>-d, --database &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the KeePassXC database file (.kdbx) to use.<br><br><b><b>-k, --keyfile &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a key file for database authentication.<br><br><b><b>-u, --username-env &lt;env_var&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads the database master username from the specified environment variable.<br><br><b><b>-p, --password-env &lt;env_var&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads the database master password from the specified environment variable.<br><br><b><b>-s, --security-desktop</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prompts for the master password using a secure desktop dialog, if available on the system.<br><br><b><b>-e, --execute &lt;command&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a single command and exits, useful for scripting without interactive prompts.<br><br><b><b>--show-password</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Used with <i>show</i> command) Displays the password of an entry in plain text.<br><br><b><b>-c, --clip</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Used with <i>show</i>, <i>clip</i> commands) Copies the retrieved information (e.g., password, username) to the system clipboard.<br><br><b><b>--otp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Used with <i>show</i>, <i>clip</i> commands) Retrieves and displays/clips the Time-based One-Time Password (TOTP) for an entry.<br><br><b><b>-a, --attribute &lt;name&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Used with <i>show</i> command) Displays a specific attribute of an entry (e.g., URL, notes).<br><br><b><b>-r, --recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Used with <i>ls</i> command) Lists entries in sub-groups recursively.<br><br><b><b>-f, --force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces an operation, for example, overwriting an existing entry or skipping prompts.<br><br>


title: DESCRIPTION
content:
<i>keepassxc-cli</i> is the official command-line interface (CLI) client for KeePassXC, a free and open-source cross-platform password manager. It allows users to interact with and manage their KeePassXC database files (.kdbx) directly from the terminal, without needing the graphical user interface.<br><br>This makes it ideal for scripting, automated tasks, server environments, or users who prefer a text-based workflow. It supports a wide range of operations, including opening and unlocking databases, listing entries, retrieving usernames and passwords, adding new entries, editing existing ones, and performing various database maintenance tasks like changing the master key or performing database integrity checks. Its capabilities make it a powerful tool for secure password management in non-GUI contexts.


title: CAVEATS
content:
<b>Security Risks:</b> When using options like <i>--show-password</i> or piping sensitive information, be mindful of shell history and terminal buffers which might retain plaintext passwords. Consider using <i>--clip</i> to send credentials directly to the clipboard, or handle outputs carefully in scripts.<br><br><b>Clipboard Integration:</b> Clipboard functionality (<i>--clip</i>) relies on external utilities like <i>xclip</i> (for X11) or <i>wl-copy</i> (for Wayland) being installed and accessible on your system.<br><br><b>Non-Interactive Usage:</b> While powerful for scripting, <i>keepassxc-cli</i> is fundamentally non-interactive. Complex operations or database updates require careful scripting and validation of arguments.<br><br><b>Master Password Handling:</b> Providing the master password via environment variables or command-line arguments (e.g., <i>--password-env</i>) should be done with extreme caution due to potential exposure to other processes or logs.


title: TYPICAL USAGE PATTERNS
content:
<i>Scripting Automation:</i> Ideal for retrieving credentials for automated tasks, such as SSH logins, API authentications, or database connections, without manual intervention.<br><i>Headless Environments:</i> Managing passwords on servers or systems where a graphical interface is not available or desired.<br><i>Quick Lookups:</i> For users who prefer command-line workflows for rapidly looking up or managing specific entries.<br><i>Password Generation:</i> Utilizing the built-in password generator from the terminal for creating strong, random passwords.


title: DATABASE LOCKING BEHAVIOR
content:
Unlike the graphical KeePassXC application, <i>keepassxc-cli</i> typically opens and decrypts the database for each individual command execution and then closes it immediately after. This stateless operation means that repeated commands often require re-authentication (entering the master password or providing key file) unless session management or other credential passing mechanisms are employed carefully within scripts. This design enhances security by minimizing the time the database is held open and decrypted in memory.


title: HISTORY
content:
<i>keepassxc-cli</i> emerged as a command-line counterpart to KeePassXC, which itself is a community fork of KeePassX, originally deriving from KeePass. The CLI tool was developed to provide programmatic access to KeePassXC databases, enabling users to manage their credentials in headless environments, integrate with shell scripts, or automate tasks without relying on the graphical user interface. Its development reflects the growing need for flexible and scriptable password management solutions, especially for power users and system administrators who require secure, automated access to their password stores.


title: PARAMETERS
content:
<b>-f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Forwardable</b></i>: Requests a forwardable ticket, allowing it to be forwarded to other hosts.<br><br><b>-F</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Not forwardable</b></i>: Requests a non-forwardable ticket, preventing it from being forwarded.<br><br><b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Proxiable</b></i>: Requests a proxiable ticket, allowing it to be delegated to a proxy server.<br><br><b>-P</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Not proxiable</b></i>: Requests a non-proxiable ticket, preventing it from being delegated.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Renewable</b></i>: Requests a renewable ticket, allowing it to be renewed before expiry without re-entering password (up to maximum renewable lifetime).<br><br><b>-R</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Renew</b></i>: Attempts to renew an existing renewable ticket without prompting for a password.<br><br><b>-l <i>lifetime</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Lifetime</b></i>: Specifies the desired lifetime of the ticket in a format like '5m', '4h', '3d'. The KDC may grant a shorter lifetime.<br><br><b>-c <i>ccache_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Credential cache</b></i>: Specifies the path to the credential cache file to use. Defaults to <i>KRB5CCNAME</i> environment variable or a system default.<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Keytab</b></i>: Obtains a ticket using a keytab file instead of a password.<br><br><b>-t <i>keytab_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Keytab file</b></i>: Specifies the path to the keytab file when using the <i>-k</i> option. Defaults to <i>/etc/krb5.keytab</i> or <i>~/krb5.keytab</i>.<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Version</b></i>: Displays the Kerberos library version information and exits.<br><br><b>-A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Anonymous</b></i>: Requests an anonymous ticket, typically for unauthenticated access or for specific realm trust scenarios.<br><br><b>-S <i>service_principal</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>Service principal</b></i>: Requests a ticket for a specific service principal directly, rather than a TGT.<br><br>


title: DESCRIPTION
content:
<br>The <b>kinit</b> command is a fundamental client utility for interacting with the Kerberos authentication system. It is used to obtain or renew a Kerberos <i>ticket-granting ticket</i> (TGT) and store it in a credential cache. A TGT is essential for subsequent authentication to Kerberos-aware services without re-entering a password.<br><br>When <b>kinit</b> is invoked, it typically prompts the user for their Kerberos principal's password, communicates with the Kerberos Key Distribution Center (KDC), and, upon successful authentication, issues a TGT. This TGT can then be used by other Kerberos client applications to request service tickets for specific services.<br><br><b>kinit</b> plays a crucial role in establishing a user's authenticated session within a Kerberos realm, enabling secure access to networked resources like file shares, SSH, and web applications. It also supports obtaining tickets using keytab files for automated processes.


title: CAVEATS
content:
<br><i><b>Network Connectivity</b></i>: <b>kinit</b> requires network access to the configured Kerberos Key Distribution Center (KDC). If the KDC is unreachable or the network is down, ticket acquisition will fail.<br><br><i><b>Time Synchronization</b></i>: Kerberos is highly sensitive to time synchronization. Significant clock skew between the client and the KDC can lead to authentication failures. Ensure your system's time is synchronized, e.g., via NTP.<br><br><i><b>Credential Cache Security</b></i>: The credential cache file contains sensitive authentication information (the TGT). It should be protected with appropriate file permissions to prevent unauthorized access. Misconfigured permissions can lead to security vulnerabilities.<br><br><i><b>Keytab File Security</b></i>: When using keytab files (with <i>-k</i> or <i>-t</i>), ensure the keytab file itself is securely stored and has restricted permissions, as it contains cryptographic keys equivalent to a password.<br><br><i><b>Password Entry</b></i>: When prompted for a password, characters will not be echoed to the console for security reasons.


title: KERBEROS COMMAND SUITE
content:
The term 'Kerberos command' often refers to a suite of client utilities for interacting with a Kerberos environment, rather than a single command named 'kerberos'. Key commands in this suite include <b>kinit</b> (for obtaining tickets), <b>klist</b> (for listing tickets), <b>kdestroy</b> (for destroying tickets), and <b>kpasswd</b> (for changing passwords). These commands work together to manage a user's Kerberos authentication lifecycle.


title: CREDENTIAL CACHE (CCACHE)
content:
The credential cache (often referred to as 'ccache') is a temporary storage location where <b>kinit</b> stores the obtained Ticket-Granting Ticket (TGT) and subsequent service tickets. This allows applications and other Kerberos commands to access the user's credentials without repeatedly asking for a password. The location of the ccache is typically determined by the <i>KRB5CCNAME</i> environment variable, defaulting to a file in <i>/tmp</i> (e.g., <i>/tmp/krb5cc_UID</i>) or a file specified by the configuration. It is crucial to manage and protect the ccache as it represents your authenticated session.


title: HISTORY
content:
<br>Kerberos is a network authentication protocol that works on the basis of <i>tickets</i> to allow nodes communicating over a non-secure network to prove their identity to one another in a secure manner. It was developed at MIT as part of Project Athena in the 1980s. The name "Kerberos" is derived from the Greek mythological three-headed dog, Cerberus, guardian of the underworld, symbolizing its role as a network security guardian.<br><br>The initial implementations were proprietary, but MIT later released Kerberos V5 (Version 5) under a free software license, making it widely adopted. The client utilities like <b>kinit</b>, <b>klist</b>, and <b>kdestroy</b> are part of the standard Kerberos client package, which has been consistently maintained and evolved alongside the protocol to support new features and security enhancements. Its core functionality and usage remain largely consistent across various Unix-like operating systems, including Linux.


title: SYNOPSIS
content:
<b>kernel-install</b> [<i>OPTIONS...</i>] <i>COMMAND KERNEL_VERSION IMAGE_FILE</i> [<i>INITRD_FILE</i>]


title: PARAMETERS
content:
<b><i>COMMAND</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The action to perform. Common commands are: <b>add</b> to install a new kernel and its associated files, and <b>remove</b> to remove an existing kernel.<br><br><b><i>KERNEL_VERSION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The kernel version string (e.g., '6.5.0-generic') to use for the installation or removal. This version dictates the filenames and directory structures.<br><br><b><i>IMAGE_FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the kernel image file (e.g., <i>vmlinuz</i> or <i>bzImage</i>) to be installed. Required for the <b>add</b> command.<br><br><b><i>INITRD_FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional path to a pre-built initramfs file. If not provided, <i>kernel-install</i> will usually trigger a hook to generate one.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a trial run with no changes made. Only shows what would happen.<br><br><b><b>--no-sync</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not synchronize filesystem changes after operations. This is generally not recommended for production systems.<br><br><b><b>--loader-entry-token=</b><i>TOKEN</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a unique token for the loader entry. By default, the <i>machine-id</i> is used.<br><br><b><b>--boot-option=</b><i>OPTION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a kernel command line option to the boot loader entry. Can be specified multiple times.<br><br>


title: DESCRIPTION
content:
<i>kernel-install</i> is a command-line utility designed to automate the process of installing new kernel and initramfs images onto a Linux system. It primarily serves as a standardized interface for package managers or custom build scripts to integrate newly compiled or installed kernels with the boot loader.<br><br>The command typically copies the kernel image (vmlinuz) and its associated initial RAM disk (initrd) to a location accessible by the boot loader, often under <i>/boot</i> or <i>/efi/EFI/Linux</i>. It then invokes helper scripts (hooks) located in <i>/usr/lib/kernel/install.d/</i> and <i>/etc/kernel/install.d/</i> to perform additional tasks, such as generating the initramfs using tools like <i>dracut</i> or <i>mkinitcpio</i>, and updating boot loader configurations (e.g., creating <i>systemd-boot</i> entries or updating GRUB).<br><br>Its goal is to provide a robust and consistent method for managing kernel updates, ensuring the system remains bootable without manual intervention for boot loader configuration.


title: CAVEATS
content:
<i>kernel-install</i> relies heavily on the <i>/usr/lib/kernel/install.d/</i> and <i>/etc/kernel/install.d/</i> hook scripts for its functionality. Without these hooks, it may only copy files without generating initramfs or updating boot loader configurations. It's primarily designed for systems that use the Boot Loader Specification and often integrates best with <i>systemd-boot</i> or GRUB.<br><br>The behavior can vary significantly depending on the distribution and installed hook scripts. Misconfigured or missing hooks can lead to unbootable systems.


title: HOOK SCRIPTS
content:
<i>kernel-install</i> executes scripts found in <i>/usr/lib/kernel/install.d/</i> and <i>/etc/kernel/install.d/</i>, sorted by filename. These scripts are responsible for tasks like generating initramfs (e.g., <i>90-dracut.install</i>), copying kernel images, and updating boot loader entries. Users can place their own scripts in <i>/etc/kernel/install.d/</i> to customize the installation process.


title: BOOT LOADER SPECIFICATION
content:
The command adheres to the Boot Loader Specification, a standard for how boot loaders discover and interpret boot entries. This promotes interoperability between different boot loaders and operating systems, allowing <i>kernel-install</i> to manage boot entries in a standardized manner, often generating <i>.conf</i> files in <i>/boot/loader/entries/</i> for <i>systemd-boot</i>.


title: MACHINE ID
content:
By default, <i>kernel-install</i> uses the system's unique machine ID (read from <i>/etc/machine-id</i>) as part of the directory structure and filenames for installed kernels. This ensures that multiple kernels can coexist cleanly and uniquely identify their respective entries, especially important in multi-boot or snapshot scenarios.


title: HISTORY
content:
<i>kernel-install</i> is part of the <i>systemd</i> project and was introduced to standardize the process of kernel installation and removal. Prior to its existence, each Linux distribution often had its own scripts and conventions for managing kernel updates, leading to inconsistencies. Its development aimed to simplify and unify this process, especially for systems utilizing <i>systemd-boot</i> and adhering to the Boot Loader Specification. It gained prominence as <i>systemd</i> became widely adopted, offering a more robust and predictable mechanism for kernel lifecycle management.


title: PARAMETERS
content:
<b>--syslog</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Read from syslog</I><br>Instructs the daemon to read kernel messages from the system's syslog.<br><br><b>--no-upload</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Disable upload</I><br>Prevents the collected oops data from being uploaded to a remote server.<br><br><b>--no-gui</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Disable GUI notifications</I><br>Suppresses any graphical user interface notifications or prompts upon detecting an oops.<br><br><b>--daemon</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Run as a daemon</I><br>Runs the <I>kerneloops</I> utility in the background as a daemon process.<br><br><b>--dump-oopses</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Dump collected oopses</I><br>Outputs the raw data of detected kernel oopses from the configured log file.<br><br><b>--dump-crash-reports</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Dump collected crash reports</I><br>Outputs processed crash report data.<br><br><b>--check-config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Check configuration</I><br>Performs a check of the <I>kerneloops</I> configuration files for validity.<br><br><b>--oops-log-file=<I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specify oops log file</I><br>Sets the path to the file where kernel oops information is logged.<br><br><b>--pid-file=<I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specify PID file</I><br>Specifies the path for the PID file when running as a daemon.<br><br><b>--upload-url=<I>URL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Specify upload URL</I><br>Defines the URL to which kernel oops data should be uploaded.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Show version</I><br>Displays the version information of the <I>kerneloops</I> utility.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Show help</I><br>Displays a brief help message with available options.<br><br>


title: DESCRIPTION
content:
The <I>kerneloops</I> utility and associated daemon are designed to detect, collect, and report kernel "oopses" and panics. A kernel oops indicates a bug in the kernel where it detects an internal inconsistency, but can often continue running, albeit in an unstable state. A kernel panic is a more severe, unrecoverable error, leading to a system halt. <I>kerneloops</I> typically runs as a background daemon, monitoring system logs (like <I>syslog</I> or <I>dmesg</I>) for these critical messages.<br><br>Upon detection, it extracts relevant information, such as the stack trace, register contents, and module information, and stores it for later analysis. Depending on its configuration, <I>kerneloops</I> can also provide a graphical notification to the user, and more importantly, upload the collected crash data to a bug tracking system (e.g., kerneloops.org, or integrated with distribution-specific tools like <I>apport</I> or <I>abrt</I>) to aid developers in identifying and fixing kernel bugs. This automated reporting significantly contributes to kernel stability and improvement by providing valuable diagnostic data from real-world usage scenarios.


title: CAVEATS
content:
The exact behavior and available options for <I>kerneloops</I> can vary significantly across different Linux distributions and versions. Some distributions might integrate <I>kerneloops</I> functionality into other crash reporting tools like <I>abrt</I> (Red Hat/Fedora) or <I>apport</I> (Ubuntu), or primarily use <I>kerneloopsd</I> as a background service without a direct user-invokable command. Direct manual invocation of <I>kerneloops</I> might not be the primary or recommended way to interact with the kernel oops handling system in modern distributions; it's often configured via systemd services or configuration files.


title: KERNEL OOPS VS. KERNEL PANIC
content:
<I>A <B>kernel oops</B> signifies a kernel bug where the kernel detects an internal inconsistency or an illegal operation. While serious, it often allows the system to continue running, though potentially unstably. A <B>kernel panic</B> is a more critical, unrecoverable error, indicating that the kernel has reached a state from which it cannot safely recover, leading to an immediate system halt or reboot.</I>


title: DATA COLLECTION
content:
<I>When an oops or panic occurs, <I>kerneloops</I> (or its integrated system) collects vital diagnostic information, including the stack trace of the faulty process, CPU register states, information about loaded kernel modules, and details about the kernel version. This data is invaluable for pinpointing the source of the bug.</I>


title: REPORTING MECHANISM
content:
<I>The primary goal of <I>kerneloops</I> is to facilitate the reporting of these events. Collected data can be uploaded to centralized repositories (like kerneloops.org), providing developers with a vast dataset of real-world kernel failures, which significantly aids in debugging and improving kernel stability across various hardware and software configurations.</I>


title: HISTORY
content:
The <I>kerneloops</I> project emerged as an open-source initiative aimed at collecting and centralizing kernel crash data from users worldwide. It gained prominence as a crucial tool for kernel developers, providing real-world diagnostic information that was otherwise difficult to gather. Initially a standalone utility and daemon, its functionality has been increasingly integrated or superseded by broader bug reporting frameworks like <B>ABRT</B> (Automatic Bug Reporting Tool) on Red Hat-based systems and <B>Apport</B> on Ubuntu, which offer more comprehensive crash detection and reporting capabilities for both kernel and userspace applications. While the standalone <I>kerneloops</I> utility might be less prevalent in direct user interaction today, its underlying principles and the concept of automated kernel crash reporting remain fundamental to Linux kernel development and stability.


title: SYNOPSIS
content:
<b>kexec</b> [<i>options</i>] {<i>command</i>} [<i>arguments</i>]<br><br>Common commands:<br><b>kexec -l</b> <i>kernel-image</i> [<i>--initrd=initrd-file</i>] [<i>--append=cmdline-string</i>] [<i>options</i>]<br><b>kexec -e</b><br><b>kexec -u</b><br><b>kexec -p</b> <i>kernel-image</i> [<i>--initrd=initrd-file</i>] [<i>--append=cmdline-string</i>] [<i>options</i>]<br><b>kexec -s</b><br><b>kexec -x</b><br><b>kexec -d</b>


title: PARAMETERS
content:
<b><b>-l</b>, <b>--load</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads a new kernel image and its associated initial RAM disk (initrd) into memory, preparing it for execution. This does not immediately boot the new kernel.<br><br><b><b>-e</b>, <b>--exec</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the kernel image that was previously loaded using <b>-l</b>. This command initiates the boot of the new kernel.<br><br><b><b>-u</b>, <b>--unload</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unloads the kernel image previously loaded by <b>-l</b>, freeing up the memory it occupied.<br><br><b><b>-p</b>, <b>--load-panic</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads a kernel image specifically designated as a 'panic kernel' or 'dump kernel' for use with the <code>kdump</code> mechanism. This kernel is executed automatically in the event of a system crash.<br><br><b><b>-s</b>, <b>--force-sync</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces a <code>sync</code> operation before executing the loaded kernel, ensuring all buffered data is written to disk. Useful for preventing data loss during an immediate reboot.<br><br><b><b>-x</b>, <b>--no-ifdown</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <code>kexec</code> from bringing down network interfaces before executing the new kernel. Useful in specific network configurations or virtual environments.<br><br><b><b>-d</b>, <b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug output, which can be helpful for troubleshooting issues during kernel loading or execution.<br><br><b><b>--append=</b><i>string</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Appends the specified string to the kernel command line for the new kernel. This is equivalent to setting <code>console=ttyS0</code> or <code>root=/dev/sda1</code>.<br><br><b><b>--initrd=</b><i>file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the initial RAM disk (initrd) file to be used with the new kernel. The initrd provides a temporary root filesystem during the early boot process.<br><br><b><b>--real-mode</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to boot the new kernel in real mode. This option is typically used for older systems or specific debugging scenarios.<br><br><b><b>--elf64-core-headers</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates 64-bit ELF core headers. Primarily used in conjunction with <b>--load-panic</b> for <code>kdump</code> setups to ensure proper crash dump capture on 64-bit systems.<br><br><b><b>--reuse-console</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to reuse the current console for the new kernel, which can help maintain continuous output during the <code>kexec</code> transition. Behaviour can vary based on kernel versions and console types.<br><br>


title: DESCRIPTION
content:
<code>kexec</code> is a Linux system call and a utility that allows you to load and boot a new kernel from the currently running kernel, bypassing the traditional boot process (BIOS/UEFI, bootloader). This means it performs a "warm reboot" or "soft reboot" where the hardware remains powered on and initialized, significantly reducing the time it takes to restart the system compared to a full power cycle.<br><br>It's primarily used for several critical purposes:<br><i><ol><li></i><b>Faster Reboots:</b> <i>Especially beneficial in large server environments or cloud infrastructures where uptime is crucial and minimizing downtime for kernel updates is desired.</i></li><li></i><b>Kernel Development and Testing:</b> <i>Allows developers to quickly test new kernel versions without waiting for a full system restart.</i></li><li></i><b>Crash Recovery (kdump):</b> <i>It's a fundamental component of the <code>kdump</code> mechanism, which allows the system to capture a memory dump of a crashed kernel by booting into a separate, lightweight "dump kernel." This dump kernel can then save the memory contents for later analysis.</i></li></ol>


title: CAVEATS
content:
Using <b>kexec</b> requires <i>root</i> privileges due to its direct interaction with kernel memory and hardware.<br><br>While offering faster reboots, <b>kexec</b> bypasses the typical system initialization performed by BIOS/UEFI and bootloaders. This can lead to various issues:<br><i><ul><li></i><b>Hardware State:</b> <i>Not all hardware components are fully reinitialized, which might cause instability or unexpected behavior with certain drivers or devices, especially after a prolonged uptime or if the new kernel requires a different hardware state.</i></li><li></i><b>Memory Fragmentation:</b> <i>The currently running kernel might have fragmented memory, making it difficult for <code>kexec</code> to find contiguous memory regions large enough to load the new kernel and its initrd. This can lead to "Not enough memory" errors.</i></li><li></i><b>Firmware Issues:</b> <i>Some firmware or BIOS versions might not fully support the <code>kexec</code> mechanism, leading to hang-ups or failed reboots.</i></li><li></i><b>Security:</b> <i>As it allows booting arbitrary kernels, it presents a potential security risk if an attacker gains root access, as they could load a malicious kernel.</i></li><li></i><b>Debugging Complexity:</b> <i>Issues during a <code>kexec</code> boot can be harder to diagnose than a traditional boot, as there's less console output from the initial boot stages.</i></li></ul>


title: <B>KDUMP INTEGRATION</B>
content:
<code>kdump</code> is a kernel crash dumping mechanism that relies heavily on <code>kexec</code>. When a kernel panic occurs, <code>kexec</code> is used to boot into a pre-loaded, separate 'dump kernel' (loaded via <b>kexec -p</b>). This dump kernel then collects the memory contents of the crashed system, typically saving it to disk for later analysis. This allows administrators to diagnose the cause of kernel panics without having to manually reboot and re-create the crash conditions.<br><br>The <code>kdump</code> configuration often involves reserving a specific region of memory for the dump kernel and its associated data structures using the <code>crashkernel=</code> boot parameter.


title: <B>USE CASES AND BENEFITS</B>
content:
<code>kexec</code> offers significant advantages over traditional reboots in specific scenarios:<br><i><ul><li></i><b>Reduced Downtime:</b> <i>Eliminates the lengthy BIOS/UEFI POST sequence, speeding up system restarts. This is invaluable for critical services and continuous integration/delivery pipelines.</i></li><li></i><b>Kernel Patching:</b> <i>Allows applying kernel security patches or updates with minimal service interruption.</i></li><li></i><b>Debugging:</b> <i>Provides a rapid way for kernel developers to test new kernel builds or debug issues without the overhead of a full power cycle.</i></li><li></i><b>Virtualization:</b> <i>In some virtualized environments, <code>kexec</code> can offer a more graceful way to restart guest kernels.</i></li></ul>


title: HISTORY
content:
The <b>kexec</b> system call and utility were primarily developed to address the need for faster kernel reboots, especially in server environments where minimizing downtime for kernel updates is critical. Its origins trace back to the early 2000s, with significant development occurring around the Linux 2.6 kernel series.<br><br>A major driving force behind its adoption and continued development has been its role in the <b>kdump</b> mechanism. <code>kdump</code> relies on <code>kexec</code> to load and execute a dedicated "dump kernel" in the event of a system crash, allowing for reliable collection of kernel core dumps for post-mortem analysis.<br><br>Over the years, its usage has expanded from enterprise servers to cloud environments and even embedded systems, whenever quick and reliable kernel transitions are desired without a full system power cycle.


title: SEE ALSO
content:
<b>reboot(8)</b>, <b>shutdown(8)</b>, <b>systemctl(1)</b>, <b>init(8)</b>, <b>grub(8)</b>, <b>bootctl(1)</b>


title: SYNOPSIS
content:
<i>Not a direct shell command.</i><br>The <b>key.dns_resolver</b> is a kernel key type accessed internally by system libraries (e.g., glibc via <b>nss-dns_resolver</b> module) and services (e.g., <b>systemd-resolved</b>) to perform and cache DNS resolution.


title: PARAMETERS
content:
<b><i>query_string</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific DNS query to resolve. This string typically includes the record type (e.g., A, AAAA, PTR, SRV) and the domain name or IP address to look up. For instance, 'A example.com' requests the IPv4 address for example.com, while 'PTR 1.2.3.4' requests the hostname for the IP address 1.2.3.4. The kernel's <b>key.dns_resolver</b> will process this string to perform the actual DNS lookup and store the result.<br><br>


title: DESCRIPTION
content:
The <b>key.dns_resolver</b> refers to a specific <i>key type</i> within the Linux kernel's keyring service. It is not a standalone executable command but rather a fundamental mechanism used by system libraries and services, such as <i>glibc's Name Service Switch (NSS)</i> or <i>systemd-resolved</i>, to perform and cache DNS (Domain Name System) lookups.<br><br>When a program needs to resolve a hostname, it can request the kernel to perform the lookup using this key type. The kernel then acts as a resolver, performing the DNS query and storing the authoritative answer within a kernel key. Subsequent identical queries can be served directly from this kernel-level cache, significantly improving performance and reducing network traffic.<br><br>This kernel-level caching also enhances security and integrity by ensuring that DNS responses are handled and stored within a trusted kernel space. It provides a centralized, consistent, and highly performant way for various system components to interact with DNS.


title: CAVEATS
content:
The <b>key.dns_resolver</b> is a kernel-internal mechanism and not a user-executable command. Its functionality relies on proper kernel configuration and often requires specific integration with user-space components like the <b>nss-dns_resolver</b> module for <i>glibc</i> or the <b>systemd-resolved</b> service. Direct interaction is typically via tools like <b>keyctl</b> for managing kernel keys, rather than executing the resolver itself. <br><br>While it provides robust caching, care must be taken with cache invalidation and ensuring the freshness of DNS records, although the kernel attempts to respect DNS TTLs.


title: <I>MECHANISM AND INTEGRATION</I>
content:
The <b>key.dns_resolver</b> key type integrates with user-space applications primarily through two main paths:<br><br>1.  <b>glibc NSS Module:</b> The GNU C Library's Name Service Switch (NSS) can be configured (in <b>/etc/nsswitch.conf</b>) to use the <i>'dns_resolver'</i> module. When a function like <b>getaddrinfo(3)</b> is called, if 'dns_resolver' is listed in the 'hosts' line, glibc will attempt to use the kernel's key type for resolution. This allows legacy applications to transparently benefit from kernel-level DNS caching.<br><br>2.  <b>systemd-resolved:</b> The <b>systemd-resolved</b> service, a modern network name resolution manager, can be configured to utilize the <b>key.dns_resolver</b>. It acts as a central point for all DNS queries on the system, forwarding them to the kernel key type for resolution and caching. This provides a unified and robust DNS resolution service across the system.<br><br>In both cases, the kernel manages the actual DNS queries, stores the results in keys with appropriate Time-To-Live (TTL) values, and serves subsequent identical queries from the cache.


title: HISTORY
content:
The concept of kernel keyrings in Linux has existed for a long time, providing a secure place for storing various kinds of data. The <b>dns_resolver</b> key type was introduced to leverage this existing infrastructure for efficient and secure DNS caching. Its development is tied to the evolution of kernel keyrings and efforts to improve system-wide DNS resolution performance and integrity, often in conjunction with projects like <b>systemd</b> to provide a comprehensive resolution service.


title: PARAMETERS
content:
<b>--agents <list></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify which agents to start and manage (e.g., 'ssh', 'gpg', 'all').<br><br><b>--eval</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print shell commands to set up the agent environment variables for the current session.<br><br><b>--clear</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove old agent files before starting new ones, effectively resetting the agent.<br><br><b>--confirm</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Require user confirmation (via x11-ssh-askpass) before allowing new SSH connections.<br><br><b>--timeout <minutes></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a timeout in minutes for passphrase caching by the agent.<br><br><b>--quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress verbose startup messages from keychain.<br><br><b>--shell <shell></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly specify the shell type (e.g., 'sh', 'csh', 'fish') for correct output formatting.<br><br><b>[keys...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more SSH/GPG key files to load into the agent(s). Defaults to ~/.ssh/id_rsa, ~/.ssh/id_dsa, etc.<br><br>


title: DESCRIPTION
content:
<b>keychain</b> is a utility that manages <I>ssh-agent</I> and <I>gpg-agent</I> instances persistently across login sessions. It ensures that your SSH keys and GPG keys are loaded automatically without needing to enter passphrases repeatedly for each new terminal or graphical login.<br><br>When you first log in, <I>keychain</I> starts <I>ssh-agent</I> and/or <I>gpg-agent</I> if they are not already running, and stores their environment variables (like <I>SSH_AUTH_SOCK</I> and <I>SSH_AGENT_PID</I>) in files. Subsequent login sessions then read these files, allowing all your sessions to share a single, long-running agent instance. This approach significantly enhances convenience by eliminating redundant passphrase entries and improves security by preventing multiple, short-lived agent processes. It can automatically add default keys or specified keys to the agent, providing a seamless and secure experience for managing cryptographic keys.


title: CAVEATS
content:
<b>Security Implications:</b> While convenient, <I>keychain</I> causes your decrypted keys to remain in memory for extended periods within the agent process. If an attacker gains root access or exploits a memory vulnerability, they could potentially extract your keys.<br><b>Shared Sessions:</b> All your sessions sharing a single agent means that if one session is compromised, the keys loaded into the agent could be exposed to the attacker through that session.<br><b>Proper Setup:</b> Incorrect integration into shell startup files (<I>~/.bashrc</I>, <I>~/.zshrc</I>) can lead to agents not starting correctly or environment variables not being set, diminishing its intended benefits.


title: TYPICAL INTEGRATION
content:
Users typically integrate <I>keychain</I> into their shell startup files, such as <I>~/.bashrc</I> or <I>~/.zshrc</I>, to ensure it runs automatically upon every new shell session. A common pattern involves:<br><br><I>eval `keychain --agents ssh --eval`</I><br><br>This command runs <I>keychain</I>, which then outputs shell commands to set up the necessary environment variables. The <I>eval</I> command executes these, connecting the current session to the persistent <I>ssh-agent</I> (and potentially <I>gpg-agent</I> if specified). If keys need to be added, they can be listed after options, e.g., <I>keychain id_rsa</I>. The first time a session connects, you might be prompted for passphrases, which are then cached by the agent.


title: HISTORY
content:
<b>keychain</b> was created by <I>Dwayne C. Litzenberger</I> to simplify the management of <I>ssh-agent</I> by providing a more robust and user-friendly wrapper. Its primary goal was to ensure agent persistence across multiple login sessions without manual intervention, a common challenge with raw <I>ssh-agent</I> usage. Over time, it evolved to also support <I>gpg-agent</I> and gained widespread adoption as a de-facto standard tool for persistent key management on Unix-like systems, solving the repetitive passphrase entry problem for many users.


title: PARAMETERS
content:
<b><B>add</B> <I>type</I> <I>description</I> <I>data</I> <I>keyring</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a new key of the specified type and description with provided data to a target keyring.<br><br><b><B>padd</B> <I>type</I> <I>description</I> <I>keyring</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a key, similar to 'add', but reads the key data from standard input.<br><br><b><B>link</B> <I>key</I> <I>keyring</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Links an existing key, identified by its ID, to a specified keyring.<br><br><b><B>unlink</B> <I>key</I> <I>keyring</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unlinks a key from a keyring. The key is destroyed if it loses all its links.<br><br><b><B>show</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the IDs and descriptions of the keys in the current process's keyrings.<br><br><b><B>list</B> <I>keyring</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the keys contained within a specified keyring.<br><br><b><B>read</B> <I>key</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads and displays the data associated with a specified key. Requires read permission on the key.<br><br><b><B>revoke</B> <I>key</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Revokes a key, immediately making it unusable and eventually destroying it.<br><br><b><B>chown</B> <I>key</I> <I>uid</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the owner of a key to the specified user ID.<br><br><b><B>chgrp</B> <I>key</I> <I>gid</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the group of a key to the specified group ID.<br><br><b><B>setperm</B> <I>key</I> <I>permissions</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the access permissions mask for a key. Permissions are octal values.<br><br><b><B>session</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the ID of the current process's session keyring. Can also set a new session keyring.<br><br><b><B>new_session</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new session keyring for the current process and makes it the default session keyring.<br><br><b><B>search</B> <I>keyring</I> <I>type</I> <I>description</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for a key with a specific type and description within a keyring tree.<br><br><b><B>update</B> <I>key</I> <I>data</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Updates the data payload of an existing key. Key type must support updates.<br><br><b><B>-h</B>, <B>--help</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief usage message and exits.<br><br><b><B>-V</B>, <B>--version</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br>


title: DESCRIPTION
content:
<I>keyctl</I> is a utility program for controlling the Linux kernel's key management facility. This facility allows applications to securely store, manage, and share various types of cryptographic keys, authentication tokens, and other security-related data within the kernel. It provides a robust mechanism for managing keys that can be inherited by child processes, linked to various keyrings (e.g., process, thread, session, user-specific), and restricted by permissions and timeouts. Common operations performed by <I>keyctl</I> include adding new keys, linking them to keyrings, unlinking keys, revoking them, displaying key information, and manipulating key permissions and ownership. The key management facility is critical for features like disk encryption (e.g., fscrypt), authenticated communication, and secure credential storage, ensuring keys are handled securely in kernel space, isolated from user-space processes unless explicitly accessed.


title: CAVEATS
content:
<ul><li><b>Permissions</b>: Manipulating keys often requires specific permissions (read, write, search, link, setattr) on the keys and keyrings involved. Incorrect permissions can lead to operation failures or security vulnerabilities.</li><li><b>Key Lifetimes</b>: Keys can have explicit timeouts or can be implicitly destroyed when no longer linked to any keyring or when their owning process exits (for process-specific keyrings). Understanding key lifetimes is crucial to avoid unexpected key expiry or lingering keys.</li><li><b>Security Implications</b>: Storing sensitive data in the kernel key management facility is generally more secure than user-space, but mishandling <I>keyctl</I> can expose credentials. Always use with caution and follow security best practices.</li><li><b>Kernel Support</b>: The key management facility and <I>keyctl</I> commands depend on kernel support, which is generally available in modern Linux distributions. Older kernels might have limited functionality.</li></ul>


title: KEY TYPES
content:
The key management facility supports various key types, such as 'user' for arbitrary data, 'logon' for authentication tokens, 'trusted' and 'encrypted' for cryptographic keys, and 'keyring' for key collections. Each type has specific properties and behaviors.


title: KEYRING TYPES
content:
Linux provides different types of keyrings: 'process' (inherited by children, destroyed on process exit), 'thread' (specific to a thread), 'session' (specific to a login session, inherited by all processes in the session), 'user' (user-specific, persistent across sessions), and 'user_session' (a user-specific session keyring). Understanding which keyring to use is crucial for key visibility and lifetime.


title: KEY PERMISSIONS
content:
Keys and keyrings have permission masks similar to file permissions (read, write, execute), but with additional key-specific permissions (search, link, setattr). These permissions determine who can access, modify, or link keys.


title: HISTORY
content:
The Linux kernel key management facility was introduced by David Howells, with significant development and refinement over time. It was designed to provide a secure and robust mechanism for managing keys and credentials within the kernel, addressing a gap in earlier Linux versions. The <I>keyctl</I> utility was developed as the primary user-space interface to interact with this kernel subsystem, evolving alongside it to support new key types and functionalities. Its usage has grown steadily with the increasing adoption of features like disk encryption (<I>fscrypt</I>, <I>dm-crypt</I>), network authentication, and secure daemon operations that rely on kernel-managed credentials.


title: PARAMETERS
content:
<b>--config <FILE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative configuration file path to load instead of the default.<br><br><b>--fg</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run <i>keyd</i> in the foreground; do not detach from the terminal. Useful for debugging purposes.<br><br><b>--loglevel <LEVEL></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the logging verbosity level for <i>keyd</i>. Common levels include <b>debug</b>, <b>info</b>, <b>warn</b>, and <b>error</b>.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display <i>keyd</i>'s version information and exit.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a brief help message outlining command-line options and exit.<br><br>


title: DESCRIPTION
content:
<i>keyd</i> is a userspace daemon for Linux that provides powerful and flexible key remapping capabilities, including mouse buttons. It operates by creating virtual input devices using the <i>uinput</i> kernel module, allowing it to intercept and remap key events at a low level, independent of the display server. This makes it compatible with both X11 and Wayland environments, addressing a common limitation of older remapping tools. Users define custom key bindings, layers, and macros through a declarative configuration file, typically <i>/etc/keyd/default.conf</i>. <i>keyd</i> supports features like per-application keymaps, sticky layers, and complex macro sequences, enabling highly customized keyboard layouts and shortcuts far beyond standard system settings. It aims to offer a robust, simple, and performant alternative for advanced keyboard customization on Linux.


title: CAVEATS
content:
<i>keyd</i> requires the <i>uinput</i> kernel module to be loaded. It typically needs root privileges to start the daemon due to its interaction with input devices. It may conflict with other low-level keyboard remapping utilities or input device handlers if not configured carefully.


title: CONFIGURATION FILE
content:
<i>keyd</i> operates based on a declarative configuration file, typically located at <i>/etc/keyd/default.conf</i> or <i>~/.config/keyd/default.conf</i>. This file uses a simple, human-readable syntax to define key remappings, layers, macros, and application-specific rules. Users define layers (e.g., '<i>main</i>', '<i>fn</i>', '<i>media</i>') and specify how keys behave within each layer or when certain applications are focused.


title: CROSS-DESKTOP COMPATIBILITY
content:
A significant advantage of <i>keyd</i> is its compatibility with both X11 and Wayland display servers. Unlike many older key remapping tools that are X11-specific, <i>keyd</i> operates at a lower level using the <i>evdev</i> and <i>uinput</i> kernel interfaces, allowing it to function seamlessly across modern Linux desktop environments without reliance on display server-specific APIs.


title: HISTORY
content:
<i>keyd</i> is a relatively modern, open-source project developed to provide a robust and flexible solution for advanced keyboard remapping on Linux. It emerged to address limitations of older X11-specific tools, particularly the lack of Wayland compatibility and advanced features like key layering and application-specific rules. Its design emphasizes simplicity, performance, and cross-desktop environment functionality, quickly gaining traction among users seeking highly customized keyboard workflows.


title: SYNOPSIS
content:
<b>keytool</b> <I>-<command_option></I> <I>[arguments]</I><br><br>Examples:<br>  <b>keytool</b> <I>-genkeypair</I> <I>-alias</I> <I>mycert</I> <I>-keystore</I> <I>mykeystore.jks</I> <br>  <b>keytool</b> <I>-importcert</I> <I>-file</I> <I>server.crt</I> <I>-alias</I> <I>server_cert</I> <I>-keystore</I> <I>mykeystore.jks</I><br>  <b>keytool</b> <I>-list</I> <I>-keystore</I> <I>mykeystore.jks</I>


title: PARAMETERS
content:
<b><I>-genkeypair</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a public/private key pair and wraps the public key into an X.509 v3 self-signed certificate. Stores both in the keystore as a single entry.<br><br><b><I>-importcert</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Imports a certificate or certificate chain from a file into the keystore. Can be used for root CAs or server certificates.<br><br><b><I>-exportcert</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exports a certificate from the keystore into a file, typically for sharing or backup purposes.<br><br><b><I>-list</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists entries (key pairs and trusted certificates) in a keystore. Use <i>-v</i> for verbose output.<br><br><b><I>-delete</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes an entry identified by its alias from the keystore.<br><br><b><I>-changealias</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the alias of an existing entry in the keystore.<br><br><b><I>-keypasswd</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the password for a private key within the keystore. Note that this is different from the keystore's overall password.<br><br><b><I>-storepasswd</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the password used to protect the integrity of the entire keystore.<br><br><b><I>-printcert</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads and prints the contents of a certificate file (e.g., .cer, .crt) without importing it into a keystore.<br><br><b><I>-keystore</I> <I>&lt;path&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the keystore file to be used. If not specified, defaults to <i>${user.home}/.keystore</i>.<br><br><b><I>-storepass</I> <I>&lt;password&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the password for accessing the keystore. It's best practice to omit this and be prompted for security.<br><br><b><I>-alias</I> <I>&lt;name&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the alias (a unique name) of the entry within the keystore to operate on.<br><br><b><I>-file</I> <I>&lt;path&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the input or output file for certificate operations (e.g., for import or export).<br><br><b><I>-dname</I> <I>&lt;name&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Distinguished Name (DN) for the subject of a certificate when generating a new key pair (e.g., 'CN=MyName, OU=MyOrgUnit, O=MyOrg, L=MyCity, ST=MyState, C=MyCountry').<br><br><b><I>-keyalg</I> <I>&lt;algorithm&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the algorithm to use for key pair generation (e.g., <i>RSA</i>, <i>DSA</i>, <i>EC</i>).<br><br><b><I>-keysize</I> <I>&lt;size&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the size of the generated key in bits (e.g., <i>2048</i>, <i>4096</i> for RSA).<br><br><b><I>-validity</I> <I>&lt;days&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the validity period in days for self-signed certificates. Defaults to 90 days.<br><br><b><I>-storetype</I> <I>&lt;type&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the type of keystore (e.g., <i>JKS</i>, <i>PKCS12</i>). PKCS12 is often recommended for interoperability.<br><br><b><I>-v</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information during operations.<br><br>


title: DESCRIPTION
content:
The <b>keytool</b> command is a Java utility used to manage keystores, which are repositories for cryptographic keys (private keys, public keys, secret keys) and X.509 certificate chains. It is an essential component of the Java Development Kit (JDK) and plays a crucial role in enabling secure communication (e.g., SSL/TLS), code signing, and authentication for Java applications. <br><br><b>keytool</b> allows users to perform various operations such as generating key pairs, importing and exporting certificates, listing the contents of a keystore, changing passwords, and deleting entries. It supports different keystore formats, most commonly JKS (Java KeyStore) and PKCS12.


title: CAVEATS
content:
<b>keytool</b> operations require careful handling of passwords and file permissions to maintain security. Mismanagement of keystore files or forgotten passwords can lead to inaccessible keys or security vulnerabilities. The command's complexity, owing to numerous options and specific argument formats, necessitates precise syntax for correct execution. Ensure a compatible Java Development Kit (JDK) is installed and configured in your system's PATH environment variable for <b>keytool</b> to be found.


title: KEYSTORE TYPES
content:
<b>keytool</b> primarily supports two keystore types: <I>JKS</I> (Java KeyStore), which was the default and Java-specific, and <I>PKCS12</I>, an industry-standard format recommended for its interoperability with other security tools and systems (e.g., OpenSSL, web browsers). When creating a new keystore, it's generally advised to use the <b>-storetype PKCS12</b> option for broader compatibility and future-proofing.


title: DISTINGUISHED NAME (DN)
content:
The Distinguished Name is a unique identifier for an entity (e.g., a server, an individual, an organization) in an X.509 certificate. It's composed of a sequence of attribute-value pairs, such as <I>Common Name (CN)</I>, <I>Organizational Unit (OU)</I>, <I>Organization (O)</I>, <I>Locality (L)</I>, <I>State (ST)</I>, and <I>Country (C)</I>. When generating a key pair with <b>keytool</b>, you will typically be prompted to provide these details to form the DN of the self-signed certificate's subject.


title: HISTORY
content:
<b>keytool</b> has been an integral part of the Java Development Kit (JDK) since its early versions (roughly JDK 1.2 or 1.3), developed by Sun Microsystems (now Oracle). It was created to provide a native Java utility for managing cryptographic keys and certificates, thereby supporting secure coding practices and network communication directly within the Java ecosystem. Its development has mirrored the evolution of Java's security architecture, consistently serving as the primary command-line interface for keystore management and certificate operations in Java environments.


title: SYNOPSIS
content:
<b>khal</b> [<i>OPTIONS</i>] <i>COMMAND</i> [<i>ARGS...</i>]<br><br><i>Example:</i><br><b>khal interactive</b><br><b>khal list --today</b><br><b>khal new '2023-10-27 10:00 Meeting with John'</b>


title: PARAMETERS
content:
<b><b>--config</b> <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative configuration file to use.<br><br><b><b>--logfile</b> <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs log messages to the specified file.<br><br><b><b>--log-level</b> <i>LEVEL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the verbosity level for logging messages (e.g., DEBUG, INFO, WARNING, ERROR).<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the installed <i>khal</i> version and exits.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows general help message or help for a specific subcommand.<br><br>


title: DESCRIPTION
content:
<i>khal</i> is a robust and highly configurable command-line calendar program. It provides a comprehensive interface for managing events and todos directly from the terminal, making it an excellent choice for users who prefer a minimalist workflow or operate in server environments. Designed to work in conjunction with <i>vdirsyncer</i>, <i>khal</i> can synchronize calendars from various sources, including online services like Google Calendar or Nextcloud, by leveraging the ical standard.<br><br>Users can interact with <i>khal</i> through its curses-based graphical user interface by running <b>khal interactive</b>, offering a familiar calendar view and intuitive navigation. Alternatively, <i>khal</i> provides a rich set of subcommands for scripting and direct command-line operations, such as <b>khal list</b> to display upcoming events, <b>khal new</b> to create new appointments, <b>khal import</b> for importing ical files, and <b>khal search</b> to find specific entries. Its flexibility allows for precise control over calendar data, including support for recurring events and multiple calendars, making it a powerful tool for efficient personal and professional scheduling without leaving the command line.


title: CAVEATS
content:
Requires external synchronization tools like <i>vdirsyncer</i> for syncing with remote calendar services. Initial configuration can be complex, involving setting up paths to calendar directories and defining collection properties.


title: SUBCOMMANDS AND FUNCTIONALITY
content:
<i>khal</i>'s core functionality is accessed via a variety of subcommands, each designed for a specific task. Common subcommands include <b>interactive</b> for the ncurses-based UI, <b>list</b> for viewing events, <b>new</b> for creating events, <b>import</b> for ical files, <b>search</b> for querying, and <b>delete</b> or <b>edit</b> for managing existing entries. Each subcommand often has its own set of specific options to tailor its behavior.


title: CONFIGURATION
content:
<i>khal</i> is highly configurable through its configuration file, typically located at <b>~/.config/khal/config</b>. This file defines calendar collections, display formats, keybindings, and other preferences, allowing users to customize <i>khal</i> extensively to fit their workflow.


title: HISTORY
content:
<i>khal</i> is a modern command-line calendar program developed primarily by geier.sued@gmail.com and schmitt.robin@gmail.com. It emerged to fill the need for a robust, feature-rich calendar client that integrates seamlessly with text-based environments and the <i>vdirsyncer</i> synchronization tool. Its development is active, with continuous improvements and feature additions, making it a popular choice in the FOSS community for terminal-centric calendar management.


title: SYNOPSIS
content:
<b>kill</b> [<i>options</i>] &lt;<i>pid</i>&gt; ...<br><b>kill</b> -s &lt;<i>signal</i>&gt; &lt;<i>pid</i>&gt; ...<br><b>kill</b> -&lt;<i>signal</i>&gt; &lt;<i>pid</i>&gt; ...<br><b>kill</b> -l [<i>signal</i>]


title: PARAMETERS
content:
<b>-s &lt;signal&gt;, --signal &lt;signal&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the signal to send. Can be a signal name (e.g., <b>TERM</b>, <b>KILL</b>, <b>HUP</b>) or a signal number (e.g., 15, 9, 1).<br><br><b>-l, --list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all signal names supported by the system. If a signal number is provided, it will list the corresponding signal name.<br><br><b>-L, --table</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists signal names and their corresponding numbers in a table format, often including default actions.<br><br><b>-&lt;signal&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A shorthand for sending a specific signal by its name or number (e.g., <b>-9</b> for <b>SIGKILL</b>, <b>-TERM</b> for <b>SIGTERM</b>).<br><br><b>--pid</b><br>&nbsp;&nbsp;&nbsp;&nbsp;This is the default mode; arguments are interpreted as Process IDs (PIDs).<br><br><b>--pgid</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operates on Process Group IDs instead of PIDs. Sends the signal to all processes within the specified process group.<br><br><b>--user &lt;user&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operates on processes owned by the specified user. This is a non-standard extension found in some `kill` implementations (e.g., `procps-ng`).<br><br><b>--comm &lt;command&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operates on processes whose command name matches the argument. This is a non-standard extension, typically found in `pkill` but sometimes in `kill` implementations.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides more verbose output, detailing the signal sent and target processes. This is a non-standard extension.<br><br>


title: DESCRIPTION
content:
The `kill` command is a fundamental Unix/Linux utility used to send signals to processes. A signal is a software interrupt sent to a process, indicating an event has occurred. By default, `kill` sends the <b>SIGTERM</b> (Terminate) signal (signal number 15), which politely asks a process to shut down, allowing it to perform cleanup tasks like saving data and closing files. If a process does not respond to <b>SIGTERM</b> or is misbehaving, the <b>SIGKILL</b> (Kill) signal (signal number 9) can be used. <b>SIGKILL</b> is an unblockable, uncatchable signal that forces the immediate termination of a process, without allowing it to perform any cleanup. Processes are typically identified by their <i>Process ID</i> (PID). The `kill` command is often implemented as a shell built-in for efficiency and is essential for system administration, managing misbehaving applications, or freeing up resources.


title: CAVEATS
content:
<b>Permissions:</b> You can only send signals to processes that you own, or if you are the root user.<br><b>SIGKILL (9):</b> This signal cannot be caught, ignored, or blocked by the target process, ensuring immediate and forceful termination. Use it as a last resort, as it prevents the process from performing any cleanup.<br><b>SIGTERM (15):</b> This is the preferred signal for graceful shutdown, allowing the process to clean up resources before exiting.<br><b>Shell Built-in vs. /bin/kill:</b> The `kill` command is often a shell built-in (e.g., in Bash, Zsh) which may have slightly different options or behaviors than the standalone `/bin/kill` utility. The shell built-in usually takes precedence for efficiency.


title: COMMON SIGNALS
content:
Beyond <b>SIGTERM</b> and <b>SIGKILL</b>, several other signals are commonly used:<br><b>SIGTERM</b> (15): The default, polite request to terminate. The process can catch this and perform cleanup.<br><b>SIGKILL</b> (9): Forceful termination. The process cannot ignore or block this signal.<br><b>SIGHUP</b> (1): 'Hang up'. Often used to instruct daemon processes to re-read their configuration files without restarting.<br><b>SIGINT</b> (2): Interrupt from keyboard, typically sent by Ctrl+C.<br><b>SIGSTOP</b> (19 or 23): Stops a process without killing it. The process is paused.<br><b>SIGCONT</b> (18 or 25): Resumes a stopped process.


title: GRACEFUL VS. FORCEFUL TERMINATION
content:
Understanding the difference is crucial:<br><b>Graceful Termination (e.g., with SIGTERM):</b> This allows the process to catch the signal, close open files, save unsaved data, release locks, and exit cleanly. It's the preferred method to prevent data loss or corruption.<br><b>Forceful Termination (e.g., with SIGKILL):</b> This abruptly stops the process without any opportunity for cleanup. While effective for unresponsive processes, it can leave behind temporary files, corrupted data, or orphaned resources, as the process cannot perform its normal shutdown routines.


title: HISTORY
content:
The `kill` command has been a part of Unix since its earliest versions, making it one of the most fundamental tools for process management. Its initial purpose was simple: to send a specified signal to a process identified by its PID. Given its crucial role in system control, especially for stopping misbehaving processes or gracefully shutting down services, `kill` was quickly implemented as a shell built-in in various Unix shells (like `sh`, `csh`, and later `bash`). This ensures that the command is always available and can be executed quickly without needing to fork a new process, even in low-resource or critical system states. While the core functionality has remained consistent, later utilities like `pkill` and `killall` were developed to extend signal sending capabilities, allowing users to target processes based on names, users, or other attributes, thereby simplifying common process management tasks.


title: SYNOPSIS
content:
<b>killall</b> [<i>-V</i> | <i>--version</i> | <i>-q</i> | <i>--quiet</i>] <br><b>killall</b> [<i>-g</i> | <i>--process-group</i>] [<i>-i</i> | <i>--interactive</i>] [<i>-o</i> | <i>--older-than</i> <i>TIME</i>] [<i>-p</i> | <i>--pid</i> <i>PID</i>] [<i>-r</i> | <i>--regexp</i>] [<i>-s</i> | <i>--signal</i> <i>SIGNAL</i>] [<i>-u</i> | <i>--user</i> <i>USER</i>] [<i>-w</i> | <i>--wait</i>] [<i>-y</i> | <i>--younger-than</i> <i>TIME</i>] [<i>-e</i> | <i>--exact</i>] [<i>-l</i> | <i>--list-signals</i>] [<i>-v</i> | <i>--verbose</i>] <br><i>process_name</i> [...]


title: PARAMETERS
content:
<b>-e, --exact</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Require an exact match for the process name. No partial matches are allowed.<br><br><b>-g, --process-group</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Kill the process group ID to which the process belongs, rather than just the process itself.<br><br><b>-i, --interactive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interactively confirm before killing processes. Useful for preventing accidental shutdowns.<br><br><b>-o, --older-than TIME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Kill only processes that are older than the specified <i>TIME</i>. <i>TIME</i> can be in minutes, hours, days, weeks, months, or years (e.g., '1h', '2d').<br><br><b>-p, --pid PID</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Kill only processes whose process ID (PID) matches the given <i>PID</i>. This option restricts killing to a specific instance.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress warnings if no processes are found to be killed. Useful in scripts.<br><br><b>-r, --regexp</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret the process name as a POSIX Extended Regular Expression, allowing more flexible pattern matching.<br><br><b>-s, --signal SIGNAL</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Send a specified signal (e.g., KILL, TERM, HUP) instead of the default SIGTERM. Signals can be specified by name or number.<br><br><b>-u, --user USER</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Kill only processes owned by the specified <i>USER</i>. Can be a username or UID.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Report whether the signal was successfully sent to processes. Provides more detailed output.<br><br><b>-w, --wait</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Wait for all killed processes to actually die. This is useful in scripts that need to ensure processes are gone before proceeding.<br><br><b>-y, --younger-than TIME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Kill only processes that are younger than the specified <i>TIME</i>. Similar to <i>--older-than</i>.<br><br>


title: DESCRIPTION
content:
The <b>killall</b> command on Linux is used to terminate running processes by their name, rather than by their Process ID (PID). It sends a specified signal (by default, SIGTERM) to all processes whose executable name matches the provided argument. This makes it particularly useful for easily shutting down all instances of a specific application or service, for example, all instances of 'firefox' or 'apache'. <br><br>Unlike the traditional <b>kill</b> command which requires PIDs, <b>killall</b> simplifies process management by allowing users to target processes directly by their descriptive name. It's an efficient tool for system administrators and users alike to manage multiple instances of processes quickly and effectively.


title: CAVEATS
content:
The most significant caveat of <b>killall</b> concerns its behavior across different Unix-like systems. On <I>Linux</I>, <b>killall</b> specifically terminates processes by their name. However, on some <I>Solaris</I> and <I>System V</I> Unix systems, <b>killall</b> without any arguments means to kill <i>all</i> processes that the current user has permission to kill, which is a highly destructive and dangerous operation, especially for root. Users should always be aware of the system they are on when using this command.<br><br>Additionally, processes might respawn if managed by a system service (e.g., systemd, init, supervisord), so killing them with <b>killall</b> might only be a temporary solution unless the service itself is stopped or reconfigured. Care must be taken to ensure the correct process names are targeted to avoid unintended system instability.


title: SIGNALS
content:
Processes respond to various signals, and <b>killall</b> by default sends SIGTERM (15), which is a polite request for a process to terminate. Processes can catch and handle SIGTERM, allowing them to perform cleanup before exiting. If a process does not respond to SIGTERM, a more forceful signal like SIGKILL (9) can be sent using <i>-s KILL</i>. SIGKILL cannot be caught or ignored by processes, ensuring termination but preventing any graceful shutdown procedures.<br><br>Other common signals include SIGHUP (1), often used to tell daemons to reload their configuration, and SIGINT (2), typically sent by pressing Ctrl+C.


title: HISTORY
content:
The <b>killall</b> command has a somewhat contentious history due to its differing implementations across various Unix-like operating systems. While the Linux version (part of the <b>psmisc</b> package) is designed to kill processes by name, its System V and Solaris counterparts historically lacked this name-based filtering and instead were designed to kill all processes. This difference led to many system administrators accidentally wiping out entire systems when migrating from Linux to other Unix variants without realizing the distinction.<br><br>The Linux implementation was developed to provide a convenient and safer alternative for mass process termination compared to manually finding PIDs with <b>ps</b> and then using <b>kill</b>. Its evolution has focused on providing robust and flexible options for targeted process management.


title: PARAMETERS
content:
<b>-<I>signal</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the signal to send to the processes. This can be a signal name (e.g., TERM, HUP, KILL) or a signal number (e.g., 15, 1, 9). If no signal is specified, SIGTERM (signal 15) is sent by default. For example, <b>killall5 -HUP</b> sends SIGHUP.<br><br>


title: DESCRIPTION
content:
<b>killall5</b> is a utility traditionally part of the System V (SysV) init system, primarily used during system shutdown or runlevel changes.<br><br>Unlike the more common <b>killall</b> command which terminates processes by name, <b>killall5</b> is designed to send a specified signal to <i>virtually all processes running on the system</i>, with the notable exceptions of the <b>init</b> process, processes on the console, and processes of the current session or login. This makes it a powerful and potentially destructive command if misused, as it performs a sweeping termination of user and daemon processes.<br><br>Its main purpose is to prepare the system for a clean state, typically by sending a <b>SIGTERM</b> (15) to allow processes to shut down gracefully, followed by a <b>SIGKILL</b> (9) for any stubborn processes that failed to terminate. It is usually invoked by <b>init</b> scripts or the <b>shutdown</b> command as part of the runlevel transition sequence.


