# CommandSection

title: CAVEATS
content:
The actual behavior and available features of <b>sh</b> largely depend on which shell it is symbolically linked to on a given system (e.g., <i>bash</i>, <i>dash</i>, or <i>ksh</i>). Script writers should adhere to POSIX shell standards when targeting <b>sh</b> to ensure maximum portability, as relying on shell-specific extensions (e.g., <i>Bashisms</i>) can lead to unexpected behavior or errors on systems where <b>sh</b> points to a different interpreter.<br><br>Using the <i>-r</i> (restricted shell) option imposes significant limitations on what commands can be executed and paths can be accessed, primarily for security purposes, which can sometimes be misunderstood or bypassed if not configured carefully.


title: SYMBOLIC LINK NATURE
content:
On most modern Linux distributions, <b>sh</b> is not a distinct executable but rather a symbolic link to another shell. For example, on Debian and Ubuntu systems, <b>sh</b> typically links to <b>Dash</b> (<i>/bin/sh -> /bin/dash</i>) due to its smaller size and faster startup, making it ideal for system scripts. On other systems, it might link to <b>Bash</b> (<i>/bin/sh -> /bin/bash</i>). You can check where <b>sh</b> points using the command <i>ls -l /bin/sh</i>.


title: POSIX COMPLIANCE
content:
The primary role of <b>sh</b> in contemporary systems is to provide a shell environment that adheres strictly to the <i>POSIX (Portable Operating System Interface)</i> standard. This compliance ensures that scripts written with <i>#!/bin/sh</i> as their shebang line are highly portable and can run consistently across a wide range of Unix and Linux systems without relying on non-standard features or '<i>Bashisms</i>'.


title: HISTORY
content:
The <b>sh</b> command refers to the Bourne shell, which was developed by <i>Stephen Bourne</i> at Bell Labs and first appeared in <i>Version 7 Unix</i> in 1979. It was designed to replace the earlier Thompson shell, introducing more sophisticated features like control flow constructs, functions, and advanced I/O redirection. The Bourne shell quickly became the standard shell on Unix systems due to its powerful scripting capabilities and efficient execution model.<br><br>Its syntax and features profoundly influenced the development of subsequent Unix shells, including the Korn Shell (<i>ksh</i>) and the Bourne Again SHell (<i>bash</i>). The Bourne shell's design also formed the foundational basis for the <i>POSIX.1-2001</i> and <i>POSIX.1-2008</i> standards for shell command language and utilities, ensuring its legacy as a cornerstone of Unix-like operating systems.


title: PARAMETERS
content:
<b><b>-f</b> <i>CUESHEET</i>, <b>--cue-file</b>=<i>CUESHEET</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <i>CUE sheet</i> file to use for splitting. This option is often crucial for proper operation.<br><br><b><b>-o</b> <i>FORMAT</i>, <b>--output-format</b>=<i>FORMAT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output audio format for the split tracks (e.g., <i>flac</i>, <i>ape</i>, <i>wav</i>, <i>wv</i>, <i>tta</i>).<br><br><b><b>-t</b> <i>TEMPLATE</i>, <b>--output-template</b>=<i>TEMPLATE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the naming convention for the output audio files. Common placeholders include <i>%n</i> (track number), <i>%a</i> (artist), <i>%t</i> (title), <i>%l</i> (album).<br><br><b><b>-A</b>, <b>--tag-audio</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables tagging of the output audio files with metadata extracted from the <i>CUE sheet</i>.<br><br><b><b>-s</b>, <b>--skip-existing</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents overwriting existing output files; files that already exist are skipped.<br><br><b><b>-O</b>, <b>--overwrite</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces overwriting of existing output files with the new split tracks.<br><br><b><b>-D</b>, <b>--delete-source</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes the original source audio file after successful splitting. Use with extreme caution!<br><br><b><b>-c</b>, <b>--cue-track-gap</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treats <i>CUE sheet</i> 'track gap' information as actual audio data during splitting.<br><br><b><b>-n</b>, <b>--cue-no-track-gap</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treats <i>CUE sheet</i> 'track gap' as silence, effectively ignoring its duration in audio calculations.<br><br><b><b>--cue-offset</b>=<i>OFFSET</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Applies a global time offset (e.g., <i>+0.1s</i> or <i>-50ms</i>) to all split points in the <i>CUE sheet</i>.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses most standard output messages, useful for scripting.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the <b>split</b> mode.<br><br>


title: DESCRIPTION
content:
The <b>shntool-split</b> command is a specialized mode within the versatile <i>shntool</i> utility, designed primarily to break down a single, large audio file (often a lossless CD image, like <i>FLAC</i> or <i>APE</i>) into individual tracks. This process is typically driven by a <i>CUE sheet</i>, which provides precise timing information for track boundaries, along with metadata such as track titles, artists, and album details.<br><br>It supports a wide array of lossless audio formats by leveraging external encoders and decoders (e.g., <i>FLAC</i>, <i>APE</i>, <i>WavPack</i>, <i>TTA</i>). <b>shntool-split</b> reads the CUE sheet, determines the exact start and end points for each track, and then extracts these segments, saving them as separate audio files. A key feature is its ability to tag these newly created track files automatically using the information embedded in the CUE sheet, making them easily manageable and playable as individual songs.


title: CAVEATS
content:
<b>shntool-split</b> relies heavily on the accuracy and correctness of the provided <i>CUE sheet</i>. Malformed or incorrect <i>CUE sheets</i> can lead to improper splits or errors. It also depends on external audio tools (like <i>flac</i>, <i>ape</i>, <i>wvunpack</i>, etc.) being installed and accessible in the system's <i>PATH</i>. Users should exercise extreme caution when using the <b>--delete-source</b> option, as it permanently removes the original large audio file.


title: TYPICAL USAGE EXAMPLE
content:
A common use case involves splitting a single <i>FLAC</i> file using a corresponding <i>CUE sheet</i> and outputting individual <i>FLAC</i> tracks with custom filenames:<br><code>shntool split -f my_album.cue -o flac -t '%n - %a - %t' my_album.flac</code>


title: CUE SHEET IMPORTANCE
content:
The <i>CUE sheet</i> is the heart of the splitting process. Ensure it accurately reflects the audio content's structure, including correct track timings and metadata, for optimal results. Errors in the <i>CUE sheet</i> directly translate to errors in the split files or their tags.


title: HISTORY
content:
<b>shntool</b>, including its <b>split</b> mode, has been a staple in the open-source audio community for many years, providing robust command-line capabilities for handling lossless audio files. Its development arose from the need for a versatile, scriptable tool to process high-fidelity audio, especially for tasks like splitting ripped CD images and converting between lossless formats, without relying on graphical user interfaces. It continues to be maintained as a critical utility for audiophiles and archival purposes on Linux and Unix-like systems.


title: PARAMETERS
content:
<b>FIGfont-directory</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more directories to search for <I>FIGfont</I> files. If no directories are specified, <B>showfigfonts</B> searches standard <I>FIGlet</I> font directories (e.g., /usr/share/figlet/fonts, /usr/local/share/figlet/fonts).<br><br>


title: DESCRIPTION
content:
<B>showfigfonts</B> is a utility included with the <I>FIGlet</I> text banner program. Its primary function is to display a comprehensive list of available <I>FIGfont</I> fonts found on your system. For each font, it typically shows the font's filename and a small sample of text rendered using that font. This helps users quickly browse and select fonts for use with <I>figlet</I> without having to manually try each one. It's an invaluable tool for exploring the visual styles offered by different <I>FIGfont</I> files, making font selection efficient for creating ASCII art banners.


title: CAVEATS
content:
<B>showfigfonts</B> specifically lists fonts in the <I>FIGfont</I> format, which are designed for use with the <B>figlet</B> program. It does not list system-wide TrueType, OpenType, or other standard graphical fonts. Its utility is limited to the context of <I>FIGlet</I> and ASCII art generation.


title: OUTPUT FORMAT
content:
For each font found, <B>showfigfonts</B> typically outputs the font's filename, followed by a short sample text (usually its own name or 'showfigfonts') rendered in that specific font. This visual representation is key to its usefulness, allowing immediate preview of the font's style.


title: USAGE WITH FIGLET
content:
Users often run <B>showfigfonts</B> to identify a suitable font and then pass its name (without the .flf extension) to the <B>figlet</B> command using the <B>-f</B> option. For example, after finding a font named 'slant.flf', one might use <B>figlet -f slant "Hello World"</B>.


title: HISTORY
content:
<B>showfigfonts</B> is an integral part of the <I>FIGlet</I> distribution, a program created by Glenn Chappell and Ian Chai in the early 1990s. It has been maintained and updated as part of the <I>FIGlet</I> utilities, providing a consistent way for users to manage and preview the specialized <I>FIGfont</I> files used for generating large text banners from ordinary screen characters. Its design reflects the need for a simple, command-line utility to complement <I>FIGlet</I>'s functionality.


title: SYNOPSIS
content:
To invoke the server, navigate to the directory you wish to serve files from. <br><b>Python 3:</b> <br><i>python -m http.server [port] [--bind ADDRESS]</i> <br><b>Python 2 (Deprecated):</b> <br><i>python -m SimpleHTTPServer [port]</i>


title: PARAMETERS
content:
<b>[port]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional integer specifying the TCP port the server will listen on. Defaults to 8000 if not provided. Choose a port above 1024 to avoid requiring root privileges.<br><br><b>--bind ADDRESS</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Python 3 only)</i> An optional IP address or hostname to bind the server to. Use '0.0.0.0' to bind to all available network interfaces, allowing access from other devices on the network. Use '127.0.0.1' or 'localhost' for local access only.<br><br><b>(Implicit Directory)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The server serves files from the current working directory where the command is executed. To serve a different directory, first use the <i>cd</i> command to navigate into that directory before running the server command.<br><br>


title: DESCRIPTION
content:
The <b>simplehttpserver</b>, typically invoked as <i>python -m http.server</i> in Python 3 (or <i>python -m SimpleHTTPServer</i> in Python 2), provides a minimalistic HTTP web server. It is designed for quickly serving static files from the current directory or a specified path, making it ideal for local development, testing web content, or temporary file sharing within a local network. <br>Unlike robust production web servers like Apache or Nginx, <b>simplehttpserver</b> requires no complex configuration, starting instantly with a single command. It defaults to port 8000 but can be configured to use any available port. While incredibly convenient for quick tasks, it lacks essential security features, performance optimizations, and advanced functionalities required for public-facing or high-traffic applications. Its simplicity is its strength, offering an immediate solution for basic web serving needs.


title: CAVEATS
content:
<b>Not Production Ready:</b> This server is for development and testing only. It lacks security features (like HTTPS, authentication, access control), robustness, and performance necessary for public-facing or high-traffic production environments. <br><b>Security Vulnerabilities:</b> It serves all files in the current directory and its subdirectories without authentication or fine-grained access control. Do not use it in untrusted networks or with sensitive data. <br><b>Single-Threaded:</b> It handles one request at a time, making it unsuitable for concurrent connections or heavy loads. <br><b>Python Dependency:</b> Requires a Python interpreter to be installed on the system.


title: SERVING A SPECIFIC DIRECTORY
content:
To serve files from a directory other than the current one, first use the <i>cd</i> command to change into that directory before executing <i>python -m http.server</i>. The server will then serve content from that new working directory.


title: ACCESSING THE SERVER
content:
Once started, the server is typically accessible via your web browser. If bound to localhost, use <i>http://localhost:8000</i> (or your chosen port). If bound to '0.0.0.0', you can access it from other devices on your local network using your machine's IP address (e.g., <i>http://192.168.1.100:8000</i>). Files will be listed as a directory index unless an <i>index.html</i> (or <i>index.htm</i>) file is present in the served directory.


title: STOPPING THE SERVER
content:
To terminate the server, simply press <i>Ctrl+C</i> in the terminal window where it is running. This sends an interrupt signal to the Python process, causing it to shut down gracefully.


title: HISTORY
content:
The functionality originated in Python 2 as the <i>SimpleHTTPServer</i> module, providing a basic, unconfigured HTTP server within Python's standard library. With the transition to Python 3, it was refactored and renamed to the <i>http.server</i> module, retaining its core simplicity and purpose. Its development focused on offering a quick, built-in solution for local web serving and file sharing without external dependencies, becoming a popular tool for developers and users needing immediate HTTP access to local files.


title: PARAMETERS
content:
<b>-f, --filename <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the Skaffold configuration file (e.g., skaffold.yaml). This file defines the build, test, and deploy steps for your application.<br><br><b>--profile <name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates a named configuration profile defined within your skaffold.yaml, allowing for environment-specific settings (e.g., 'dev', 'staging', 'production').<br><br><b>--default-repo <repo></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a default image repository to use for built images when no full repository is specified in the image name. This helps avoid re-tagging images.<br><br><b>--verbosity <level></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging level for Skaffold output. Common levels include 'info' (default), 'debug', 'warn', 'error', and 'fatal', providing more or less detail in the console output.<br><br><b>--kube-context <context></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overrides the default Kubernetes context from your kubeconfig file. This allows you to target a specific Kubernetes cluster without changing your active context.<br><br><b>--port-forward</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <b>skaffold dev</b> and <b>skaffold run</b>, this flag controls whether Skaffold should automatically forward ports from your Kubernetes pods to your local machine, making services accessible locally.<br><br><b>--watch-mode <mode></b><br>&nbsp;&nbsp;&nbsp;&nbsp;For <b>skaffold dev</b>, specifies how Skaffold watches for file changes. 'poll' (default) periodically checks for changes, while 'event' leverages file system events for faster detection.<br><br>


title: DESCRIPTION
content:
Skaffold is a command-line tool that streamlines and accelerates the development of Kubernetes applications. It automates the entire inner development loop, from building and pushing container images to deploying applications to Kubernetes clusters and watching for source code changes. Skaffold integrates with various build tools (like Docker, Jib, Buildpacks) and deployment methods (like kubectl, Helm, Kustomize). Its flagship command, <b>skaffold dev</b>, provides a continuous feedback loop, automatically rebuilding, redeploying, and even syncing files to a running cluster as code changes, significantly reducing the iteration time for developers. It abstracts away much of the boilerplate Kubernetes configuration and commands, allowing developers to focus more on coding and less on infrastructure details.


title: CAVEATS
content:
Skaffold typically requires a working Kubernetes cluster (local like Minikube/Kind, or remote) and Docker or another compatible container runtime installed and accessible. <br>The <b>skaffold.yaml</b> configuration can become complex for large, multi-service applications, requiring careful management of dependencies and build/deploy pipelines. <br>In continuous development mode (<b>skaffold dev</b>), it can consume significant local system resources, especially with many services or rapid code changes that trigger frequent rebuilds and redeployments.


title: SKAFFOLD COMMANDS OVERVIEW
content:
Skaffold operates through a set of powerful subcommands, each designed for a specific part of the development lifecycle: <br><b>skaffold init</b>: Automatically generates a boilerplate skaffold.yaml configuration based on your project structure.<br><b>skaffold dev</b>: The core continuous development command; builds, deploys, watches for changes, syncs files, and sets up port forwarding.<br><b>skaffold build</b>: Compiles and pushes container images to a registry based on the skaffold.yaml definition.<br><b>skaffold deploy</b>: Deploys your application artifacts to the Kubernetes cluster.<br><b>skaffold run</b>: Executes a full build and deploy pipeline once, then waits for the application to become ready.<br><b>skaffold debug</b>: Enables easy debugging of applications running in Kubernetes, forwarding debug ports.<br><b>skaffold delete</b>: Cleans up the deployed Kubernetes resources associated with your Skaffold project.


title: THE SKAFFOLD.YAML CONFIGURATION FILE
content:
The <b>skaffold.yaml</b> file is the central piece of a Skaffold project. It's a YAML-based manifesto that declares how your application should be built, tested, and deployed to Kubernetes. This file defines:<br><i>Artifacts</i>: Descriptions of your application's container images (e.g., Dockerfiles, Jib configurations).<br><i>Build Strategies</i>: How images are built (e.g., local Docker daemon, Google Cloud Build).<br><i>Test Commands</i>: Commands to run unit or integration tests.<br><i>Deployment Methods</i>: How the application is deployed (e.g., using kubectl manifests, Helm charts, Kustomize overlays).<br><i>Profiles</i>: Environment-specific configurations that can be activated to change build/deploy behavior. Properly configuring this file is fundamental to leveraging Skaffold's full capabilities.


title: HISTORY
content:
Skaffold was developed by Google engineers with the primary goal of simplifying the inner development loop for Kubernetes applications. It was first introduced to the public around 2018, aiming to provide a seamless local development experience that integrates with cloud-native workflows. Over time, it has become a widely adopted tool in the cloud-native ecosystem and is part of the Cloud Native Computing Foundation (CNCF) landscape, reflecting its importance in streamlining Kubernetes development.


title: PARAMETERS
content:
<b><b>-d</b>, <b>--delay</b> <i>&lt;N&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the delay in seconds between updates when running in interactive mode. Default is 3 seconds.<br><br><b><b>-o</b>, <b>--once</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the slab cache information once and then exits, instead of running in interactive mode.<br><br><b><b>-s</b>, <b>--sort</b> <i>&lt;KEY&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sorts the output by the specified <i>KEY</i>. Common keys include 'name', 'active', 'objsize', 'objs' (total objects), and 'slabs' (number of slabs).<br><br><b><b>-r</b>, <b>--reclaim-order</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays information about the reclaim order of the slab caches (less commonly used).<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and exits.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information for <i>slabtop</i> and exits.<br><br>


title: DESCRIPTION
content:
<i>slabtop</i> is a command-line utility that displays real-time information about the Linux kernel's slab caches.<br><br>The kernel uses slab allocation to manage memory for frequently used data structures, which helps reduce fragmentation and overhead. <i>slabtop</i> reads data from <i>/proc/slabinfo</i> and presents it in an easy-to-read, interactive format, similar to <i>top</i>. It shows details such as the number of active objects, total objects, object size, and memory consumed by each slab cache.<br><br>This tool is invaluable for system administrators and kernel developers to identify memory leaks, understand kernel memory usage patterns, and debug performance issues related to kernel memory allocation.


title: CAVEATS
content:
<i>slabtop</i> typically requires root privileges (or `sudo`) to access the <i>/proc/slabinfo</i> file and display kernel slab information.<br><br>The output columns and available sort keys might slightly vary depending on the Linux kernel version and the version of the <i>slabtop</i> utility itself.<br><br>Interpreting the output effectively requires some understanding of kernel memory management and slab allocation concepts.


title: OUTPUT INTERPRETATION
content:
When <i>slabtop</i> runs, it displays several columns of data for each slab cache:<br><b>Cache</b>: The name of the slab cache.<br><b>Objs</b>: Total number of objects currently allocated in this cache.<br><b>Active</b>: Number of objects that are currently in use.<br><b>Objsize</b>: The size of each object (in bytes) within this cache.<br><b>Slabs</b>: The number of slabs (contiguous memory blocks) that make up this cache.<br><b>Obj/Slab</b>: The number of objects that fit into a single slab.<br><b>Total</b>: The total memory (in KB or MB) consumed by the cache (Objects * Object Size).


title: HISTORY
content:
<i>slabtop</i> is part of the <i>procps-ng</i> suite of utilities, which are standard tools for monitoring and managing Linux system processes and resources. It has been a long-standing utility for system administrators and kernel developers, providing crucial insights into kernel memory usage that complement higher-level memory tools.


title: PARAMETERS
content:
<b><i>//server/share</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The target SMB/CIFS share URL, specifying the server and share name (e.g., <i>//myserver/myshare</i>).<br><br><b><i><target></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the file or directory on the specified share (e.g., <i>/path/to/file.txt</i> or <i>/directory/</i>).<br><br><b><b>-U</b> <i>username</i>[<b>%</b><i>password</i>], <b>--user</b>=<i>username</i>[<b>%</b><i>password</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the username and an optional password for authentication to the Samba server.<br><br><b><b>-W</b> <i>workgroup</i>, <b>--workgroup</b>=<i>workgroup</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the workgroup or domain to authenticate against when connecting to the server.<br><br><b><b>-N</b>, <b>--no-pass</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the password prompt, useful for scripting when no password is required or provided through other means.<br><br><b><b>-A</b> <i>ACL_expression</i>, <b>--add</b>=<i>ACL_expression</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds an Access Control Entry (ACE) to the existing ACL. The <i>ACL_expression</i> defines the permissions to add.<br><br><b><b>-M</b> <i>ACL_expression</i>, <b>--modify</b>=<i>ACL_expression</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Modifies an existing Access Control Entry (ACE) in the ACL. The <i>ACL_expression</i> specifies the entry to modify.<br><br><b><b>-D</b> <i>ACL_expression</i>, <b>--delete</b>=<i>ACL_expression</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes an Access Control Entry (ACE) from the ACL. Specify the exact <i>ACL_expression</i> to remove.<br><br><b><b>-S</b> <i>ACL_expression</i>, <b>--set</b>=<i>ACL_expression</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets (replaces) all existing ACL entries on the target with the specified <i>ACL_expression</i>. This command is destructive and removes all previous ACLs.<br><br><b><b>-C</b> <i>owner</i>, <b>--chown</b>=<i>owner</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the owner of the specified file or directory to the given Windows SID or user name.<br><br><b><b>-O</b> <i>group</i>, <b>--chgrp</b>=<i>group</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the primary group of the specified file or directory to the given Windows SID or group name.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of output, providing more detailed information about operations.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and exits.<br><br>


title: DESCRIPTION
content:
<i>smbcacls</i> is a command-line utility from the Samba suite that allows administrators to view, set, and delete Windows NT-style Access Control Lists (ACLs) on files and directories located on SMB/CIFS network shares. It provides a powerful interface for fine-grained permission management, replicating the functionality of Windows' security tab for networked resources. This tool is essential for environments where granular access control is required over files served by Samba, enabling precise control over who can access, modify, or execute shared resources, mirroring the security model prevalent in Windows-based networks. It directly interacts with the Samba server to manipulate security descriptors over the SMB protocol.


title: CAVEATS
content:
Using the <b>-S</b> (set) option is a highly destructive operation as it overwrites all existing ACLs on the target, potentially removing crucial permissions; use with extreme caution.<br>Effective use of <i>smbcacls</i> requires a solid understanding of Windows NT-style ACL syntax and how permissions are inherited and applied.<br>The underlying file system on the Samba server must support storing or mapping NT ACLs (e.g., certain Linux filesystems with extended attributes or specific Samba VFS modules) for ACL changes to be persistent and meaningful.


title: ACL EXPRESSION SYNTAX
content:
The <i>ACL_expression</i> used with options like <b>-A</b>, <b>-M</b>, <b>-D</b>, and <b>-S</b> follows a specific format for defining Access Control Entries (ACEs). This typically includes the Security Identifier (SID) of the trustee (user or group), the ACE type (e.g., ALLOW or DENY), specific permissions (e.g., 'F' for Full Control, 'R' for Read), and inheritance flags (e.g., 'CI' for Container Inherit, 'OI' for Object Inherit).<br>For example, '<b>RE:D:(A)(CI)(OI)F</b>' might represent 'Revoke (RE) access for Everyone (D) with full control (F), inheritable to containers (CI) and objects (OI).' Detailed syntax can be found in Samba documentation.


title: SECURITY DESCRIPTORS
content:
<i>smbcacls</i> manipulates Windows NT-style Security Descriptors. These are fundamental data structures that define the security information for securable objects on a Windows system (and by extension, on Samba shares). A Security Descriptor contains information about the object's owner, primary group, a Discretionary Access Control List (DACL), and an optional System Access Control List (SACL). <i>smbcacls</i> primarily works with the DACL portion to manage user and group permissions.


title: HISTORY
content:
<i>smbcacls</i> is an integral part of the Samba project, which began in 1992 to provide SMB/CIFS file and print services for Unix-like systems. As Microsoft Windows NT introduced sophisticated Access Control Lists (ACLs), Samba evolved to support these security features. <i>smbcacls</i> was developed to provide command-line management for these NT ACLs, enabling administrators to manage shared resource permissions from Linux/Unix environments, mirroring the capabilities of Windows security management tools, and extending Samba's interoperability with Windows networks.


title: PARAMETERS
content:
<b>{<i>daemon</i>}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies which Samba daemon(s) to send the command to. Possible values include <i>smbd</i> (for file and print services), <i>nmbd</i> (for NetBIOS name services), or <i>all</i> (to target all running Samba daemons).<br><br><b><i>reload-config</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs the daemon(s) to reload their configuration file (<i>smb.conf</i>) without restarting the service, applying new settings dynamically.<br><br><b><i>shutdown</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates a graceful shutdown of the specified Samba daemon(s).<br><br><b><i>debug</i> [<i>level</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dynamically sets the debug logging level for the daemon. A higher <i>level</i> (e.g., 10) increases verbosity. Omit <i>level</i> to show the current debug level.<br><br><b><i>ping</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends a ping to the daemon to check if it is responsive and running.<br><br><b><i>status</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retrieves and displays general status information about the daemon, such as process IDs, open files, and connected clients.<br><br><b><i>version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of the Samba daemon.<br><br><b><i>kill-client</i> <<i>pid</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Terminates a specific client connection identified by its process ID (PID). This forcefully disconnects the client.<br><br><b><i>close-share</i> <<i>share_name</i>> <<i>pid</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Closes all open files on a specific share for a client identified by its PID. Useful for releasing locked resources without disconnecting the client entirely.<br><br><b><i>tcon-disconnect</i> <<i>tree_id</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disconnects a specific tree connect (TCON) by its unique ID. A TCON represents a client's connection to a particular share or IPC$.<br><br><b><i>force-election</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(<i>nmbd</i> only) Forces the <i>nmbd</i> daemon to initiate a new browse master election process on the network, which can be useful in network browsing troubleshooting.<br><br><b><i>ip-leases</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;(<i>nmbd</i> only) Displays current IP address lease information, relevant when <i>nmbd</i> is operating as a DHCP server or in Active Directory Domain Controller mode.<br><br>


title: DESCRIPTION
content:
<b>smbcontrol</b> is a command-line utility used to send control messages to running Samba daemons, primarily <i>smbd</i> and <i>nmbd</i>. It allows administrators to perform various actions, such as shutting down daemons, reloading configuration files, disconnecting clients, or retrieving status information without needing a full service restart. It communicates with the daemons via a control socket. This tool is invaluable for dynamic management and troubleshooting of active Samba services, providing granular control over their operation and making it an essential utility for Samba administrators.


title: CAVEATS
content:
<b>smbcontrol</b> requires appropriate permissions (typically root or the Samba daemon's user) to send commands. The targeted Samba daemon(s) must be running and accessible via their control sockets (usually in <i>/var/run/samba/</i>) for commands to be successful. Commands affect the running daemon's state and do not modify <i>smb.conf</i> directly.


title: CONTROL SOCKETS
content:
<i>smbcontrol</i> communicates with running Samba daemons via specialized control sockets, typically located in <i>/var/run/samba/</i>. These sockets facilitate secure inter-process communication, allowing <i>smbcontrol</i> to send commands and receive responses from <i>smbd</i> and <i>nmbd</i> without direct process manipulation.


title: USAGE EXAMPLES
content:
<b>Reload smb.conf:</b><br><i>smbcontrol smbd reload-config</i><br><br><b>Kill a client connection (PID 12345):</b><br><i>smbcontrol smbd kill-client 12345</i><br><br><b>Check nmbd status:</b><br><i>smbcontrol nmbd status</i><br><br><b>Set smbd debug level to 5:</b><br><i>smbcontrol smbd debug 5</i>


title: HISTORY
content:
<b>smbcontrol</b> has been an integral component of the Samba suite for many years, evolving alongside the core Samba daemons. Its development has consistently focused on providing administrators with powerful, real-time control over active Samba services. This utility significantly reduces the need for full daemon restarts for routine administrative tasks, enabling dynamic configuration changes and efficient troubleshooting in production environments. It underscores Samba's commitment to robust manageability.


title: SYNOPSIS
content:
<b>socat</b> <i>[options]</i> <address1> <address2><br><br><i><address></i> specifies a data channel type and its parameters (e.g., <i>TCP-LISTEN:port</i>, <i>STDIO</i>, <i>FILE:path</i>, <i>EXEC:command</i>).


title: PARAMETERS
content:
<b><b>-d[d[d]]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the debug level. More 'd's produce more verbose output, useful for troubleshooting.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be verbose. Prints details about data transfer and connection status.<br><br><b><b>-u</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unidirectional mode. Data flow is only from <address1> to <address2>.<br><br><b><b>-L</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loop forever. After a connection ends, restart the listening process for server addresses. Useful for continuously serving clients.<br><br><b><b>-t <timeout></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a timeout for inactivity. If no data is transferred for <timeout> seconds, the connection is closed.<br><br><b><b>-T <timeout></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a total timeout. The connection is closed after <timeout> seconds, regardless of activity.<br><br><b><b>-r <restart-delay></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If a child process (from <i>fork</i> option) terminates, the parent will restart it after <restart-delay> seconds.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Semiclose. After EOF from a peer, shutdown the write direction of the socket rather than closing it completely.<br><br><b><b>-a <address-options></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Applies specific options to the subsequent address. E.g., <i>-a fork</i> makes a new process for each connection; <i>-a reuseaddr</i> allows immediate reuse of local addresses.<br><br>


title: DESCRIPTION
content:
<b>socat</b> (SOcket CAT) is a powerful command-line utility that establishes two bidirectional byte streams and transfers data between them. It can connect almost any kind of data channel (file, pipe, device, a client or server socket, SSL, proxy connections, etc.) to another data channel. <br><br>It functions as a highly flexible 'swiss army knife' for networking, enabling users to create intricate network setups, perform port forwarding, establish simple proxies, debug network services, or even wrap insecure services with SSL/TLS encryption. Its capabilities far exceed those of simpler tools like <b>netcat</b>, offering a comprehensive suite of options for fine-grained control over connections and data flow.


title: CAVEATS
content:
<b>Security Risk:</b> Misconfigured <b>socat</b> instances can create severe security vulnerabilities, exposing services or systems to unauthorized access. <br><b>Complexity:</b> The vast number of options and address types can make <b>socat</b> challenging to master, leading to a steep learning curve. <br><b>Error Handling:</b> Some errors can be cryptic, requiring detailed debugging (with <b>-d</b> options) to diagnose.


title: KEY ADDRESS TYPES
content:
<b>socat</b>'s power comes from its flexible address types:<br><ul><li><b>TCP:<I>host</I>:<I>port</I></b>: Connects to a TCP server.</li><li><b>TCP-LISTEN:<I>port</I></b>: Listens for incoming TCP connections.</li><li><b>UDP:<I>host</I>:<I>port</I></b>: Sends UDP packets to a host.</li><li><b>UDP-LISTEN:<I>port</I></b>: Listens for incoming UDP packets.</li><li><b>UNIX:<I>path</I></b>: Connects to a Unix domain socket.</li><li><b>UNIX-LISTEN:<I>path</I></b>: Listens on a Unix domain socket.</li><li><b>FILE:<I>path</I></b>: Reads from or writes to a file.</li><li><b>STDIO</b>: Standard input/output.</li><li><b>EXEC:<I>command</I></b>: Executes a command and connects to its stdin/stdout.</li><li><b>SSL:<I>host</I>:<I>port</I></b>: Establishes an SSL/TLS connection.</li></ul>


title: TYPICAL USE CASES
content:
<b>Port Forwarding:</b> <code>socat TCP-LISTEN:8080 TCP:127.0.0.1:80</code> (forwards local 8080 to local 80).<br><b>Simple Proxy:</b> <code>socat TCP-LISTEN:8888,fork TCP:www.example.com:80</code> (simple HTTP proxy).<br><b>SSL Wrapper:</b> <code>socat SSL-LISTEN:443,cert=server.pem TCP:127.0.0.1:80</code> (adds SSL to an insecure service).<br><b>Reverse Shell:</b> <code>socat TCP-LISTEN:4444 EXEC:/bin/bash,pty,stderr,setsid,sigint,sane</code> (advanced reverse shell setup).


title: HISTORY
content:
Developed by Gerhard Rieger, <b>socat</b> was first released around 2000. It was designed to address the limitations of simpler tools like <b>netcat</b>, providing a more robust, flexible, and feature-rich solution for connecting diverse data streams, including support for modern protocols like IPv6 and SSL/TLS. It has since become a staple in network administration and security toolkits.


title: PARAMETERS
content:
<b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces a color PPM image output. If this option is not used, the output will be in grayscale.<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces a dithered grayscale PPM image output. This option is incompatible with the <i>-c</i> (color) option.<br><br><b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <i>spctoppm</i> to interpret the input file as a tape-loader (CODE 128 byte) file, overriding automatic detection.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <i>spctoppm</i> to interpret the input file as a snapshot (SCREEN$ or .SCR) file, overriding automatic detection.<br><br><b><i>spectrumfile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the ZX Spectrum screen dump file to be converted. If omitted, <i>spctoppm</i> reads the input from standard input (stdin).<br><br>


title: DESCRIPTION
content:
<i>spctoppm</i> is a specialized utility within the <b>Netpbm</b> suite designed to convert screen dump files originating from the <b>ZX Spectrum</b> home computer into a <b>Portable Pixmap (PPM)</b> image format. It automatically attempts to detect the input file's format, supporting standard, snapshot (SCREEN$ or .SCR), and tape-loader (CODE 128 byte) types. The output PPM image is always 256 pixels wide by 192 pixels high, mirroring the Spectrum's native screen resolution, and includes an appropriate color map. This command is particularly useful for preserving or displaying vintage Spectrum graphics on modern systems.


title: CAVEATS
content:
The <i>-c</i> (color) and <i>-d</i> (dithered) options are mutually exclusive; you can only use one or the other. While <i>spctoppm</i> attempts to automatically detect the input file type, it's recommended to use the <i>-t</i> or <i>-s</i> options if you know the specific format to ensure correct conversion.


title: OUTPUT DIMENSIONS
content:
The resulting PPM image from <i>spctoppm</i> will consistently have dimensions of 256 pixels wide by 192 pixels high, directly corresponding to the original screen resolution of the <b>ZX Spectrum</b>.


title: HISTORY
content:
<i>spctoppm</i> was originally written by Russell Stuart and is an integral part of the comprehensive <b>Netpbm</b> package. Netpbm is a long-standing and widely used toolkit for converting and manipulating graphic image formats, reflecting its role in supporting various niche and historical image formats.


title: SYNOPSIS
content:
<b>spotdl</b> [<i>OPTIONS</i>] [<i>URL_OR_QUERY...</i>]<br><b>spotdl</b> <i>search</i> [<i>OPTIONS</i>] <i>QUERY...</i>


title: PARAMETERS
content:
<b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the help message and exit.<br><br><b>--version, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the program's version number and exit.<br><br><b>--output, -o</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output directory or a template for downloaded files.<br><br><b>--quality, -q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the audio quality for downloads (e.g., '192k', '320k').<br><br><b>--bitrate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the target audio bitrate (e.g., '320k').<br><br><b>--log-level, -L</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the logging level (e.g., 'DEBUG', 'INFO', 'WARNING').<br><br><b>--threads</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of threads to use for parallel downloads.<br><br><b>--ffmpeg, --no-ffmpeg</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the path to FFmpeg executable or disable automatic FFmpeg download.<br><br><b>--save-file</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save the Spotify URLs/queries to a file for later processing.<br><br><b>--load-file</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load Spotify URLs/queries from a previously saved file.<br><br><b>--lyrics</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Embed lyrics into the downloaded audio file if available.<br><br><b>--overwrite, --no-overwrite</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force overwriting existing files or prevent it.<br><br><b>--audio, --video</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Choose to download audio only (default) or video.<br><br><b>--search-query</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a custom search query when looking up songs on YouTube.<br><br><b>--yt-dlp-args</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pass additional arguments directly to the <i>yt-dlp</i> backend.<br><br><b>--config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a custom configuration file.<br><br><b>--exclude-tags</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exclude specific metadata tags from being embedded.<br><br><b>--client-id, --client-secret, --user-auth</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Spotify API credentials for authenticated access, improving reliability.<br><br><b>--preload</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preload data and exit without downloading, useful for checking.<br><br><b>--scan-for-songs</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scan the output directory for songs already downloaded by <b>spotdl</b> and skip them.<br><br>


title: DESCRIPTION
content:
<b>spotdl</b> is a powerful command-line interface (CLI) tool designed to download songs, albums, and playlists directly from Spotify. Unlike typical music downloaders, <b>spotdl</b> intelligently searches for the corresponding audio on YouTube, downloads it using <i>yt-dlp</i> (a robust YouTube downloader), and then processes the audio using <i>ffmpeg</i>. This process includes embedding Spotify's comprehensive metadata, such as album art, artist information, and track details, directly into the downloaded audio file. This ensures high-quality audio files with rich, accurate metadata, making them perfect for offline listening and integration into personal music libraries. <b>spotdl</b> automates the complex task of matching Spotify tracks to YouTube sources, handling various Spotify URLs, and organizing downloaded content efficiently. It offers flexibility through various output formats and quality settings, making it an indispensable tool for music enthusiasts aiming to curate a local collection of their Spotify favorites.


title: CAVEATS
content:
<b>Copyright and Legality:</b> Downloading copyrighted material may be illegal in some jurisdictions. Users are solely responsible for ensuring their usage complies with applicable laws and Spotify's terms of service.<br><b>Reliance on YouTube:</b> <b>spotdl</b> depends on YouTube for audio sources. If a song is unavailable or removed from YouTube, <b>spotdl</b> might fail to find or download it.<br><b>FFmpeg Requirement:</b> <b>spotdl</b> requires <i>ffmpeg</i> for audio processing and metadata embedding. While it often downloads <i>ffmpeg</i> automatically, manual installation may be necessary.<br><b>Spotify API Limits:</b> Extensive use without Spotify API authentication (client ID/secret) may lead to rate limits.


title: METADATA EMBEDDING
content:
<b>spotdl</b> automatically embeds comprehensive metadata from Spotify into the downloaded audio files. This includes track title, artist, album, genre, year, and high-resolution album art, ensuring downloaded files are well-organized and fully functional in music players.


title: URL AND QUERY SUPPORT
content:
<b>spotdl</b> supports various Spotify URLs as input, including individual tracks, full albums, and entire playlists. It also allows direct search queries, intelligently finding and downloading the closest matching song even without a specific Spotify URL.


title: CONFIGURATION FILE
content:
For persistent settings, <b>spotdl</b> supports a configuration file (e.g., in <i>~/.config/spotdl/config.json</i>), allowing users to define default output paths, quality, authentication details, and other preferences without re-typing them for every command.


title: HISTORY
content:
<b>spotdl</b> originated as a Python script designed to simplify the process of downloading Spotify tracks. Its development has been community-driven, focusing on improving the accuracy of Spotify-to-YouTube matching, enhancing metadata embedding, and adding robust features like playlist/album support, concurrent downloads, and a flexible configuration system. Over time, it has evolved from a basic utility to a comprehensive solution for managing local Spotify music libraries, gaining significant popularity due to its ease of use and rich feature set, leveraging powerful backends like <i>yt-dlp</i> and <i>ffmpeg</i>.


title: SYNOPSIS
content:
<b>sqlite3</b> [<i>OPTIONS</i>] [<i>DATABASE_FILE</i>] [<i>SQL_COMMAND</i>]<br><br>Examples:<br>  <b>sqlite3</b> <i>mydatabase.db</i><br>  <b>sqlite3</b> <i>mydatabase.db</i> "<i>SELECT * FROM users;</i>"<br>  <b>sqlite3</b> <i>-batch mydatabase.db</i> ".<i>dump</i>"


title: PARAMETERS
content:
<b><b>-batch</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run in batch mode, suppressing the interactive prompt.<br><br><b><b>-bail</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stop and exit after encountering an error.<br><br><b><b>-column</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set output mode to aligned columns (default for interactive mode).<br><br><b><b>-csv</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set output mode to CSV (Comma Separated Values).<br><br><b><b>-echo</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Echo SQL statements before executing them.<br><br><b><b>-header</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display column headers in output.<br><br><b><b>-init <i>FILE</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read and execute initial commands from the specified <i>FILE</i>.<br><br><b><b>-json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set output mode to JSON format.<br><br><b><b>-line</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set output mode to one value per line, labeled with column names.<br><br><b><b>-list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set output mode to list, with field separator.<br><br><b><b>-markdown</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set output mode to Markdown table format.<br><br><b><b>-noheader</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress column headers in output.<br><br><b><b>-nullvalue <i>STRING</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print <i>STRING</i> for NULL values instead of an empty string.<br><br><b><b>-readonly</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open the database file in read-only mode.<br><br><b><b>-separator <i>STRING</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the output field separator to <i>STRING</i>.<br><br><b><b>-stats</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print database statistics after each command.<br><br><b><b>-table</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set output mode to a fancy ASCII art table.<br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the SQLite library version and exit.<br><br>


title: DESCRIPTION
content:
The <b>sqlite3</b> command is the official command-line interface (CLI) for interacting with SQLite database files. It provides a simple, yet powerful environment to create new databases, open existing ones, execute SQL commands, manage tables, import/export data, and perform various administrative tasks. Unlike traditional client-server database systems, SQLite operates directly on disk files, making <b>sqlite3</b> a lightweight and highly portable tool. It's widely used for scripting, debugging, application development, and general database administration where a full-fledged database server is unnecessary. Its capabilities include support for standard SQL features, transactions, views, and triggers, all managed through a single executable.


title: CAVEATS
content:
<b>Concurrency:</b> While SQLite supports concurrent reads and multiple writers via write-ahead logging (WAL), heavy, simultaneous write operations from many processes can lead to contention and potential performance bottlenecks. It is not designed as a high-concurrency server for thousands of simultaneous clients. <b>Network Access:</b> SQLite is a file-based database and does not provide direct network access or a server process. Accessing a SQLite database over a network file system can lead to issues if the file system does not support proper locking semantics.


title: DOT-COMMANDS
content:
Within the interactive <b>sqlite3</b> shell, special commands prefixed with a dot ('.') are available. These 'dot-commands' are not SQL statements but shell-specific directives to control the environment or perform utility operations. Examples include: <br><i>.help</i>: display help message<br><i>.tables</i>: list tables<br><i>.schema TABLE_NAME</i>: show schema for a table<br><i>.quit</i>: exit the shell<br><i>.dump</i>: dump the entire database in SQL format<br><i>.read FILE</i>: read SQL from a file


title: COMMON USE CASES
content:
<b>sqlite3</b> is frequently used for:<br><i>Local Application Data:</i> Storing data for desktop or mobile applications.<br><i>Development & Testing:</i> Quick database setup for development and unit testing without needing to install a separate database server.<br><i>Scripting:</i> Automating database operations in shell scripts.<br><i>Data Analysis:</i> Performing ad-hoc queries on structured data files.<br><i>Embedded Systems:</i> Its small footprint and self-contained nature make it ideal for resource-constrained devices.


title: HISTORY
content:
SQLite was created by <i>D. Richard Hipp</i> in 2000, initially designed for the US Navy for a highly robust, server-less database. The <b>sqlite3</b> command-line shell has been an integral part of the SQLite project from its early days, evolving alongside the library to provide a versatile and indispensable tool for interacting with this unique embedded database system. Its philosophy of simplicity, self-containment, and reliability has driven its widespread adoption across countless applications and operating systems.


title: PARAMETERS
content:
<b><i>database_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the SQLite database file to open. If the file does not exist, the application will prompt to create a new database upon saving changes.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with available command-line options and exits.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the application's version information and exits.<br><br><b><b>--in-memory</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the application with a new, temporary in-memory database. Any changes made will not be saved persistently unless explicitly exported.<br><br><b><b>--browse</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the application directly to the 'Browse Data' tab, displaying the contents of the first table found or an empty view if no tables exist.<br><br><b><b>--schema</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the application directly to the 'Database Structure' tab, showing the schema details of the database including tables, indexes, and views.<br><br><b><b>--sql</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the application directly to the 'Execute SQL' tab, ready for interactive SQL query input and execution.<br><br><b><b>--table</b> <i>&lt;tablename&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When opening a database, this option directs the application to the 'Browse Data' tab and attempts to select and display data from the specified <i>tablename</i> immediately.<br><br><b><b>--execute-sql</b> <i>&lt;sql_script_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the SQL commands contained within the specified <i>sql_script_file</i> against the opened database upon startup. This is useful for automated setup or applying a series of modifications.<br><br>


title: DESCRIPTION
content:
<i>sqlitebrowser</i>, officially known as <b>DB Browser for SQLite</b> (DB4S), is a high-quality, visual, open-source tool to create, design, and edit SQLite database files. It provides a comprehensive graphical user interface for users to perform various database operations without needing to write SQL commands manually. Key features include creating and compacting database files, creating, defining, modifying, and deleting tables, indexes, and records, browsing and searching data, importing and exporting data from various formats (like CSV, JSON), and executing SQL queries directly. It simplifies database management for both developers and casual users, offering an intuitive way to interact with SQLite databases.


title: CAVEATS
content:
While <i>sqlitebrowser</i> is highly versatile for SQLite databases, it is specifically designed for local SQLite files and does not natively connect to remote database servers (e.g., MySQL, PostgreSQL, SQL Server). For such connectivity, dedicated client tools for those specific database systems are required. Performance on extremely large databases (many gigabytes with millions of rows) might be slower for certain GUI operations compared to highly optimized command-line tools, though it generally handles large datasets well for interactive browsing.


title: CROSS-PLATFORM AVAILABILITY
content:
DB Browser for SQLite is readily available and actively maintained for multiple operating systems, including Linux, Windows, and macOS. This ensures a consistent user experience and broad accessibility for developers and users working on diverse platforms.


title: PLUGIN SUPPORT
content:
The application supports a plugin architecture, allowing third-party developers to extend its functionality. This enables integration with other tools or the addition of custom features tailored to specific workflows, enhancing its versatility beyond its core capabilities.


title: HISTORY
content:
Initially released in 2004 as <b>SQLite Database Browser</b>, the project aimed to provide a simple GUI for SQLite. Over the years, it evolved significantly in features and capabilities, undergoing a rename to <b>SQLiteBrowser</b> and eventually to its current official name, <b>DB Browser for SQLite</b> (DB4S), around 2014. This rebranding reflected its broader capabilities beyond just 'browsing' data. It has been continuously developed by a community of volunteers, gaining widespread popularity as a primary tool for SQLite database management across various operating systems.


title: PARAMETERS
content:
<b><i>--database-url &lt;URL&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the database connection URL. This can also be set via the <B>DATABASE_URL</B> environment variable.<br><br><b><i>--config &lt;FILE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a TOML configuration file for <B>sqlx</B>.<br><br><b><i>--force</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces an operation to proceed, ignoring some warnings or checks (e.g., for dropping databases).<br><br><b><i>--offline</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs operations that don't require a database connection, primarily for migration generation.<br><br><b><i>--color &lt;WHEN&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls colored output (<B>always</B>, <B>auto</B>, <B>never</B>).<br><br><b><i>--verbose</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose logging output.<br><br><b><i>--quiet</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses output messages.<br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version of <B>sqlx-cli</B>.<br><br><b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints help information for the command or a subcommand.<br><br>


title: DESCRIPTION
content:
The <b>sqlx</b> command-line interface (CLI) is a powerful tool designed to complement the <i>sqlx</i> Rust asynchronous SQL crate. It provides essential utilities for database development, primarily focusing on managing database schemas through migrations and assisting with the pre-compilation of SQL queries. This CLI allows developers to create, drop, and manage databases, apply or revert migrations, and prepare SQL queries for optimal performance within <i>sqlx</i> applications. It supports various databases like PostgreSQL, MySQL, SQLite, and Microsoft SQL Server, aligning with the capabilities of the underlying <i>sqlx</i> library. By automating common database tasks, <b>sqlx</b> CLI streamlines development workflows, ensures schema consistency across environments, and helps leverage <i>sqlx</i>'s compile-time query checking features.


title: CAVEATS
content:
The <B>sqlx</B> CLI is a Rust application and needs to be built and installed using <B>cargo</B> (<B>cargo install sqlx-cli</B>). It requires the Rust toolchain to be set up. For database-specific operations, underlying database client libraries might be necessary (e.g., <B>libpq-dev</B> for PostgreSQL, MySQL client libraries for MySQL). It does not provide a database server; it interacts with existing ones.


title: KEY SUBCOMMANDS
content:
The <B>sqlx</B> CLI operates primarily through subcommands, each addressing a specific category of tasks:<br><br><b><i>database</i></b><br>Manages database instances. Common actions include <B>sqlx database create</B> (creates a new database), <B>sqlx database drop</B> (drops an existing database), and <B>sqlx database reset</B> (drops and recreates the database, running all migrations).<br><br><b><i>migrate</i></b><br>Handles database schema migrations. This is one of the most frequently used subcommands. Examples include <B>sqlx migrate add &lt;name&gt;</B> (creates a new migration file), <B>sqlx migrate run</B> (applies pending migrations), <B>sqlx migrate revert</B> (reverts the last applied migration), and <B>sqlx migrate info</B> (displays the status of all migrations).<br><br><b><i>prepare</i></b><br>Scans your Rust project for SQL queries used with <i>sqlx</i> and caches them. This step is crucial for enabling <i>sqlx</i>'s compile-time query checking, which ensures your SQL queries are valid against your database schema before runtime. Run with <B>sqlx prepare --check</B> to just check or <B>sqlx prepare</B> to generate the cache.<br><br><b><i>info</i></b><br>Provides detailed information about the connected database, including its type, version, and the current status of the <B>sqlx</B> CLI and its configuration.


title: HISTORY
content:
The <i>sqlx</i> Rust library was first released in 2019, quickly gaining traction for its asynchronous capabilities and compile-time query checking. The <B>sqlx</B> CLI was developed concurrently as a companion tool to simplify common database development tasks that are not directly handled by the library itself. Its primary focus has been on robust migration management, a critical aspect of database-backed applications, and later extended to include features like prepared query caching, making it an indispensable part of the <i>sqlx</i> ecosystem. It's a relatively modern tool, reflecting the advancements in async Rust and modern database development practices.


title: PARAMETERS
content:
<b><i>HOST</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The hostname or IP address of the Squid proxy server to query. <i>Default is localhost</i>.<br><br><b><i>PORT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The Cache Manager port of the Squid proxy server. <i>Default is 3401</i>, or the value configured by <b>cache_manager_port</b> in <b>squid.conf</b>.<br><br><b><i>COMMAND</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific Cache Manager command to execute on the Squid server. Common commands include <i>info</i>, <i>utilization</i>, <i>counters</i>, <i>objects</i>, <i>5min</i>, <i>60min</i>, <i>mem</i>, <i>store_mem</i>, <i>config</i>, <i>shutdown</i>, and <i>reconfigure</i>. The available commands depend on the Squid version and configuration.<br><br><b><b>-h</b> <i>HOST</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly specify the Squid cache host (<i>alternative to positioning HOST</i>).<br><br><b><b>-p</b> <i>PORT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly specify the Squid cache manager port (<i>alternative to positioning PORT</i>).<br><br><b><b>-u</b> <i>USERNAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the username for Cache Manager authentication (if <b>cachemgr_passwd</b> is configured).<br><br><b><b>-w</b> <i>PASSWORD</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the password for Cache Manager authentication (if <b>cachemgr_passwd</b> is configured).<br><br>


title: DESCRIPTION
content:
<b>sqsc</b> (Squid Cache Status Client) is a command-line utility used to query and retrieve real-time operational status and various statistics from a running Squid web proxy cache server. It communicates with Squid's Cache Manager interface, typically over UDP, to gather valuable insights into the proxy's performance and health. Administrators use <b>sqsc</b> to monitor aspects like memory usage, disk cache activity, network traffic, client connections, and object counts, providing a quick and efficient way to assess the proxy's state without needing to access the server directly or parse complex log files.<br><br>The information returned by <b>sqsc</b> helps in understanding the current load, cache hit ratios, and resource consumption, which are crucial for maintaining an efficient and reliable proxy service.


title: CAVEATS
content:
<b>sqsc</b> relies on Squid's Cache Manager interface being enabled and accessible. For sensitive commands like <i>shutdown</i> or <i>reconfigure</i>, Squid's <b>cachemgr_passwd</b> must be configured for security. The default communication uses UDP, which is connectionless and may not guarantee delivery, though typically reliable enough for status queries. <b>sqsc</b> is usually part of the <i>squid-helpers</i> or <i>squid</i> package and may not be installed by default on systems without a Squid server.


title: COMMON USE CASES
content:
<i>Automated Monitoring:</i> Integrate <b>sqsc</b> into scripts to periodically check Squid's health and performance.<br><i>Troubleshooting:</i> Quickly diagnose issues by checking current statistics like errors, cache misses, or high resource usage.<br><i>Capacity Planning:</i> Use long-term trends from <b>sqsc</b> output to understand proxy load and plan for future capacity needs.


title: OUTPUT FORMAT
content:
The output of <b>sqsc</b> is typically plain text, often presented as key-value pairs or structured tables, making it relatively easy to parse with standard text processing tools like <b>grep</b>, <b>awk</b>, or <b>sed</b> for automation purposes. The specific format varies depending on the <i>COMMAND</i> issued.


title: HISTORY
content:
The <b>sqsc</b> utility has been an integral part of the Squid web proxy cache project since its early development. Squid, initially known as Harvest Cache and later renamed in 1996, grew to become a widely used open-source caching proxy. <b>sqsc</b> was developed to provide administrators with a direct command-line interface to monitor and manage running Squid instances, complementing the web-based Cache Manager interface (accessible via <i>cachemgr.cgi</i>). Its design reflects the need for a simple, scriptable tool to quickly query Squid's internal state, evolving alongside the Squid daemon to support new metrics and management commands.


title: PARAMETERS
content:
<b>-a, --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show all jobs. This option often includes jobs that are not normally displayed, such as system jobs, or may override default filters.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a brief help message and exit.<br><br><b>-i, --iterate=<seconds></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Repeat job status display every <I>seconds</I> seconds.<br><br><b>-j, --jobs=<job_list></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display information only for the specified job(s) by ID.<br><br><b>-l, --long</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display information in a long format, providing more details about each job.<br><br><b>-o, --format=<format_string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Define the output format using a special string. This allows users to customize which fields are shown.<br><br><b>-p, --partition=<partition_list></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter jobs by a comma-separated list of partition names.<br><br><b>-s, --slim</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display information in a compact, slim format, showing fewer columns.<br><br><b>-t, --state=<state_list></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter jobs by a comma-separated list of job states (e.g., <B>PENDING</B>, <B>RUNNING</B>, <B>COMPLETED</B>, <B>CANCELLED</B>).<br><br><b>-u, --user=<user_list></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter jobs by a comma-separated list of user names or user IDs.<br><br><b>-M, --clusters=<cluster_list></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show jobs from the specified cluster(s) in a federated Slurm environment.<br><br><b>-N, --nodes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the node names associated with each job.<br><br>


title: DESCRIPTION
content:
The <B>squeue</B> command is an integral part of the <I>Slurm Workload Manager</I>, a highly scalable and fault-tolerant open-source job scheduler for Linux clusters. Its primary function is to display information about jobs or job steps that are currently held in the Slurm queue. This includes jobs that are <B>PENDING</B> (waiting to be scheduled), <B>RUNNING</B> (actively executing), <B>COMPLETING</B> (finishing up), or in other states.<br><br>Users frequently employ <B>squeue</B> to monitor the status and progress of their own submitted jobs, while system administrators use it to get an overall picture of cluster utilization and job backlog. The output typically includes details such as job ID, partition, name, user, state, time limit, elapsed time, and the nodes allocated. It is an indispensable tool for managing and understanding the current workload on a Slurm-managed cluster.


title: CAVEATS
content:
`squeue` primarily shows jobs that are currently active or in the queue. For detailed accounting information on completed or failed jobs, the <B>sacct</B> command is typically used. The output can be extensive on large, busy clusters, requiring filtering options for readability. Users can generally only view their own jobs unless they have specific administrative privileges.


title: COMMON JOB STATES
content:
Understanding job states is crucial when using <B>squeue</B>. Some common states include:<br><i><B>PENDING</B> (PD)</i>: Job is waiting for resources.<br><i><B>RUNNING</B> (R)</i>: Job is currently executing.<br><i><B>COMPLETING</B> (CG)</i>: Job is finishing up, but some processes might still be running.<br><i><B>COMPLETED</B> (CD)</i>: Job finished successfully.<br><i><B>FAILED</B> (F)</i>: Job terminated with a non-zero exit code or an error.<br><i><B>CANCELLED</B> (CA)</i>: Job was cancelled by the user or administrator.<br><i><B>SUSPENDED</B> (S)</i>: Job execution has been temporarily stopped.


title: CUSTOM OUTPUT FORMATTING
content:
The <B>-o</B> or <B>--format</B> option is powerful for tailoring <B>squeue</B> output. It allows users to specify exactly which fields to display and in what order using format codes (e.g., %i for Job ID, %u for User, %T for State). This is particularly useful for scripting or when a specific set of information is required.


title: HISTORY
content:
<B>squeue</B> is a fundamental utility within the <B>Slurm Workload Manager</B>, which was originally developed at Lawrence Livermore National Laboratory and released in 2002. As Slurm evolved into one of the most widely used open-source schedulers for high-performance computing (HPC) clusters, <B>squeue</B> remained a core component, constantly updated to reflect new Slurm features and improve its functionality and output options.


title: PARAMETERS
content:
<b>--start=<time></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the beginning of the time period for the report. Format: YYYY-MM-DD[THH:MM[:SS]].<br><br><b>--end=<time></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the end of the time period for the report. Format: YYYY-MM-DD[THH:MM[:SS]].<br><br><b>--clusters=<cluster_list></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of cluster names to include in the report. By default, all clusters are included.<br><br><b>--accounts=<account_list></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of account names to include in the report.<br><br><b>--users=<user_list></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of user names or UIDs to include in the report.<br><br><b>--format=<format_list></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of fields to display in the report. Use 'help' for a list of available fields.<br><br><b>--parsable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output data in a machine-parsable format, typically with '|' as a delimiter.<br><br><b>--raw</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output raw data (e.g., seconds instead of HH:MM:SS) for easier post-processing.<br><br><b>--file=<file_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the report output to the specified file instead of standard output.<br><br>


title: DESCRIPTION
content:
<i>sreport</i> is a command-line utility within the Slurm Workload Manager suite, designed to generate comprehensive reports from the Slurm accounting storage database (SlurmDBD). It provides administrators and users with insights into cluster usage, resource consumption, job statistics, and financial chargebacks.<br><br>The command can produce various types of reports, including aggregate data for users, accounts, clusters, and associations, as well as detailed job information and resource utilization metrics. Its flexibility allows filtering by time ranges, specific users or accounts, and different output formats (e.g., human-readable, parsable for scripting). By leveraging the rich data stored in SlurmDBD, <i>sreport</i> is an essential tool for monitoring, capacity planning, and auditing high-performance computing (HPC) environments.


title: CAVEATS
content:
<i>sreport</i> relies entirely on the Slurm accounting storage database (SlurmDBD) being properly configured, running, and populated with data. If SlurmDBD is down or data is incomplete, reports will be inaccurate or unavailable.<br><br>Generating large or complex reports over extended periods can be resource-intensive on the SlurmDBD server and may take a considerable amount of time to complete.<br><br>User access to report data is governed by Slurm's security policies; typically, users can only view data related to their own accounts and jobs unless broader permissions are explicitly granted.


title: REPORT TYPES (SUBCOMMANDS)
content:
<i>sreport</i> operates by specifying a <i>report_type</i> as a subcommand, which determines the nature of the report. Common report types include:<br><b>account</b>: Provides aggregated data for specific accounts.<br><b>cluster</b>: Offers cluster-wide statistics, often used with 'utilization'.<br><b>job</b>: Summarizes job-level data, distinct from <i>sacct</i>'s detailed per-job output.<br><b>user</b>: Generates reports based on user activity.<br><b>utilization</b>: Focuses on resource usage (e.g., CPU, GPU time), typically executed as 'sreport cluster utilization'.


title: DATA SOURCE
content:
All data presented by <i>sreport</i> is retrieved from the Slurm accounting storage database (SlurmDBD). This database stores comprehensive records of jobs, users, accounts, associations, and resource usage, making <i>sreport</i> a powerful interface for analyzing historical cluster activity and trends.


title: HISTORY
content:
<i>sreport</i> is an integral component of the Slurm Workload Manager, which was originally developed by Lawrence Livermore National Laboratory (LLNL) in 2002. As Slurm evolved to manage increasingly large and complex HPC clusters, the need for robust accounting and reporting capabilities became paramount. <i>sreport</i> emerged as a sophisticated tool to extract and present usage data from the Slurm accounting database (SlurmDBD), providing essential insights for resource management, chargeback, and capacity planning. Its development has paralleled Slurm's growth, continuously adapting to new features and data points tracked by the scheduler.


title: SYNOPSIS
content:
<b>srftopam</b> [<i>-alphaout=alphafile</i>] [<i>-fixblack</i>] [<i>-ignore_gamma</i>] [<i>-invert</i>] [<i>-truecolor</i>] [<i>-transparent={color | colorname}</i>] [<i>-verbose</i>] [<i>file</i>]


title: PARAMETERS
content:
<b><i>-alphaout=alphafile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts the alpha channel from the input SRF and writes it as a <I>PGM</I> (for grayscale alpha) or <I>PBM</I> (for bilevel alpha) file to the specified <I>alphafile</I>. If the input SRF has no alpha channel, this option is ignored.<br><br><b><i>-fixblack</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Corrects for a common convention in some Sun Rasterfiles where black pixels might be erroneously represented as white. This option ensures that such pixels are correctly mapped to black in the output PAM image.<br><br><b><i>-ignore_gamma</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disregards any gamma correction information found in the SRF header. This can be useful if the gamma value in the header is incorrect, outdated, or if you prefer to apply gamma correction separately.<br><br><b><i>-invert</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inverts the grayscale or color values of the image. White becomes black, black becomes white, and other colors are inverted accordingly across their respective color ranges.<br><br><b><i>-truecolor</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the output PAM to be a truecolor (typically 24-bit RGB or 48-bit RGB) image, even if the input SRF is colormapped and could be represented using a smaller color palette. This is useful for preserving full color fidelity.<br><br><b><i>-transparent={color | colorname}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular color in the input SRF that should be rendered as transparent in the output PAM. The color can be provided as a hexadecimal RGB value (e.g., <I>#RRGGBB</I>) or by a recognized color name (e.g., <I>red</I>).<br><br><b><i>-verbose</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, causing <I>srftopam</I> to print detailed information about the conversion process, including input file characteristics and processing steps, to standard error.<br><br><b><i>file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the input Sun Rasterfile. If this argument is omitted, <I>srftopam</I> reads the image data from standard input, allowing for seamless integration into shell pipelines.<br><br>


title: DESCRIPTION
content:
<I>srftopam</I> is a utility from the <I>Netpbm</I> suite designed to convert Sun Rasterfile (SRF) images into the <I>Portable Arbitrary Map</I> (PAM) format. The SRF format is an older image standard primarily associated with Sun workstations, while PAM is a modern, flexible, and extensible format within the Netpbm family. PAM can represent a wide array of pixel data, including arbitrary bit depths, multiple color planes (channels), and alpha transparency. This command is crucial for integrating legacy SRF images into contemporary image processing workflows that leverage the extensive toolkit of <I>Netpbm</I>. It efficiently handles various SRF types, including those with colormaps and grayscale data. By default, <I>srftopam</I> reads input from standard input if no filename is provided and writes the converted PAM image to standard output, making it highly suitable for command-line piping and scripting.


title: CAVEATS
content:
<b>Sun Rasterfile Format Variations:</b> The SRF format has numerous variations, including different sub-types and byte-ordering conventions. While <I>srftopam</I> is designed to handle most common SRF files, highly obscure, non-standard, or corrupted files may not convert correctly.<br><br><b>Gamma Interpretation:</b> The interpretation of gamma correction information in SRF headers can sometimes be ambiguous or missing. This might lead to slight color shifts in the converted image if the <I>-ignore_gamma</I> option is not used and the header data is inaccurate.<br><br><b>Standard I/O Dependency:</b> As a typical Netpbm tool, <I>srftopam</I> primarily uses standard input and standard output for data. Users must explicitly redirect output to a file if they wish to save the converted image to disk.


title: INPUT AND OUTPUT
content:
Like most tools in the <I>Netpbm</I> suite, <I>srftopam</I> is designed to operate seamlessly within command-line pipelines. It reads the Sun Rasterfile from standard input if no input file is specified and writes the resulting Portable Arbitrary Map (PAM) image to standard output. This design promotes modularity and allows for chaining multiple <I>Netpbm</I> commands together to perform complex image manipulation tasks.


title: PART OF THE NETPBM SUITE
content:
<I>srftopam</I> is one of hundreds of specialized tools included in the comprehensive <I>Netpbm</I> collection. The suite is renowned for its adherence to the Unix philosophy: providing small, single-purpose utilities that can be combined (often via pipes) to achieve powerful and flexible image processing workflows. Understanding the broader <I>Netpbm</I> ecosystem enhances the utility of individual commands like <I>srftopam</I>.


title: HISTORY
content:
<I>srftopam</I> is part of the <I>Netpbm</I> project, which evolved from <I>Pbmplus</I>, a set of image manipulation utilities created by Jef Poskanzer in the late 1980s. <I>Netpbm</I> significantly expanded <I>Pbmplus</I>'s capabilities by adding support for more image formats and introducing new tools. The <I>Portable Arbitrary Map</I> (PAM) format itself was a later addition to the <I>Netpbm</I> suite, designed to offer greater flexibility and extensibility than the original <I>Portable Anymap</I> (PNM) formats (PBM, PGM, PPM). <I>srftopam</I> represents a more modern and robust conversion tool for Sun Rasterfiles compared to older, less flexible utilities like <I>rasttopnm</I>, aligning with the <I>Netpbm</I> philosophy of providing small, composable tools for image processing pipelines.


title: PARAMETERS
content:
<b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force removal, suppress prompting, and ignore non-existent files and arguments.<br><br><b><b>-i</b>, <b>--interactive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prompt before every removal. Overrides <b>-f</b>.<br><br><b><b>-r</b>, <b>-R</b>, <b>--recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove directories and their contents recursively.<br><br><b><b>-s</b>, <b>--simple</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a faster, single-pass overwrite method with random data.<br><br><b><b>-m</b>, <b>--medium</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a 7-pass overwrite method, compliant with DoD 5220.22-M.<br><br><b><b>-g</b>, <b>--gutmann</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use the Gutmann method, a 35-pass overwrite method for maximum security (slowest).<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explain what is being done, showing each file and pass.<br><br><b><b>-z</b>, <b>--zero</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overwrite with zeros for the final pass instead of random data. Default is random.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help message and exit.<br><br>


title: DESCRIPTION
content:
<i>srm</i>, short for <I>secure remove</I>, is a command-line utility designed to securely delete files and directories by preventing their recovery. Unlike the standard <i>rm</i> command, which merely removes the file's directory entry, <i>srm</i> overwrites the file's content multiple times with various patterns (e.g., random data, zeros, ones) before truncating and unlinking it. This process adheres to secure data erasure standards, such as the Gutmann method or DoD 5220.22-M, making data virtually unrecoverable even with advanced forensic techniques. It is particularly useful for handling sensitive information, ensuring that all data blocks associated with the file are sanitized.


title: CAVEATS
content:
<b>srm</b> is significantly slower than <b>rm</b> due to multiple overwrite passes.<br>Its effectiveness can be limited on modern storage devices like SSDs, NVMe drives, or RAID systems due to wear-leveling, over-provisioning, and data distribution by controllers, which can prevent <b>srm</b> from reaching all physical blocks where data may reside. For such media, physical destruction or full disk encryption is often more reliable. It also does not securely erase free disk space; use <b>sfill(1)</b> for that purpose.


title: SECURE DELETION PRINCIPLES
content:
Simple file deletion (e.g., using <b>rm</b>) only removes the pointer to a file's data, making the space available for new data but leaving the original data blocks intact and recoverable. Secure deletion tools like <b>srm</b> are crucial because they ensure that the actual data on the storage medium is unreadable by overwriting it multiple times with specific patterns (zeros, ones, random data) before finally unlinking the file. This process is essential for compliance with data protection regulations and for protecting sensitive information.


title: LIMITATIONS ON MODERN STORAGE
content:
While highly effective on traditional magnetic hard drives, <b>srm</b>'s efficacy is reduced on Solid State Drives (SSDs) and other flash-based storage. This is due to internal SSD mechanisms like wear-leveling (distributing writes evenly), over-provisioning (reserving extra space for internal operations), and controller-managed data mapping. These features mean that data written to a logical block might not end up on the same physical block each time, and deleted data might persist in inaccessible areas. For ultimate security on SSDs, encryption or physical destruction is generally recommended.


title: HISTORY
content:
<b>srm</b> is part of the <I>secure-delete</I> package, originally created by Todd Miller. This package was developed to provide a suite of tools for robust data sanitization on magnetic media, addressing the limitations of standard file deletion utilities. Its design principles are rooted in overwriting techniques used to prevent data recovery by sophisticated methods, making it a staple for secure file management in environments requiring strict data privacy.


title: SYNOPSIS
content:
<b>srun</b> [<i>OPTIONS...</i>] <i>&lt;executable&gt;</i> [<i>&lt;arguments...&gt;</i>]<br><br><i>Common Usage Examples:</i><br><b>srun</b> <i>-N 1 -n 1 --pty bash</i><br><b>srun</b> <i>-n 16 --cpu-bind=cores ./my_parallel_app</i>


title: PARAMETERS
content:
<b><b>-N</b>, <b>--nodes</b>=<i>&lt;nodes&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the minimum number of nodes required for the job.<br><br><b><b>-n</b>, <b>--ntasks</b>=<i>&lt;tasks&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of tasks (processes) to be launched by <b>srun</b>.<br><br><b><b>-c</b>, <b>--cpus-per-task</b>=<i>&lt;cpus&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requests a specific number of CPUs per task. Useful for multi-threaded applications.<br><br><b><b>-t</b>, <b>--time</b>=<i>&lt;time&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a time limit for the job or job step. Format: <i>&lt;minutes&gt;</i>, <i>&lt;minutes&gt;:&lt;seconds&gt;</i>, <i>&lt;hours&gt;:&lt;minutes&gt;:&lt;seconds&gt;</i>, or <i>&lt;days&gt;-&lt;hours&gt;</i>.<br><br><b><b>--mem</b>=<i>&lt;memory&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the maximum amount of real memory required per node. Suffixes like <i>M</i> (MB), <i>G</i> (GB) can be used.<br><br><b><b>-p</b>, <b>--partition</b>=<i>&lt;partition_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requests a specific partition (queue) for the job.<br><br><b><b>-A</b>, <b>--account</b>=<i>&lt;account_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Charges the job to the specified account.<br><br><b><b>-J</b>, <b>--job-name</b>=<i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a descriptive name to the job. This name appears in <b>squeue</b> output.<br><br><b><b>-o</b>, <b>--output</b>=<i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects standard output of the job to the specified file. Special characters like <i>%j</i> (job ID) are supported.<br><br><b><b>-e</b>, <b>--error</b>=<i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects standard error of the job to the specified file.<br><br><b><b>--pty</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allocates a pseudo-terminal for the job, allowing interactive sessions (e.g., launching a shell).<br><br><b><b>--cpu-bind</b>=<i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Binds tasks to specific CPUs or cores. Common types include <i>none</i>, <i>cores</i>, <i>sockets</i>, <i>threads</i>.<br><br><b><b>--exclusive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requests exclusive use of allocated nodes, meaning no other jobs will run on them.<br><br>


title: DESCRIPTION
content:
<b>srun</b> is the primary command in the Slurm Workload Manager used to submit and execute jobs, typically interactively or as a job step within an existing resource allocation. It requests resources from the Slurm controller, launches tasks on the allocated nodes, and manages standard input/output redirection. Unlike <b>sbatch</b>, which is used for submitting scripts for batch execution, <b>srun</b> is ideal for initiating interactive sessions, debugging parallel applications, or running a specific command across multiple allocated compute nodes. It supports a comprehensive set of options to define resource requirements (e.g., number of tasks, CPUs per task, memory, time limit), job properties, and task distribution, making it an indispensable tool for High-Performance Computing (HPC) users.


title: CAVEATS
content:
<b>srun</b> typically blocks and waits for resources to become available, unlike <b>sbatch</b> which returns immediately. <br>It is commonly used within an existing allocation obtained via <b>salloc</b> or from within an <b>sbatch</b> script to launch job steps. <br>Users must have appropriate permissions and the Slurm environment must be properly configured on the cluster to use <b>srun</b>.


title: JOB STEPS AND ALLOCATIONS
content:
While <b>srun</b> can initiate a new job allocation, it is also frequently used to launch "job steps" within a pre-existing resource allocation. An allocation can be obtained via <b>salloc</b> (for interactive use) or <b>sbatch</b> (for batch scripts). Running multiple <b>srun</b> commands within a single allocation allows for efficient execution of different phases of a computation or multiple distinct executables without incurring the overhead of new resource requests for each step.


title: INTERACTIVE DEBUGGING
content:
One of <b>srun</b>'s most powerful features is its ability to launch interactive sessions. Using options like <b>--pty bash</b>, users can obtain a shell prompt directly on an allocated compute node, enabling real-time debugging, environment inspection, and interactive execution of commands and scripts within the cluster's high-performance environment. This is crucial for developing and troubleshooting complex parallel applications.


title: HISTORY
content:
<b>srun</b> is a core component of the Slurm Workload Manager, which was originally developed at Lawrence Livermore National Laboratory (LLNL) starting around 2002-2003. It emerged as an open-source, scalable, and fault-tolerant alternative to other job schedulers, designed to efficiently manage resources on large-scale High-Performance Computing (HPC) clusters. <b>srun</b> has been central to Slurm's functionality from its inception, providing the essential capability to launch and manage parallel applications and interactive sessions on allocated compute resources.


title: SEE ALSO
content:
<b>sbatch</b>(1), <b>salloc</b>(1), <b>scancel</b>(1), <b>squeue</b>(1), <b>sinfo</b>(1), <b>sacct</b>(1)


title: SYNOPSIS
content:
<b>ss-local</b> [-s <i>server_addr</i>] [-p <i>server_port</i>] [-l <i>local_port</i>] [-k <i>password</i>] [-m <i>method</i>] [-t <i>timeout</i>] [-u] [-c <i>config_file</i>] [--fast-open] [--mtu <i>mtu_value</i>] [--socks5-hostname] [-v] [-h]


title: PARAMETERS
content:
<b><b>-s</b> <i>server_addr</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the remote Shadowsocks server's IP address or hostname.<br><br><b><b>-p</b> <i>server_port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the remote Shadowsocks server's port.<br><br><b><b>-l</b> <i>local_port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the local SOCKS5 proxy port (default: 1080).<br><br><b><b>-k</b> <i>password</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the password for encryption/decryption with the server.<br><br><b><b>-m</b> <i>method</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the encryption method (e.g., <i>aes-256-gcm</i>, <i>chacha20-ietf-poly1305</i>). Must match server's method.<br><br><b><b>-t</b> <i>timeout</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the timeout in seconds for connections.<br><br><b><b>-u</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables UDP relay for protocols like DNS or games.<br><br><b><b>-c</b> <i>config_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a path to a JSON configuration file for settings. Highly recommended for complex setups.<br><br><b><b>--fast-open</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables TCP Fast Open for reduced latency.<br><br><b><b>--mtu</b> <i>mtu_value</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Maximum Transmission Unit for UDP packets.<br><br><b><b>--socks5-hostname</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables SOCKS5 hostname resolution on the server side instead of locally.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output for debugging.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br>


title: DESCRIPTION
content:
<i>ss-local</i> is the client-side component of the Shadowsocks proxy, designed to forward local traffic through a secure, encrypted tunnel to an <i>ss-server</i> running on a remote host. It operates as a local SOCKS5 proxy (defaulting to 127.0.0.1:1080), allowing applications on your machine to route their network traffic through it. This effectively bypasses network censorship, provides a degree of privacy by encrypting data between the client and server, and can mask your real IP address from target websites. Unlike a traditional VPN, Shadowsocks is designed to be lightweight and more difficult to detect and block, making it popular in regions with strict internet controls. Users configure <i>ss-local</i> with the remote server's address, port, password, and encryption method to establish the secure connection.


title: CAVEATS
content:
<i>ss-local</i> requires a corresponding <i>ss-server</i> running on a remote machine to function. It primarily proxies application-level traffic (SOCKS5) and does not automatically route all system traffic like a full VPN. Applications must be explicitly configured to use the local SOCKS5 proxy. Security relies heavily on the chosen encryption method and the strength of your password. Misconfiguration can lead to traffic leaks or connection failures.


title: CONFIGURATION FILE USAGE
content:
While <i>ss-local</i> can be configured via command-line arguments, it is highly recommended to use a JSON configuration file specified with the <b>-c</b> option. This allows for more organized, complex, and persistent settings, including multiple servers, specific routing rules, and the integration of obfuscation plugins (e.g., simple-obfs, v2ray-plugin).


title: SOCKS5 PROXY FUNCTIONALITY
content:
<i>ss-local</i> acts as a local SOCKS5 proxy server. Applications (web browsers, download managers, chat clients, etc.) need to be explicitly configured to use <i>127.0.0.1</i> and the specified local port (default <i>1080</i>) as their SOCKS5 proxy to route traffic through Shadowsocks. This provides flexibility but also requires per-application setup.


title: HISTORY
content:
Shadowsocks was initially created by a Chinese programmer named clowwindy in 2012 as a lightweight and obfuscated proxy specifically designed to circumvent the Great Firewall of China. Its design focuses on being less detectable than traditional VPN protocols. The <i>ss-local</i> command represents the fundamental client-side component of this project, evolving alongside the server to adapt to new censorship techniques and incorporate better encryption methods.


title: SYNOPSIS
content:
<b>ssh</b> [<i>options</i>] [<i>user</i>@]<i>hostname</i> [<i>command</i>]<br><br>Common invocation examples:<br> <b>ssh</b> <i>user@hostname</i><br> <b>ssh</b> <i>-p 2222 -i ~/.ssh/mykey user@hostname</i><br> <b>ssh</b> <i>-L 8080:localhost:80 user@hostname</i><br> <b>ssh</b> <i>-X user@hostname firefox</i><br> <b>ssh</b> <i>-Nf user@hostname</i>


title: PARAMETERS
content:
<b><b>-p</b> <i>port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the port number to connect to on the remote host. The default is 22.<br><br><b><b>-i</b> <i>identity_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a file from which the identity (private key) for public key authentication is read.<br><br><b><b>-l</b> <i>login_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the user to log in as on the remote machine. If not specified, the local username is used.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verbose mode. Causes <b>ssh</b> to print debugging messages about its progress.<br><br><b><b>-X</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables X11 forwarding. Allows X applications to display on the local system.<br><br><b><b>-Y</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables trusted X11 forwarding. Similar to -X but with fewer security restrictions.<br><br><b><b>-L</b> <i>local_port:host:remote_port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Local port forwarding. Specifies that the given local port on the client host is to be forwarded to the given host and port on the remote server side.<br><br><b><b>-R</b> <i>remote_port:host:local_port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remote port forwarding. Specifies that the given remote port on the server host is to be forwarded to the given host and port on the local client side.<br><br><b><b>-D</b> <i>[bind_address:]port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dynamic port forwarding. Specifies a local 'dynamic' application-level port forwarding, creating a SOCKS proxy.<br><br><b><b>-N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not execute a remote command. Useful for just forwarding ports.<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requests <b>ssh</b> to go to background just before command execution. Useful when <b>ssh</b> is asked to forward ports.<br><br><b><b>-o</b> <i>option</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Can be used to give options in the format used in the configuration file, overriding default settings.<br><br><b><b>-A</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables authentication agent forwarding. Allows the use of a local <b>ssh-agent</b> for authentication to other remote hosts.<br><br><b><b>-C</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requests compression of all data (including stdin, stdout, stderr data and X11 and TCP forwarding data).<br><br>


title: DESCRIPTION
content:
The <b>ssh</b> (Secure Shell) command provides a secure and encrypted channel for remote network services. It is primarily used for logging into a remote computer, executing commands, and securely transferring files (often via related commands like <b>scp</b> or <b>sftp</b>). Unlike older protocols such as <b>telnet</b> or <b>rlogin</b>, <b>ssh</b> encrypts all traffic, including passwords, preventing eavesdropping, connection hijacking, and other attacks.<br><br>It supports various authentication methods, including password-based and the more secure public-key authentication, making it an essential tool for system administrators and developers alike for managing remote servers and networks. <b>ssh</b> can also be used for tunneling arbitrary network ports, allowing secure connections for other services.


title: CAVEATS
content:
<b>Host Key Verification:</b> When connecting to a new host, <b>ssh</b> will ask to verify the host's public key fingerprint. It is crucial to verify this fingerprint (e.g., by out-of-band communication) to prevent man-in-the-middle attacks. Once accepted, the key is stored in <i>~/.ssh/known_hosts</i>.<br><br><b>Security of Private Keys:</b> Private keys used for public-key authentication should always be protected with strong passphrases and kept secure, as compromise of a private key can grant unauthorized access to remote systems.<br><br><b>Firewall Considerations:</b> <b>ssh</b> typically operates on TCP port 22. If firewalls are in place, this port (or a custom configured port) must be open for connections to be established.


title: AUTHENTICATION METHODS
content:
<b>ssh</b> supports various methods to authenticate users. The most common are:<br><i>1. Password Authentication:</i> User provides a password, which is encrypted before transmission. It's simple but can be vulnerable to brute-force attacks.<br><i>2. Public-Key Authentication:</i> Uses a pair of cryptographic keys: a public key stored on the server (in <i>~/.ssh/authorized_keys</i>) and a private key kept by the user. This method is generally more secure and convenient as it avoids sending passwords over the network.<br><i>3. Host-Based Authentication:</i> Less common, relies on trusted host keys to authenticate, typically used in highly controlled environments.


title: CONFIGURATION FILES
content:
<b>ssh</b> behavior can be customized through configuration files. The global configuration file is typically located at <i>/etc/ssh/ssh_config</i>, providing system-wide defaults. User-specific configurations are in <i>~/.ssh/config</i>, which overrides global settings. These files allow users to define aliases for hosts, specify identity files, set default ports, and configure various connection options for different hosts or groups of hosts, simplifying complex connections and maintaining security policies.


title: HISTORY
content:
The <b>ssh</b> protocol was originally designed by Tatu Ylönen in 1995 to replace insecure protocols like <b>rsh</b>, <b>rlogin</b>, and <b>telnet</b>, which transmitted passwords and data in plaintext. The initial version (SSH-1) quickly gained popularity due to its strong encryption capabilities.<br><br>Due to licensing concerns with the original software, the OpenSSH project was created in 1999 as a free and open-source implementation of the SSH protocol. OpenSSH is now the most widely used version, including the <b>ssh</b> client, <b>sshd</b> server, and other related utilities. It has played a pivotal role in securing internet communication for remote administration, version control systems, and secure data transfer across the globe.


title: SEE ALSO
content:
<b>sshd</b>(8) - OpenSSH daemon, <b>scp</b>(1) - secure copy (remote file copy program), <b>sftp</b>(1) - secure file transfer program, <b>ssh-keygen</b>(1) - authentication key generation, management and conversion, <b>ssh-agent</b>(1) - authentication agent, <b>ssh-add</b>(1) - adds identities (private keys) to the authentication agent, <b>ssh_config</b>(5) - OpenSSH client configuration file, <b>sshd_config</b>(5) - OpenSSH daemon configuration file


title: PARAMETERS
content:
<b><i>file ...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more private key files to add to the agent. If no files are specified, <b>ssh-add</b> attempts to add default identity files.<br><br><b><b>-A</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds all default identity files recursively from <i>~/.ssh/</i>.<br><br><b><b>-a</b> <i>bind_address</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the bind address for the smartcard socket.<br><br><b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requests confirmation via <i>ssh-askpass</i> before adding or deleting keys from the agent.<br><br><b><b>-D</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes all identities from the agent.<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes one specified identity from the agent. If no identity is specified, it prompts for which one to delete.<br><br><b><b>-E</b> <i>hash_algorithm</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the hash algorithm to use when displaying key fingerprints with <b>-l</b> or <b>-L</b> (e.g., <i>md5</i> or <i>sha256</i>).<br><br><b><b>-F</b> <i>keyfile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a FIDO key to be registered.<br><br><b><b>-k</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load a plain private key in PKCS#8 format (usually from a smartcard).<br><br><b><b>-K</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds the identity to the macOS keychain (macOS specific) in addition to the agent. The passphrase will be stored in the keychain.<br><br><b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists fingerprints of all identities currently loaded in the agent.<br><br><b><b>-L</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists public key parameters of all identities currently loaded in the agent.<br><br><b><b>-P</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the addition of an identity with a non-empty passphrase without requiring the <b>-c</b> option for confirmation.<br><br><b><b>-p</b> <i>pin</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the PIN for a smartcard (use with caution, as PIN might be visible in process listings).<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses warning messages.<br><br><b><b>-R</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds an identity to the agent, requiring residency on the hardware token (e.g., FIDO device).<br><br><b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Registers a FIDO resident key, making it permanently available on the device.<br><br><b><b>-S</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a smartcard identity.<br><br><b><b>-s</b> <i>seconds</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a maximum lifetime for the smartcard identity in the agent. After this time, the identity is automatically removed.<br><br><b><b>-T</b> <i>seconds</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the default lifetime for smartcard identities added without a specific <b>-s</b> option.<br><br><b><b>-t</b> <i>seconds</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a maximum lifetime for the identity in the agent. After this time, the identity is automatically removed.<br><br><b><b>-u</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unloads a FIDO resident key from the agent and optionally from the hardware token.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose mode, printing debugging information.<br><br><b><b>-X</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unlocks the agent, allowing identities to be added or removed. Used after <b>-x</b>.<br><br><b><b>-x</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes all identities from the agent and locks the agent. No further identities can be added or removed until unlocked with <b>-X</b>.<br><br>


title: DESCRIPTION
content:
The <b>ssh-add</b> command adds private key identities (RSA, DSA, ECDSA, Ed25519, or FIDO) to the SSH authentication agent, <b>ssh-agent</b>. <br><br>When you connect to a remote server using SSH, your private key is used for authentication. If your private key is protected by a passphrase, you typically have to enter that passphrase every time you use the key. <b>ssh-add</b> simplifies this by loading your decrypted private keys into the agent's memory. Once added, the agent handles subsequent authentication requests without requiring repeated passphrase entries. <br><br>By default, <b>ssh-add</b> attempts to add common identity files such as <i>~/.ssh/id_rsa</i>, <i>~/.ssh/id_dsa</i>, <i>~/.ssh/id_ecdsa</i>, <i>~/.ssh/id_ed25519</i>, and <i>~/.ssh/id_xmss</i>. You can also specify particular key files to add. Beyond adding keys, <b>ssh-add</b> provides options to list currently loaded identities, delete specific keys, or clear all keys from the agent, offering comprehensive management of your SSH authentication credentials.


title: CAVEATS
content:
For <b>ssh-add</b> to function, the <b>ssh-agent</b> daemon must be running and accessible. Identities added to the agent are typically session-specific and will be lost when the agent process terminates, unless explicitly saved (e.g., to the macOS keychain using <b>-K</b>). While convenient, storing decrypted keys in the agent's memory carries security implications; if your session is compromised, the keys in the agent could be exploited.


title: DEFAULT KEY SEARCH PATHS
content:
Without specifying <i>file</i> arguments, <b>ssh-add</b> will attempt to add the following default identity files from the <i>~/.ssh/</i> directory: <i>id_rsa</i>, <i>id_dsa</i>, <i>id_ecdsa</i>, <i>id_ed25519</i>, and <i>id_xmss</i>. If these files are passphrase-protected, you will be prompted for the passphrase for each one.


title: PASSPHRASE PROMPTS
content:
When adding a private key protected by a passphrase, <b>ssh-add</b> will prompt you to enter the passphrase. This passphrase is used to decrypt the key once, and the decrypted key is then stored in <b>ssh-agent</b>'s memory. For subsequent SSH connections using that key, the agent handles the authentication without further passphrase prompts.


title: AGENT COMMUNICATION
content:
<b>ssh-add</b> communicates with <b>ssh-agent</b> via a Unix domain socket (or named pipe on Windows) specified by the <b>SSH_AUTH_SOCK</b> environment variable. This secure communication channel allows <b>ssh-add</b> to send commands to the agent (like 'add key' or 'list keys') and receive responses.


title: HISTORY
content:
<b>ssh-add</b> is an integral part of the OpenSSH suite, a widely adopted tool for secure remote system access. Its development closely mirrors that of <b>ssh-agent</b>, aiming to enhance the usability of SSH by eliminating the need for repeated passphrase entry for private keys. Over time, it has evolved to support a variety of key algorithms including RSA, DSA, ECDSA, Ed25519, and more recently, FIDO hardware security keys, alongside features like key lifetime management and smartcard integration, reflecting the ongoing advancements in SSH security and convenience.


title: SYNOPSIS
content:
<b>ssh-agent</b> [-c | -s] [-D] [-a <I>bind_address</I>] [-E <I>fingerprint_hash</I>] [-P <I>pid_file</I>] [-t <I>life</I>] [<I>command [arg ...]</I>]<br><b>ssh-agent</b> [-k]


title: PARAMETERS
content:
<b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates <b>sh</b> (Bourne shell) commands to set the necessary environment variables (<b>SSH_AUTH_SOCK</b> and <b>SSH_AGENT_PID</b>). This is the default if the <b>SHELL</b> environment variable suggests a <b>sh</b>-like shell.<br><br><b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates <b>csh</b> (C shell) commands to set the necessary environment variables.<br><br><b>-D</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Causes <b>ssh-agent</b> to daemonize (run in the background). This is the default behavior if no <i>command</i> is specified.<br><br><b>-a <I>bind_address</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Binds the agent's Unix domain socket to the specified <i>bind_address</i> instead of a default temporary directory. This is useful for specific network setups or security hardening.<br><br><b>-E <I>fingerprint_hash</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the hash algorithm to use when displaying key fingerprints (e.g., `md5` or `sha256`). The default is `sha256`.<br><br><b>-P <I>pid_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the agent's process ID (PID) to the specified <i>pid_file</i>. Useful for process management and scripting.<br><br><b>-t <I>life</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a default maximum lifetime (in seconds) for identities added to the agent using <b>ssh-add</b>. Identities will be automatically removed after this period. A value of `0` means no limit.<br><br><b><I>command [arg ...]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the specified <i>command</i> with its arguments. The <b>ssh-agent</b> will terminate itself once the <i>command</i> finishes execution.<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Kills the currently running <b>ssh-agent</b> process. This typically requires the <b>SSH_AGENT_PID</b> environment variable to be set, indicating which agent process to terminate.<br><br>


title: DESCRIPTION
content:
<b>ssh-agent</b> is a program that holds private keys used for public key authentication with SSH. Its primary purpose is to eliminate the need for users to repeatedly enter passphrases for their encrypted private keys each time they establish an SSH connection. Instead, users add their keys to the agent once using <b>ssh-add</b>, and the agent then handles all subsequent authentication requests by signing challenges on behalf of the SSH client, without ever exposing the private key directly. This enhances both security, by keeping sensitive key material in memory and off disk, and convenience. <br><br>When started, <b>ssh-agent</b> typically runs as a background daemon and prints environment variables (<b>SSH_AUTH_SOCK</b> and <b>SSH_AGENT_PID</b>) to standard output. These variables, once `eval`uated by the shell, allow SSH clients and tools like <b>ssh-add</b> to locate and communicate with the running agent. Alternatively, <b>ssh-agent</b> can execute a specified command and terminate itself once that command finishes, making it suitable for integration into scripts or short-lived sessions.


title: CAVEATS
content:
<B>Security Risk with Agent Forwarding:</B> While <b>ssh-agent</b> itself enhances security, using agent forwarding (`-A` option with <b>ssh</b>) can introduce risks. A compromised remote server could potentially hijack your forwarded agent connection and use your keys to authenticate to other systems without your explicit consent. Exercise caution and only forward agents to trusted hosts.<br><B>Keys in Memory:</B> The agent stores unencrypted private keys in memory. If your local machine is severely compromised, a malicious process with sufficient privileges could potentially extract these keys from the agent's memory. However, this is generally considered more secure than having unencrypted keys on disk.<br><B>Environment Setup:</B> Proper environment variable setup (e.g., `eval $(ssh-agent -s)`) is crucial for <b>ssh</b> and <b>ssh-add</b> to communicate with the agent. Forgetting to set these variables will result in <b>ssh</b> prompting for passphrases directly, bypassing the agent.


title: COMMON USAGE PATTERN
content:
The most common way to start and connect to <b>ssh-agent</b> is to execute `eval $(ssh-agent -s)` in a shell. This command starts the agent in the background and then uses `eval` to execute the shell commands printed by <b>ssh-agent</b>. These commands set the <b>SSH_AUTH_SOCK</b> and <b>SSH_AGENT_PID</b> environment variables, which are essential for <b>ssh</b>, <b>ssh-add</b>, and other SSH tools to locate and interact with the running agent instance.


title: KILLING THE AGENT
content:
To stop a running <b>ssh-agent</b> and clear its associated environment variables, you can use `eval $(ssh-agent -k)`. This command utilizes the <b>SSH_AGENT_PID</b> variable (which must have been set by a previous `ssh-agent` invocation) to identify and terminate the correct agent process, and then clears the environment variables from the current shell.


title: INTEGRATION WITH DESKTOP ENVIRONMENTS
content:
Many modern desktop environments (e.g., GNOME, KDE) and login managers include built-in SSH key management. They often automatically start an <b>ssh-agent</b> instance upon user login and handle its lifecycle, including prompting for passphrases for keys loaded into the agent. In such environments, manual invocation of <b>ssh-agent</b> may not be necessary for most users.


title: HISTORY
content:
<b>ssh-agent</b> is a core component of the OpenSSH suite, designed to significantly improve both the security and user experience of SSH public key authentication. Its development addressed the inconvenience of repeatedly entering passphrases for encrypted private keys, a common deterrent to using stronger key protection. Introduced early in the history of SSH, the agent concept provided a secure in-memory store for private keys, allowing users to unlock their keys once per session (or boot) and then seamlessly use them for multiple connections. This design has become a standard and essential feature for developers and system administrators relying on SSH for daily operations.


title: SYNOPSIS
content:
This is not a direct command with a standard synopsis. Instead, it describes a method of invoking OpenSSH binaries via symbolic or hard links:<br><br><i><b>ln -s /path/to/ssh /path/to/new_name</b></i><br><i><b>new_name [options] [arguments]</b></i><br><br>For example, to make the <b>ssh</b> binary behave like <b>scp</b>:<br><i><b>ln -s /usr/bin/ssh /usr/local/bin/scp</b></i><br><i><b>scp [options] [source] [destination]</b></i><br><br>This technique enables a single <b>ssh</b> executable to emulate other OpenSSH commands like <b>scp</b> or <b>sftp</b> based on the name it is executed under.


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;This command has no direct parameters, as it is a concept describing how other commands are invoked. The parameters applicable depend on the specific OpenSSH command (e.g., <b>ssh</b>, <b>scp</b>, <b>sftp</b>) that the binary behaves as, determined by its invocation name (<i>argv[0]</i>). Refer to the man pages of the respective commands for their specific options.<br><br>


title: DESCRIPTION
content:
<i>ssh-argv0</i> is not a standalone command but rather a convention or technique used in Unix-like systems, particularly with OpenSSH. It refers to how the <b>ssh</b> binary can adjust its behavior based on the name it's invoked with (the value of <i>argv[0]</i>, the first argument passed to a program).<br><br>This allows a single binary to act as different commands, such as <b>scp</b> or <b>sftp</b>, when symlinked or hardlinked to those respective names. This technique is valuable for saving disk space and simplifying deployments, especially in minimal or embedded environments where resources are constrained.<br><br>For instance, if <i>/usr/bin/ssh</i> is symbolically linked to <i>/usr/local/bin/scp</i>, executing <i>scp</i> will actually run the <b>ssh</b> binary. The <b>ssh</b> binary then inspects its own invocation name (<i>argv[0]</i>) and, recognizing 'scp', changes its internal execution path to behave as the <b>scp</b> command.


title: CAVEATS
content:
<ul><li>Not a direct, executable command; it describes a behavior or convention.</li><li>Relies on the creation and management of symbolic or hard links.</li><li>The exact behavior and support for this technique can depend on the specific OpenSSH implementation and how it was compiled. Some systems might use separate binaries for <b>scp</b> or <b>sftp</b> for various reasons, or provide them as shell script wrappers.</li><li>While common for <b>scp</b> and <b>sftp</b>, this `argv[0]` method is not typically used for other OpenSSH tools like <b>ssh-keygen</b> or <b>ssh-agent</b>, which are usually distinct binaries.</li></ul>


title: HOW IT WORKS
content:
When a program is executed, the operating system passes the name by which it was invoked as the first argument in the `argv` array (specifically `argv[0]`) to the program's `main` function. Programs like the OpenSSH <b>ssh</b> binary are specifically designed to inspect this `argv[0]` value. If `argv[0]` matches 'scp', the binary executes the <b>scp</b> logic; if it matches 'sftp', it executes the <b>sftp</b> logic, and so on. This intelligent self-configuration enables a single executable file to serve multiple command functionalities efficiently.


title: SECURITY IMPLICATIONS
content:
While convenient for resource management, this method introduces a subtle point for security. If an attacker could control `argv[0]` (e.g., by creating malicious symlinks in a user's PATH or manipulating execution paths), they might potentially trick a program into behaving differently than intended. However, in the context of OpenSSH, the use of `ssh-argv0` is typically confined to trusted system paths and relies on system administrators creating the necessary links, mitigating most common security risks related to `argv[0]` manipulation.


title: HISTORY
content:
The concept of a program's behavior being determined by <i>argv[0]</i> is fundamental to Unix and dates back to its early days. It has been used by core utilities like <b>sh</b> (which can become <b>bash</b>, <b>dash</b>, etc., based on invocation) and is a cornerstone of projects like BusyBox, which consolidate many common utilities into a single executable for embedded systems.<br><br>For OpenSSH, this technique gained prominence to facilitate compact installations. By allowing <b>scp</b> and <b>sftp</b> to be implemented as symbolic links to the main <b>ssh</b> executable, disk space is conserved, and dependency management is simplified. This approach proved particularly beneficial in resource-constrained environments or for streamlining the deployment of OpenSSH suites.


title: SYNOPSIS
content:
<b>ssh-copy-id</b> [<b>-f</b>] [<b>-n</b>] [<b>-i</b> <i>identity_file</i>] [<b>-o</b> <i>ssh_option</i>] [<b>-p</b> <i>port</i>] [[<b>-e</b>] <i>user@</i>]<i>hostname</i>


title: PARAMETERS
content:
<b>[<i>user@</i>]<i>hostname</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The target remote host and optional username where the public key should be copied.<br><br><b><b>-i</b> <i>identity_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the public key file to be used. If not specified, <i>ssh-copy-id</i> will attempt to use keys from <i>ssh-agent</i>, and if none are found, it will look for default identity files like <i>~/.ssh/id_rsa.pub</i>, <i>~/.ssh/id_dsa.pub</i>, etc.<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force mode. Not commonly used in typical scenarios.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dry run mode. Shows what commands would be executed without actually performing any changes on the remote host.<br><br><b><b>-o</b> <i>ssh_option</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows passing options directly to the underlying <i>ssh</i> command. For example, <i>-o ProxyJump=jump.example.com</i>.<br><br><b><b>-p</b> <i>port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the port to connect to on the remote host, if different from the default SSH port (22).<br><br><b><b>-e</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Obsolete option, equivalent to <i>-o EscapeChar=none</i>. Used to disable the escape character.<br><br>


title: DESCRIPTION
content:
<i>ssh-copy-id</i> is a utility designed to simplify the process of installing your public SSH key on a remote server. When setting up passwordless SSH logins, you need your public key (e.g., from <i>~/.ssh/id_rsa.pub</i>) to be appended to the <i>~/.ssh/authorized_keys</i> file on the target machine.<br><br>Manually performing this often involves using <i>scp</i> to copy the key and then ensuring correct file permissions with <i>chmod</i>. <i>ssh-copy-id</i> automates these steps: it connects to the remote host (prompting for the password if necessary), creates the <i>.ssh</i> directory and <i>authorized_keys</i> file if they don't exist, appends your public key to <i>authorized_keys</i>, and ensures the correct permissions for secure SSH operation. This makes setting up passwordless SSH authentication significantly easier and less prone to errors.


title: CAVEATS
content:
Initial access to the remote host requires password-based authentication or another method (e.g., existing key) if password authentication is disabled. The <i>sshd</i> service must be running on the remote host. It does not remove or manage existing keys in <i>authorized_keys</i>; it only appends new ones. Ensure your local public key file has appropriate read permissions.


title: DEFAULT KEY BEHAVIOR
content:
If no identity file is specified with the <b>-i</b> option, <i>ssh-copy-id</i> will first try to use any identities loaded into <i>ssh-agent</i>. If <i>ssh-agent</i> is not running or has no identities, it then searches for default public key files in the <i>~/.ssh/</i> directory, such as <i>id_rsa.pub</i>, <i>id_dsa.pub</i>, <i>id_ecdsa.pub</i>, and <i>id_ed25519.pub</i>.


title: PERMISSIONS HANDLING
content:
One of the key advantages of <i>ssh-copy-id</i> is its ability to correctly set permissions on the remote <i>~/.ssh</i> directory and the <i>authorized_keys</i> file. SSH requires strict permissions (e.g., <i>~/.ssh</i> must be 700, and <i>authorized_keys</i> must be 600). If these are incorrect, SSH authentication will fail. <i>ssh-copy-id</i> ensures these permissions are set properly, preventing common 'Permissions too open' errors.


title: HISTORY
content:
<i>ssh-copy-id</i> is a shell script included as part of the OpenSSH suite. Its development aimed to streamline the common task of setting up public key authentication, reducing the manual steps and potential errors associated with copying keys and setting permissions. It has been a standard utility within OpenSSH for many years, simplifying the workflow for system administrators and users alike since the widespread adoption of SSH.


title: SYNOPSIS
content:
<b>ssh-keygen</b> [<i>options</i>]<br><br><u>Common usage examples:</u><br><b>ssh-keygen</b> (<i>interactive RSA key generation</i>)<br><b>ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_new -C "user@host"</b><br><b>ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub</b><br><b>ssh-keygen -p -f ~/.ssh/id_rsa</b>


title: PARAMETERS
content:
<b><b>-b</b> <i>bits</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of bits in the key. For <i>RSA</i> keys, a minimum of <i>2048</i> bits is recommended, with <i>4096</i> being common. For <i>DSA</i>, <i>1024</i> bits is standard. <i>ECDSA</i> and <i>Ed25519</i> have fixed sizes.<br><br><b><b>-t</b> <i>type</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the type of key to create. Valid types include <i>rsa</i>, <i>dsa</i>, <i>ecdsa</i>, and <i>ed25519</i>. <i>Ed25519</i> and <i>ECDSA</i> are generally preferred for modern security.<br><br><b><b>-f</b> <i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the filename of the key file to generate or operate on. By default, keys are saved in <i>~/.ssh/id_rsa</i> (or similar based on type).<br><br><b><b>-P</b> <i>passphrase</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the old passphrase for a key file. Used with <b>-p</b> to change a key's passphrase.<br><br><b><b>-N</b> <i>new_passphrase</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the new passphrase for a key file. Used with <b>-p</b> to set or change a key's passphrase.<br><br><b><b>-C</b> <i>comment</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a new comment for the key file. The comment is typically an identifier like '<i>user@host</i>' and is stored within the public key.<br><br><b><b>-p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the passphrase of a private key file. Requires either interactive input or <b>-P</b> and <b>-N</b> options.<br><br><b><b>-y</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads a private OpenSSH format key file and prints the corresponding OpenSSH public key to standard output. Useful for extracting the public key part.<br><br><b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the fingerprint of a public key file. This is often used to verify key authenticity, displaying it as an <i>MD5</i> or <i>SHA256</i> hash.<br><br><b><b>-R</b> <i>hostname</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes all keys belonging to <i>hostname</i> from a <i>known_hosts</i> file. Useful when a remote host's key changes.<br><br><b><b>-F</b> <i>hostname</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for a specified <i>hostname</i> in a <i>known_hosts</i> file and prints any matching entries. Helps verify if a host's key is already known.<br><br><b><b>-A</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;For each of the standard key types (<i>rsa</i>, <i>ecdsa</i>, <i>ed25519</i>), generate the host keys if they do not exist. Commonly used by system administrators to initialize host keys.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses <b>ssh-keygen</b>'s progress meters and warnings, making the output quieter. Useful in scripts.<br><br>


title: DESCRIPTION
content:
<b>ssh-keygen</b> is a utility for generating, managing, and converting authentication keys for the SSH protocol. Its primary use is to create cryptographic key pairs (public and private keys) for secure, passwordless login to remote systems.<br><br>It supports various key types including <i>RSA</i>, <i>DSA</i>, <i>ECDSA</i>, and <i>Ed25519</i>. Beyond key generation, <b>ssh-keygen</b> can perform operations such as changing key passphrases, converting key formats, displaying public key fingerprints, and managing host keys in <i>known_hosts</i> files. It is a fundamental tool for setting up and maintaining secure SSH access.


title: CAVEATS
content:
<b>Private Key Security:</b> The private key must be kept absolutely secret and secure. Never share it.<br><b>Passphrase Importance:</b> A strong passphrase encrypts the private key, adding a crucial layer of security, especially if the key is compromised.<br><b>File Permissions:</b> Incorrect file permissions (e.g., <i>644</i> for private key) will prevent <i>SSH</i> from using the key. Private keys should be <i>600</i> (read/write by owner only), public keys <i>644</i>.<br><b>Key Type Recommendations:</b> Older key types like <i>DSA</i> are discouraged due to cryptographic weaknesses. Prefer <i>Ed25519</i> or <i>ECDSA</i>, or <i>RSA</i> with at least <i>2048</i> (preferably <i>4096</i>) bits.


title: KEY TYPES AND RECOMMENDATIONS
content:
<b>ssh-keygen</b> supports several cryptographic key types:<br><i><b>RSA:</b></i> Widely used, generally secure with <i>2048</i>-bit or <i>4096</i>-bit keys. Good compatibility.<br><i><b>DSA:</b></i> Older, generally discouraged due to design flaws and fixed <i>1024</i>-bit size. Avoid if possible.<br><i><b>ECDSA:</b></i> Elliptic Curve Digital Signature Algorithm. More modern, offers similar security with smaller key sizes. Requires OpenSSL support.<br><i><b>Ed25519:</b></i> An EdDSA variant. Considered highly secure and efficient, resistant to side-channel attacks. Recommended for new keys.


title: PASSPHRASES AND SSH-AGENT
content:
Encrypting your private key with a strong passphrase adds a vital layer of security. However, repeatedly entering the passphrase can be cumbersome.<br><br>The <b>ssh-agent</b>(1) utility can be used to load your decrypted private key into memory once per session, allowing subsequent <i>SSH</i> connections to authenticate without re-entering the passphrase. This is a highly recommended practice for both security and convenience.


title: HOST KEY MANAGEMENT
content:
When connecting to a new <i>SSH</i> server, its public host key is typically added to your <i>~/.ssh/known_hosts</i> file. <b>ssh-keygen</b> can help manage this file:<br>Use <b>-F</b> <i>hostname</i> to check if a host's key is already known.<br>Use <b>-R</b> <i>hostname</i> to remove a host's key if it changes, preventing '<i>man-in-the-middle</i>' warnings.


title: HISTORY
content:
<i>SSH</i> (Secure Shell) was originally developed by Tatu Ylönen in 1995. <b>ssh-keygen</b> has been an integral component of the <i>OpenSSH</i> suite since its inception, providing the means to create and manage the cryptographic keys fundamental for secure, passwordless authentication. Its capabilities have expanded over time, incorporating newer, more robust cryptographic algorithms like <i>ECDSA</i> and <i>Ed25519</i>, and adapting to evolving security standards and best practices.


title: SYNOPSIS
content:
<b>ssh-keyscan</b> [<i>options</i>] [<i>host ...</i>]<br><b>ssh-keyscan</b> -f <i>file</i> [<i>options</i>]


title: PARAMETERS
content:
<b>-H</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hash all hostnames and IP addresses in the output. This is useful for privacy, as it prevents hostnames and IP addresses from being directly visible in the <i>known_hosts</i> file.<br><br><b>-p <i>port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connect to <i>port</i> on the remote host instead of the default SSH port (22).<br><br><b>-T <i>timeout</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the timeout for connection attempts in seconds. If a host does not respond within this time, it is skipped. The default timeout is 5 seconds.<br><br><b>-t <i>type</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the type of public key to fetch. Supported types include <i>rsa</i>, <i>dsa</i>, <i>ecdsa</i>, and <i>ed25519</i>. Multiple types can be specified as a comma-separated list (e.g., <i>-t rsa,ed25519</i>).<br><br><b>-f <i>file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read hosts or <i>host:port</i> pairs from <i>file</i>, one per line. This is useful for scanning a large number of hosts efficiently.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verbose mode. Print debugging messages about the connection and key collection process.<br><br>


title: DESCRIPTION
content:
<i>ssh-keyscan</i> is a utility for collecting the public SSH host keys of remote servers. It queries hosts, retrieves their public keys, and outputs them in a format suitable for <i>known_hosts</i> files.<br><br>This tool is primarily used to build or update <i>known_hosts</i> files automatically, which helps in preventing "man-in-the-middle" attacks by ensuring that when an SSH client connects to a server, it can verify the server's identity against its stored key. It can scan multiple hosts concurrently and supports various key types, making it efficient for managing SSH host keys across numerous machines.


title: CAVEATS
content:
<b>Security Risk:</b> While useful for building <i>known_hosts</i>, <i>ssh-keyscan</i> itself does <b>not</b> verify the authenticity of the keys it fetches. An attacker performing a Man-in-the-Middle (MITM) attack could provide a forged host key. It's best used over trusted networks or to fetch keys from hosts whose identities are already established via other secure means.<br><br><b>DNS Spoofing:</b> If DNS resolution is compromised, <i>ssh-keyscan</i> could connect to the wrong host and retrieve its key, potentially leading to a false sense of security or a valid but incorrect entry in <i>known_hosts</i>.<br><br><b>Not for Verification:</b> This tool is for <i>collecting</i> keys, not for <i>verifying</i> that an existing <i>known_hosts</i> entry is correct. For runtime verification, the SSH client handles that upon connection.


title: USAGE WITH KNOWN_HOSTS
content:
The output of <i>ssh-keyscan</i> can be directly appended to your <i>~/.ssh/known_hosts</i> file (e.g., <code>ssh-keyscan example.com >> ~/.ssh/known_hosts</code>) to record the host's public key. This prevents the "Are you sure you want to continue connecting (yes/no/[fingerprint])?" prompt on the first connection, streamlining automated scripts and user experience.


title: SCANNING MULTIPLE HOSTS
content:
You can specify multiple hosts on the command line (e.g., <code>ssh-keyscan host1 host2 host3</code>) or use the <i>-f</i> option to read a list of hosts from a file, making it extremely efficient for bulk operations or managing host keys across an entire infrastructure.


title: HISTORY
content:
<i>ssh-keyscan</i> is an integral part of the OpenSSH suite, which has been widely adopted as the de facto standard for secure remote access since its first release in 1999. It evolved to address the need for automated collection of host keys, simplifying the management of <i>known_hosts</i> files, especially in environments with many servers. Its functionality has remained largely consistent, adapting to new key types (like ECDSA and Ed25519) as they gained prominence within the SSH protocol.


title: DESCRIPTION
content:
<I>ssh-keysign</I> is an internal helper program used by the <I>ssh(1)</I> client for host-based authentication. When a user attempts to connect to a remote host, and host-based authentication is enabled, <I>ssh(1)</I> needs to prove the identity of the the *local* host to the *remote* server.<br><br>To achieve this, <I>ssh-keysign</I> reads the host's private key (typically <I>/etc/ssh/ssh_host_rsa_key</I> or similar) and uses it to digitally sign a challenge sent by the remote <I>sshd(8)</I> server. This signature is then sent back to the server, which verifies it using the local host's public key (which it should already have in its <I>known_hosts</I> file or similar).<br><br>Because <I>ssh-keysign</I> needs to access sensitive host private keys, it is typically installed as a <B>setuid</B> root binary with highly restricted permissions. It is not intended for direct user invocation and is automatically called by <I>ssh(1)</I> when required. Its secure operation is crucial for the integrity of host-based authentication.


title: CAVEATS
content:
<B>Not for Direct Use:</B> <I>ssh-keysign</I> is an internal helper and should <B>never</B> be invoked directly by users. Its proper functioning relies on specific system permissions and internal protocol handling.<br><br><B>Security Critical:</B> This program is typically installed as a <B>setuid root</B> binary, meaning it runs with root privileges to access sensitive host private keys. Due to this, it must be installed with very strict file permissions to prevent abuse. Any misconfiguration or vulnerability could lead to serious security compromises, potentially exposing the host's private key or allowing arbitrary file reads.<br><br><B>Host-Based Authentication Only:</B> Its sole purpose is to facilitate host-based authentication in <I>ssh(1)</I>, a specific and less common authentication method compared to public key or password authentication.


title: INTERNAL OPERATION
content:
When <I>ssh(1)</I> determines that host-based authentication is applicable and enabled (via the <B>HostbasedAuthentication yes</B> option in <I>ssh_config(5)</I>), it executes <I>ssh-keysign</I>. The challenge sent by the remote <I>sshd(8)</I> is piped to <I>ssh-keysign</I>'s standard input, and the resulting signature is returned via standard output to <I>ssh(1)</I> for transmission to the server. This design isolates the sensitive private key operations to a small, privileged program, reducing the attack surface of the main <I>ssh</I> client.


title: HISTORY
content:
<I>ssh-keysign</I> is an integral part of the <B>OpenSSH</B> suite, which originated from the <B>OpenBSD</B> project. It was developed as part of the broader effort to create a free and open-source implementation of the SSH protocol, providing secure remote access and file transfer capabilities. Its role in host-based authentication has been consistent since its early inclusion in OpenSSH, evolving with the protocol but maintaining its core function as a secure private key signing helper for the local host.


title: PARAMETERS
content:
<b><i>-v</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output. This can be useful for debugging issues with PKCS#11 library loading or token communication, providing more detailed messages about the helper's operations.<br><br><b><i>-S socket_path</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the Unix domain socket for the <b>ssh-agent</b> to connect to. This option overrides the <i>SSH_AUTH_SOCK</i> environment variable, allowing the helper to target a specific agent instance.<br><br><b><i>PKCS#11 library</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The absolute path to the PKCS#11 shared library (e.g., <i>.so</i> on Linux, <i>.dll</i> on Windows) provided by the manufacturer of the smart card or HSM. This library is crucial for <b>ssh-pkcs11-helper</b> to interact with the hardware device.<br><br>


title: DESCRIPTION
content:
<b>ssh-pkcs11-helper</b> is a utility designed to bridge the gap between the OpenSSH authentication agent (<b>ssh-agent</b>) and cryptographic tokens or smart cards that conform to the PKCS#11 standard. While <b>ssh-agent</b> can natively manage keys stored in files, it lacks direct support for hardware security modules (HSMs) or smart cards.<br><br><b>ssh-pkcs11-helper</b> acts as an intermediary, loading a specified PKCS#11 shared library (provided by the token vendor) and exposing the keys residing on the hardware device to <b>ssh-agent</b>. This helper is typically invoked by <b>ssh-add</b> (using the <i>-s</i> option) to load keys from a PKCS#11 token into the running <i>ssh-agent</i> instance.<br><br>It allows users to leverage the enhanced security offered by hardware-protected keys for SSH authentication, ensuring that private keys never leave the secure confines of the smart card or HSM. By offloading cryptographic operations to the hardware, it significantly reduces the risk of key compromise from software vulnerabilities or malware. It's an essential component for integrating enterprise-grade hardware security with SSH workflows.


title: CAVEATS
content:
<ul><li>Requires a functional PKCS#11 shared library specific to your hardware token; the helper itself does not provide this library.</li><li>The system must have the necessary drivers for the smart card reader or HSM to be recognized and communicate with the PKCS#11 library.</li><li>Compatibility issues may arise with certain PKCS#11 implementations or token firmware versions.</li><li>Private keys on the token are typically protected by a PIN, which will be prompted for during key loading by <b>ssh-add</b>.</li><li>It is not a standalone SSH client; it solely extends the capabilities of <b>ssh-agent</b> to manage hardware-backed keys.</li></ul>


title: USAGE WITH SSH-ADD
content:
To load a key from a PKCS#11 token into your <b>ssh-agent</b>, you typically use `<b>ssh-add -s</b> /path/to/pkcs11/library.so`. The `<b>ssh-add</b>` command internally calls `<b>ssh-pkcs11-helper</b>` with the specified library path to perform the actual key loading and registration with the agent. This simplifies the process for the end-user.


title: ENVIRONMENT VARIABLES
content:
The helper primarily relies on the <i>SSH_AUTH_SOCK</i> environment variable to locate the <b>ssh-agent</b> socket. If this variable is not set, or if you wish to connect to a different agent, the <i>-S</i> option can be used to explicitly specify the agent's socket path.


title: ERROR HANDLING
content:
In case of issues, enabling verbose mode (<i>-v</i>) can provide diagnostic information helpful for troubleshooting. Common problems include an incorrect PKCS#11 library path, missing token drivers, a locked token (requiring PIN unlock), or an incorrect PIN provided.


title: HISTORY
content:
<b>ssh-pkcs11-helper</b> was introduced as part of the OpenSSH suite to address the growing demand for hardware-backed key storage for SSH authentication. As the importance of strong, non-exportable private keys increased, integrating PKCS#11 compliant devices like smart cards and HSMs became crucial. Its development reflects OpenSSH's commitment to providing robust security features, allowing users to leverage industry-standard cryptographic hardware for managing their SSH identities securely, preventing private key exposure on the host system.


title: PARAMETERS
content:
<b><b>-a</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display all associations, including those with zero usage or shares.<br><br><b><b>-A</b> <I>account</I>, <b>--account</b>=<I>account</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display only associations for the specified account(s).<br><br><b><b>--clusters</b>=<I>cluster_list</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only display data for the specified Slurm cluster(s).<br><br><b><b>--federation</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show information from all configured federated clusters.<br><br><b><b>-l</b>, <b>--long</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display more detailed information in a wider format.<br><br><b><b>--noheader</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not print a header line in the output.<br><br><b><b>--nodelay</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not delay display (useful for interactive sessions where data might be updated rapidly).<br><br><b><b>-P</b>, <b>--parsable</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output in a colon-separated parsable format, suitable for scripting.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not display any error messages.<br><br><b><b>--raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display raw data (e.g., microseconds for time) instead of scaled values.<br><br><b><b>-s</b>, <b>--sort</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sort the output by specified field(s).<br><br><b><b>-U</b> <I>user</I>, <b>--user</b>=<I>user</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display only associations for the specified user(s).<br><br><b><b>-u</b>, <b>--usage</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include information on historical usage for accounts and users.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print version information and exit.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print detailed debug information, increasing verbosity level.<br><br>


title: DESCRIPTION
content:
The <b>sshare</b> command is a Slurm workload manager utility designed to display information about fair-share trees and resource usage for various Slurm associations (accounts, users, clusters, QOS). It provides a crucial insight into how computing resources are allocated and consumed in a fair-share enabled Slurm cluster. <br><br>Administrators and users can leverage <b>sshare</b> to monitor current and historical resource utilization, debug fair-share related issues, and understand their effective share of cluster resources based on defined policies and past usage. It can present data in a raw, human-readable, or parsable format, making it versatile for scripting and reporting.


title: CAVEATS
content:
The <b>sshare</b> command relies on the Slurm database (<i>slurmdbd</i>) for historical usage data. If <i>slurmdbd</i> is not running or properly configured, fair-share information might be incomplete or unavailable. <br><br>Fair-share calculations are complex and can be influenced by numerous factors, including `GrpTRES`, `QOS`, `UsageFactor`, and `PreemptModes`. The displayed 'FairShare' value represents an idealized share, and actual resource access depends on job priority, cluster load, and scheduling policies. <br><br>Permissions are also critical; users typically only have access to view their own association data, while Slurm administrators can view all associations.


title: FAIR-SHARE CONCEPT
content:
In Slurm, fair-share scheduling aims to distribute computing resources proportionally among users or groups over time, based on their allocated shares and historical resource consumption. An association's 'Effective Usage' is compared against its 'Normalized Shares' to determine its fair-share factor, which then influences job priority. <b>sshare</b> helps visualize these key metrics.


title: OUTPUT COLUMNS EXPLAINED
content:
Common columns in <b>sshare</b> output include:<br><i><B>Account</B></i>: The Slurm account name.<br><i><B>User</B></i>: The user associated with the usage.<br><i><B>RawShares</B></i>: The configured share for the association.<br><i><B>NormShares</B></i>: Normalized shares after inheritance and adjustments.<br><i><B>RawUsage</B></i>: Raw historical usage, often in 'billable TRES' units.<br><i><B>EffectvUsage</B></i>: Effective historical usage, typically exponentially decaying.<br><i><B>FairShare</B></i>: The calculated fair-share factor, reflecting an account/user's current priority based on their usage relative to their share. A value of 1.0 indicates usage is proportional to shares.


title: HISTORY
content:
The <b>sshare</b> command is an integral part of the Slurm Workload Manager suite, which was first released in 2002. As Slurm evolved to support more sophisticated scheduling policies, especially fair-share scheduling, tools like <b>sshare</b> became essential. Its development paralleled the increasing complexity and adoption of fair-share algorithms in High-Performance Computing (HPC) environments, providing administrators and users with transparency into how resources are being shared and utilized according to defined policies. It has seen continuous updates to reflect new Slurm features and improve reporting capabilities.


title: PARAMETERS
content:
<b><i>-f config_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative configuration file path instead of the default <i>/etc/ssh/sshd_config</i>.<br><br><b><i>-p port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the port number for <i>sshd</i> to listen on, overriding the default port 22.<br><br><b><i>-d</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug mode. The server will not detach from the console and will only accept one connection for debugging purposes.<br><br><b><i>-e</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Logs debug output to standard error instead of the system logging facility (syslog).<br><br><b><i>-h host_key_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a host key file to use. This option can be specified multiple times for different key types.<br><br><b><i>-t</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Test mode. <i>sshd</i> will check the validity of the configuration file and host keys, then exit without starting the daemon.<br><br><b><i>-q</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Quiet mode. Disables most log messages, useful when <i>sshd</i> is run from a startup script.<br><br><b><i>-4</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <i>sshd</i> to use IPv4 addresses only for listening.<br><br><b><i>-6</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <i>sshd</i> to use IPv6 addresses only for listening.<br><br>


title: DESCRIPTION
content:
The <i>sshd</i> command is the OpenSSH server daemon, a critical component for secure remote access to Linux and Unix-like systems. It listens for incoming SSH client connections, typically on port 22. Upon connection, <i>sshd</i> performs cryptographic key exchange, authenticates the user (via passwords, public keys, or other methods), and establishes an encrypted session. This enables secure remote login, command execution, file transfers (SCP/SFTP), and port forwarding over potentially insecure networks. Its behavior is extensively configured through the <i>sshd_config</i> file, allowing administrators to enforce security policies, manage access, and customize server operation.


title: CAVEATS
content:
<b>Security Configuration is Crucial:</b> Improper configuration of <i>sshd</i> (e.g., allowing password authentication, root login, or weak ciphers) can lead to significant security vulnerabilities. Always follow best practices like public key authentication and disabling unnecessary features.<br><b>Firewall Rules:</b> Ensure your firewall permits incoming connections on the configured SSH port (default 22) for <i>sshd</i> to be accessible.


title: CONFIGURATION FILE
content:
The primary way to configure <i>sshd</i> is through its configuration file, typically located at <i>/etc/ssh/sshd_config</i>. This plain-text file contains directives that control various aspects of the server's behavior, including authentication methods, listening port, logging levels, authorized users, and security ciphers. After modifying <i>sshd_config</i>, the <i>sshd</i> service must usually be restarted or reloaded for changes to take effect.


title: SECURITY BEST PRACTICES
content:
For enhanced security, it's highly recommended to:<br><b>1.</b> Use public key authentication instead of passwords.<br><b>2.</b> Disable direct root login.<br><b>3.</b> Limit user access using <i>AllowUsers</i> or <i>AllowGroups</i> directives.<br><b>4.</b> Change the default SSH port (though this is more obfuscation than true security).<br><b>5.</b> Keep <i>sshd</i> and the operating system up to date to patch known vulnerabilities.


title: HISTORY
content:
<i>sshd</i> is the server component of OpenSSH, a free and open-source implementation of the Secure Shell (SSH) protocol. OpenSSH was initially released in 1999 by the OpenBSD project as an alternative to the proprietary SSH software, which had become subject to restrictive licensing. Its development aimed to provide a secure, freely usable SSH suite. <i>sshd</i> quickly became the standard for secure remote access on Unix-like operating systems due to its robust security features, flexibility, and transparent development.


title: PARAMETERS
content:
<b><i>user@</i><I>host</I>:<I>directory</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the remote host and the directory to be mounted. The <I>user@</I> part is optional if the username is the same as local or defined in SSH config.<br><br><b><I>mountpoint</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The local directory where the remote filesystem will be mounted.<br><br><b><b>-o reconnect</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically tries to reconnect if the SSH connection is lost.<br><br><b><b>-o identity_file=</b><I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a path to an SSH identity (private key) file for authentication.<br><br><b><b>-o port=</b><I>number</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the SSH port number on the remote host.<br><br><b><b>-o no_check_host_ip</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables checking the host IP address against known_hosts. Use with caution.<br><br><b><b>-o idmap=</b><I>mode</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies how to map user and group IDs between local and remote systems (e.g., <I>user</I>, <I>file</I>, <I>none</I>).<br><br><b><b>-o uid=</b><I>id</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overrides the user ID of all files on the mounted filesystem.<br><br><b><b>-o gid=</b><I>id</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overrides the group ID of all files on the mounted filesystem.<br><br><b><b>-o umask=</b><I>mode</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the umask for newly created files and directories on the mounted filesystem.<br><br><b><b>-o allow_other</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows other users on the local system to access the mounted filesystem.<br><br><b><b>-o defer_permissions</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defers permission checking to the server, allowing SSH to handle permissions.<br><br><b><b>-o transform_symlinks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to transform remote absolute symlinks into relative ones to make them work locally.<br><br><b><b>-o ssh_command=</b><I>cmd</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative <b>ssh</b> command to execute for the connection.<br><br><b><b>-o direct_io</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses direct I/O for file operations, bypassing the kernel page cache for mounted files.<br><br><b><b>-o ro</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Mounts the filesystem in read-only mode.<br><br><b><b>-o nonempty</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows mounting on a directory that is not empty.<br><br><b><b>-o default_permissions</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables default kernel-level permission checking on the mounted filesystem.<br><br><b><b>-o compression=</b><I>yes/no</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables or disables SSH compression for data transfer.<br><br>


title: DESCRIPTION
content:
<b>sshfs</b> (SSH Filesystem) is a <I>FUSE</I>-based client that allows you to mount a remote directory on your local machine using the Secure Shell (SSH) protocol. It provides a convenient and secure way to access and interact with files on a remote server as if they were stored locally.<br><br><b>sshfs</b> leverages SSH's authentication and encryption capabilities, ensuring that all data transfer is secure. It's particularly useful for tasks like editing remote files with local tools, navigating remote directories with graphical file managers, or accessing large datasets without needing to transfer them entirely. Because it's built on FUSE (Filesystem in Userspace), it runs as a user-space program, simplifying its deployment and usage without requiring kernel modifications.


title: CAVEATS
content:
<b>sshfs</b> performance can be significantly affected by network latency and bandwidth due to its reliance on the SSH protocol and FUSE overhead. Certain file operations, especially those involving many small files or random access, might be slow. File locking and other advanced POSIX features may not behave as expected or might be unreliable, as they depend on the remote server's file system and SFTP server capabilities.<br><br>It's generally not recommended for high-performance computing or for applications that require very low-latency, high-throughput access to remote data.


title: UNMOUNTING
content:
To unmount an <b>sshfs</b> filesystem, use the <b>umount</b> command followed by the mountpoint. For example: <br><code><b>umount</b> <I>/mnt/remote_dir</I></code><br>If the mount is busy, you might need to use <b>umount -l</b> (lazy unmount) or, as a last resort, <b>umount -f</b> (force unmount, use with caution as it can lead to data inconsistencies).


title: SECURITY CONSIDERATIONS
content:
While <b>sshfs</b> provides secure data transfer through SSH encryption, ensure that the SSH keys or passwords used are strong and protected. Be cautious when using options like <I>allow_other</I> or <I>no_check_host_ip</I>, as they can reduce security if not properly understood and configured. Always follow best practices for SSH security, including using key-based authentication instead of passwords where possible.


title: HISTORY
content:
<b>sshfs</b> was primarily developed by Miklos Szeredi, the creator of FUSE (Filesystem in Userspace), in the early 2000s. It quickly gained popularity as a simple yet powerful tool for remote file access, leveraging the ubiquitous SSH protocol to provide secure and convenient file system mounting without requiring complex server-side configurations beyond a standard SSH daemon. Its integration with FUSE made it easily deployable in user-space, avoiding the complexities of kernel modules and making secure remote file access broadly accessible.


title: PARAMETERS
content:
<b><b>-f</b> <i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads the password from the specified <i>filename</i>. This is generally preferred over providing the password directly on the command line for security reasons, though still not fully secure.<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug mode, providing more verbose output for troubleshooting <i>sshpass</i>'s operations.<br><br><b><b>-p</b> <i>password</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the <i>password</i> directly on the command line. <b>This method is highly insecure</b> as the password will be clearly visible in the process list (e.g., via <i>ps -ef</i>) and stored in shell history.<br><br><b><b>-e</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads the password from the <i>SSHPASS</i> environment variable. For example: <i>export SSHPASS='your_password'</i>; then <i>sshpass -e ssh user@host</i>. Remember to unset the variable after use.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details about <i>sshpass</i>'s internal operations.<br><br><b><b>-?</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information for <i>sshpass</i> and exits.<br><br>


title: DESCRIPTION
content:
<i>sshpass</i> is a utility that allows you to provide a password for SSH connections in a non-interactive way. This is particularly useful for scripting and automation where manual password entry is not feasible.<br><br>Instead of requiring a user to type the password at a prompt, <i>sshpass</i> can fetch it from a file, an environment variable, or directly from the command line, and then pipe it to the standard input of the <i>ssh</i> command. While it simplifies automation, it is crucial to understand that <b>it is generally considered insecure</b> for sensitive operations as it exposes the password in plain text, making it visible in process lists or shell history. The recommended and more secure alternative for automation is always SSH key-based authentication.


title: CAVEATS
content:
The primary limitation and concern with <i>sshpass</i> is <b>security</b>. Using it means exposing your password in plain text, which can be seen by other users on the system via process lists (<i>ps -ef</i>) or stored in shell history files. It bypasses the interactive security measures of SSH. For sensitive environments, <b>SSH key-based authentication is always the preferred and most secure method</b> for non-interactive logins. <i>sshpass</i> should be used only when SSH keys are not an option, and with extreme caution, understanding the inherent security risks.


title: USAGE MODES
content:
<i>sshpass</i> supports several methods for providing the password:<br><b>From file:</b> <i>sshpass -f password_file ssh user@host 'command'</i> (Ensure <i>password_file</i> has restricted permissions, e.g., <i>chmod 600 password_file</i>).<br><b>From environment variable:</b> <i>export SSHPASS='your_password'<br>sshpass -e ssh user@host 'command'</i> (Remember to <i>unset SSHPASS</i> immediately after use to remove it from the environment).<br><b>Directly on command line:</b> <i>sshpass -p 'your_password' ssh user@host 'command'</i> (<b>Least secure; avoid this method at all costs</b>).


title: WHEN TO USE (AND NOT USE)
content:
Use <i>sshpass</i> primarily for <b>non-sensitive, quick automation tasks</b> where SSH key authentication is genuinely not an immediate option (e.g., initial server setup, specific legacy network devices, or simple lab environments).<br><br><b>Do not use</b> <i>sshpass</i> for production systems with sensitive data, long-term automation, or anytime security is paramount. Always prioritize configuring SSH key-based authentication for robust, secure, and truly non-interactive access.


title: HISTORY
content:
<i>sshpass</i> was developed to address a specific need: enabling non-interactive password authentication for SSH in shell scripts. Prior to its existence, automating SSH sessions with passwords was cumbersome, often relying on less robust or more general-purpose methods like <i>expect</i> scripts, which are more complex for this specific task. <i>sshpass</i> provides a lightweight, single-purpose utility for this. Its development reflects the pragmatic need for automation in various scenarios, even if it introduces security trade-offs compared to the more secure SSH key-based methods that are now widely adopted.


title: SYNOPSIS
content:
<b>sshuttle</b> [<i>options</i>] <b>-r</b> [<i>[user@]host[:port]</i>] [<i>&lt;subnet1&gt; &lt;subnet2&gt; ...</i>]


title: PARAMETERS
content:
<b><b>-r</b> <i>[user@]host[:port]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the remote server to connect to via SSH. This is a mandatory option.<br><br><b><i>&lt;subnet...&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more subnets (e.g., 192.168.1.0/24, 0.0.0.0/0) that should be routed through the sshuttle tunnel. If 0.0.0.0/0 is used, all traffic not explicitly excluded will be tunneled.<br><br><b><b>-l</b> <i>[ip:]port</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the local IP address and/or port for the transparent proxy. Defaults to 127.0.0.1:12300.<br><br><b><b>-D</b>, <b>--daemon</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs sshuttle in the background as a daemon.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases verbosity. Use multiple times (e.g., <i>-vv</i>) for more debug information.<br><br><b><b>--dns</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Handles DNS queries by proxying them through the remote server. Essential for accessing hostnames on the remote network or resolving public DNS securely.<br><br><b><b>-x</b> <i>&lt;subnet&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes a specific subnet from being tunneled. Can be specified multiple times.<br><br><b><b>--ssh-cmd</b> <i>&lt;command&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom SSH command to use instead of 'ssh'. Useful for passing specific SSH options (e.g., authentication, proxyjump).<br><br><b><b>--seed-hosts</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a file with a list of hostnames (one per line) for sshuttle to pre-resolve for its DNS proxy.<br><br><b><b>--split-dns</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables split DNS, where only DNS queries for domains listed in <i>/etc/resolv.conf</i> are sent through the tunnel, others are resolved locally.<br><br><b><b>--pidfile</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the PID of the daemon process to the specified file when running in daemon mode.<br><br>


title: DESCRIPTION
content:
<b>sshuttle</b> is a lightweight, transparent proxy server that creates a VPN-like connection over an SSH tunnel. Unlike traditional VPNs (like OpenVPN or IPsec), <b>sshuttle</b> does not require complex configuration of VPN software or creation of TUN/TAP devices. Instead, it works by forwarding TCP connections and optionally DNS queries through an SSH connection to a remote server. The remote server then acts as the network's gateway for the forwarded traffic.<br><br>This makes <b>sshuttle</b> ideal for bypassing firewalls, accessing services on a remote network, or securely browsing the internet from an untrusted network. It achieves transparency by using local firewall rules (e.g., <i>iptables</i> on Linux) to redirect traffic, allowing applications to connect to remote resources as if they were directly accessible, without needing proxy awareness. A key advantage is that <b>sshuttle</b> only requires Python on the remote server (which it can upload automatically) and an SSH client on the local machine, making it highly portable and easy to set up.


title: CAVEATS
content:
<b>sshuttle</b> is a powerful tool but has certain limitations:<br><br><i>Not a full IP-level VPN:</i> Unlike true VPNs that create virtual network interfaces (like TUN/TAP devices) and route all IP traffic, <b>sshuttle</b> operates at the TCP stream level and proxies DNS queries. It does not directly support forwarding arbitrary IP protocols (e.g., ICMP, UDP outside of DNS).<br><br><i>Performance Overhead:</i> Traffic is multiplexed over a single SSH connection. While SSH itself is efficient, the overhead of encryption and the single-stream nature can limit throughput, especially for high-bandwidth applications or when the network latency to the SSH server is significant.<br><br><i>Python Requirement:</i> The remote server needs a Python interpreter (version 2.7+ or 3.x). <b>sshuttle</b> will attempt to upload a minimal python script if Python is not found, but a working interpreter is essential for the server-side proxy to function.<br><br><i>Root Privileges on Client (for iptables):</i> On Linux, <b>sshuttle</b> typically requires root privileges (or <i>sudo</i> access) to modify <i>iptables</i> rules for transparent proxying. Some non-root methods exist but are less common.


title: CLIENT-SIDE PRIVILEGES
content:
While <b>sshuttle</b> operates on TCP streams and doesn't require a virtual network device, it typically needs root privileges (or <i>sudo</i>) on the client machine to configure <i>iptables</i> (Linux) or PF (macOS) rules for transparent traffic redirection. Without these privileges, it cannot transparently intercept and forward all network traffic.


title: AUTOMATIC SERVER-SIDE SETUP
content:
One of <b>sshuttle</b>'s major advantages is that it requires no prior installation or configuration on the remote SSH server beyond having a Python interpreter available. <b>sshuttle</b> automatically copies and executes its necessary Python scripts on the remote server once the SSH connection is established, making deployment exceptionally straightforward.


title: TRAFFIC FLOW
content:
When <b>sshuttle</b> is active, outbound TCP connections (and optionally DNS requests) from the client machine are intercepted by local firewall rules, redirected to the <b>sshuttle</b> process, encapsulated within the SSH tunnel, sent to the remote server, and then decapsulated and forwarded to their original destination by the <b>sshuttle</b> process running on the remote server.


title: HISTORY
content:
<b>sshuttle</b> was created by Brian May as an attempt to provide a simple, robust, and transparent proxying solution over SSH without the complexities of traditional VPN setups. Its development focused on ease of use, requiring minimal configuration and no special server-side software installation beyond a Python interpreter (which <b>sshuttle</b> can even upload). It gained popularity among developers and system administrators for its ability to quickly and securely bypass network restrictions and access remote resources, especially in scenarios where full VPN access is overkill or unavailable. Its design prioritizes "transparency" – allowing applications to connect directly without proxy awareness – making it highly versatile for various network tunneling needs.


title: PARAMETERS
content:
<b><i>&lt;host[:port]&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The target hostname or IP address, optionally followed by a port number (default is 443).<br><br><b><b>--no-color</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables colored output for plain text reports.<br><br><b><b>--no-compression</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables tests for SSL/TLS compression, often related to the CRIME attack.<br><br><b><b>--no-renegotiation</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables tests for secure and insecure renegotiation capabilities.<br><br><b><b>--no-heartbleed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips the test for the Heartbleed vulnerability.<br><br><b><b>--no-sslv2</b>, <b>--no-sslv3</b>, <b>--no-tlsv1_0</b>, etc.</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable specific SSL/TLS protocol version tests.<br><br><b><b>--show-certificate</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed information about the server's X.509 certificate.<br><br><b><b>--targets</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads a list of target hosts/ports from the specified file, one per line.<br><br><b><b>--xml</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the scan results in XML format to standard output.<br><br><b><b>--report</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the scan results to the specified file in XML format.<br><br><b><b>--timeout</b> <i>&lt;seconds&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the connection timeout for network operations in seconds.<br><br><b><b>--starttls</b> <i>&lt;protocol&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Tests STARTTLS on a specific protocol (e.g., smtp, ftp, imap, pop3, ldap, rdp, xmpp).<br><br><b><b>--sni-name</b> <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Server Name Indication (SNI) hostname to use during the TLS handshake.<br><br>


title: DESCRIPTION
content:
sslscan is a command-line tool designed to query SSL/TLS services, such as web servers, mail servers, or any other service using SSL/TLS, to determine the protocols and cipher suites they support. <br>It can detect various security vulnerabilities and misconfigurations, including:<br><b>Supported SSL/TLS versions</b> (SSLv2, SSLv3, TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3).<br><b>Weak and strong cipher suites</b>.<br><b>Compression methods</b> (e.g., CRIME attack detection).<br><b>Renegotiation capabilities</b>.<br><b>Heartbleed vulnerability</b>.<br><b>POODLE, FREAK, DROWN, LOGJAM</b>, etc., through cipher and protocol analysis.<br><b>Certificate details</b> (issuer, subject, expiry, serial, key size).<br><b>OCSP stapling</b>.<br><b>HSTS</b> (HTTP Strict Transport Security) headers.<br><b>DNS CAA records</b>.<br><b>Elliptic curves</b>.<br><b>Session tickets</b>.<br>It's widely used by penetration testers, security professionals, and system administrators to assess the security posture of SSL/TLS implementations. It provides a comprehensive report, highlighting potential weaknesses that need remediation. The tool aims to be as non-intrusive as possible while still providing a thorough audit.


title: CAVEATS
content:
<b>sslscan</b> performs active network scans, which may be detected by Intrusion Detection/Prevention Systems (IDS/IPS).<br>The scan provides a snapshot in time; server configurations and vulnerabilities can change rapidly.<br>Always ensure you have explicit permission to scan target systems to comply with legal and ethical guidelines.


title: XML OUTPUT FOR AUTOMATION
content:
A key feature of <b>sslscan</b> is its ability to output results in XML format using the <b>--xml</b> or <b>--report</b> options. This facilitates easy integration with other tools, automated parsing, and generation of custom reports, making it highly valuable for continuous security assessment pipelines.


title: STARTTLS PROTOCOL SUPPORT
content:
Beyond typical HTTPS services, <b>sslscan</b> offers support for testing services that implement STARTTLS via the <b>--starttls</b> option. This allows for the assessment of TLS configurations for protocols like SMTP, FTP, IMAP, POP3, LDAP, RDP, and XMPP, which often upgrade an initial unencrypted connection to TLS.


title: HISTORY
content:
<b>sslscan</b> was originally developed by Ian Gallagher as a fast and reliable command-line tool for identifying SSL/TLS weaknesses. It has since been maintained and improved by various contributors, becoming a staple in penetration testing distributions like Kali Linux due to its comprehensive and efficient auditing capabilities.


title: SYNOPSIS
content:
<b>sslstrip</b> [<i>options</i>]<br>Common usage requires redirection of network traffic, often via iptables rules and ARP spoofing.<br>Example: <b>sslstrip</b> -l 8080 -w stripped_data.log


title: PARAMETERS
content:
<b>-l, --listen <port></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the listening port for <i>sslstrip</i>. This is the port where redirected HTTP traffic from the victim will arrive.<br><br><b>-w, --writefile <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes all stripped (decrypted) data and session information to the specified log file for later analysis.<br><br><b>-k, --kill</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Kills connections that encounter SSL errors. This can help prevent the victim's browser from showing SSL certificate warnings, making the attack more stealthy.<br><br><b>-s, --ssl_only</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs <i>sslstrip</i> to only strip SSL/TLS content, ignoring plain HTTP traffic. This can be useful if you only want to focus on encrypted connections.<br><br><b>-f, --logfile <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a file to log general activity and errors of <i>sslstrip</i>, separate from the stripped data.<br><br><b>-p, --proxy</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables proxy mode, where <i>sslstrip</i> acts as a traditional HTTP proxy. Useful when configuring browsers or applications to explicitly use it as a proxy.<br><br><b>-a, --audit</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs in audit mode. <i>sslstrip</i> will identify and log potential HTTPS targets but will not perform the stripping attack, allowing for reconnaissance.<br><br><b>-u, --host <host></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strips SSL only for connections to the specified host or domain.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of <i>sslstrip</i>.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the help message and available options for the command.<br><br>


title: DESCRIPTION
content:
<i>sslstrip</i> is a powerful tool designed to perform a Man-in-the-Middle (MITM) attack, specifically targeting HTTPS (HTTP Secure) connections. Developed by Moxie Marlinspike, it works by transparently converting HTTPS traffic into HTTP, effectively stripping away the SSL/TLS encryption layer between the victim and the attacker. When a user attempts to access an HTTPS website, <i>sslstrip</i> intercepts the request and proxies it to the actual HTTPS server. However, it rewrites all HTTPS links on the webpage to HTTP links before forwarding the content to the victim's browser. This allows the attacker to view, capture, or even modify all sensitive information (like usernames, passwords, and cookies) that would normally be protected by encryption, without the victim realizing their connection is no longer secure. It relies on other tools like ARP spoofing (`arpspoof`) and `iptables` rules to redirect the victim's traffic through the attacker's machine.


title: CAVEATS
content:
Despite its historical effectiveness, <i>sslstrip</i> faces significant limitations against modern web browsers and server configurations due to the widespread adoption of HSTS (HTTP Strict Transport Security).<br><br><b>HSTS Bypass:</b> HSTS forces browsers to only connect to a website using HTTPS, even if the user types HTTP or clicks an HTTP link. Once a browser has visited an HSTS-enabled site over HTTPS, it will remember this preference for a specified duration, making <i>sslstrip</i> ineffective for subsequent visits.<br><br><b>Browser Warnings:</b> If a browser encounters an SSL error (e.g., due to <i>sslstrip</i> attempting to establish an untrusted SSL connection on behalf of the user), it will typically display prominent security warnings that alert the user to a potential attack.<br><br><b>Legal Implications:</b> Using <i>sslstrip</i> without explicit permission on networks you do not own or control is illegal and unethical, potentially leading to severe legal consequences.


title: ENVIRONMENT SETUP FOR SSLSTRIP
content:
For <i>sslstrip</i> to function, network traffic must be redirected through the attacker's machine. This typically involves:<br>1.  <b>Enabling IP Forwarding:</b> Setting `net.ipv4.ip_forward = 1` in `/etc/sysctl.conf` and applying with `sysctl -p` to allow the attacker's machine to route packets.<br>2.  <b>ARP Spoofing:</b> Using tools like `arpspoof` or `ettercap` to trick the victim and the gateway into sending their traffic to the attacker's MAC address.<br>3.  <b>IPTables Rules:</b> Configuring `iptables` to redirect incoming HTTP traffic (typically on port 80) to <i>sslstrip</i>'s listening port (e.g., `iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port <sslstrip_listen_port>`). This ensures all web traffic intended for port 80 is shunted to <i>sslstrip</i> for processing.


title: HISTORY
content:
<i>sslstrip</i> was publicly released by Moxie Marlinspike at the Black Hat DC conference in 2009. At the time, it demonstrated a groundbreaking and alarming vulnerability in the perceived security of HTTPS connections. Its introduction spurred the development and widespread adoption of countermeasures like HTTP Strict Transport Security (HSTS) and HPKP (HTTP Public Key Pinning, now deprecated), significantly enhancing browser security against such downgrade attacks. While its direct effectiveness against modern browsers is limited, it remains an important historical tool for understanding web security vulnerabilities and the evolution of HTTPS protection.


title: PARAMETERS
content:
<b><I>-t</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read recipients from the message header (To:, Cc:, Bcc: fields). This is often the default or preferred method when piping mail to <i>ssmtp</i>.<br><br><b><I>-v</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output. Displays communication with the SMTP server, which is useful for debugging connection or authentication issues.<br><br><b><I>-s subject</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the subject of the email. <B>Note:</B> It's generally preferred and more robust to include the 'Subject:' header directly in the email content piped to <i>ssmtp</i>'s standard input.<br><br><b><I>-C config_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternate configuration file instead of the default <I>/etc/ssmtp/ssmtp.conf</I>.<br><br><b><I>-q</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt to send messages from the queue. While <i>ssmtp</i> is not designed as a full-featured queuing MTA, this option exists for limited queuing scenarios or compatibility.<br><br><b><I>-a auth_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a file containing authentication details. Typically, authentication is configured directly in <I>ssmtp.conf</I>.<br><br><b><I>recipients...</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more email addresses to send the mail to. If <I>-t</I> is used, these recipients are ignored.<br><br>


title: DESCRIPTION
content:
<i>ssmtp</i> is a minimalist <I>Mail Transfer Agent</I> (MTA) designed to forward email from a local system to a configured remote mail server (SMTP relay). It acts as a <I>sendmail</I>-compatible wrapper, allowing applications and scripts to send outbound emails without the overhead of a full-fledged MTA like Postfix or Sendmail.<br><br>It's particularly useful for systems that only need to send outgoing mail, such as servers sending system alerts, cron job output, or application notifications. <i>ssmtp</i> reads the email content from standard input, typically including headers like 'To:', 'From:', and 'Subject:', and then transmits it via the specified SMTP server using credentials defined in its configuration file. Its simplicity makes it ideal for small footprints and environments where maintaining local mail queues or receiving incoming mail is not required.


title: CAVEATS
content:
<i>ssmtp</i> is a lightweight forwarder, <B>not a full Mail Transfer Agent</B>. It lacks features like local mailboxes, robust mail queuing, and incoming mail processing. <br><br>Configuration files (<I>/etc/ssmtp/ssmtp.conf</I>) often contain sensitive authentication credentials (username/password) in plain text. It is critical to ensure strict file permissions (e.g., <I>0640</I> or <I>0600</I>) to protect these credentials. <br><br>Its development has largely stalled, and it is often considered unmaintained. For new deployments or more robust features, alternatives like <I>msmtp</I> are generally recommended.


title: CONFIGURATION FILES
content:
The primary configuration file for <i>ssmtp</i> is <I>/etc/ssmtp/ssmtp.conf</I>. This file defines the SMTP relay host, authentication credentials, and default sender information. Another related file is <I>/etc/ssmtp/revaliases</I>, which allows mapping local usernames to specific external email addresses for sending.


title: EMAIL CONTENT FORMAT
content:
<i>ssmtp</i> expects email content, including headers (e.g., 'From:', 'To:', 'Subject:') and body, to be provided via standard input in RFC 822/2822 compliant format.


title: HISTORY
content:
<i>ssmtp</i> was developed to provide a simpler, more resource-efficient alternative to traditional, complex <I>Mail Transfer Agents</I> like Sendmail. Its primary goal was to enable Unix-like systems to send outbound email through an external SMTP server without needing a full local mail infrastructure. It gained popularity for its small footprint and ease of configuration, making it suitable for embedded systems, virtual machines, and servers dedicated to specific tasks that only required outbound email capabilities.<br><br>While once widely used, its development has largely ceased, and more modern alternatives like <I>msmtp</I> have emerged, offering better security features (e.g., GnuPG support), multiple account configurations, and more active maintenance.


title: SYNOPSIS
content:
sstat [OPTIONS]<br><i>Example:</i><br><code>sstat -j 12345</code><br><code>sstat -j 12345.0 -o PIDS,RSS,VMSize</code>


title: PARAMETERS
content:
<b>-a, --allsteps</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reports on all job steps for the specified job(s).<br><br><b>-c, --cluster=<cluster_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the cluster name to query.<br><br><b>-d, --delimiter=<char></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a character delimiter for parsable output.<br><br><b>-E, --endtime=<time></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Report on jobs/steps that ended before this time. Format: HH:MM[:SS][AM|PM] MM/DD[/YY] or YYYY-MM-DD[THH:MM[:SS]].<br><br><b>-g, --group</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Group the output by job ID or step ID.<br><br><b>-i, --input=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read job IDs from the specified file, one per line.<br><br><b>-j, --jobid=<job_id[.step_id]></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the job ID (and optional step ID) to report statistics for. Can be a comma-separated list.<br><br><b>-l, --alloc_in_host_order</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Order the output based on the allocation host list.<br><br><b>-M, --clusters=<string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clusters to issue the command to. Use 'all' for all configured clusters.<br><br><b>-n, --nodelist=<hostlist></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Report statistics only for the specified nodes.<br><br><b>-o, --format=<format></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the fields to output. Common fields include: PIDS, RSS, VMSize, CPU, Pages, MinDisk, MaxDisk, AveDisk, Read, Write, Syscall, Freq.<br><br><b>-P, --parsable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output in a colon-separated parsable format.<br><br><b>-p, --parsable2</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output in a delimiter-separated parsable format, with a header.<br><br><b>-r, --raw</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Report raw data values (e.g., bytes instead of KB).<br><br><b>-S, --starttime=<time></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Report on jobs/steps that started after this time. Format: HH:MM[:SS][AM|PM] MM/DD[/YY] or YYYY-MM-DD[THH:MM[:SS]].<br><br><b>-T, --noheader</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress the header line from the output.<br><br><b>-t, --truncate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Truncate string fields to fit the display width.<br><br><b>-u, --usage</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display usage information and exit.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display more detailed information.<br><br><b>-X, --xavg</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show average statistics for each partition rather than individual host details.<br><br>


title: DESCRIPTION
content:
<b>sstat</b> is a command-line utility provided as part of the Slurm Workload Manager. Its primary function is to display various statistics and resource usage information for Slurm jobs and job steps, both active and completed. This tool is invaluable for monitoring job performance, diagnosing issues, and understanding resource consumption on a Slurm-managed cluster. It can report on metrics such as CPU time, memory usage, I/O activity, and more, either for specific jobs/steps or across a range of criteria like timeframes or nodes. <b>sstat</b> supports multiple output formats, including brief summaries, verbose details, and parsable formats suitable for scripting and data analysis. It allows administrators and users to gain insights into how resources are being utilized by their computational workloads.


title: CAVEATS
content:
<b>sstat</b> relies on accounting data collected by Slurm. If <i>slurmdbd</i> (Slurm database daemon) is not configured or running, or if accounting is not enabled, <b>sstat</b> may not return any data or may return incomplete data.<br>The granularity and availability of metrics depend on Slurm's configuration and the accounting storage plugin used. Performance data for jobs that have finished and been purged from the active state may not be available via <b>sstat</b> unless captured by the accounting system.


title: OUTPUT FIELDS (-O OPTION)
content:
The <i>-o</i> or <i>--format</i> option is highly flexible, allowing users to specify exactly which metrics to display. Users can choose from a wide range of fields like PID (Process ID), RSS (Resident Set Size), VMSize (Virtual Memory Size), CPU (CPU time used), Pages (Page faults), MinDisk/MaxDisk/AveDisk (Disk I/O statistics), Read/Write (Bytes read/written), Syscall (System calls), and Freq (CPU frequency). This customizability makes <b>sstat</b> a powerful tool for tailored performance analysis.


title: HISTORY
content:
<b>sstat</b> is an integral part of the Slurm Workload Manager, which originated at Lawrence Livermore National Laboratory (LLNL) in 2002. It was developed as a free, open-source cluster management and job scheduling system for Linux clusters, replacing the proprietary Quadrics QSCHED. As Slurm evolved to support larger and more complex high-performance computing (HPC) environments, <b>sstat</b> was introduced and refined to provide critical real-time and historical performance insights, crucial for resource optimization and debugging in these demanding systems. Its development continues as part of the broader Slurm project, driven by community contributions and the needs of HPC centers worldwide.


title: PARAMETERS
content:
<b><b>-f</b> <i>&lt;font&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the font to be used (e.g., &quot;monospace:pixelsize=14&quot;).<br><br><b><b>-g</b> <i>&lt;geometry&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial window geometry (e.g., &quot;80x24+100+50&quot;).<br><br><b><b>-o</b> <i>&lt;class&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the WM_CLASS property for window managers.<br><br><b><b>-t</b> <i>&lt;title&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial window title.<br><br><b><b>-e</b> <i>&lt;command&gt;</i> [<i>args...</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the specified command with arguments instead of the default shell.<br><br><b><b>-l</b> <i>&lt;lines&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the scrollback buffer size in lines.<br><br><b><b>-m</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables mouse reporting (e.g., for copy/paste with mouse).<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints version information and exits.<br><br><b><b>-w</b> <i>&lt;windowid&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Embeds <i>st</i> into an existing window by ID.<br><br>


title: DESCRIPTION
content:
<i>st</i>, also known as the <b>simple terminal</b>, is a minimalist terminal emulator developed by the suckless.org community. It prioritizes simplicity, speed, and security through a small codebase and adherence to the Unix philosophy. Unlike many feature-rich terminals, <i>st</i> focuses on providing basic terminal functionality without unnecessary bloat. Its configuration is handled by editing a C header file (<i>config.h</i>) and recompiling the source code, which allows for deep customization but requires technical proficiency. <i>st</i> is designed to be highly efficient and integrates well with tiling window managers. It supports basic ANSI escape codes, Unicode, and true color. Users often pair <i>st</i> with multiplexers like <i>tmux</i> or <i>screen</i> for session management and advanced features.


title: CAVEATS
content:
<i>st</i> requires compilation from source for installation and configuration, as its settings are defined in a C header file (<i>config.h</i>).<br>It lacks many features common in other terminal emulators (e.g., tabs, split panes, GUI configuration) unless specifically added via patches or external tools like <i>tmux</i> or <i>screen</i>.<br>The scrollback buffer is typically limited or non-existent by default, requiring specific patches or a scroll program like <i>less</i>.


title: CONFIGURATION PHILOSOPHY
content:
<i>st</i>'s unique configuration method involves modifying a C header file (<i>config.h</i>) and recompiling the application. This approach ensures that the executable contains only the features and settings explicitly desired by the user, leading to a smaller footprint and potentially better performance. It also makes <i>st</i> immutable during runtime, preventing accidental configuration changes.


title: PATCHING COMMUNITY
content:
Due to its minimalist design, the <i>st</i> community heavily relies on &quot;patches&quot; to add desired functionalities. These patches are small code modifications that can be applied to the <i>st</i> source code before compilation, allowing users to tailor their terminal with features like true transparency, scrollback, image support, or custom keybindings without bloat in the core application.


title: HISTORY
content:
<i>st</i> was created by the suckless.org community as part of their philosophy of minimalism and simplicity. It emerged from a desire for a fast, secure, and bloat-free terminal emulator, contrasting with larger, more feature-rich alternatives. Its development emphasizes a small, maintainable codebase and configuration through compile-time options rather than runtime configuration files, reflecting the suckless approach to software design. It has gained popularity among users who prefer a highly customized and resource-efficient computing environment.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Display a help message with available command-line options and exit.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Display the version information of the <b>st-info</b> program and the underlying <i>stlink</i> library, then exit.<br><br><b><b>--probe</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Retrieve and display detailed information specifically about the connected ST-Link debug probe, such as its firmware version, serial number, and product ID. This is often the default behavior if no other action is specified.<br><br><b><b>--serial <i>&lt;serial_number&gt;</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Specify the unique serial number of a particular ST-Link device to query. This option is useful when multiple ST-Link probes are connected to the host system simultaneously.<br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Enable verbose debug output. This provides more detailed logging information that can be helpful for troubleshooting connectivity or communication issues.<br><br><b><b>--devices</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>List all detected ST-Link devices currently connected to the host system, showing their serial numbers and basic identification.<br><br><b><b>--voltage</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Display the measured target voltage of the connected microcontroller. This helps in verifying the power supply to the target device.<br><br><b><b>--opt-baudrate <i>&lt;kHz&gt;</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Set the SWD (Serial Wire Debug) clock speed in kilohertz for communication with the target microcontroller. This can be adjusted for compatibility with different targets or cable lengths.<br><br>


title: DESCRIPTION
content:
The <b>st-info</b> command is a crucial utility within the <i>stlink</i> open-source toolset, designed for interacting with ST-Link debug probes. Its primary function is to retrieve and display comprehensive information about an attached ST-Link device, as well as the target microcontroller it is connected to. This includes the ST-Link's unique serial number, its firmware version, the JTAG/SWD protocol version in use, and the measured voltage of the target board.<br><br>It serves as an essential first step for verifying ST-Link connectivity, diagnosing setup issues, and ensuring compatibility before proceeding with flashing new firmware or debugging an STM32 microcontroller. Developers frequently use <b>st-info</b> to confirm that their debugger is recognized and functioning correctly, providing vital details for troubleshooting. It's a cross-platform tool commonly used on Linux, macOS, and Windows systems.


title: CAVEATS
content:
<ul><li><b>USB Permissions:</b> On Linux, non-root users typically require specific <I>udev</I> rules to gain access to USB-based ST-Link devices. Without these, commands like <b>st-info</b> may report 'Permission denied' errors or fail to detect the probe.</li><li><b>Device Connectivity:</b> The ST-Link probe must be physically connected to the host computer via USB. For target-specific information (e.g., voltage), the probe's SWD/JTAG interface must also be correctly wired to a powered STM32 microcontroller.</li></ul>


title: PERMISSIONS ON LINUX
content:
For <b>st-info</b> and other <i>stlink</i> tools to operate correctly for non-root users on Linux systems, proper <I>udev</I> rules must be in place. These rules, often provided with the <i>stlink</i> package installation (e.g., in <i>/etc/udev/rules.d/</i>), grant read/write access to the ST-Link USB device. Without them, you might encounter 'Access denied' errors or the inability to detect connected probes, even if they are physically present.


title: PROBE AND TARGET CONNECTION
content:
While <b>st-info</b> can list detected ST-Link probes even without a target microcontroller connected, some information (like target voltage) requires the probe's SWD/JTAG interface to be properly connected to a powered STM32 device. Ensure the target board is powered on and correctly wired to the ST-Link probe for complete information retrieval.


title: HISTORY
content:
The <b>stlink</b> project, which includes <b>st-info</b>, began as an open-source community effort to provide cross-platform tools for interacting with ST-Link debug probes, serving as an alternative to STMicroelectronics' proprietary software. Developed by embedded systems enthusiasts and engineers, its goal was to offer flexible command-line utilities for STM32 microcontroller development. <b>st-info</b> emerged as a fundamental diagnostic tool within this suite, enabling quick verification of ST-Link connections and essential device information. Its development has evolved alongside the broader <i>stlink</i> library, continuously improving probe detection, firmware compatibility, and overall feature support.


title: PARAMETERS
content:
<b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the st-util version information and exits.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available options and exits.<br><br><b>-p, --port <port_number></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the TCP port for the GDB server to listen on. The default port is 4242.<br><br><b>-s, --serial <serial_number></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a specific ST-Link device by its unique serial number. Useful when multiple ST-Link probes are connected.<br><br><b>-n, --no-reset</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the target microcontroller from being reset before connecting to it.<br><br><b>-1, --freq <kHz></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the ST-Link clock frequency in kilohertz for communication with the target.<br><br><b>-m, --multi</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables support for multiple GDB clients to connect simultaneously to the st-util server.<br><br><b>-a, --allow-probe</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows GDB clients to specify a probe ID. (Typically for advanced or specific ST-Link firmware features).<br><br><b>-r, --reset</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resets the target microcontroller after establishing the connection. This is often the default behavior.<br><br><b>-d, --debug <level></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the debug verbosity level of st-util. Levels range from 0 (none) to 5 (error), with 3 (info) being the default.<br><br><b>-N, --no-stlink-reset</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the ST-Link device itself from being reset at startup.<br><br><b>-P, --persistent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keeps the st-util GDB server running even after the GDB client disconnects.<br><br><b>-e, --exit-on-disconnect</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Causes st-util to exit automatically when the connected GDB client disconnects.<br><br><b>-f, --flash-size <size></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manually specifies the flash memory size of the target microcontroller in KBytes. Useful for unrecognized chips.<br><br><b>-b, --sram-size <size></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manually specifies the SRAM (RAM) size of the target microcontroller in KBytes. Useful for unrecognized chips.<br><br><b>-R, --ram-offset <offset></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manually specifies the starting memory address (offset) of the SRAM on the target.<br><br>


title: DESCRIPTION
content:
st-util is a crucial command-line utility from the stlink open-source project, designed to facilitate debugging and programming of STMicroelectronics STM32 microcontrollers using ST-Link compatible debug probes. It primarily functions as a GDB server, creating a bridge between the GNU Debugger (GDB) and the target embedded device. When launched, st-util typically listens on a specified TCP port (defaulting to 4242) for incoming GDB connections. Developers can then connect their GDB client to this port, enabling a comprehensive range of debugging operations such as setting breakpoints, stepping through code execution, examining memory contents, and programming (flashing) firmware onto the microcontroller's flash memory. This utility significantly streamlines the embedded development workflow by offering a robust and efficient debugging interface, making it an indispensable tool for anyone working with the popular STM32 family of microcontrollers in a Linux environment.


title: CAVEATS
content:
Requires <i>libusb</i> for communication with the ST-Link device. <br>Users may need to configure <i>udev rules</i> to grant appropriate permissions for accessing the ST-Link without root privileges. <br>Compatibility can vary across different ST-Link firmware versions and specific STM32 microcontroller series. <br>The default GDB server port 4242 might conflict with other services on the host system.


title: GDB CONNECTION
content:
Once <b>st-util</b> is running, establish a debugging session from GDB using the command: <br><code>target extended-remote localhost:&lt;port_number&gt;</code> (replacing &lt;port_number&gt; with the actual port, e.g., 4242).


title: USB DEVICE PERMISSIONS
content:
To allow non-root users to access the ST-Link USB device, it's often necessary to set up <i>udev rules</i>. Consult your distribution's documentation or the <i>stlink</i> project's GitHub page for specific instructions.


title: MULTI-ST-LINK HANDLING
content:
If multiple ST-Link debug probes are connected to your system, use the <b>--serial &lt;serial_number&gt;</b> option to specify which particular device <b>st-util</b> should connect to for the debugging session.


title: HISTORY
content:
st-util emerged as a core component of the <i>stlink</i> open-source project. This initiative was born out of the need for Linux-compatible tools to interact with ST-Link debug probes, providing an essential alternative to the proprietary, often Windows-exclusive, software provided by STMicroelectronics. Driven by the collaborative efforts of the embedded systems community, the <i>stlink</i> project, and consequently st-util, aimed to democratize access to STM32 development on open-source operating systems. Over time, st-util has matured into a widely adopted and stable tool, becoming a standard fixture in many Linux-based embedded development environments, underpinning the debug and programming workflows for countless STM32 projects worldwide.


title: SYNOPSIS
content:
<b>st4topgm</b> [<i>st4file</i>]<br>If <i>st4file</i> is not specified, <b>st4topgm</b> reads from standard input. The output is always written to standard output.


title: PARAMETERS
content:
<b>st4file</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the input SoftImage ST4 file. If omitted, the command reads the ST4 data from standard input.<br><br>


title: DESCRIPTION
content:
<b>st4topgm</b> is a specialized utility from the <i>Netpbm</i> suite designed to convert image files from the <i>SoftImage ST4</i> format into the <i>Portable Graymap (PGM)</i> format. SoftImage ST4 is an older, proprietary still picture file format primarily associated with SoftImage 3D animation software. The PGM format is a simple, grayscale image file format, which is part of the Netpbm family.<br><br>This command takes an ST4 file as input and outputs a grayscale PGM image, discarding any color information present in the original ST4 file. It's particularly useful for processing legacy SoftImage assets into a widely supported open format for further manipulation or viewing within the Netpbm ecosystem.


title: CAVEATS
content:
Color information in the original ST4 file is completely discarded; the output is always a grayscale PGM image.<br>The output PGM always uses a maximum pixel value of 255 (8-bit depth), regardless of the bit depth or content of the input ST4 file.<br>This command processes an older, proprietary file format, reflecting its historical usage within the SoftImage ecosystem.


title: INPUT/OUTPUT
content:
By default, <b>st4topgm</b> reads an ST4 file specified as an argument or from standard input if no file is provided. The resulting PGM image is always written to standard output. This allows for piping its output to other <i>Netpbm</i> tools or redirecting it to a file.


title: OUTPUT FORMAT
content:
The command strictly outputs <i>Portable Graymap (PGM)</i> images. It does not support converting ST4 files into color formats like PPM, even if the ST4 source contains color data. The PGM output will have a maximum pixel value of 255, meaning it produces 8-bit grayscale images.


title: HISTORY
content:
Part of the <i>Netpbm</i> project, which evolved from the <i>PBMplus</i> package initially released in 1991. <b>st4topgm</b> was developed to support the conversion of SoftImage ST4 files, a format prevalent during the 1990s and early 2000s in the 3D animation industry. Its inclusion in Netpbm reflects the suite's goal to provide comprehensive tools for converting between various image formats, including more obscure or proprietary ones.


title: PARAMETERS
content:
<b><I>PID</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The Process ID of the running process for which to display the stack trace. Multiple PIDs can often be specified.<br><br>


title: DESCRIPTION
content:
The <I>pstack</I> command (often a script or utility wrapping <I>gdb</I>) is used to display the call stack of a running process. It attaches to a specified Process ID (PID) and outputs a symbolic stack trace for all threads within that process. This is invaluable for debugging live processes, understanding where a program is currently executing, or diagnosing deadlocks and infinite loops. <I>pstack</I> simplifies the process of obtaining a stack trace, as it automates the steps that would typically be performed manually using a debugger like <I>gdb</I>, such as attaching to the process, getting a backtrace, and detaching. It's particularly useful when you need a quick snapshot of a process's state without launching a full debugging session.


title: CAVEATS
content:
<I>pstack</I> typically relies on <I>gdb</I> being installed and accessible in the system's PATH.<br>It requires appropriate permissions to attach to the target process, often necessitating root privileges or being the owner of the process.<br>Attaching to a process with <I>pstack</I> (or <I>gdb</I>) momentarily pauses the process. While usually brief, this can impact real-time or performance-sensitive applications.<br>The quality of the stack trace (e.g., symbol resolution, line numbers) depends on whether the target program was compiled with debugging information (e.g., using the <B>-g</B> flag in GCC).<br>It may not work reliably or at all for certain types of processes, such as kernel threads or processes that are protected against debugging.


title: USAGE EXAMPLE
content:
To use <I>pstack</I>, first find the Process ID (PID) of the application you want to inspect. You can use commands like <I>ps</I> or <I>top</I>.<br><br>1. <B>Find the PID:</B><br> <i>ps aux | grep my_application</i><br>   (Let's say the PID is 12345)<br><br>2. <B>Run pstack:</B><br> <i>sudo pstack 12345</i><br>   (Use <I>sudo</I> if you don't own the process or need root privileges)<br><br>This will output the call stack for all threads within process 12345, showing the function calls leading to the current execution point.


title: HISTORY
content:
The <I>pstack</I> utility is not a standalone command with a long independent development history. Instead, it emerged as a convenience wrapper around the powerful <I>GNU Debugger</I> (<I>gdb</I>). Debuggers have long been able to inspect process stacks, but the commands could be cumbersome. <I>pstack</I> automates the common task of attaching, printing a backtrace, and detaching, making it quicker for system administrators and developers to get a snapshot of a process's state. Its exact origins are somewhat varied, with different Unix-like systems and Linux distributions providing their own versions or scripts, often as part of <I>gdb</I>'s ancillary utilities or standalone packages like <I>procps-ng</I>.


title: PARAMETERS
content:
<b>-a or --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not ignore entries starting with '.' (hidden files).<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a long listing format, showing permissions, owner, group, size, and modification time.<br><br><b>-h or --human-readable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;With -l, print sizes in human readable format (e.g., 1K, 234M, 2G).<br><br><b>-R or --recursive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List subdirectories recursively.<br><br><b>-t</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sort by modification time, newest first.<br><br><b>-S</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sort by file size, largest first.<br><br><b>-d or --directory</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List directories themselves, not their contents. Useful with -l.<br><br><b>-F or --classify</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Append indicator (one of */=>@|) to entries.<br><br>


title: DESCRIPTION
content:
The <b>ls</b> command is one of the most fundamental and frequently used commands in Unix-like operating systems. It is used to list the contents of directories. By default, when executed without any arguments, <b>ls</b> lists the files and subdirectories in the current working directory, excluding hidden files (those starting with a dot '.').<br><br>When given one or more file or directory names as arguments, <b>ls</b> will list information about those specific files or the contents of those directories. The command provides various options to control the format and content of the output, allowing users to view detailed information such as file permissions, ownership, size, last modification time, and more. It is an essential tool for navigating and understanding the file system hierarchy.


title: CAVEATS
content:
The exact output formatting (especially colors) can vary significantly based on system configuration, environment variables (like LS_COLORS), and the shell being used.<br><br>When listing files in directories where you do not have read permissions, <b>ls</b> will typically report "Permission denied" errors for those directories, even if you can see their names.


title: COLORIZED OUTPUT
content:
Many modern Linux distributions configure <b>ls</b> to output colors by default. This is usually managed through an alias (e.g., <I>alias ls='ls --color=auto'</I>) and the <I>LS_COLORS</I> environment variable, which defines the colors for different file types (directories, executables, symbolic links, etc.). This greatly enhances readability.


title: WILDCARD USAGE
content:
<b>ls</b> can be effectively used with shell wildcards (globbing) like <I>*</I> (matches any sequence of characters), <I>?</I> (matches any single character), and <I>[]</I> (matches any character within the brackets). For example, <I>ls *.txt</I> lists all files ending with <I>.txt</I> in the current directory.


title: HISTORY
content:
The <b>ls</b> command is one of the oldest and most fundamental utilities in the Unix operating system, originating from the earliest versions of Unix developed at Bell Labs in the early 1970s. Its design was influenced by the <I>DIR</I> command found in Multics. Over the decades, it has been reimplemented numerous times (e.g., GNU Coreutils <b>ls</b> for Linux) but has largely retained its core functionality and interface, becoming a ubiquitous tool across all Unix-like systems. Its evolution has focused on adding more options for detailed output and better integration with modern file systems.


title: SYNOPSIS
content:
<b>stap</b> [ <i>options</i> ] <i>SCRIPT_FILE</i> [ <i>script-arguments ...</i> ]<br><b>stap</b> [ <i>options</i> ] <b>-e</b> <i>SCRIPT_TEXT</i> [ <i>script-arguments ...</i> ]<br><b>stap</b> [ <i>options</i> ] <b>-l</b> <i>PROBE_PATTERN</i>


title: PARAMETERS
content:
<b><b>-g</b>, <b>--guru</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables guru mode, allowing scripts to use constructs that might be unsafe or unstable.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of messages during compilation and execution.<br><br><b><b>-p</b> <i>N</i>, <b>--pass=</b><i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stops <i>stap</i> after a specified compilation pass <i>N</i> (e.g., 1=parse, 2=elab, 3=sconf, 4=xlate, 5=cparse, 6=ld).<br><br><b><b>-o</b> <i>FILE</i>, <b>--output=</b><i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs the script's output to the specified <i>FILE</i> instead of standard output.<br><br><b><b>-D</b> <i>VAR=VALUE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines a preprocessor macro <i>VAR</i> with an optional <i>VALUE</i>, similar to C's #define.<br><br><b><b>-I</b> <i>DIR</i>, <b>--search-dir=</b><i>DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds <i>DIR</i> to the list of directories searched for included SystemTap files (e.g., .stp, .h).<br><br><b><b>-l</b> <i>PROBE</i>, <b>--list-probes=</b><i>PROBE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available probe points matching the given <i>PROBE</i> pattern (e.g., 'kernel.function("sys_*")').<br><br><b><b>-e</b> <i>SCRIPT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the <i>SCRIPT</i> text directly from the command line, useful for short one-liner scripts.<br><br><b><b>-c</b> <i>CMD</i>, <b>--command=</b><i>CMD</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the specified <i>CMD</i> and terminates the SystemTap script when <i>CMD</i> exits.<br><br><b><b>-F</b>, <b>--unbuffered</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables buffering of output, causing each line to be flushed immediately.<br><br><b><b>-s</b> <i>N</i>, <b>--buffer-size=</b><i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the per-CPU buffer size for collected data in kilobytes (default is 4MB per CPU).<br><br><b><b>-w</b>, <b>--warn-error</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treats all warnings as errors, causing compilation to fail if warnings are issued.<br><br><b><b>--sysroot=</b><i>DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative system root directory for locating kernel source and debuginfo.<br><br><b><b>-r</b> <i>RELEASE</i>, <b>--release=</b><i>RELEASE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the kernel release version for which to compile the script, useful for cross-compilation.<br><br>


title: DESCRIPTION
content:
<i>stap</i> is the front-end command for <i>SystemTap</i>, a powerful tracing and probing tool for the Linux kernel and user-space applications. It allows developers and system administrators to gather detailed information about system activities in real-time, without recompiling the kernel or application. <i>SystemTap</i> uses a simple scripting language (<i>Stap Language</i>) to define what data to collect, when to collect it (probes), and what to do with it. This makes it invaluable for debugging performance issues, understanding kernel behavior, and troubleshooting complex system problems.<br><br>The <i>stap</i> command compiles these scripts into kernel modules, loads them, runs them, and then unloads them automatically or manually. It provides a safe and non-intrusive way to instrument the running system, with robust safeguards to prevent system crashes or instability. It supports a wide range of probing points, including kernel functions, user-space functions, tracepoints, kprobes, performance counters, and more, offering deep visibility into system internals.


title: CAVEATS
content:
Using <i>stap</i> typically requires <b>root privileges</b>. It also necessitates the presence of matching <b>kernel headers</b> and <b>debuginfo packages</b> for the running kernel. While <i>SystemTap</i> is designed with safety in mind and employs a verifier to check scripts, poorly written or malicious scripts, especially when using 'guru mode' (<b>-g</b>), can potentially lead to system instability or crashes. The performance overhead varies greatly depending on the complexity and frequency of the probes; excessive probing can impact system performance.


title: STAP LANGUAGE
content:
<i>SystemTap</i> scripts are written in a specialized, event-driven language. It shares similarities with C but is purpose-built for tracing, offering constructs like probes, handlers, and aggregate functions to collect and process data in real-time.


title: PROBE POINTS
content:
<i>SystemTap</i> can attach probes to a wide variety of locations, including kernel functions, system calls, user-space functions, tracepoints, Kprobes, Uprobes, performance counters, and timers. This allows for extremely granular observation of system behavior.


title: SAFETY FEATURES
content:
A core design principle of <i>SystemTap</i> is safety. Before execution, scripts undergo a rigorous verification process (static analysis and sandboxing) to ensure they cannot crash the kernel, loop infinitely, or leak sensitive data unintentionally. This makes it suitable for production environments.


title: HISTORY
content:
The <i>SystemTap</i> project, with <i>stap</i> as its primary interface, began development around 2005. It was primarily driven by engineers from Red Hat, IBM, and Intel. The motivation was to create a robust, safe, and dynamic tracing framework for the Linux kernel, similar in concept to Solaris's DTrace, but tailored for Linux. It aimed to provide system administrators and developers with a powerful tool for deep kernel and user-space introspection without requiring kernel recompilation or reboot. Over the years, <i>SystemTap</i> has become an integral part of the Linux debugging and performance analysis ecosystem, seeing continuous development to enhance its features, safety, and performance.


title: SYNOPSIS
content:
<b><br>starship init <I>SHELL<I> [OPTIONS]<br>starship prompt [OPTIONS]<br>starship config [OPTIONS]<br>starship module <I>MODULE_NAME<I> [OPTIONS]<br>starship <I>COMMAND<I> [OPTIONS]</b>


title: PARAMETERS
content:
<b>init <I>SHELL<I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initializes starship for the specified shell (e.g., <b>bash</b>, <b>zsh</b>, <b>fish</b>, <b>powershell</b>, <b>nushell</b>, <b>elvish</b>, <b>ion</b>). This command outputs the necessary shell script to set up the prompt.<br><br><b>prompt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the current prompt string based on the active configuration and environment. This command is primarily used internally by the shell's <b>PROMPT_COMMAND</b> (or equivalent).<br><br><b>config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the Starship configuration file (<b>starship.toml</b>) in your default editor for modification. If the file doesn't exist, it creates a new one with a basic structure.<br><br><b>module <I>MODULE_NAME<I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays information and the rendered output for a specific Starship module (e.g., <b>git_branch</b>, <b>nodejs</b>, <b>kubernetes</b>). Useful for debugging module-specific configurations.<br><br><b>print-config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the current active Starship configuration to standard output, including any default values. This is helpful for reviewing the full configuration that Starship is using.<br><br><b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message for the <b>starship</b> command or its subcommands.<br><br><b>--version, -V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information for the installed <b>starship</b> executable.<br><br>


title: DESCRIPTION
content:
Starship is a minimal, blazing-fast, and infinitely customizable prompt for any shell. It is designed to be universal, working across various shell environments like Bash, Zsh, Fish, PowerShell, Nushell, and more. Written in Rust, Starship prioritizes performance, ensuring your shell remains responsive even with a rich and informative prompt. Its modular architecture allows users to enable or disable specific elements (like Git status, Kubernetes context, Node.js version, etc.) and customize their appearance with ease, often through a simple TOML configuration file. Starship aims to provide a beautiful and functional prompt without the overhead of larger shell frameworks, enhancing developer productivity by providing immediate context about their current working environment.


title: CAVEATS
content:
For the best visual experience, including icons and symbols, a <I>Nerd Font</I> (e.g., FiraCode Nerd Font, JetBrains Mono Nerd Font) should be installed and configured in your terminal emulator. Without it, some prompt elements may appear as placeholder characters or be missing. While Starship is fast, extremely complex custom commands or network-bound information in the prompt can still introduce latency.


title: CONFIGURATION
content:
Starship's extensive customization is primarily managed through a TOML configuration file, typically located at <b>~/.config/starship.toml</b>. This file allows users to define the order of modules, customize their symbols, colors, and formatting, and set conditional display rules. The modular approach makes it easy to add or remove context-aware information from the prompt without modifying complex shell scripts.


title: MODULES
content:
Starship's functionality is broken down into small, independent units called modules. Each module is responsible for displaying a specific piece of information, such as the current working directory, Git status, programming language versions (Node.js, Python, Rust, Go, etc.), cloud provider contexts (AWS, GCP, Azure), Kubernetes contexts, and more. Users can enable, disable, and reorder these modules in their configuration to tailor the prompt to their exact needs.


title: HISTORY
content:
Starship was created by Matija Marohnić and first released in 2019. Its development was motivated by a desire for a fast, universal, and easily customizable shell prompt that transcended the limitations of shell-specific frameworks. By being written in Rust, Starship capitalized on Rust's performance and memory safety features, which contributed to its reputation as a 'blazing fast' prompt. Its cross-shell compatibility quickly made it a popular choice for developers using diverse environments, offering a consistent and powerful prompt experience across their various machines and shells.


title: SYNOPSIS
content:
<b>starship</b> <b>init</b> <I>shell</I> [<I>options</I>]<br><br><b>Examples:</b><br><I>eval "$(starship init bash)"</I><br><I>starship init zsh | source</I><br><I>starship init fish | source</I>


title: PARAMETERS
content:
<b><I>shell</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The mandatory name of the shell for which to generate the initialization script. Common values include <I>bash</I>, <I>zsh</I>, <I>fish</I>, <I>powershell</I>, <I>nu</I>, <I>elvish</I>, <I>tcsh</I>, <I>xonsh</I>, and <I>ion</I>.<br><br><b>--print-full-init</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the full initialization script, including all functions and variables, to standard output. This can be useful for debugging or complex shell setups.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information about the <I>starship init</I> subcommand.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version of the <I>Starship</I> prompt.<br><br>


title: DESCRIPTION
content:
<I>starship init</I> is a subcommand of the <I>Starship</I> prompt, a fast, customizable, and cross-shell prompt for the terminal. Its primary function is to generate the necessary initialization script for <I>Starship</I> to work correctly within a specified shell environment.<br><br>Instead of being a standalone executable that directly modifies your shell, <I>starship init</I> outputs the shell-specific code to standard output. Users typically pipe this output or source it directly within their shell configuration files (e.g., <I>.bashrc</I>, <I>.zshrc</I>, <I>config.fish</I>, <I>config.nu</I>).<br><br>This approach ensures that <I>Starship</I> integrates seamlessly and loads its prompt logic whenever a new shell session begins, providing a highly responsive and information-rich prompt experience. It supports a wide range of shells, making it a versatile tool for unifying prompt appearance across different environments. The generated script handles aspects like prompt rendering, command execution time, Git status, and other contextual information.


title: CAVEATS
content:
The output of <I>starship init</I> must be sourced or evaluated by the shell, not just executed. Incorrect sourcing can lead to <I>Starship</I> not loading or causing shell errors.<br><br>Requires the <I>starship</I> executable to be installed and available in the system's PATH. Modifying shell configuration files (like <I>.bashrc</I> or <I>.zshrc</I>) requires care to avoid breaking existing shell functionality.


title: CONFIGURATION
content:
<I>Starship</I>'s appearance and behavior, including the modules displayed by the prompt, are extensively configurable via a <I>starship.toml</I> file. This configuration file is typically located at <I>~/.config/starship.toml</I>.<br><br>It allows users to define custom prompt elements, colors, and conditional rendering based on contextual information such as Git status, Python virtual environments, Node.js versions, and more.


title: TYPICAL USAGE EXAMPLES
content:
Here are common ways to integrate <I>Starship</I> into different shells using the <I>init</I> command:<br><ul><li>For <B>Bash</B>: Add <I>eval "$(starship init bash)"</I> to <I>~/.bashrc</I></li><li>For <B>Zsh</B>: Add <I>eval "$(starship init zsh)"</I> to <I>~/.zshrc</I></li><li>For <B>Fish</B>: Add <I>starship init fish | source</I> to <I>~/.config/fish/config.fish</I></li><li>For <B>Nushell</B>: Add <I>starship init nu | save starship.nu</I> and then <I>source starship.nu</I> to your <I>$nu.config-path</I></li></ul>


title: HISTORY
content:
<I>Starship</I> emerged in the late 2010s as a modern, cross-shell prompt, quickly gaining popularity due to its speed (written in Rust), extensive configurability, and ease of installation. The <I>starship init</I> subcommand is central to its design philosophy, providing a standardized and elegant way for the prompt to integrate seamlessly with diverse shell environments.<br><br>Its development reflects a broader trend towards highly customizable and portable developer tooling, abstracting away the complexities of shell-specific prompt hooks and making <I>Starship</I> truly universal across various terminal setups.


title: PARAMETERS
content:
<b><i>client_options</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Options or arguments passed to the client program (e.g., window manager, desktop environment, or an initial terminal like xterm) that is launched by <b>xinit</b>. These options are specific to the client application being started.<br><br><b><i>--</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A mandatory separator used to distinguish options intended for the client program from those intended for the X server itself. Any arguments following this separator are passed to the X server.<br><br><b><i>server_options</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Options or arguments passed directly to the X server program (e.g., <b>Xorg</b>). These can control various aspects of the X server's behavior, such as the display number, screen resolution, color depth, or access control settings.<br><br>


title: DESCRIPTION
content:
The <b>startx</b> command is a shell script that serves as a front-end to the <b>xinit</b> program. Its primary purpose is to simplify the process of starting the X Window System graphical environment on a Linux system. It typically reads user-specific configuration files (like <i>~/.xinitrc</i> and <i>~/.xserverrc</i>) and system-wide defaults to determine which X server and client (such as a window manager or desktop environment like GNOME or KDE) to launch. While <b>startx</b> historically was a common way to initiate a graphical session directly from the console, modern Linux distributions often utilize display managers (e.g., GDM, LightDM, SDDM) to manage graphical logins and sessions automatically. This makes direct <b>startx</b> usage less frequent for typical daily operation but still valuable for troubleshooting, custom setups, or environments without a display manager. It is important to note that <b>startx</b> is specifically for graphical sessions and is not a general-purpose command for starting background services or regular terminal applications.


title: CAVEATS
content:
The term "start" in Linux is broad and implemented by various commands. <b>startx</b> specifically initiates a graphical X session and is not a universal command for starting any application or service. For system services, <b>systemctl start</b> (on systemd-based systems) or <b>service start</b> (on older SysVinit/Upstart systems) are used. Running a regular application from the terminal simply involves typing its name. <b>startx</b> relies heavily on configuration files (<i>~/.xinitrc</i>, <i>~/.xserverrc</i>, and system defaults), and its behavior can vary significantly based on their content.


title: NO UNIVERSAL "START" COMMAND IN LINUX
content:
It is crucial to understand that there is no single, universal "start" command in Linux that can be used to initiate any type of process or service. The method for starting something depends on its nature and the system's configuration. The commands used for 'starting' include:


title: STARTING SYSTEM SERVICES
content:
For managing background services or daemons on modern Linux distributions that use <b>systemd</b> (like Debian, Ubuntu, Fedora, CentOS, RHEL), the primary command is <b><br>systemctl start</b> <i>service_name</i><br>For example, <b>systemctl start nginx.service</b> would start the Nginx web server. On older systems or those using SysVinit/Upstart, the command might be <b><br>service</b> <i>service_name</i> <b>start</b>


title: STARTING USER APPLICATIONS
content:
To start a regular application from the terminal, you typically just type its executable name, e.g., <b>firefox</b> to launch the web browser. To run an application in the background and free up the terminal, you can append an ampersand (<b>&</b>) to the command, e.g., <b>firefox &</b>. For graphical applications, this usually opens a new window.


title: STARTING GRAPHICAL SESSIONS (BEYOND STARTX)
content:
While <b>startx</b> can initiate an X session, most users log into graphical environments through a Display Manager (e.g., GDM, LightDM, SDDM). These managers handle the complexities of starting the X server, launching the desktop environment, and managing user sessions automatically after login.


title: HISTORY
content:
The <b>startx</b> command emerged as a convenient wrapper around <b>xinit</b>, simplifying the direct invocation of the X Window System from the console. Its origins are deeply intertwined with the early development of X, providing a user-friendly script to launch the graphical environment before the widespread adoption of graphical login managers (display managers). While it remains a functional and robust tool, particularly for custom or minimal X setups and troubleshooting, its general usage for starting daily graphical sessions has diminished with modern distributions' reliance on sophisticated display manager solutions that automate the login and session startup process.


title: SYNOPSIS
content:
<b>start-pulseaudio-kde</b><br><i><br>This command typically does not accept any direct command-line options.</i>


title: PARAMETERS
content:
<b><i>(None)</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;This script typically does not accept direct command-line parameters, acting primarily as a startup helper.<br><br>


title: DESCRIPTION
content:
The `<b>start-pulseaudio-kde</b>` command is a shell script primarily used in KDE Plasma desktop environments to ensure the PulseAudio sound server is properly started and configured for the user's session. PulseAudio acts as a proxy for your sound applications, allowing for advanced features like per-application volume control, easy device switching, network audio, and more. This script typically sets up necessary environment variables (like `PULSE_SERVER`), checks if an instance of PulseAudio is already running, and if not, initiates the `<b>pulseaudio</b>` daemon with appropriate options for a smooth KDE integration. Its existence streamlines the audio setup for KDE users, handling potential complexities of starting the sound server in the correct context, ensuring that KDE applications can connect to and utilize PulseAudio effectively for all audio playback and recording needs. While its function was crucial for older KDE setups, modern distributions often leverage `<b>systemd --user</b>` services to manage PulseAudio, potentially making this script less central or even obsolete in newer Plasma versions.


title: CAVEATS
content:
<ul><li><b>KDE Specific:</b> This script is designed for and primarily used within KDE Plasma desktop environments. It may not function correctly or be necessary in other desktop environments like GNOME, XFCE, or MATE.</li><li><b>Deprecation:</b> In more recent Linux distributions and KDE Plasma versions (e.g., Plasma 5.20+), the startup of PulseAudio is often managed by `<b>systemd --user</b>` services. This means `<b>start-pulseaudio-kde</b>` might be less relevant or even absent, as `<b>systemd</b>` handles the user session's PulseAudio instance automatically.</li><li><b>Dependencies:</b> Requires PulseAudio to be installed on the system.</li><li><b>Troubleshooting:</b> If PulseAudio is already running with a different configuration or under a different user, this script might fail to start a new instance or lead to conflicts. Killing existing PulseAudio processes (`<b>pulseaudio -k</b>`) might be necessary before retrying.</li></ul>


title: SCRIPT LOCATION AND BEHAVIOR
content:
The `<b>start-pulseaudio-kde</b>` script is typically located in a system's executable path, often under `/usr/bin/` or `/usr/bin/startkde/` (depending on distribution). Its primary function is to check for an existing PulseAudio daemon instance for the current user and, if none is found, to launch `<b>pulseaudio --start</b>` while ensuring necessary environment variables (like `PULSE_SERVER` and `XDG_RUNTIME_DIR`) are correctly set for KDE applications to discover and connect to the sound server. It often includes logic to handle different PulseAudio versions or configurations specific to KDE.


title: DEBUGGING AND MANUAL STARTUP
content:
If PulseAudio is not starting correctly in KDE, you can try to debug by running the script manually from a terminal. Before doing so, it's often useful to kill any existing PulseAudio processes with `<b>pulseaudio -k</b>`. Then, running `<b>start-pulseaudio-kde</b>` (or `<b>pulseaudio --start</b>` directly) can provide output helpful for diagnosing issues. Checking system logs (e.g., with `<b>journalctl --user -u pulseaudio.service</b>` on systemd systems) is also crucial for identifying startup failures.


title: HISTORY
content:
The `<b>start-pulseaudio-kde</b>` script emerged as part of KDE's efforts to integrate the PulseAudio sound server seamlessly into its desktop environment. Prior to PulseAudio's widespread adoption (which began gaining significant traction in the mid-2000s), Linux audio was often managed directly by ALSA or earlier sound servers like Esound (GNOME) or aRts (KDE). With PulseAudio's design offering a more robust and flexible audio architecture, it became the de facto standard for desktop Linux. KDE, having previously relied on its own aRts sound system, embraced PulseAudio, leading to the creation of integration scripts like `<b>start-pulseaudio-kde</b>` to bridge the gap and ensure a smooth user experience as PulseAudio became the default. Over time, as `<b>systemd</b>` gained prominence, the role of such manual startup scripts has been increasingly taken over by `<b>systemd --user</b>` units, which provide a more standardized and robust way to manage per-user services like PulseAudio.


title: SYNOPSIS
content:
<b>start-stop-daemon</b> <i>[options] [--] [arguments]</i><br><br><b>Common Modes:</b><br><b>start-stop-daemon --start</b> <i>[options] [--] executable [arguments]</i><br><b>start-stop-daemon --stop</b> <i>[options]</i><br><b>start-stop-daemon --status</b> <i>[options]</i>


title: PARAMETERS
content:
<b><b>--start</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if a process exists and starts it if it doesn't. Requires a process identifier and the executable path.<br><br><b><b>--stop</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if a process exists and stops it. Requires a process identifier.<br><br><b><b>--status</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if a process exists and returns its status. Returns 0 if found, 1 if not found.<br><br><b><b>--test</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates test mode; no actions are performed, only what would be done is printed.<br><br><b><b>--pidfile</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Identifies the process by its PID, which is read from the specified file.<br><br><b><b>--exec</b> <i>&lt;executable&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Identifies the process by its absolute executable path. Required with <b>--start</b>.<br><br><b><b>--name</b> <i>&lt;process-name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Identifies the process by its process name (e.g., 'apache2'). Less reliable than <b>--pidfile</b> or <b>--exec</b>.<br><br><b><b>--user</b> <i>&lt;user&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the process as the specified user, or identifies processes owned by this user.<br><br><b><b>--group</b> <i>&lt;group&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the process as the specified group, or identifies processes owned by this group.<br><br><b><b>--background</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Detaches the process from the controlling terminal and runs it in the background (daemonizes).<br><br><b><b>--make-pidfile</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <b>--start</b>, creates the PID file after the process has successfully started.<br><br><b><b>--remove-pidfile</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <b>--stop</b>, removes the PID file after the process has successfully stopped.<br><br><b><b>--signal</b> <i>&lt;signal&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the signal to send to the process when stopping (default is <i>SIGTERM</i>).<br><br><b><b>--retry</b> <i>&lt;schedule&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a retry schedule for stopping a process (e.g., <i>TERM/30/KILL/5</i>).<br><br><b><b>--chroot</b> <i>&lt;directory&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the root directory to the specified path before executing the process.<br><br><b><b>--chdir</b> <i>&lt;directory&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the current working directory before executing the process.<br><br><b><b>--nicelevel</b> <i>&lt;level&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the process's niceness level (priority).<br><br><b><b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses most output messages.<br><br><b><b>--oknodo</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Returns an exit status of 0 even if no process was found or no action was taken.<br><br>


title: DESCRIPTION
content:
<i>start-stop-daemon</i> is a utility designed to control the starting and stopping of system-level daemon processes. Primarily used within <i>init.d</i> scripts on Debian-based Linux distributions, it ensures that daemons are started correctly, run under appropriate user/group permissions, are properly backgrounded, and can be reliably stopped. It identifies processes by their PID file, executable path, or process name. Its robust features help prevent multiple instances of a daemon, ensure clean shutdowns, and handle process isolation through options like changing root directory or current working directory. It is a cornerstone for traditional service management on systems predating <i>systemd</i>.


title: CAVEATS
content:
<i>start-stop-daemon</i> is primarily designed for and used in Debian-based distributions and their <i>init.d</i> scripts. While powerful for its intended use, it has limitations:<br><ul><li>Its reliance on PID files requires careful management within scripts to ensure correctness.</li><li>Identifying processes solely by <b>--name</b> can be unreliable if multiple processes share the same name or if the process name is truncated by the kernel.</li><li>On modern Linux systems, <i>systemd</i> has largely superseded traditional <i>init.d</i> scripts, and thus <i>start-stop-daemon</i>'s direct usage by administrators is less common, though it remains crucial for older service management.</li></ul>


title: PROCESS IDENTIFICATION METHODS
content:
<i>start-stop-daemon</i> offers multiple ways to identify a target process: via a <b>--pidfile</b> (the most reliable), by the full path to the <b>--exec</b>utable, or by its <b>--name</b>. For stopping or status checks, at least one identification method is required. For starting, <b>--exec</b> is mandatory to specify the program to run, and usually combined with <b>--pidfile</b> or <b>--name</b> for subsequent identification.


title: DAEMONIZATION AND PROCESS CONTROL
content:
When starting a process with <b>--background</b>, <i>start-stop-daemon</i> performs standard daemonization steps: forking twice, redirecting standard I/O to <i>/dev/null</i>, and detaching from the controlling terminal. It also provides options to drop privileges (<b>--user</b>, <b>--group</b>), change the process's root (<b>--chroot</b>) or working directory (<b>--chdir</b>), and set niceness (<b>--nicelevel</b>) or I/O scheduling (<b>--iosched</b>), offering fine-grained control over the daemon's environment.


title: HISTORY
content:
<i>start-stop-daemon</i> is part of the <i>dpkg</i> package, developed as a utility for managing daemons in Debian's traditional System V-style <i>init.d</i> scripts. It was created to provide a robust and standardized way for init scripts to start, stop, and check the status of services, addressing common issues like orphaned processes or incorrect daemonization. Its development predates the widespread adoption of modern init systems like <i>Upstart</i> and <i>systemd</i>, serving as a cornerstone for process management in its era on Debian-derived systems.


title: SYNOPSIS
content:
<b>startpar</b> [<i>-p &lt;parallelism&gt;</i>] [<i>-i &lt;interval&gt;</i>] [<i>-a &lt;arg&gt;</i>] [<i>-L &lt;log_file&gt;</i>] <i>&lt;runlevel&gt; &lt;directory&gt;</i> [<i>&lt;service_file&gt;</i>]<br>


title: PARAMETERS
content:
<b><i>-p &lt;parallelism&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum number of scripts to run in parallel. The default value is typically 10.<br><br><b><i>-i &lt;interval&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the interval (in milliseconds) between checking for completed processes. The default is usually 20ms.<br><br><b><i>-a &lt;arg&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An additional argument to be passed to each script executed. This option can be used multiple times to pass several arguments.<br><br><b><i>-L &lt;log_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a file to which logging messages will be appended. Useful for debugging startup sequences.<br><br><b><i>&lt;runlevel&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The runlevel argument (e.g., "start", "stop", "restart") that will be passed as the first argument to each script executed.<br><br><b><i>&lt;directory&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The directory containing the init scripts to be executed (e.g., <code>/etc/rcS.d/</code>, <code>/etc/rc2.d/</code>). <code>startpar</code> will look for scripts prefixed with 'S' here.<br><br><b><i>&lt;service_file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. If specified, only this specific script from the <i>&lt;directory&gt;</i> will be executed, rather than all 'S'-prefixed scripts.<br><br>


title: DESCRIPTION
content:
<code>startpar</code> is a utility designed to accelerate the boot process of Linux systems that utilize the System V init system. It achieves this by executing multiple startup scripts concurrently, rather than sequentially.<br><br>When invoked, <code>startpar</code> traverses a specified directory (typically an <code>/etc/rcN.d/</code> runlevel directory), identifies scripts prefixed with 'S' (indicating "start"), and then executes a configurable number of these scripts in parallel. This significantly reduces the total time required for services to initialize and become available.<br><br>It's primarily used by the underlying init system during system startup or runlevel changes, not typically invoked directly by end-users. It passes the specified <i>&lt;runlevel&gt;</i> argument (e.g., "start" or "stop") to each script it executes.


title: CAVEATS
content:
<code>startpar</code> is an internal utility primarily used by the <code>sysvinit</code> system (e.g., on Debian/Ubuntu derivatives). Direct manual invocation by users is rare and generally not recommended for managing services, as it bypasses higher-level service management tools. Its effectiveness is tied to the design of individual init scripts; not all scripts are safe to run concurrently, and improper use can lead to race conditions or system instability.


title: SCRIPT EXECUTION ORDER
content:
<code>startpar</code> identifies scripts in the specified directory that begin with 'S' (e.g., S01foo, S99bar). These scripts are sorted numerically and then alphabetically, and are executed in batches up to the configured parallelism limit, respecting their sorted order.


title: TYPICAL USAGE
content:
This command is typically called by the <code>init</code> process or associated scripts during system boot or runlevel changes. For instance, the <code>/etc/init.d/rcS</code> script (which handles single-user mode or early boot services) might use <code>startpar</code> to initialize early system services found in <code>/etc/rcS.d/</code> concurrently.


title: HISTORY
content:
<code>startpar</code> was developed as part of the <code>sysvinit-tools</code> package to address the slow boot times common in traditional System V init systems. Its introduction aimed to optimize system startup by leveraging the capability to run non-dependent services simultaneously, which was a significant improvement over strictly sequential execution. This parallelization feature was later more fully embraced and integrated into newer init systems like <code>systemd</code>. <code>startpar</code> remains relevant on systems still utilizing <code>sysvinit</code> for service orchestration, providing a performance enhancement for their boot process.


title: SYNOPSIS
content:
<b>startx</b> [ [<i>client</i>] <i>options</i> ... ] [ <b>--</b> [<i>server</i>] <i>options</i> ... ]


title: PARAMETERS
content:
<b><i>client</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the client program to execute (e.g., <i>xterm</i>, <i>gnome-session</i>). If omitted, <b>startx</b> attempts to find a default, typically an <i>xterm</i> or a session manager specified in <i>.xinitrc</i>.<br><br><b><i>options</i> ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Additional options or arguments to be passed to the specified <i>client</i> program.<br><br><b><b>--</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A mandatory separator used to distinguish between options for the client program and options for the X server program. All arguments following this separator are considered server options.<br><br><b><i>server</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the X server program to execute (e.g., <i>Xorg</i>). If omitted, <b>startx</b> attempts to find a default X server executable on the system's path.<br><br><b><i>options</i> ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Additional options or arguments to be passed to the X server program (e.g., display number like <i>:1</i>, or virtual terminal like <i>vt7</i>).<br><br>


title: DESCRIPTION
content:
The <b>startx</b> command is a shell script that provides a user-friendly interface for launching the X Window System. It acts as a wrapper around the lower-level <b>xinit</b> command, simplifying the process of starting an X session from the console. When invoked, <b>startx</b> first determines which X server to run (e.g., <i>Xorg</i>) and which client application to start (typically an <i>xterm</i> or a desktop environment like <i>GNOME</i> or <i>KDE</i>).<br><br>It handles tasks such as setting up the display number, configuring the virtual terminal, and executing the user's <i>.xinitrc</i> file located in their home directory. The <i>.xinitrc</i> file is crucial for customizing the X session, allowing users to define the window manager, desktop environment, and other applications to launch upon startup. If a user-specific <i>.xinitrc</i> is not found, <b>startx</b> falls back to a system-wide default configuration. While modern Linux distributions often use display managers (like <i>GDM</i>, <i>LightDM</i>, or <i>SDDM</i>) to provide graphical login screens, <b>startx</b> remains valuable for users who prefer to log in to a text console and then manually start their graphical environment, or for troubleshooting purposes.


title: CAVEATS
content:
<b>startx</b> is primarily intended for starting an X session from a text console, not from a graphical login manager. Its proper functioning relies heavily on the correct configuration of user-specific (<i>~/.xinitrc</i>, <i>~/.xserverrc</i>) and system-wide (<i>/etc/X11/xinit/xinitrc</i>, <i>/etc/X11/xinit/xserverrc</i>) configuration files. It is less common in modern Linux distributions which typically default to graphical display managers (like GDM, LightDM, or SDDM) for user logins, potentially leading to conflicts or unexpected behavior if used incorrectly in such environments. Ensure your display server and window manager are correctly installed and configured.


title: CONFIGURATION FILES
content:
<b>startx</b> relies on several configuration files to determine the X server, client, and session settings:<br><ul><li><i>~/.xinitrc</i>: This is the primary user-specific file. It's a shell script that defines what applications, window manager, and desktop environment should be started in the X session. If this file exists, <b>startx</b> executes it.</li><li><i>/etc/X11/xinit/xinitrc</i>: The system-wide default <i>xinitrc</i>, used if <i>~/.xinitrc</i> is not found.</li><li><i>~/.xserverrc</i>: An optional user-specific file that defines which X server executable to run and with what arguments.</li><li><i>/etc/X11/xinit/xserverrc</i>: The system-wide default <i>xserverrc</i>, used if <i>~/.xserverrc</i> is not found.</li></ul>


title: DEFAULT BEHAVIOR
content:
If no <i>client</i> or <i>server</i> is specified on the command line, <b>startx</b> attempts to find reasonable defaults. Typically, it looks for an <i>xterm</i> as the client and <i>Xorg</i> (or a similarly named X server) as the server, searching through common executable paths. The actual behavior can be influenced by the contents of the <i>.xinitrc</i> and <i>.xserverrc</i> files, which often define the default window manager (e.g., <i>twm</i>) or desktop environment (e.g., <i>gnome-session</i>, <i>startkde</i>) to launch.


title: VIRTUAL TERMINALS (VTS)
content:
On systems using Linux consoles, <b>startx</b> typically switches the user from the current text-based virtual terminal (e.g., <i>tty1</i>) to a new graphical virtual terminal (e.g., <i>tty7</i>). This allows the graphical X session to run independently on its own VT, while the original text console remains available. The specific VT can often be controlled via server options like <i>vt7</i> passed to the X server.


title: HISTORY
content:
<b>startx</b> has been a fundamental part of the X Window System since its early days. Developed to simplify the process of initiating a graphical session for users logging in via a text console, it emerged as a convenient wrapper around the more complex <b>xinit</b> command. Its design as a flexible shell script allowed for easy customization and adaptation across various Unix-like systems. While graphical display managers have become the default for most users over time, <b>startx</b> has maintained its relevance for specific use cases, such as minimal installations, embedded systems, or for users who prefer granular control over their X session startup.


title: PARAMETERS
content:
<b>-L, --dereference</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Follow symbolic links. If <b>FILE</b> is a symbolic link, <b>stat</b> will report on the file it points to, not the link itself. (This is often the default behavior).<br><br><b>-P, --no-dereference</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not follow symbolic links. If <b>FILE</b> is a symbolic link, <b>stat</b> will report on the link itself, not the file it points to.<br><br><b>-f, --file-system</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display file system status instead of file status. When used, arguments are interpreted as files within a file system, and <b>stat</b> reports on the file system hosting them.<br><br><b>-c FORMAT, --format=FORMAT</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use the specified <b>FORMAT</b> string instead of the default output format. <b>FORMAT</b> can include <b>printf</b>-like escape sequences to extract specific attributes.<br><br><b>-t, --terse</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the information in a terse (condensed) form. This option is often used in conjunction with <b>--format</b> for scripting purposes.<br><br><b>-Z, --context</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the SELinux security context of the file or file system.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br>


title: DESCRIPTION
content:
The <b>stat</b> command in Linux is a powerful utility used to retrieve and display detailed status information about files, directories, or file systems. Unlike simpler commands like <b>ls -l</b> which provide a basic overview, <b>stat</b> delves deeper, offering insights into various metadata attributes.<br><br>It can report on parameters such as access permissions (mode), inode number, device ID, number of hard links, user and group ownership (UID/GID and names), total size in bytes, allocated block count, optimal I/O block size, and a range of timestamps including last access, last modification, last status change, and crucially, the file's creation (birth) time where supported by the underlying file system.<br><br>This utility is indispensable for system administrators, developers, and anyone performing shell scripting, as it allows for precise data extraction for automation, troubleshooting permission issues, or analyzing file activity. Internally, <b>stat</b> leverages the <b>stat()</b>, <b>fstat()</b>, and <b>lstat()</b> system calls to query the file system for the requested metadata. Its most distinctive feature is the highly customizable output format, enabling users to specify exactly which pieces of information they need and in what format, making it ideal for machine-readable output and integration into scripts.


title: CAVEATS
content:
<ul><li><b>Birth Time (%w)</b>: The 'birth' (creation) time is not universally supported by all file systems (e.g., older ext3/4 configurations may not store it by default). If unavailable, it may report 0 or an approximated value.</li><li><b>Timestamp Precision</b>: The precision of timestamps (access, modify, change) can vary depending on the file system type and kernel configuration.</li><li><b>Symbolic Link Behavior</b>: By default, <b>stat</b> dereferences symbolic links, meaning it provides information about the target file. To get information about the symbolic link itself, you must explicitly use the <b>-P</b> or <b>--no-dereference</b> option.</li></ul>


title: COMMON FORMAT SEQUENCES FOR --FORMAT/--PRINTF
content:
When using the <b>--format</b> or <b>--printf</b> options, these are some frequently used sequences:<br><br><b>%n</b>: File name<br><b>%s</b>: Total size in bytes<br><b>%b</b>: Number of blocks allocated (512B units)<br><b>%B</b>: Size in bytes of each block<br><b>%d</b>: Device number (in decimal)<br><b>%D</b>: Device number (in hex)<br><b>%i</b>: Inode number<br><b>%h</b>: Number of hard links<br><b>%u</b>: User ID of owner<br><b>%U</b>: User name of owner<br><b>%g</b>: Group ID of owner<br><b>%G</b>: Group name of owner<br><b>%a</b>: Access rights in octal<br><b>%A</b>: Access rights in human-readable form (e.g., -rw-r--r--)<br><b>%F</b>: File type (e.g., regular file, directory, symbolic link)<br><b>%x</b>: Time of last access (in seconds since Epoch)<br><b>%X</b>: Time of last access (human-readable)<br><b>%y</b>: Time of last modification (in seconds since Epoch)<br><b>%Y</b>: Time of last modification (human-readable)<br><b>%z</b>: Time of last status change (in seconds since Epoch)<br><b>%Z</b>: Time of last status change (human-readable)<br><b>%w</b>: Time of file creation (birth time, in seconds since Epoch)<br><b>%W</b>: Time of file creation (birth time, human-readable)<br>


title: HISTORY
content:
The <b>stat</b> command's core functionality is rooted in the Unix <b>stat()</b> system call, which has been a fundamental part of the Unix/Linux kernel API for retrieving file metadata since its early days. The command-line utility itself is a standard component of the GNU Core Utilities, a collection of essential file, shell, and text manipulation utilities prevalent on most Linux distributions. Its development has generally mirrored the evolution of file system capabilities, such as the introduction of more precise timestamps or extended attributes, which the command then exposes to users.


title: SYNOPSIS
content:
<i>stdbuf</i> <I>-i0|-oL|-eL</I> <I>COMMAND</I> [<I>ARG</I>...]<br><i>stdbuf</i> <I>--input=0|L|N</I> <I>--output=0|L|N</I> <I>--error=0|L|N</I> <I>COMMAND</I> [<I>ARG</I>...]


title: PARAMETERS
content:
<b><I>-i MODE</I>, <I>--input=MODE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set stdin buffering to <I>MODE</I>.<br><br><b><I>-o MODE</I>, <I>--output=MODE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set stdout buffering to <I>MODE</I>.<br><br><b><I>-e MODE</I>, <I>--error=MODE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set stderr buffering to <I>MODE</I>.<br><br><b>MODE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the buffering type:<br><b>0</b>: Unbuffered. Input/output is immediate.<br><b>L</b>: Line-buffered. Input/output is flushed after each newline.<br><b>N</b> or <b>B[SIZE]</b>: Full-buffered. <b>N</b> is an integer representing the buffer size in bytes. <b>B</b> with an optional <I>SIZE</I> suffix (e.g., B1M for 1 Megabyte). If <b>B</b> is used without a size, it defaults to the system's preferred full-buffer size.<br><br><b><I>COMMAND</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The command to execute with modified buffering.<br><br><b><I>ARG</I>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Arguments passed to the <I>COMMAND</I>.<br><br><b><I>--help</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help and exit.<br><br><b><I>--version</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
<i>stdbuf</i> is a command-line utility used to modify the buffering behavior of standard input (stdin), standard output (stdout), and standard error (stderr) for another command. By default, many programs buffer their I/O for efficiency. For instance, stdout is often line-buffered when connected to a terminal and fully-buffered when piped to another command or redirected to a file.<br><br>This default behavior can sometimes be undesirable, especially in pipelines where immediate output is required, or when debugging. <i>stdbuf</i> allows users to force a specific buffering mode: unbuffered (data written immediately), line-buffered (data written after each newline character), or full-buffered (data written when a buffer is full, or a specific buffer size is reached). It achieves this by preloading a library that intercepts standard C library I/O functions like <i>setvbuf()</i>. This provides fine-grained control over how data flows through command pipelines, making it an invaluable tool for scripting, debugging, and optimizing I/O.


title: CAVEATS
content:
<i>stdbuf</i> works by preloading a library (<i>libstdbuf.so</i>) that intercepts standard C library stream functions like <i>setvbuf()</i>. If the target <i>COMMAND</i> does not use these standard library functions for its I/O (e.g., it performs raw system calls like <i>read()</i>/<i>write()</i>), or if it explicitly overrides buffering in a way that bypasses <i>setvbuf()</i>, then <i>stdbuf</i> may have no effect. It only influences the buffering of standard streams (<i>stdin</i>, <i>stdout</i>, <i>stderr</i>), not arbitrary file descriptors or files opened by the program itself.


title: ENVIRONMENT VARIABLES
content:
<i>stdbuf</i> works by setting the <i>LD_PRELOAD</i> environment variable to point to its helper library (<i>libstdbuf.so</i>) before executing the target command. This mechanism allows it to override default library function behavior without modifying the command itself.


title: BUFFERING TYPES EXPLAINED
content:
<b>Unbuffered (0)</b>: Data is sent to the kernel (and potentially to the output device) as soon as it's written by the program. Least efficient but provides the most immediate feedback.<br><b>Line-buffered (L)</b>: Data is buffered until a newline character is encountered, the buffer is full, or <i>fflush()</i> is called. This is common for interactive terminal applications.<br><b>Full-buffered (N or B)</b>: Data is buffered until the buffer is full, or <i>fflush()</i> is called. Most efficient for bulk data transfer, common when output is redirected to a file or pipe.


title: HISTORY
content:
The <i>stdbuf</i> command is part of the GNU Core Utilities (<i>coreutils</i>), a package of essential command-line tools for Unix-like operating systems. It was introduced to provide a more convenient and portable way to control stream buffering compared to platform-specific environment variables (e.g., GZIP_DEFLATE_BUFSIZE) or writing custom C wrappers around commands using <i>setvbuf()</i>. Its development aimed to address common issues in scripting and piping where unexpected buffering behavior could lead to delays or incorrect processing.


title: SYNOPSIS
content:
<code><br><b>steam</b> [<i>options</i>]<br><b>steam</b> [<i>steam_uri</i>]</code><br><br>The <b>steam</b> command initiates the Steam client application. It can be invoked without options to simply launch the graphical interface, or with specific options to control its behavior, or with a Steam URI to directly perform actions like launching or installing a game.


title: PARAMETERS
content:
<b>-bigpicture</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches the Steam client directly into Big Picture mode, optimized for TV screens and gamepads.<br><br><b>-console</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables the in-client developer console, useful for debugging and advanced commands.<br><br><b>-dev</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates developer mode features within the client.<br><br><b>-forcedesktopui</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the client to open in standard desktop UI mode, even if Big Picture mode is configured as default.<br><br><b>-login <i>user</i> <i>pass</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to log in to Steam with the specified username and password (use with caution due to security implications).<br><br><b>-shutdown</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shuts down a running Steam client instance.<br><br><b><i>steam_uri</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a Steam Uniform Resource Identifier, such as <i>steam://run/&lt;appid&gt;</i> to launch a specific game by its AppID, or <i>steam://install/&lt;appid&gt;</i> to begin its installation. This is a common argument pattern.<br><br>


title: DESCRIPTION
content:
The <b>steam</b> command launches the official Steam client, a widely popular digital distribution platform for video games developed by Valve Corporation. On Linux, it provides access to a vast library of games, including those natively supported by Linux, as well as Windows-only titles through <I>Steam Play</I> and <I>Proton</I> compatibility layer. The client allows users to purchase, download, and manage games, connect with friends, join communities, and access various Steam services like the Workshop and community marketplace. Its introduction significantly boosted the viability of Linux as a gaming platform, offering a unified and user-friendly experience for acquiring and playing games.


title: CAVEATS
content:
Running <b>steam</b> on Linux often requires up-to-date graphics drivers (both open-source and proprietary) for optimal performance. Disk space requirements can be substantial due to large game files. Compatibility issues, especially with older hardware or specific Linux distributions, may arise. Performance with <I>Proton</I> can vary, and not all Windows games are fully compatible or perform optimally.


title: STEAM PLAY AND PROTON
content:
The <b>steam</b> client on Linux leverages <I>Steam Play</I>, a feature that allows Windows-only games to run on Linux. This is primarily achieved through <I>Proton</I>, a compatibility layer based on <I>Wine</I> and a set of custom patches and performance enhancements developed by Valve. Proton handles DirectX and other Windows-specific APIs, translating them to Vulkan and Linux equivalents, enabling a vast majority of the Steam catalog to be played directly on Linux without manual configuration.


title: HISTORY
content:
The <b>steam</b> client officially arrived on Linux in 2012, initially supporting a limited number of native Linux games. This marked a significant push by Valve into the open-source ecosystem, followed by the development of <I>SteamOS</I> and the Steam Machine initiative. A pivotal moment was the introduction of <I>Steam Play</I> and the <I>Proton</I> compatibility layer in 2018, which dramatically expanded the library of playable Windows games on Linux, making Steam a dominant force in Linux PC gaming.


title: SYNOPSIS
content:
<b>steamcmd</b> <br><i>[+login &lt;username&gt; [password]]</i> <br><i>[+force_install_dir &lt;path&gt;]</i> <br><i>[+app_update &lt;AppID&gt; [validate] [beta &lt;branch&gt;] [betapassword &lt;password&gt;]]</i> <br><i>[+command ...]</i> <br><br><b>steamcmd</b> <i>+runscript &lt;scriptfile&gt;</i>


title: PARAMETERS
content:
<b><b>+login</b> <i>&lt;username&gt; [password]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Logs into a Steam account. Use <i>anonymous</i> for public servers that don't require an account.<br><br><b><b>+force_install_dir</b> <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the installation directory for game files. All subsequent app downloads will target this path.<br><br><b><b>+app_update</b> <i>&lt;AppID&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads or updates the specified application ID. Required for installing game servers.<br><br><b><b>validate</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional argument for <b>+app_update</b>. Verifies the integrity of game files after an update, replacing any corrupted or missing files.<br><br><b><b>beta</b> <i>&lt;branch&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional argument for <b>+app_update</b>. Specifies a beta branch to download (e.g., <i>public</i>, <i>prerelease</i>) instead of the default stable version.<br><br><b><b>betapassword</b> <i>&lt;password&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional argument for <b>+app_update</b>. Provides the password for a protected beta branch.<br><br><b><b>+quit</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exits <b>steamcmd</b> after executing all preceding commands. Useful for scripting.<br><br><b><b>+runscript</b> <i>&lt;scriptfile&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a sequence of <b>steamcmd</b> commands from a specified script file, one command per line.<br><br><b><b>+command</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows chaining multiple <b>steamcmd</b> commands directly on the command line. Each command should be prefixed with a plus sign.<br><br>


title: DESCRIPTION
content:
<b>steamcmd</b> is a command-line utility provided by Valve that allows users to install, update, and manage dedicated servers for various Steam games and applications. Unlike the graphical Steam client, <b>steamcmd</b> is designed for server environments, offering a lightweight and headless solution. It's essential for game server administrators who need to automate server maintenance, deploy updates efficiently, and manage multiple game servers without a graphical interface. It supports a wide range of Steam games that offer dedicated server binaries, making it a critical tool for running community game servers on Linux. Its primary functions include logging in anonymously or with a Steam account, downloading specific application IDs (AppIDs), validating installations, and updating server files.


title: CAVEATS
content:
<b>steamcmd</b> typically runs as a 32-bit application and requires 32-bit compatibility libraries on 64-bit Linux systems. It's highly recommended to run <b>steamcmd</b> and game servers under a dedicated, unprivileged user account for security reasons, rather than as <i>root</i>. Network connectivity is crucial for downloads and updates. Firewall configurations might need adjustment to allow necessary Steam ports.


title: INSTALLATION
content:
<b>steamcmd</b> is usually not available in standard Linux repositories. It needs to be downloaded directly from Valve's servers. Typically, you create a directory (e.g., <i>~/steamcmd</i>), download the <i>steamcmd_linux.tar.gz</i> archive, extract it, and then execute <i>./steamcmd.sh</i>. The first run will self-update and initialize the client.


title: COMMON WORKFLOW
content:
A typical workflow involves launching <b>steamcmd</b> with a chain of commands: <i>./steamcmd.sh +login anonymous +force_install_dir /path/to/server +app_update &lt;AppID&gt; validate +quit</i>. These commands are often placed in a shell script (e.g., <i>update_server.sh</i>) for easy automation and scheduling.


title: APPID DISCOVERY
content:
To find the correct <i>AppID</i> for a specific game or dedicated server, users often consult third-party resources like SteamDB (steamdb.info) or the game's official documentation, as <b>steamcmd</b> itself does not provide an <i>AppID</i> lookup feature.


title: HISTORY
content:
<b>steamcmd</b> emerged as a replacement for the deprecated <b>HLDSUpdateTool</b>, which was primarily used for Source Engine and GoldSrc game servers. As Steam's ecosystem grew and more games offered dedicated server support, a unified and robust command-line tool became necessary. <b>steamcmd</b> provides a consistent interface for managing a vast array of AppIDs, simplifying server deployment and maintenance across different titles, and has been continuously updated by Valve to support new features and game requirements.


title: SYNOPSIS
content:
<b>steamos-add-to-steam</b> [<i>OPTIONS</i>] <i>NAME</i> <i>EXECUTABLE_PATH</i> [<i>WORKING_DIRECTORY</i>]<br>The <i>NAME</i> is the display name for the shortcut in Steam.<br>The <i>EXECUTABLE_PATH</i> is the full path to the executable to be launched.<br>The optional <i>WORKING_DIRECTORY</i> specifies the working directory for the executable.


title: PARAMETERS
content:
<b>NAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The display name for the shortcut within the Steam client.<br><br><b>EXECUTABLE_PATH</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The full path to the executable file that Steam will launch.<br><br><b>WORKING_DIRECTORY</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Optional)</i> The directory where the executable should be run from. Essential for many games or applications to find their assets.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details about the command's operations.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs all steps except for the final modification of Steam's configuration files. Useful for testing.<br><br><b>--desktop-shortcut</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates an additional shortcut on the user's desktop (typically a `.desktop` file on Linux).<br><br><b>--run-in-terminal</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches the application within a terminal window, useful for console-based applications or for debugging output.<br><br><b>--category <CATEGORY></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns the new shortcut to a specific category (e.g., 'Emulators', 'GOG Games') within your Steam library.<br><br><b>--launch-options <OPTIONS></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies custom launch options for the executable, often used for Proton commands (e.g., `PROTON_LOG=1 %command%`) or game-specific arguments.<br><br><b>--img <IMAGE_PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a custom banner or grid image for the shortcut within Steam's UI.<br><br><b>--icon <ICON_PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a custom icon for the shortcut.<br><br><b>--gameid <ID></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Advanced)</i> Assigns a specific Steam AppID to the shortcut. Generally not needed for typical user additions.<br><br>


title: DESCRIPTION
content:
The <b>steamos-add-to-steam</b> command is a utility designed to seamlessly integrate non-Steam applications, games, or emulators into your Steam client library. This is particularly valuable on SteamOS, the Steam Deck, and other Linux systems where users desire a unified interface for managing and launching all their entertainment content. Instead of manually navigating Steam's graphical user interface to add a "Non-Steam Game," this command automates the creation of a Steam shortcut. It handles essential details such as setting the correct executable path, defining the working directory, and applying custom launch options. This functionality is crucial for adding titles from other digital storefronts like GOG or Epic Games Store, as well as emulated games, ensuring they appear alongside your native Steam library. It significantly enhances the user experience by simplifying library management and allowing for consistent launch behavior through Steam.


title: CAVEATS
content:
The <b>steamos-add-to-steam</b> command directly modifies Steam's configuration files, primarily <i>shortcuts.vdf</i>. For changes to take effect, the Steam client often needs to be restarted or its library refreshed. Ensure that the specified <i>EXECUTABLE_PATH</i> and <i>WORKING_DIRECTORY</i> are correct and accessible by Steam, especially if they are located on external drives or within Wine/Proton prefixes. Behavior and available options may subtly vary across different SteamOS versions or Steam client updates.


title: STEAM SHORTCUT PERSISTENCE
content:
Steam stores non-Steam game shortcuts in a binary configuration file named <i>shortcuts.vdf</i>, located within the user's Steam <i>userdata</i> directory (e.g., <i>~/.steam/steam/userdata/&lt;UserID&gt;/config/shortcuts.vdf</i>). The <b>steamos-add-to-steam</b> command automates the complex process of correctly formatting and adding entries to this file, which would otherwise require manual editing or navigating a graphical interface.


title: PROTON INTEGRATION
content:
This command is frequently used in conjunction with Valve's Proton compatibility layer. Users can specify a Windows executable (e.g., an <i>.exe</i> file from a GOG game) as the <i>EXECUTABLE_PATH</i>, and then use the <i>--launch-options</i> parameter to force a specific Proton version or add Proton-specific environment variables, enabling Windows games to run smoothly through Steam.


title: HISTORY
content:
The <b>steamos-add-to-steam</b> utility emerged as part of the SteamOS ecosystem, initially to simplify the integration of non-Steam content on Valve's Linux-based gaming operating system. Its importance surged with the release of the Steam Deck, where a seamless experience for managing both Steam and non-Steam content is paramount. It addresses the historical challenge of integrating external games and emulators into the Steam client's Big Picture Mode, which is optimized for controller input and a console-like experience.


title: SEE ALSO
content:
<b>steam</b>(1) - The main Steam client application., <b>xdg-open</b>(1) - A general command for opening files or URLs with the user's preferred application, conceptually related to launching.


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Displays a help message detailing command usage and available options for <i>steamos-chroot</i>.<br><br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Shows the version information of the <i>steamos-chroot</i> utility.<br><br><br><b><command> [arguments...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>The command and its arguments to execute directly within the SteamOS chroot environment. If this is omitted, <i>steamos-chroot</i> will launch a default interactive shell (e.g., <i>bash</i>) within the chroot.<br><br><br>


title: DESCRIPTION
content:
<i>steamos-chroot</i> is a powerful utility designed for SteamOS users and developers to seamlessly enter a <i>chroot</i> environment configured specifically for the SteamOS root filesystem. This command significantly simplifies the often complex manual process of setting up a chroot by automatically handling necessary <i>bind mounts</i> (such as <i>/dev</i>, <i>/proc</i>, <i>/sys</i>, <i>/run</i>, and others) and potentially adjusting environment variables. It provides a straightforward pathway to interact with the SteamOS base system, allowing users to install packages, perform system maintenance, troubleshoot issues, or develop applications directly within the SteamOS runtime environment without affecting the host system's primary partition. This isolation is crucial for maintaining system stability and for development workflows, as it provides a consistent and controlled environment mirroring the SteamOS installation. It is an essential tool for advanced users seeking to customize, repair, or deeply understand their SteamOS setup, and for developers building software specifically for the SteamOS platform.


title: CAVEATS
content:
<br><b>Root Privileges:</b> The <i>steamos-chroot</i> command typically requires root privileges (e.g., by using <i>sudo</i>) to perform the necessary operations, including changing the root directory and setting up bind mounts.<br><br><b>System Impact:</b> Commands executed within the chroot environment directly modify the underlying SteamOS root filesystem. Exercise caution as incorrect operations can lead to system instability, corruption, or data loss.<br><br><b>Environment Limitations:</b> While providing an isolated environment for system modifications, certain complex operations like running graphical applications, accessing specific hardware devices, or network configurations might require additional setup or may not function as expected within theod chroot.<br><br><b>Persistence:</b> Changes made within the <i>steamos-chroot</i> environment are persistent to the underlying SteamOS installation, affecting the system even after exiting the chroot.<br>


title: EXITING THE CHROOT
content:
<br>To exit the <i>steamos-chroot</i> environment when in an interactive shell, simply type <i>exit</i> and press Enter. If a command was specified at invocation, the chroot environment exits automatically upon the command's completion.<br>


title: UNDERLYING MECHANISM
content:
<br><i>steamos-chroot</i> effectively automates the process of setting up a standard <i>chroot</i> environment. This involves changing the effective root directory to the SteamOS root filesystem and performing necessary <i>bind mounts</i> to make essential system directories (such as <i>/dev</i>, <i>/proc</i>, <i>/sys</i>, <i>/run</i>, and potentially others like <i>/tmp</i>) available and functional within the new isolated environment, mirroring a typical Linux system.<br>


title: READ-ONLY ROOT FILESYSTEM ON STEAM DECK
content:
<br>On the Steam Deck, the SteamOS root filesystem is typically mounted read-only by default to enhance system stability and facilitate seamless system updates. If you intend to make persistent modifications within the <i>steamos-chroot</i> environment, you may first need to enable write access to the root partition. This is commonly done using a command like <i>sudo steamos-readonly disable</i> before entering the chroot. Remember to re-enable read-only mode with <i>sudo steamos-readonly enable</i> after completing your modifications to maintain system integrity.<br>


title: HISTORY
content:
<br>The <i>steamos-chroot</i> utility emerged as a crucial tool within the SteamOS ecosystem, designed to facilitate development, troubleshooting, and advanced maintenance tasks. Its necessity grew with the evolution of SteamOS, providing a streamlined method for users to interact directly with the underlying operating system environment.<br><br>Initially, SteamOS was based on Debian, and similar chroot mechanisms were employed for development. With the advent of the Steam Deck and SteamOS 3.0 (which is based on Arch Linux), the utility adapted to the new system architecture, handling the complexities of setting up a chroot into a potentially read-only root filesystem (often managed with <i>overlayfs</i> or similar technologies). It abstracts away the manual, error-prone steps of bind-mounting essential directories like <i>/proc</i>, <i>/sys</i>, and <i>/dev</i>, making the developer and power-user experience significantly more efficient. Its development is deeply intertwined with the needs of the Steam Deck and other SteamOS devices, aiming to provide a robust and easy-to-use pathway for system customization and repair.<br>


title: PARAMETERS
content:
<b>-o, --output <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path and filename for the output compressed archive. If not provided, a default name is used in the current directory.<br><br><b>-d, --directory <directory></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a directory where uncompressed diagnostic files will be placed, rather than creating a single archive. Implies <B>--no-compress</B>.<br><br><b>-s, --section <section></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps only the specified section of information. This option can be used multiple times to include multiple specific sections.<br><br><b>-L, --list-sections</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available sections that can be individually dumped using the <B>--section</B> option.<br><br><b>--no-compress</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the utility from compressing the output. Instead, it creates a directory containing all diagnostic files.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of the <B>steamos-dump-info</B> utility.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the collection process.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses most output during the collection process, showing only critical messages.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and exits, listing available options.<br><br>


title: DESCRIPTION
content:
steamos-dump-info is a vital command-line utility designed for Valve's SteamOS, particularly prominent on the Steam Deck. Its primary function is to gather a comprehensive snapshot of the system's state, including hardware specifications, software versions, system configurations, and various logs. This information is meticulously collected and typically packaged into a single compressed archive (e.g., a <I>.zip</I> or <I>.tar.gz</I> file). The command is indispensable for troubleshooting system issues, diagnosing bugs, and providing detailed information to technical support teams. It automates the often tedious process of manually collecting numerous diagnostic files from different locations, ensuring that all relevant data points are included for effective problem resolution. The output typically contains details from the kernel, systemd journal, Steam client logs, Xorg logs, hardware enumeration, network configurations, and more.


title: CAVEATS
content:
steamos-dump-info collects extensive system information, which may include sensitive data like user names, system paths, and log entries. Users should exercise caution when sharing the generated dump files and only provide them to trusted parties, such as official Valve support.<br>The generated archive can be quite large, especially if a full system dump is performed on a system with extensive log history. Ensure sufficient disk space is available.<br>Some sections may require elevated privileges (<B>sudo</B>) to access and collect information.


title: <B>OUTPUT CONTENT AND FORMAT</B>
content:
The typical output of <B>steamos-dump-info</B> is a compressed archive (e.g., <I>.zip</I> or <I>.tar.gz</I>) containing a directory structure with various files. These files are categorized, often including: system logs (<I>/var/log</I>, <I>journalctl</I> output), hardware information (<I>lspci</I>, <I>lsusb</I>, <I>/proc</I> entries), network configuration, Steam client logs, Xorg logs, and system configuration files. The specific contents can vary based on the detected system state and the sections chosen.


title: <B>USAGE FOR TROUBLESHOOTING</B>
content:
When users encounter issues on SteamOS (especially Steam Deck), Valve's support often requests a <B>steamos-dump-info</B> archive. The common procedure involves running the command, often saving the output to the home directory or a USB drive, and then uploading the resulting file to a bug tracker or attaching it to a support ticket. This enables Valve engineers and support staff to analyze the system's condition at the time of the issue, greatly aiding in diagnosis and resolution.


title: HISTORY
content:
The <B>steamos-dump-info</B> utility has been an integral part of Valve's SteamOS distribution since its early iterations, evolving alongside the operating system. Its development was driven by the need for an efficient and standardized method to collect diagnostic data from user systems, crucial for bug reporting and technical support. With the advent and widespread adoption of the Steam Deck, <B>steamos-dump-info</B> has become even more critical, serving as the primary tool recommended by Valve for users to generate system logs when encountering issues. Its design reflects Valve's commitment to improving the user experience by streamlining the support process.


title: SYNOPSIS
content:
<b>steamos-readonly</b> <I>command</I><br><b>steamos-readonly</b> <I>enable</I><br><b>steamos-readonly</b> <I>disable</I><br><b>steamos-readonly</b> <I>status</I>


title: PARAMETERS
content:
<b>enable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Re-enables the read-only state of the root filesystem. This is the default and recommended state for system stability and integrity.<br><br><b>disable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the read-only state, making the root filesystem writable. This is necessary for installing packages, modifying system files, or performing advanced system configurations.<br><br><b>status</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current read-only status of the root filesystem, indicating whether it's currently writable or read-only.<br><br>


title: DESCRIPTION
content:
SteamOS, particularly on devices like the Steam Deck, uses a read-only root filesystem (`/`) by default to enhance system stability, prevent accidental corruption, and ensure reliable system updates. The <b>steamos-readonly</b> command is a utility designed to manage this read-only state. It allows users to temporarily disable the read-only mode, making the root filesystem writable for system modifications, software installations, or troubleshooting. Once modifications are complete, the command can be used to re-enable the read-only state, restoring the system's default robust configuration. This mechanism helps protect core system files while allowing user-specific data and configurations to be stored on separate, writable partitions. It's a crucial tool for advanced users needing to customize their SteamOS experience beyond the standard graphical interface.


title: CAVEATS
content:
Modifying the root filesystem while it's writable carries risks. Incorrect changes can lead to system instability, boot issues, or data corruption. Changes made while the filesystem is writable might be reverted or cause conflicts after a system update, especially if updates re-image core components. It's highly recommended to re-enable read-only mode (<b>steamos-readonly enable</b>) after making necessary system modifications to restore system integrity and stability. This command typically requires root privileges (i.e., must be run with <i>sudo</i>).


title: PURPOSE OF READ-ONLY FILESYSTEM
content:
The read-only root filesystem paradigm on SteamOS aims to protect the operating system's core integrity. This makes the system more resilient to user errors, malware, and unexpected shutdowns, as critical system files remain untouched. It also simplifies system updates, as Valve can deliver complete, consistent images without worrying about user modifications conflicting with the update process.


title: USAGE ON STEAM DECK
content:
On the Steam Deck, accessing the shell (e.g., via Konsole in Desktop Mode or SSH) and using <b>steamos-readonly disable</b> is a common first step for users wishing to install custom software (e.g., using <i>pacman</i> for Arch Linux packages, since SteamOS on Steam Deck is Arch-based) or modify system configurations not exposed through the graphical user interface. Remember to re-enable it afterwards for system stability.


title: HISTORY
content:
<b>steamos-readonly</b> was introduced as part of the SteamOS ecosystem, notably gaining prominence with the release of the Steam Deck, which utilizes an immutable/read-only root filesystem by default to enhance robustness and simplify updates. This design choice mirrors practices in other appliance-like Linux distributions and embedded systems, where system integrity is prioritized. Its development focuses on providing a user-friendly interface for managing this specific aspect of the SteamOS architecture, allowing advanced users to 'break out' of the read-only constraint when necessary for customization or development purposes.


title: PARAMETERS
content:
<b><<i>branch_name</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the update branch to switch to. Common values include <b>stable</b>, <b>beta</b>, and <b>preview</b>.<br><br>


title: DESCRIPTION
content:
<b>steamos-select-branch</b> is a specialized command used on Valve's SteamOS (and Steam Deck) to switch between different system update branches. These branches typically include <i>'stable'</i>, <i>'beta'</i>, and <i>'preview'</i>, offering varying levels of software stability and access to new features. The command modifies the system's package manager configuration (specifically, <I>pacman.conf</I> for SteamOS which is Arch Linux-based) to point to the repositories associated with the chosen branch.<br><br>It does not immediately perform an update but sets up the system for the next update cycle. Users often run <I>sudo pacman -Syu</I> or simply reboot their device after selecting a new branch to apply the changes. This allows users to test upcoming features or revert to a more stable channel if issues arise.


title: CAVEATS
content:
<ul><li>Switching to 'beta' or 'preview' branches may introduce system instability or bugs. Always ensure system backups before switching branches, especially to less stable ones.</li><li>A system update (<I>sudo pacman -Syu</I> or reboot) is required after changing the branch for changes to take effect.</li><li>This command requires <I>sudo</I> privileges to execute as it modifies system-critical configuration files.</li></ul>


title: UPDATING AFTER BRANCH CHANGE
content:
After running <b>steamos-select-branch</b>, it is necessary to perform a system update to download and install packages from the newly selected branch. On Steam Deck, a simple reboot often triggers this update. For command-line users, <I>sudo pacman -Syu</I> would manually initiate the update.


title: HISTORY
content:
The <b>steamos-select-branch</b> command was introduced as part of the SteamOS 3.0 development, notably becoming prominent with the release of the Steam Deck. Its purpose is to simplify the management of system updates and allow users to easily opt into different testing channels without manually editing configuration files. It leverages the power of Arch Linux's <I>pacman</I> package manager, abstracting away the complexities of repository management for the end-user.


title: PARAMETERS
content:
<b><I>session_type</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The type of session to select. Common values include <b>gaming</b> (to launch Steam Big Picture/GameScope) or <b>desktop</b> (to launch a full desktop environment).<br><br>


title: DESCRIPTION
content:
<i>steamos-session-select</i> is a utility specific to Valve's SteamOS, designed to manage the default graphical session for the system. It allows users to easily switch between the <b>"Gaming Mode"</b> (which typically launches Steam's Big Picture interface or GameScope for a gaming-optimized experience) and the <b>"Desktop Mode"</b> (which provides a full traditional desktop environment like KDE Plasma on Steam Deck or older Gnome/KDE on SteamOS 2.0).<br><br>The command primarily modifies system configuration to specify which session should be loaded upon the next graphical login or sometimes immediately switch the session. While it can be used from the command line, its functionality is frequently integrated into the SteamOS user interface for convenient session switching. This utility is crucial for users who need to alternate between a gaming-centric experience and a general-purpose desktop environment on their SteamOS device.


title: CAVEATS
content:
<ul><li><b>SteamOS Specific:</b> This command is designed for and primarily functions within SteamOS environments (including Steam Deck's SteamOS Holo). Its functionality is not generally available or relevant on standard Linux distributions.</li><li><b>Permissions:</b> It often requires elevated privileges (e.g., <i>sudo</i>) to modify system-wide display manager configurations.</li><li><b>Display Manager Interaction:</b> It relies on the underlying display manager (e.g., LightDM, SDDM) being configured to recognize and launch the specified sessions.</li><li><b>Reboot/Logout Recommended:</b> Changes typically take full effect on the next login or reboot, although some SteamOS versions might apply changes dynamically.</li></ul>


title: SESSION TYPES
content:
The primary session types supported are <b>gaming</b> (which launches Steam's Big Picture Mode or Gamescope for a dedicated gaming experience) and <b>desktop</b> (which loads a full desktop environment, typically KDE Plasma on Steam Deck). These options allow users to toggle between the two main modes of interaction with their SteamOS device.


title: UNDERLYING MECHANISM
content:
On older SteamOS versions, this command often manipulated configuration files for the LightDM display manager (e.g., <i>/etc/lightdm/lightdm.conf</i>) to set the <i>user-session</i> variable. On Steam Deck's SteamOS Holo, it likely interacts with the SDDM display manager's configuration or <i>systemd</i> targets and services to facilitate the session switch, integrating with Valve's bespoke session management layer for Gamescope.


title: HISTORY
content:
<i>steamos-session-select</i> emerged with the initial release of SteamOS (based on Debian) as a way to provide a seamless transition between the gaming-optimized Big Picture Mode and a standard desktop environment. As SteamOS evolved, particularly with the advent of Steam Deck and SteamOS Holo (based on Arch Linux), the command's underlying implementation might have changed to integrate with new display managers (like SDDM) and session management systems (like Gamescope). Despite these internal shifts, its core purpose of switching between "gaming" and "desktop" modes has remained consistent, reflecting Valve's commitment to offering both dedicated gaming and general computing experiences on their hardware.


title: PARAMETERS
content:
<b><i>(No widely documented parameters)</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The <b>steamos-update</b> command is typically run without additional arguments or options. Its design emphasizes simplicity, internally managing the complex update process for the SteamOS operating system and its components. Any underlying options are generally not exposed to the end-user.<br><br>


title: DESCRIPTION
content:
<b>steamos-update</b> is a specialized command-line utility integral to Valve's SteamOS, designed to manage system and application updates. Unlike generic Linux package managers, <b>steamos-update</b> often serves as a higher-level wrapper, orchestrating the update process in a manner tailored for the SteamOS gaming environment. It ensures that the core operating system, drivers, and potentially game-related components are kept up-to-date.<br><br>On older Debian-based SteamOS versions, it would interact with the underlying <i>apt</i> package management system. For SteamOS 3.0 (found on the Steam Deck) and newer Arch Linux-based versions, it coordinates updates involving <i>pacman</i> for the base system and <i>flatpak</i> for applications, frequently leveraging an A/B partition scheme for robust and atomic system upgrades. Its primary goal is to provide a seamless, reliable update experience, minimizing disruption to the user's gaming sessions. While graphical update prompts are common, <b>steamos-update</b> provides a command-line interface for manual initiation of the update process.


title: CAVEATS
content:
<b>steamos-update</b> is exclusive to SteamOS environments. It often requires <i>root privileges</i> (e.g., `sudo steamos-update`) to execute successfully. Updates can be substantial in size and may necessitate a system reboot upon completion. The exact behavior and underlying mechanisms of the command can vary significantly between different versions of SteamOS (e.g., Debian-based vs. Arch Linux-based), so users should be aware of their specific SteamOS version. There are typically <i>no user-facing command-line options</i> for fine-grained control, as it's designed to automate the update process.


title: UNDERLYING MECHANISM
content:
Depending on the SteamOS version, <b>steamos-update</b> acts as a high-level wrapper. For SteamOS 3.0 (Steam Deck), it orchestrates updates involving `pacman` for base system packages and `flatpak` for applications, often utilizing A/B partition schemes for robust system updates.


title: USAGE CONTEXT
content:
Primarily designed for system-wide updates, ensuring core SteamOS components, drivers, and packages are up-to-date. While updates are frequently prompted via the graphical interface, users can execute `<b>steamos-update</b>` directly from a terminal for manual initiation or troubleshooting.


title: HISTORY
content:
The <b>steamos-update</b> command has evolved alongside SteamOS itself. In its early iterations, when SteamOS was based on Debian, it served as a high-level abstraction over <i>apt</i> for system updates. With the shift to SteamOS 3.0 (and the Steam Deck) to an Arch Linux base, the command adapted to orchestrate updates using <i>pacman</i> and <i>flatpak</i>, often leveraging an A/B partition scheme for robust, atomic system upgrades. Its development has consistently focused on providing a streamlined and reliable update experience, crucial for a gaming-centric operating system, minimizing user intervention and ensuring system stability after updates.


title: SYNOPSIS
content:
<b>steghide</b> {<b>--embed</b> | <b>--extract</b> | <b>--info</b> | <b>--version</b> | <b>--help</b>} <i>[options]</i><br><br>Examples:<br><b>steghide</b> <b>--embed</b> -ef <i>secret.txt</i> -cf <i>cover.jpg</i><br><b>steghide</b> <b>--extract</b> -sf <i>cover.jpg</i><br><b>steghide</b> <b>--info</b> -sf <i>cover.jpg</i>


title: PARAMETERS
content:
<b><b>--embed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates the process of embedding a secret file into a chosen cover file.<br><br><b><b>--extract</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts previously embedded data from a specified stego file.<br><br><b><b>--info</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed information about data that has been embedded in a stego file.<br><br><b><b>-ef</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the secret file that is to be embedded.<br><br><b><b>-cf</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the cover file (e.g., JPG, WAV) into which data will be embedded.<br><br><b><b>-sf</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the stego file (the cover file containing embedded data) for extraction or information display.<br><br><b><b>-p</b> <i>&lt;passphrase&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the passphrase for encryption during embedding or decryption during extraction. <i>(It is generally safer to omit this option to be prompted interactively, preventing passphrase exposure in shell history.)</i><br><br><b><b>-e</b> <i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the encryption algorithm to be used (e.g., <i>rijndael-128</i>, <i>blowfish</i>, <i>des</i>).<br><br><b><b>-z</b> <i>&lt;level&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the compression level (from 1 to 9, where 9 is maximum compression) for the embedded data.<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces overwriting of any existing output files without prompting for confirmation.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, displaying more detailed information about the operation's progress.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all output messages, making the operation run quietly.<br><br>


title: DESCRIPTION
content:
<b>steghide</b> is a steganography program designed to conceal data within various types of cover files, specifically supporting JPEG, BMP, WAV, and AU formats. It functions by embedding a secret file into the least significant bits (LSB) of the cover file's data, making the presence of the hidden data imperceptible to the human eye or ear. To ensure confidentiality and integrity, <b>steghide</b> encrypts the embedded data using strong algorithms such as Rijndael (AES), DES, and Blowfish, and employs a passphrase for both encryption and decryption. It also integrates checksums (e.g., SHA256, MD5) to verify data integrity upon extraction. The program offers both embedding and extracting functionalities, making it a versatile command-line tool for covert communication or secure data storage. Users can specify the cover file, the data to be hidden, the output file, and various encryption and compression settings.


title: CAVEATS
content:
Steghide's effectiveness depends on several factors. Its capacity is limited by the cover file's size and format; lossless formats like BMP and WAV are generally more robust than lossy JPEG files, where re-compression or editing can easily destroy embedded data. While designed for imperceptibility, advanced stego-analysis techniques can sometimes detect hidden data. The security of the hidden data is entirely dependent on the strength of the chosen passphrase. It is not suitable for robust digital rights management or situations where absolute undetectability against sophisticated adversaries is required.


title: USAGE CONSIDERATIONS
content:
When using <b>steghide</b>, selecting a suitable cover file is crucial. Lossless formats such as BMP images and WAV audio files are generally more reliable for embedding data than lossy formats like JPEG, as the compression artifacts or re-saving of JPEGs can inadvertently corrupt or destroy the hidden information. For enhanced security, it's advisable to encrypt the data you wish to hide using a strong passphrase, and ideally, encrypt it independently (e.g., with GPG) before embedding it with <b>steghide</b>.


title: HISTORY
content:
Steghide was initially developed by Stefan Hetzl in the early 2000s as a free and open-source project. It aimed to provide a reliable command-line steganography tool for Linux systems, focusing on common image and audio formats and integrating strong encryption capabilities. Its consistent development and open-source nature have ensured its continued relevance and use within the cybersecurity and privacy communities for covert data embedding and extraction.


title: PARAMETERS
content:
<b>-C</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a <i>"clean"</i> text file from input, removing trailing whitespace.<br><br><b>-e</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extract hidden data from the input carrier text.<br><br><b>-f <i>msg_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a file to either read the message from (for hiding) or write the extracted message to.<br><br><b>-L <i>length</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum line length for the output when cleaning with <code>-C</code>.<br><br><b>-p <i>password</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provide a password for AES encryption or decryption of the hidden data.<br><br><b>-q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress all warning messages during operation.<br><br><b>-S</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Calculate and display the steganographic capacity of the input carrier file without performing embedding.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display statistics about the embedding or extraction process, such as bytes hidden or extracted.<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of <b>stegsnow</b>.<br><br><b>-z</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable zlib compression for the message before embedding or decompression during extraction.<br><br><b><i>in_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the input carrier text file from which data will be hidden or extracted. If omitted, input is read from stdin.<br><br><b><i>out_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the output file where the modified carrier text (with hidden data) or cleaned text will be written. If omitted, output is written to stdout.<br><br>


title: DESCRIPTION
content:
<b>stegsnow</b> is a steganography tool designed to hide data within ordinary ASCII text files. It accomplishes this by manipulating whitespace characters (spaces and tabs) at the end of lines. The core principle involves encoding each bit of the secret message using subtle variations in whitespace: a space might represent a '0' bit, a tab a '1' bit, or more complex schemes involving combinations or ordering of spaces and tabs.<br><br>This method makes the alterations virtually imperceptible to the human eye and often preserves the visual layout of the text. <b>stegsnow</b> supports both hiding (encoding) and extracting (decoding) information. To enhance security, it also offers features like data compression using zlib and strong encryption using AES in CBC mode, allowing users to conceal sensitive information. It's particularly useful for covert communication where the goal is to make the existence of a hidden message undetectable rather than just encrypting it. The carrier text, after embedding, remains a valid and readable text file, making detection challenging without specific knowledge or tools.


title: CAVEATS
content:
<b>stegsnow</b> relies entirely on trailing whitespace characters, which can be inadvertently removed by text editors, version control systems, or network transfers that normalize text files. This can lead to data loss or corruption of the hidden message. Its effectiveness is limited to ASCII text files, and it's not designed for embedding data in binary files or other media types. While the visual changes are minimal, advanced statistical analysis might be able to detect the presence of hidden data by analyzing the patterns of whitespace.


title: ENCODING SCHEME
content:
<b>stegsnow</b> primarily uses a scheme where different sequences of spaces and tabs at the end of lines represent binary bits. For example, a single space might represent a '0' bit, and a tab might represent a '1' bit. More complex schemes can involve sequences like 'space-tab' for '0' and 'tab-space' for '1'. This subtle encoding ensures that the visible text content remains unchanged, making detection difficult without specialized tools or knowledge of its operation. The choice of encoding varies based on the version and internal logic, maximizing hidden data capacity while minimizing visual impact.


title: HISTORY
content:
<b>stegsnow</b> was developed by Matthew D. Thayer. It emerged as a specific solution for text steganography, focusing on the subtle manipulation of whitespace. Its development reflects the ongoing interest in creating covert communication channels that are resilient to detection. While other steganography tools might focus on image or audio files, <b>stegsnow</b> carved a niche for itself by leveraging the often-overlooked trailing whitespace in text documents, making it a simple yet effective tool for its intended purpose.


title: SYNOPSIS
content:
<B>step</B> <I>&lt;subcommand&gt;</I> <I>[options]</I> <I>[arguments]</I><br><br>Common Subcommands:<br><B>step ca</B>: Manage Certificate Authorities (CAs).<br><B>step certificate</B>: Create, manage, and inspect certificates.<br><B>step acme</B>: Manage ACME challenges and orders.<br><B>step crypto</B>: Perform cryptographic operations.<br><B>step keygen</B>: Generate cryptographic keys.


title: PARAMETERS
content:
<b><B>-h</B>, <B>--help</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help for the `step` command or a specific subcommand.<br><br><b><B>-p</B>, <B>--profile</B> <I>&lt;name&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the configuration profile to use, overriding the default.<br><br><b><B>--home</B> <I>&lt;path&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the directory for `step` configuration files and data. Defaults to `~/.step`.<br><br><b><B>--config</B> <I>&lt;path&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the path to a custom configuration file for `step`.<br><br><b><B>-v</B>, <B>--version</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the `step` command version.<br><br>


title: DESCRIPTION
content:
<I>The `step` command is the powerful command-line interface (CLI) tool from Smallstep, designed for simplified Public Key Infrastructure (PKI) management, certificate issuance, and ACME (Automatic Certificate Management Environment) operations. It enables users to easily manage Certificate Authorities (CAs), create and sign X.509 certificates and SSH certificates, and automate certificate lifecycles. `step` is widely used by developers and operations teams to secure microservices with mutual TLS (mTLS), manage internal PKIs, and provision identities, streamlining complex cryptographic tasks into user-friendly commands. Its modular design allows for flexible integration into various environments, making it an essential tool for modern cloud-native security.</I>


title: CAVEATS
content:
<I>The `step` command deals with sensitive cryptographic material, including private keys and certificates. Mishandling or misconfiguration can lead to severe security vulnerabilities, including unauthorized access, impersonation, or compromise of your infrastructure. Always ensure proper key protection, secure storage, and follow best practices for PKI management. Regular auditing of certificate issuance and revocation is crucial. Understand the implications of certificate lifetimes and renewal processes to prevent service outages due to expired certificates.</I>


title: KEY SUBCOMMANDS OVERVIEW
content:
<I>While the `step` command itself has global options, its true power lies in its extensive set of subcommands, each dedicated to specific PKI or cryptographic tasks. For instance, <B>step ca</B> manages Certificate Authorities, <B>step certificate</B> handles individual certificate operations (creating, signing, inspecting), <B>step acme</B> integrates with ACME servers for automated certificate provisioning, and <B>step ssh</B> manages SSH host and user certificates. Users typically interact with `step` by invoking a subcommand followed by its specific options and arguments.</I>


title: COMMON USE CASES
content:
<I>`step` is versatile for various security needs: <br> 1. <B>Internal PKI Management:</B> Setting up and managing a private CA for internal services. <br> 2. <B>mTLS for Microservices:</B> Issuing and deploying mutual TLS certificates to secure inter-service communication. <br> 3. <B>Automated Certificate Provisioning:</B> Integrating with ACME for publicly trusted certificates or automating internal certificate issuance with policies. <br> 4. <B>SSH Certificate Management:</B> Centralizing SSH key management and enabling ephemeral SSH access.</I>


title: HISTORY
content:
<I>The `step` CLI was developed by Smallstep, a company focused on bringing modern, automated PKI solutions to developers and operators. It emerged to address the complexities and traditional friction associated with managing X.509 certificates and internal CAs, especially in dynamic, distributed environments like microservices and cloud infrastructure. Launched to provide a more developer-friendly and scriptable alternative to verbose tools, `step` aims to simplify the entire certificate lifecycle, from CA creation to certificate issuance, revocation, and renewal, promoting best practices like mTLS by default.</I>


title: PARAMETERS
content:
<b>--all-namespaces</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitors pods across all Kubernetes namespaces, overriding any specified <code>--namespace</code>.<br><br><b>-c, --container &lt;regex&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a regular expression to match container names within the selected pods.<br><br><b>--container-state &lt;state&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters logs by the state of containers (e.g., <code>running</code>, <code>waiting</code>, <code>terminated</code>).<br><br><b>--context &lt;name&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a specific Kubernetes context from your kubeconfig file.<br><br><b>-e, --exclude &lt;regex&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes log lines that match the provided regular expression.<br><br><b>--exclude-container &lt;regex&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes logs from containers whose names match this regular expression.<br><br><b>-f, --follow</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continuously streams new log entries as they arrive (this is the default behavior).<br><br><b>--init-containers</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes logs from initialization containers in the output.<br><br><b>-l, --selector &lt;label-query&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters pods using Kubernetes label selectors (e.g., <code>app=my-app,env=prod</code>).<br><br><b>-n, --namespace &lt;name|regex&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects logs from specific Kubernetes namespaces, accepting a name or a regular expression. Can be comma-separated for multiple namespaces.<br><br><b>-o, --output &lt;format&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output format. Common formats include <code>default</code>, <code>json</code>, <code>raw</code>, <code>template</code>, and <code>extjson</code>.<br><br><b>--since &lt;duration&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays logs only from a specified duration ago (e.g., <code>5s</code>, <code>2m</code>, <code>3h</code>). Default is <code>0s</code> (all logs).<br><br><b>--tail &lt;lines&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of most recent log lines to display per container. Use <code>-1</code> for all historical logs (default).<br><br><b>-t, --timestamps</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prepends RFC3339 timestamps to each log line, showing when the log entry was generated.<br><br><b>--template &lt;string&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a Go template string for custom log output formatting, useful for specific parsing needs.<br><br><b>--timezone &lt;zone&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the timezone for displayed timestamps (e.g., <code>UTC</code>, <code>America/New_York</code>). Default is local.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <i>stern</i> version information and exits.<br><br>


title: DESCRIPTION
content:
<i>stern</i> is a powerful and user-friendly command-line utility designed for tailing logs from multiple pods and containers within a Kubernetes cluster. Unlike <b>kubectl logs</b>, which typically focuses on a single pod or container, <i>stern</i> allows users to concurrently monitor log streams from multiple sources, even across different namespaces and clusters.<br><br>It provides a unified, color-coded output, making it easy to distinguish logs from various origins. <i>stern</i> supports filtering by pod name, container name, and even regular expressions, enabling highly targeted log monitoring. It automatically re-attaches to new pods or containers matching the criteria as they are created or restarted, ensuring continuous log visibility for dynamic workloads. Its features make it an indispensable tool for debugging, monitoring, and troubleshooting applications deployed on Kubernetes.


title: CAVEATS
content:
<i>stern</i> is not a built-in Linux command; it must be installed separately. It requires <b>kubectl</b> to be configured and access to a Kubernetes cluster with appropriate RBAC permissions to read pod and log data. Performance can be impacted by the number of pods and the volume of logs being tailed.


title: COLOR-CODING AND FILTERING
content:
<i>stern</i> automatically color-codes log output by pod and container, significantly improving readability when monitoring multiple sources simultaneously. It supports powerful regular expression filtering for both pod and container names, as well as for the log content itself, allowing users to focus on relevant information without being overwhelmed by noisy logs.


title: REAL-TIME MONITORING
content:
One of <i>stern</i>'s key strengths is its ability to automatically discover and re-attach to new or restarted pods and containers that match the specified criteria. This ensures continuous, real-time log monitoring for dynamic Kubernetes workloads, providing uninterrupted visibility without manual intervention.


title: HISTORY
content:
Developed by Wercker (later acquired by Oracle) and first released around 2017, <i>stern</i> quickly gained popularity as a crucial tool for Kubernetes development and operations. It addressed a significant gap in <b>kubectl logs</b> by providing a unified, color-coded view of logs from multiple pods and containers, making debugging and monitoring distributed applications much more efficient. Its active open-source community continues to maintain and enhance its capabilities.


title: PARAMETERS
content:
<b>-a, --ascii</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output GTS in human-readable ASCII format (default).<br><br><b>-b, --binary</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output GTS in efficient binary format.<br><br><b>-c, --check</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a validity check for duplicate vertices and edges in the input.<br><br><b>-C, --cleanup</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt to remove duplicate vertices and edges from the input mesh.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress progress and status messages during conversion.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display detailed progress and status messages.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a brief help message and exit.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information of the utility and exit.<br><br>


title: DESCRIPTION
content:
<b>stl2gts</b> is a command-line utility from the <I>GNU Triangulated Surface (GTS)</I> library, designed for converting three-dimensional models between file formats. Specifically, it transforms models from the Stereolithography (STL) format, a common standard for 3D printing and computer-aided design (CAD), into the GTS format. <br><br>STL files represent a 3D object's surface as a collection of unorganized triangular facets, often lacking explicit topological information like connectivity between vertices, edges, or faces. In contrast, the GTS format provides a more structured and robust representation of triangulated surfaces, explicitly defining vertices, edges, and faces, along with their connectivity. This richer topological data is crucial for advanced mesh processing tasks such as simplification, refinement, boolean operations, and finite element method (FEM) simulations.<br><br>By converting STL models to GTS, users can leverage the powerful suite of tools and algorithms available within the GTS library for comprehensive mesh analysis, manipulation, and visualization, making it an essential tool in workflows involving 3D geometry processing and scientific computing.


title: CAVEATS
content:
<b>stl2gts</b> primarily focuses on geometric conversion. Since STL files do not inherently contain topological information (like explicit edge or face connectivity), <b>stl2gts</b> must infer this during conversion to the GTS format. While it includes options for checking and cleaning duplicate elements, complex or severely malformed STL inputs might still lead to sub-optimal GTS output. It typically operates using standard input and output streams, requiring shell redirection for file handling.


title: FILE FORMATS OVERVIEW
content:
<b>STL (Stereolithography)</b>: A widely adopted file format for 3D printing, CAD, and rapid prototyping. It describes a 3D object's surface as a collection of untriangulated, planar facets, with each facet defined by three vertices and a normal vector. STL files can be either ASCII or binary. Its simplicity means it lacks color, texture, or explicit topological information.<br><br><b>GTS (GNU Triangulated Surface)</b>: A format native to the GTS library, designed for handling complex 3D triangulated surfaces with explicit topological information. It precisely defines vertices, edges, and faces, along with their interconnections. This rich data structure enables sophisticated mesh operations and analyses not possible with simpler formats like STL, making it suitable for scientific computing and advanced 3D geometry processing.


title: HISTORY
content:
<b>stl2gts</b> is an integral part of the <I>GNU Triangulated Surface (GTS)</I> Library, a free software project initiated by Stéphane Popinet. The library was developed to provide a robust and versatile set of tools for manipulating and processing 3D triangulated surfaces. Its development began in the late 1990s and early 2000s, aligning with the growing need for open-source solutions in computational geometry, scientific visualization, and numerical simulation. The command reflects the library's commitment to interoperability by supporting common 3D formats like STL.


title: SYNOPSIS
content:
<code><b>stolonctl [global-options] &lt;command&gt; [command-options]</b></code><br><br><i>Common global options include:</i><br><code><b>--cluster-name &lt;name&gt;</b></code>: Specifies the name of the Stolon cluster.<br><code><b>--store-backend &lt;backend&gt;</b></code>: Defines the backend for the consensus store (e.g., etcdv3, consul, zoov3, kubernetes).<br><code><b>--store-endpoints &lt;endpoints&gt;</b></code>: A comma-separated list of store endpoints.<br><code><b>--store-prefix &lt;prefix&gt;</b></code>: The prefix to use in the store for Stolon's data.


title: PARAMETERS
content:
<b>status</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current status and topology of the Stolon cluster, including master, replicas, and their health.<br><br><b>init</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initializes a new Stolon cluster by writing its initial specification to the consensus store.<br><br><b>clusterdata</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages the cluster data in the consensus store. Subcommands include <code><b>get</b></code>, <code><b>set</b></code>, and <code><b>remove</b></code>.<br><br><b>update</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Updates the cluster specification for a running Stolon cluster. This can include changing parameters like PostgreSQL version, standby settings, or resource limits.<br><br><b>forcefailover</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces a failover to a specified PostgreSQL instance (keeper). This command is used for manual intervention or testing.<br><br><b>version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the <b>stolonctl</b> client version and build information.<br><br><b>completion</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates shell completion scripts for various shells like bash, zsh, fish, and powershell.<br><br>


title: DESCRIPTION
content:
<b>stolonctl</b> is the command-line interface client for Stolon, a cloud-native PostgreSQL high availability and disaster recovery manager. It allows administrators to interact with and manage Stolon-controlled PostgreSQL clusters. Through <b>stolonctl</b>, users can inspect the cluster's current status, initialize new clusters, update cluster configurations, force failovers, and directly manipulate the cluster's state within the configured consensus store (e.g., etcd, Consul, ZooKeeper, or Kubernetes ConfigMap). It provides a unified way to observe the health and topology of the PostgreSQL instances managed by Stolon's sentinels and keepers, facilitating operational tasks for resilient PostgreSQL deployments. Its design emphasizes automation and integration with container orchestration platforms.


title: CAVEATS
content:
<b>stolonctl</b> relies on the Stolon cluster being properly configured and accessible to the specified consensus store. Direct manipulation of cluster data via <code><b>clusterdata set</b></code> should be done with extreme caution, as incorrect changes can disrupt the cluster's operation. It's primarily an operational tool for Stolon and not a general PostgreSQL client like <code><b>psql</b></code>.


title: STOLON ARCHITECTURE
content:
<b>stolonctl</b> interacts with a Stolon cluster which typically consists of three main components: <i>sentinels</i> (monitor and elect masters), <i>keepers</i> (manage PostgreSQL instances), and a <i>consensus store</i> (holds cluster state). <b>stolonctl</b> communicates directly with the consensus store to read and write cluster information or with the Stolon API (if exposed) to trigger actions.


title: IDEMPOTENCY
content:
Many <b>stolonctl</b> commands are designed to be idempotent, meaning they can be run multiple times without causing unintended side effects, which is beneficial for automation and scripting purposes in cloud environments.


title: HISTORY
content:
Stolon was initiated by Sorint.Lab to provide a robust, cloud-native high availability solution for PostgreSQL. <b>stolonctl</b> was developed as an integral part of the Stolon project from its early stages, serving as the primary command-line interface for administrators to interact with the Stolon cluster and its underlying consensus store. It has evolved alongside the Stolon project, adapting to new features and improvements in Stolon's architecture and capabilities.


title: SYNOPSIS
content:
<b>kill</b> [<b>-s</b> <I>SIGNAL</I> | <b>-SIGNAL_NAME</b> | <b>-SIGNAL_NUMBER</b>] <I>PID</I>...<br><br>For stopping a process:<br><b>kill</b> <b>-STOP</b> <I>PID</I>...<br><b>kill</b> <b>-s</b> <b>STOP</b> <I>PID</I>...<br><b>kill</b> <b>-19</b> <I>PID</I>...


title: PARAMETERS
content:
<b><I>PID</I>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more Process IDs (PIDs) of the processes to which the signal will be sent. You can find PIDs using commands like <b>ps</b> or <b>top</b>.<br><br><b><b>-s</b> <I>SIGNAL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the signal to send by name or number. For stopping a process, use <I>STOP</I> or its number <I>19</I>.<br><br><b><b>-STOP</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A shorthand option to specify the <b>SIGSTOP</b> signal. This is equivalent to <b>-s STOP</b>.<br><br><b><b>-19</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A shorthand option to specify the <b>SIGSTOP</b> signal by its numeric value. This is equivalent to <b>-s 19</b>.<br><br>


title: DESCRIPTION
content:
<b>kill</b> is a fundamental Unix/Linux command used to send signals to processes. When used with the <b>STOP</b> signal (signal number 19), it instructs the operating system to <I>pause</I> a running process without terminating it. This is distinct from other signals like <b>SIGTERM</b> or <b>SIGKILL</b>, which are used to request or force process termination. A process stopped using <b>SIGSTOP</b> will remain in a suspended state, consuming system resources but not executing any instructions, until it receives a <b>SIGCONT</b> signal (signal number 18), which resumes its execution.<br><br><b>SIGSTOP</b> is primarily used for job control, allowing users to temporarily halt a background process, inspect its state, or make system adjustments before resuming it. Unlike most other signals, <b>SIGSTOP</b> cannot be caught, ignored, or blocked by the target process, making it a reliable way for the kernel to enforce a halt. It is often employed in debugging scenarios or when managing long-running background tasks.


title: CAVEATS
content:
<b>Permissions:</b> To stop a process, you must either be its owner or have root privileges. Insufficient permissions will result in an 'Operation not permitted' error.<br><br><b>Unblockable Signal:</b> <b>SIGSTOP</b> is a unique signal in that it cannot be caught, ignored, or blocked by the target process. This ensures that the operating system can always halt a process, regardless of its state or programming.<br><br><b>Terminal Job Control:</b> While <b>kill -STOP</b> can be used for any process, the <b>SIGTSTP</b> signal (usually triggered by <b>Ctrl+Z</b>) is sent to the foreground process group of a terminal to stop it. This is part of shell job control and works similarly to <b>SIGSTOP</b> but is initiated differently.


title: RESUMING A STOPPED PROCESS
content:
After a process has been stopped using <b>SIGSTOP</b>, it can be resumed by sending it the <b>SIGCONT</b> signal (signal number 18). This is typically done using the command: <br><code><b>kill -CONT </b><I>PID</I>...</code> or <code><b>kill -s CONT </b><I>PID</I>...</code>. The process will then continue execution from where it left off.


title: DISTINCTION FROM TERMINATION SIGNALS
content:
It's crucial to understand that <b>SIGSTOP</b> does not terminate a process. It merely pauses it. To terminate a process, other signals like <b>SIGTERM</b> (default for <b>kill</b>, allows graceful shutdown) or <b>SIGKILL</b> (forces immediate termination) are used. A stopped process consumes memory and other resources but no CPU cycles.


title: HISTORY
content:
The <I>kill</I> command and the concept of signals have been fundamental to Unix-like operating systems since their early development. Signals, including <b>SIGSTOP</b>, were introduced as a form of inter-process communication (IPC) and control. <b>SIGSTOP</b> specifically became a critical component of job control, allowing users to manage multiple tasks within a single terminal session by suspending and resuming processes. Its reliability (being unblockable) has ensured its consistent role in system administration and debugging over decades of Unix and Linux evolution.


title: DESCRIPTION
content:
The <i>stormlock</i> command is not recognized as a standard, pre-installed utility or command in common Linux distributions. Therefore, a direct analysis of its functionality, syntax, or options is not possible. It is likely a custom script, an application-specific internal utility (possibly related to distributed systems like Apache Storm or ZooKeeper for managing distributed locks), or a conceptual term. Users encountering this might be working within a specific project environment where such a tool has been custom-developed or is part of a non-standard software installation. To understand its purpose, one would need to consult the specific project documentation or source code where <i>stormlock</i> is referenced.


title: CAVEATS
content:
As <i>stormlock</i> is not a standard Linux command, its behavior, security implications, and system requirements are entirely dependent on its specific implementation. Running unknown scripts can pose significant security risks. Always verify the source and purpose of any non-standard command before execution to ensure system integrity and security.


title: IDENTIFYING CUSTOM COMMANDS
content:
If you encounter a command like <i>stormlock</i>, it's advisable to investigate its origin. You can often use commands like <i>which stormlock</i> or <i>type stormlock</i> to determine if it's an alias, a shell function, or an executable file, and its location on the filesystem. Further inspection of the file's content (if it's a script) or associated documentation for specific software installed on your system can reveal its purpose and usage.


title: HISTORY
content:
There is no public or documented history for a standard <i>stormlock</i> Linux command, as it does not exist in common Linux distributions. Any historical context would be specific to a custom implementation or a particular software project that might use this nomenclature for an internal utility.


title: SYNOPSIS
content:
<b>stow</b> [<i>options</i>] [<i>packages...</i>]<br><br>Common usage:<br><b>stow</b> [<b>-D</b>|<b>-R</b>|<b>-S</b>] [<b>-v</b>|<b>-n</b>] [<b>-d</b> <i>stow_dir</i>] [<b>-t</b> <i>target_dir</i>] [<i>package</i>]


title: PARAMETERS
content:
<b>-S, --stow</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly specifies the "stow" action (default). Creates symlinks from the package directory to the target directory.<br><br><b>-D, --delete</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs the "unstow" action. Deletes symlinks previously created by <b>stow</b> for the specified package(s).<br><br><b>-R, --restow</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a "restow" action. First unstows the package(s), then stows them again. Useful for updating symlinks after changes in the source package.<br><br><b>-v, --verbose[=N]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases verbosity level. Higher <i>N</i> (e.g., <b>-v2</b>, <b>-v3</b>) provides more detailed output.<br><br><b>-n, --no-act</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a dry run. Shows what actions <b>stow</b> would take without actually modifying any files or creating symlinks.<br><br><b>-d, --dir=<i>DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the "stow directory" where packages are located. Defaults to the parent directory of the current working directory.<br><br><b>-t, --target=<i>DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the "target directory" where symlinks will be created. Defaults to the parent directory of the current working directory.<br><br><b>--dotfiles</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables special handling for dotfiles (files starting with a dot, e.g., <i>.bashrc</i>). It treats a directory named <i>dotfiles</i> as if its contents are directly in the target, and handles the dot in the symlink names.<br><br><b>--no-override</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <b>stow</b> from overriding existing files or directories in the target directory with symlinks.<br><br><b>--override=<i>ENTRY</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows <b>stow</b> to override an existing file or directory with a symlink for a specific <i>ENTRY</i> (e.g., <i>bin/ls</i>). Can be specified multiple times.<br><br><b>--ignore=<i>REGEX</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a regular expression for files or directories that should be ignored by <b>stow</b> and not linked. Can be specified multiple times.<br><br><b>--defer=<i>REGEX</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a regular expression for files or directories that should not be symlinked directly, but whose subdirectories should still be processed.<br><br>


title: DESCRIPTION
content:
<b>stow</b> is a powerful and flexible program that simplifies the management of software installations and configuration files using symbolic links. Instead of copying files directly into system directories, <b>stow</b> creates a "symlink farm" from a structured "stow directory" into a specified "target directory". Each software package or configuration set is placed in its own subdirectory within the stow directory. When a package is "stowed," <b>stow</b> intelligently creates symbolic links for all its contents (files and subdirectories) from the package's location to the corresponding paths within the target directory. This makes the installed software or configurations appear as if they were natively installed in the target location, while keeping the original source files organized and separate.<br><br>This approach is particularly valuable for managing dotfiles (configuration files like <i>.bashrc</i> or <i>.vimrc</i> in a user's home directory), allowing them to be version-controlled in a repository and easily deployed across multiple systems. It also facilitates installing multiple versions of the same software, or custom builds, without conflicting with system-wide installations or requiring root privileges for many use cases. <b>stow</b> promotes a clean, non-invasive installation method, making it straightforward to "unstow" (remove the symlinks) a package without leaving orphaned files.


title: CAVEATS
content:
<b>stow</b> is a powerful tool, but users should be aware of certain considerations:<br><br><i>Potential for Conflicts</i>: If not used carefully, <b>stow</b> can conflict with existing files or directories in the target directory, especially if the <b>--no-override</b> option is not used. This can lead to unexpected behavior or data loss if critical system files are overwritten.<br><br><i>Dependency on Source Location</i>: Since <b>stow</b> relies on symbolic links, moving or deleting the original package directories within the stow directory will break the created symlinks in the target directory, rendering the "installed" software unusable until the links are fixed or the package is re-stowed.<br><br><i>Not a Package Manager</i>: <b>stow</b> is not a full-fledged package manager. It does not handle software dependencies, compilation, or automatic updates. It is primarily a symlink manager for pre-existing installations or source builds.<br><br><i>Complexity with Root</i>: While often used without root, using <b>stow</b> in system-wide directories (like <i>/usr/local</i>) requires root privileges, and mistakes can impact system stability. It's generally safer for user-specific installations or in dedicated user directories.


title: HOW STOW WORKS
content:
At its core, <b>stow</b> operates on two main directories: the 'stow directory' (where your individual packages reside, each in its own subdirectory) and the 'target directory' (where <b>stow</b> creates symlinks). When you execute <b>stow &lt;package_name&gt;</b>, it inspects the contents of <b>&lt;stow_directory&gt;/&lt;package_name&gt;</b>. For every file or subdirectory found within, <b>stow</b> creates a corresponding symbolic link in the 'target directory'. For example, if you have <b>&lt;stow_directory&gt;/myvim/.vimrc</b>, and your target directory is your home directory (<i>~</i>), <b>stow</b> will create a symlink <b>~/.vimrc</b> pointing to <b>&lt;stow_directory&gt;/myvim/.vimrc</b>. This allows you to manage entire application installations or sets of configuration files as self-contained units.


title: COMMON USE CASES
content:
One of <b>stow</b>'s most popular applications is <b>dotfile management</b>. Users often keep their configuration files (like <i>.bashrc</i>, <i>.gitconfig</i>, <i>.vim/</i>, etc.) in a version-controlled Git repository. By structuring this repository as a stow directory, they can easily deploy these dotfiles to any new system by simply cloning the repo and running <b>stow</b> commands. Another common use is for <b>installing custom software</b> or multiple versions of the same software locally without root privileges. Instead of installing into <i>/usr/local</i>, you can install a program into a directory like <i>~/opt/mypackage-1.0</i> and then use <b>stow</b> to make its binaries and man pages available in your <i>~/bin</i> and <i>~/man</i> directories, which are typically already in your PATH.


title: HISTORY
content:
<b>GNU Stow</b> originated as a program to manage separate software packages installed under a common directory structure, typically <i>/usr/local</i>. Its design goal was to provide a simple, non-invasive way to install multiple independent software packages without them interfering with each other, particularly useful in environments where a traditional package manager wasn't feasible or desired for certain installations. It leverages the Unix filesystem's symbolic linking capabilities to achieve this "virtual" installation, allowing users to keep source trees and built binaries in isolated directories while still making them accessible from common system paths. Over time, its flexibility and simplicity led to its widespread adoption for managing personal configurations (dotfiles) and local development environments, where users want fine-grained control over their installed software versions.


title: SYNOPSIS
content:
<b>strace</b> <I>[-options]</I> <I>command</I> [<I>arguments</I>...]<br><b>strace</b> <I>[-options]</I> <b>-p</b> <I>pid</I>


title: PARAMETERS
content:
<b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Count time, calls, and errors for each system call and report a summary on program exit.<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Trace child processes as they are forked by the traced program.<br><br><b><b>-o</b> <I>filename</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the trace output to <I>filename</I> instead of standard error.<br><br><b><b>-p</b> <I>pid</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attach to the process with the ID <I>pid</I> and trace its activity. This requires appropriate permissions.<br><br><b><b>-e</b> <I>expr</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a qualifying expression to control which events to trace. For example, <I>trace=open,close</I> to trace only open and close system calls, or <I>file=myfile.txt</I> to trace operations on a specific file.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose mode for decoding structures, showing more detailed information for system call arguments.<br><br><b><b>-tt</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print a time stamp with microseconds for each line of output, indicating when the system call occurred.<br><br><b><b>-T</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the time spent in each system call, from its entry to its exit. This helps identify performance bottlenecks.<br><br><b><b>-s</b> <I>strsize</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the maximum string size to print. Longer strings are truncated. Default is 32 characters.<br><br>


title: DESCRIPTION
content:
<I>strace</I> is a powerful diagnostic, debugging, and instructional user-space utility for Linux. It intercepts and records the system calls invoked by a program and the signals received by it. This allows users to observe the interactions between a program and the Linux kernel, providing insights into file operations, network communications, process management, memory allocation, and more.<br><br>It's invaluable for troubleshooting problems where a program isn't behaving as expected, helping identify missing files, permission issues, or unexpected network activity. <I>strace</I> works by utilizing the <I>ptrace</I> system call, which allows one process to control another, inspect and change its core image, and set breakpoints, thus providing a low-level view of program execution.


title: CAVEATS
content:
<b>strace</b> can significantly slow down the traced program due to the overhead of intercepting every system call.<br>Tracing very busy or long-running processes can generate extremely large output files, potentially consuming significant disk space.<br>Requires appropriate permissions (e.g., <I>CAP_SYS_PTRACE</I> or root privileges) to attach to processes or trace privileged operations.<br>The output can be very verbose and may require careful filtering or parsing to extract useful information.


title: COMMON USE CASES
content:
Debugging programs that crash or behave unexpectedly.<br>Understanding why a program fails to start (e.g., missing libraries, incorrect permissions, configuration issues).<br>Analyzing network communication issues or unexpected file accesses.<br>Reverse engineering program behavior without source code.<br>Security auditing to see what files or network connections a program accesses.


title: OUTPUT FORMAT
content:
The default output for each system call typically includes:<br><br><I>syscall_name</I>(<I>arguments</I>) = <I>return_value</I> <I><error_code_if_error></I><br><br>For example:<br><I>openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 3</I><br><I>read(3, "root:x:0:0:root:/root:/bin/bash\n", 4096) = 32</I>


title: HISTORY
content:
<I>strace</I> was originally developed by Richard S. Wall and Paul F. Haase in the early 1990s for SunOS. It was later ported to Linux and has since become an indispensable tool in the Linux ecosystem. Its design is rooted in the <I>ptrace</I> system call mechanism, providing a low-level, yet user-friendly, interface for observing program-kernel interactions. Over the decades, it has evolved significantly, adapting to new kernel features, system calls, and architectures.


title: PARAMETERS
content:
<b><b>-map</b> <i>&lt;map&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the pixel components to extract. Common maps include 'RGB' for red, green, blue channels, 'RGBA' for red, green, blue, alpha, or 'CMYK' for cyan, magenta, yellow, black. For example, 'R' extracts only the red channel.<br><br><b><b>-depth</b> <i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the bit depth of the pixel components in the output file. Typical values are 8, 16, or 32, representing the number of bits per pixel component.<br><br><b><b>-storage-type</b> <i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the data type for the pixel values in the output. Supported types include 'char', 'short', 'long', 'float', or 'double', influencing how pixel data is stored in memory and written to the file.<br><br><b><b>-extract</b> <i>&lt;geometry&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts a specific rectangular region of the image. The <i>geometry</i> is specified as '<i>WxH+X+Y</i>', where <i>W</i> and <i>H</i> are width and height, and <i>X</i> and <i>Y</i> are the offset coordinates from the top-left corner.<br><br><b><b>-size</b> <i>&lt;geometry&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used when the <i>input_file</i> is raw image data (e.g., 'RGB:raw_data.bin') to specify its dimensions (<i>WxH</i>). This option is crucial for ImageMagick to correctly interpret the raw input stream.<br><br><b><b>-verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints detailed information about the image processing, including input/output details and any warnings or errors.<br><br>


title: DESCRIPTION
content:
The <i>stream.im6</i> command, part of the ImageMagick 6 suite, is a powerful utility designed for extracting raw pixel data from images. Unlike <b>convert</b> or other ImageMagick tools that produce standard image formats, <i>stream</i> outputs unformatted pixel components directly to a file. This low-level capability is particularly useful for tasks requiring direct manipulation or analysis of image data, such as custom image processing pipelines, scientific applications, or when dealing with very large images where traditional image formats might be inefficient.<br><br>Users can specify which pixel components (e.g., Red, Green, Blue, Alpha) to extract, their bit depth, and storage type, providing fine-grained control over the output data. It's a foundational tool for advanced users and developers working with image internals rather than high-level image viewing or editing, enabling efficient access to raw image buffers.


title: CAVEATS
content:
The output of <i>stream.im6</i> is raw pixel data, not a formatted image file. This means the output file cannot be directly opened by standard image viewers without external interpretation or conversion. Users must understand the specified pixel map, depth, and storage type to correctly interpret the byte stream. Processing very large images with <i>stream</i> can generate extremely large output files, potentially consuming significant disk space. Its primary use case is for programmatic access to pixel data, not general user interaction.


title: HISTORY
content:
The <i>stream</i> command is an integral part of the ImageMagick software suite, a comprehensive collection of tools for creating, editing, and converting bitmap images. ImageMagick was first developed by John Cristy in 1987. The <i>stream</i> utility, specifically designed for low-level raw pixel data access, has been a core component of ImageMagick for many years, including in its widely used version 6 (hence 'im6'). It provides fundamental capabilities for developers and advanced users who need direct access to image internals for custom processing or analysis pipelines, predating and coexisting with newer ImageMagick versions.


title: SYNOPSIS
content:
<b>streamlink</b> [<i>OPTIONS</i>] &lt;<i>URL</i>&gt; [<i>STREAM_QUALITY</i>]<br><br><b>Examples:</b><br>&nbsp;&nbsp;&nbsp;streamlink https://www.twitch.tv/twitch 'best'<br>&nbsp;&nbsp;&nbsp;streamlink 'https://www.youtube.com/watch?v=dQw4w9WgXcQ' best --player mpv<br>&nbsp;&nbsp;&nbsp;streamlink 'https://example.com/live' 720p -o stream.mp4


title: PARAMETERS
content:
<b><URL></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The URL of the stream to play or download.<br><br><b>[STREAM_QUALITY]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Desired stream quality, e.g., 'best', 'worst', 'source', '720p'. If omitted, a list of available qualities is shown.<br><br><b>-p, --player &lt;player&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the media player to use (e.g., 'vlc', 'mpv', 'mpv --no-x11').<br><br><b>-o, --output &lt;file&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the stream to a file instead of a player.<br><br><b>--default-stream &lt;quality&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a default stream quality to automatically select if available.<br><br><b>-l, --lowest</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Select the lowest available stream quality.<br><br><b>-h, --highest</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Select the highest available stream quality.<br><br><b>--url, --stream-url</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the direct URL of the stream instead of playing it.<br><br><b>--config &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load configuration from a specific file.<br><br><b>--force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force stream playback even if errors are detected.<br><br><b>--no-verify-ssl</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable SSL certificate verification for insecure connections.<br><br><b>--retry-streams &lt;seconds&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of seconds to retry connecting to the stream.<br><br><b>--retry-open &lt;seconds&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Number of seconds to retry opening the stream after initial connection failure.<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output stream metadata and plugin data as JSON.<br><br><b>--plugins</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all built-in plugins.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's version number and exit.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's help message and exit.<br><br>


title: DESCRIPTION
content:
<i>streamlink</i> is a powerful command-line utility that extracts streams from various online video services and pipes them into a user-chosen video player, such as VLC, MPV, or into standard output. It was developed to provide a lightweight alternative to resource-heavy web players, often offering better performance, higher quality stream options, and more control over playback. Supporting a wide array of streaming platforms through its extensible plugin system, <i>streamlink</i> can handle content from sites like Twitch, YouTube, and many others. Beyond playing, it can also save streams directly to a file. It acts as an essential bridge, simplifying access to online video content and enhancing the viewing experience by bypassing browser dependencies.


title: CAVEATS
content:
<i>streamlink</i> relies on community-maintained plugins, meaning support for specific streaming services can break if those services change their underlying technologies. It requires an external media player (like VLC or MPV) to function as intended for playback. While generally used for legitimate purposes, users should be aware that accessing content this way might, in rare cases, conflict with a streaming service's terms of service, although enforcement against passive viewing is uncommon.


title: CONFIGURATION FILE
content:
<i>streamlink</i> can be configured using a configuration file, typically located at <b>~/.config/streamlink/config</b> or <b>/etc/streamlink/config</b>. This file allows users to set default options such as the preferred media player, stream quality, and other parameters, avoiding the need to specify them with every command execution.


title: PLUGIN SYSTEM
content:
A core strength of <i>streamlink</i> is its highly extensible plugin system. These plugins are Python scripts that allow <i>streamlink</i> to understand and extract streams from hundreds of different streaming websites. This modular design enables rapid adaptation to changes in streaming services and allows the community to contribute support for new platforms without modifying the core application.


title: HISTORY
content:
<i>streamlink</i> originated as an actively maintained fork of <i>livestreamer</i>, a project initially created to address the performance and dependency issues of watching live streams through web browsers (especially Flash-based ones). When <i>livestreamer</i> development became stagnant, a dedicated group of contributors started <i>streamlink</i> to continue its legacy, adding new features, improving existing plugins, and ensuring ongoing compatibility with evolving streaming platforms. It quickly became the de facto successor, known for its robust plugin system and reliable stream extraction capabilities.


title: SYNOPSIS
content:
<b>streamlit</b> <I>command</I> [<i>options</i>] [<i>arguments</i>]<br><br>The most common usage is:<br><b>streamlit run</b> <I>your_script.py</I> [<i>script_arguments</i>] [<i>options</i>]


title: PARAMETERS
content:
<b>--server.port <port></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the port on which the Streamlit app will run (default: 8501).<br><br><b>--server.headless <true|false></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls whether to automatically open the browser when the app starts (default: false).<br><br><b>--server.enableCORS <true|false></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables or disables Cross-Origin Resource Sharing (CORS) for the server (default: true).<br><br><b>--global.logLevel <level></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging level (e.g., <i>info</i>, <i>warning</i>, <i>error</i>, <i>debug</i>).<br><br><b>--browser.gatherUsageStats <true|false></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows or disallows Streamlit to send usage statistics to improve the product (default: true).<br><br><b>--browser.serverAddress <address></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the address the browser should connect to if different from the server address.<br><br><b>--script-args <args></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Arguments to be passed directly to the Python script. These must follow the script path and any Streamlit options.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows help message and exits for the command or subcommand.<br><br>


title: DESCRIPTION
content:
Streamlit is an open-source Python library that transforms data scripts into interactive web applications. Designed for machine learning engineers and data scientists, it enables rapid prototyping and deployment of data-driven dashboards, ML tools, and data visualizations without requiring front-end development expertise. Users write pure Python scripts, and Streamlit automatically renders widgets and displays outputs in a responsive web interface. The <b>streamlit</b> command-line tool serves as the primary interface for running these applications, managing configurations, and accessing documentation. It simplifies the process of creating and sharing interactive data products, bridging the gap between data analysis and deployable applications.


title: CAVEATS
content:
Streamlit applications require Python and the <code>streamlit</code> library to be installed in the environment. While powerful for rapid development, it is opinionated and optimized for data-centric applications, which might not suit general-purpose web development or highly custom UI designs. Performance of the application heavily depends on the efficiency of the underlying Python script. Sharing applications beyond local development often requires deployment solutions like Streamlit Cloud, Docker, or other web servers.<br>


title: SUBCOMMANDS
content:
Beyond <code>run</code>, the <code>streamlit</code> command supports several other subcommands:<br><i>hello</i>: Runs a demo Streamlit app to showcase its capabilities.<br><i>config show</i>: Displays the current Streamlit configuration.<br><i>cache clear</i>: Clears the Streamlit cache directory.<br><i>docs</i>: Opens the Streamlit documentation in a web browser.<br><i>community</i>: Opens the Streamlit community forum in a web browser.<br><i>healthz</i>: Performs a health check on the Streamlit server.


title: CONFIGURATION FILES
content:
Streamlit's behavior can be customized via configuration files, typically located at <code>~/.streamlit/config.toml</code>. These files allow setting default values for server, browser, and global options, providing a persistent way to manage application settings without always using command-line flags.<br>


title: DEPLOYMENT
content:
For sharing Streamlit apps with a wider audience, various deployment strategies are available. Streamlit Cloud offers a managed service for deploying and sharing apps directly from GitHub repositories. Alternatively, apps can be deployed using Docker, Kubernetes, or served via traditional web servers like Nginx/Apache in conjunction with a WSGI server, allowing for flexible hosting solutions.<br>


title: HISTORY
content:
Streamlit was founded by Adrien Gaidon, Thiago Teixeira, and Amanda Kelly, officially launching in October 2019. Its creation stemmed from the desire to simplify the process for machine learning engineers and data scientists to build and share interactive applications without extensive web development knowledge. The project quickly gained traction within the data community due to its ease of use and Python-centric approach. In March 2022, Streamlit was acquired by Snowflake, a cloud data warehousing company, further cementing its role in the data ecosystem and signaling a commitment to integrating powerful data application capabilities with cloud data platforms.<br>


title: PARAMETERS
content:
<b><b>-c</b> <i>N</i>, <b>--cpu</b> <i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates <i>N</i> worker processes that loop on <i>sqrt(random())</i>, consuming CPU cycles.<br><br><b><b>-i</b> <i>N</i>, <b>--io</b> <i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates <i>N</i> worker processes that call <i>sync()</i> to force disk I/O, causing high I/O wait.<br><br><b><b>-m</b> <i>N</i>, <b>--vm</b> <i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates <i>N</i> worker processes that continually allocate and free memory (<i>malloc</i>/<i>free</i>).<br><br><b><b>--vm-bytes</b> <i>B</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the amount of memory each <b>--vm</b> worker allocates. Can use suffixes like <i>B</i>, <i>K</i>, <i>M</i>, <i>G</i> (e.g., <i>256M</i>).<br><br><b><b>--vm-hang</b> <i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies for how long, in seconds, each <b>--vm</b> worker sleeps after allocating memory before freeing it.<br><br><b><b>--vm-keep</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs <b>--vm</b> workers not to free memory after allocation, keeping the memory allocated indefinitely until the worker exits.<br><br><b><b>-d</b> <i>N</i>, <b>--hdd</b> <i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates <i>N</i> worker processes that write and read temporary files, generating disk I/O.<br><br><b><b>--hdd-bytes</b> <i>B</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the amount of disk space each <b>--hdd</b> worker uses for its temporary files. Can use suffixes like <i>B</i>, <i>K</i>, <i>M</i>, <i>G</i>.<br><br><b><b>--hdd-no-sync</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the <i>fsync()</i> system call for <b>--hdd</b> workers, which can make I/O faster but less robust against power failure.<br><br><b><b>-t</b> <i>N</i>, <b>--timeout</b> <i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the duration of the test in seconds. <b>stress</b> will automatically exit after <i>N</i> seconds.<br><br><b><b>--backoff</b> <i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pauses for <i>N</i> seconds before starting any workers. Useful for staggered tests or delaying the load.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses non-error messages, showing only critical output.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays more detailed messages, useful for debugging.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows program version and exits.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br>


title: DESCRIPTION
content:
<b>stress</b> is a simple yet powerful utility designed to impose a configurable workload on a Linux system. Its primary purpose is to test the stability and performance of hardware and software under various load conditions.<br><br>It achieves this by creating child processes or threads that continuously consume specific system resources: CPU cycles, memory allocation (including optional swapping), disk I/O operations (writing and reading files), and pipe I/O.<br><br>Administrators and developers often use <b>stress</b> for benchmarking, identifying system bottlenecks, verifying system stability after hardware or software changes, and debugging performance issues. Users can specify the number of workers for each resource type and set a duration for the stress test, making it a versatile tool for quick system assessments.


title: CAVEATS
content:
<b>Caution:</b> Running <i>stress</i> can significantly impact system performance, potentially leading to unresponsiveness or crashes, especially if not monitored properly. Use with extreme care on production or critical systems.<br><br>The load generated by <i>stress</i> is synthetic and may not perfectly mimic real-world application workloads, so results should be interpreted accordingly.


title: EXAMPLES
content:
<b>1. Stressing CPU and Memory:</b><br>&nbsp;&nbsp;&nbsp;<i>stress -c 4 -m 1 --vm-bytes 512M -t 60</i><br>&nbsp;&nbsp;&nbsp;This command runs 4 CPU-bound processes and 1 memory-bound process (each allocating 512MB) for 60 seconds.<br><br><b>2. Stressing Disk I/O:</b><br>&nbsp;&nbsp;&nbsp;<i>stress -d 2 --hdd-bytes 1G -t 300</i><br>&nbsp;&nbsp;&nbsp;This runs 2 disk I/O workers, each using 1GB of temporary file space, for 300 seconds.<br><br><b>3. Running Multiple Stressors Simultaneously:</b><br>&nbsp;&nbsp;&nbsp;<i>stress --cpu 2 --io 1 --vm 1 --hdd 1 --timeout 120</i><br>&nbsp;&nbsp;&nbsp;This simultaneously stresses CPU, I/O, memory, and disk with a specified number of workers for 120 seconds.


title: EXIT STATUS
content:
<i>stress</i> exits with status 0 on success, or a non-zero status if an error occurs (e.g., failed to fork, invalid arguments) or if the timeout is reached before all workers complete their tasks successfully.


title: HISTORY
content:
<i>stress</i> was originally developed by Amos Waterland as a straightforward utility to impose configurable load on a system. It quickly became a common tool for basic system stability testing and benchmarking due to its simplicity and effectiveness.<br><br>While more sophisticated tools like <i>stress-ng</i> have emerged, offering a wider array of stress mechanisms and finer control, the original <i>stress</i> command remains popular for quick and essential load generation tasks in various Linux environments.


title: PARAMETERS
content:
<b><b>-a</b> or <b>--alt-delimiter</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use `\n%\n` as the string delimiter, useful for multi-line entries.<br><br><b><b>-c</b> <i>char</i> or <b>--character=</b><i>char</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a custom character (<i>char</i>) as the string delimiter. Default is `%`.<br><br><b><b>-i</b> or <b>--ignore-case</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore case when sorting strings, primarily used with <i>diction</i>.<br><br><b><b>-l</b> or <b>--length</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the length of the longest string found to standard output.<br><br><b><b>-o</b> or <b>--offset</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use byte offsets instead of memory pointers, necessary if <i>mmap(2)</i> fails or isn't available.<br><br><b><b>-r</b> or <b>--random</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Randomize the order of strings in the generated data file.<br><br><b><b>-s</b> or <b>--silent</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress verbose output, showing only errors.<br><br><b><b>-v</b> or <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display verbose output (e.g., counts of strings, characters). This is the default.<br><br><b><b>-x</b> or <b>--extfile</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create an auxiliary <i>extfile</i> for programs that cannot handle large files (> 2GB) directly.<br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debugging output (developer option).<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
<i>strfile</i> is a utility used to create a random access data file, commonly for applications like <i>fortune</i> or <i>diction</i>. It processes an input text file where individual string entries are separated by a specified delimiter (by default, a newline followed by a percent sign).<br>Upon execution, <i>strfile</i> generates a binary companion file, typically named <i>filename</i>.dat. This .dat file contains a structured index, including byte offsets for each string within the original text file. This indexing mechanism enables other programs to efficiently seek and retrieve a random string without the necessity of reading the entire source file sequentially.<br>This capability is especially valuable for managing and accessing content from large text databases, ensuring fast and efficient random access to the stored information.


title: CAVEATS
content:
The input file must contain strings separated by the specified delimiter.<br>The delimiter itself must appear on a line by itself, or be preceded by a newline for the default `\n%` delimiter.<br>The output .dat file is architecture-dependent (endianness, pointer size). A .dat file created on one system might not be readable on another with different architecture characteristics.<br>For very large files, using the <b>-x</b> option might be necessary on 32-bit systems.


title: FILE FORMAT
content:
The .dat file generated by <i>strfile</i> is a binary file containing a header structure (including string count, longest string length, checksum) followed by an array of <i>long</i> integers (or <i>off_t</i> for offsets) representing the byte offsets of each string within the original text file. This structure allows for direct random access.


title: USAGE WITH FORTUNE
content:
To use <i>strfile</i> with a custom <i>fortune</i> file, you typically place your text file (e.g., <i>myfortunes</i>) in a <i>fortune</i> directory (e.g., /usr/share/games/fortune/) and then run <b>strfile myfortunes</b>. This will create <i>myfortunes.dat</i>, making your fortunes available to the <i>fortune</i> command.


title: HISTORY
content:
<i>strfile</i> is an integral part of the <i>fortune-mod</i> package, tracing its origins back to early Unix and BSD systems. It was developed to provide an efficient indexing mechanism, allowing applications like <i>fortune</i> to quickly retrieve random messages or quotes from large text files without repeatedly parsing the entire dataset. Its core functionality has remained consistent, serving as a foundational utility for efficient random data access in text-based applications.


title: SYNOPSIS
content:
<b>strace</b> [<i>options</i>] <i>command</i> [<i>arguments...</i>]<br><b>strace</b> [<i>options</i>] <b>-p</b> <i>PID</i>


title: PARAMETERS
content:
<b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Count time, calls, and errors for each system call, and then report a summary.<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Trace child processes as they are forked by the traced process. This is essential for tracing applications that create sub-processes.<br><br><b><b>-o</b> <i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the trace output to the specified <i>filename</i> instead of standard error. Useful for capturing long traces.<br><br><b><b>-p</b> <i>PID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attach to an already running process specified by its process ID (<i>PID</i>). This allows tracing without restarting the application.<br><br><b><b>-e</b> <i>expr</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Qualify which events to trace. <i>expr</i> can filter by system call names (e.g., <b>trace=open,close</b>), by signals, or specify a fault injection condition.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verbose output. Decodes more structures and displays more information, which can be helpful for in-depth analysis.<br><br><b><b>-i</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the instruction pointer (program counter) at the time of the system call. Aids in debugging assembly-level issues.<br><br><b><b>-T</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the time spent in each system call. Provides insight into performance bottlenecks.<br><br><b><b>-tt</b> / <b>-ttt</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prefix each line with the time of day. <b>-ttt</b> adds microsecond precision, useful for highly granular timing analysis.<br><br><b><b>-s</b> <i>length</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the maximum string size to print. Longer strings are truncated. Default is 32.<br><br><b><b>-y</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the path associated with file descriptor arguments. Makes output much more readable for file operations.<br><br><b><b>-yy</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print network protocol information associated with socket file descriptors. Useful for network application debugging.<br><br>


title: DESCRIPTION
content:
<i>strace</i> is a powerful diagnostic, debugging, and instructional user-space tool for Linux. It intercepts and records the system calls made by a process and the signals received by it. This provides a detailed look into the low-level interactions a program has with the operating system kernel, including file operations, network communications, memory allocations, and inter-process communications. It is invaluable for understanding program behavior, diagnosing elusive software bugs, and performing security audits by revealing what resources an application accesses.


title: CAVEATS
content:
Using <i>strace</i> can introduce significant overhead to the traced process, potentially altering its timing and behavior. Tracing privileged processes can reveal sensitive information about system interactions. The volume of output can be extremely large, requiring careful filtering for effective analysis.


title: NOTE ON 'STRIGGER'
content:
It appears that 'strigger' is not a standard or recognized Linux command. This analysis describes <b>strace</b>, which is a widely used system call tracing tool and is often confused or associated with terms like 'triggering system calls'. If 'strigger' was intended to refer to a specific, non-standard script or concept, please provide further context.


title: HOW IT WORKS
content:
<i>strace</i> operates by utilizing the <b>ptrace(2)</b> system call. This kernel interface enables a 'tracer' process (<i>strace</i>) to observe and control the execution of a 'tracee' process. It can intercept system calls before or after they are executed, examine and modify the tracee's memory and registers, and handle signals directed to the tracee. This mechanism allows <i>strace</i> to log every interaction between the application and the Linux kernel.


title: COMMON USE CASES
content:
<i>strace</i> is commonly used for:<br>- <b>Debugging:</b> Pinpointing the exact system call failure that causes an application crash or malfunction.<br>- <b>Performance Analysis:</b> Identifying I/O bottlenecks or excessive system call overhead.<br>- <b>Security Auditing:</b> Understanding what files, network connections, or other resources an unknown program accesses.<br>- <b>Reverse Engineering:</b> Gaining insight into the behavior of closed-source binaries.<br>- <b>Learning:</b> Observing how standard commands (e.g., <b>ls</b>, <b>cat</b>) interact with the kernel.


title: HISTORY
content:
<i>strace</i> originated in the early 1990s as a powerful debugging tool for Linux, inspired by similar utilities on other Unix-like systems. Its foundation lies in the <b>ptrace(2)</b> system call, which allows one process to control another. Over decades, it has undergone continuous development, adapting to new kernel features and adding sophisticated filtering and output options, solidifying its role as an indispensable diagnostic utility in the Linux ecosystem.


title: PARAMETERS
content:
<b>-a, --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scan the entire file, not just initialized data sections within object files.<br><br><b>-f, --print-file-name</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the name of the file before each string found.<br><br><b>-n <i>number</i>, --bytes=<i>number</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Look for sequences of at least <i>number</i> printable characters (default is 4).<br><br><b>-o</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Same as <b>-t d</b>. Print the offset of each string in the file in decimal.<br><br><b>-t <i>format</i>, --radix=<i>format</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the offset of each string in the specified <i>format</i>: <b>o</b> (octal), <b>x</b> (hexadecimal), or <b>d</b> (decimal).<br><br><b>-e <i>encoding</i>, --encoding=<i>encoding</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Select the character <i>encoding</i>. Common options include: <b>s</b> (7-bit ASCII), <b>S</b> (8-bit ASCII), <b>b</b> (16-bit big-endian Unicode), <b>l</b> (16-bit little-endian Unicode), <b>B</b> (32-bit big-endian Unicode), <b>L</b> (32-bit little-endian Unicode).<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
The <b>strings</b> Linux command is a utility designed to extract sequences of printable characters from binary files, such as executables, object files, core dumps, or raw data files. By default, it searches for sequences of at least four printable characters terminated by a newline or null character. It is an invaluable tool for reverse engineering, digital forensics, and debugging, as it can reveal embedded text messages, version numbers, configuration strings, URLs, or error messages that are otherwise hidden within non-textual data. For instance, one might use it to quickly identify copyright notices or internal command strings in an unfamiliar binary. <b>strings</b> can search across an entire file or limit its scan to specific initialized data sections of object files. It also supports various character encodings, including different byte orders for Unicode, making it versatile for inspecting diverse data types. While simple, its power lies in providing a quick glimpse into the human-readable content potentially contained within compiled code or arbitrary data streams, offering crucial clues without requiring complex disassemblers or debuggers.


title: CAVEATS
content:
The output can be voluminous, often requiring piping to filtering commands like <b>grep</b>.<br>It may produce false positives by interpreting random byte sequences as valid strings.<br>It does not understand data structures or context, only raw byte patterns matching printable characters.<br>It might miss strings if they don't adhere to the specified length, encoding, or termination criteria.


title: COMMON USAGE EXAMPLES
content:
<br><b>1. Find all strings in a binary:</b><br><i>strings /bin/ls</i><br><br><b>2. Find strings of at least 8 characters:</b><br><i>strings -n 8 /usr/bin/firefox</i><br><br><b>3. Print filename and offset for each string in hex:</b><br><i>strings -f -t x /bin/bash</i><br><br><b>4. Search for 16-bit little-endian (UTF-16LE) strings in a core dump:</b><br><i>strings -e l core_dump.img</i><br><br><b>5. Filter strings from an entire file (including data sections):</b><br><i>strings -a /usr/lib/libc.so.6 | grep "GLIBC"</i>


title: HISTORY
content:
The <b>strings</b> command has been a standard utility in Unix-like operating systems for decades. It is typically part of the GNU Binutils package on Linux distributions, which provides a collection of binary tools. Its core functionality has remained consistent, focusing on its role as a fundamental tool for inspecting binary files for embedded text data, predating many specialized reverse engineering tools.


title: PARAMETERS
content:
<b>-s, --strip-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove all symbols (debug, non-global, relocation) from the input file(s).<br><br><b>-g, -S, --strip-debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove debugging symbols and sections only (e.g., '.debug', '.line'). Other symbols are preserved.<br><br><b>-p, --strip-unneeded</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove all symbols that are not needed for relocation processing. This often keeps more symbols than <I>--strip-all</I> but fewer than <I>--strip-debug</I>.<br><br><b>-d, --discard-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove all local symbols from the output. Global symbols are kept.<br><br><b>-x, --discard-locals</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove all non-global symbols from the output. This is similar to <I>-d</I>.<br><br><b>-R <I>SECTIONNAME</I>, --remove-section=<I>SECTIONNAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove the specified section from the output file. Can be used multiple times.<br><br><b>-K <I>SECTIONNAME</I>, --keep-section=<I>SECTIONNAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not strip the specified section. This is useful when using <I>--strip-all</I> but you want to preserve certain sections.<br><br><b>-N <I>SYMBOLNAME</I>, --strip-symbol=<I>SYMBOLNAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not strip the specified symbol. Useful for preserving specific symbols even with aggressive stripping.<br><br><b>-o <I>FILE</I>, --output=<I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the stripped output to <I>FILE</I>, rather than modifying the input file in place. This option is only valid when stripping a single file.<br><br><b>-F <I>BFDNAME</I>, --target=<I>BFDNAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the binary file format of the input files. For example, 'elf64-x86-64'.<br><br><b>-I <I>BFDNAME</I>, --input-target=<I>BFDNAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the binary file format of the input files. Alias for <I>--target</I>.<br><br><b>-O <I>BFDNAME</I>, --output-target=<I>BFDNAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the binary file format for the output file. Allows converting between formats.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all object file names as they are processed, providing verbose output.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a summary of the command's options and usage.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version number of the <b>strip</b> utility.<br><br>


title: DESCRIPTION
content:
<b>strip</b> is a utility program that modifies executable files, shared libraries, or object files by removing symbols and debugging information. These symbols include function names, variable names, and line numbers, which are typically used by debuggers. By removing this metadata, <b>strip</b> can significantly reduce the file size of the binary, which is beneficial for embedded systems, network transfer, or when disk space is a concern.<br><br>Additionally, stripping can offer a minor security benefit by making reverse engineering slightly more difficult, as meaningful names are replaced by addresses. While <b>strip</b> makes binaries smaller and potentially harder to analyze, it also means that debugging a stripped executable becomes much more challenging, as symbolic information needed for traceback and breakpoint setting is no longer available. It is part of the GNU Binutils package.


title: CAVEATS
content:
Stripping an executable makes it significantly harder to debug, as symbolic information (function names, line numbers) vital for debuggers and stack traces is removed.<br><br>While it adds a minor hurdle, stripping does not prevent determined reverse engineering or analysis using disassemblers.<br><br>Care must be taken when stripping shared libraries, as removing too much can break other executables that depend on specific symbols being present.


title: OBJECT FILE FORMATS AND BFD
content:
<b>strip</b> uses the Binary File Descriptor (BFD) library to read and write object files. BFD provides a common interface for <b>strip</b> (and other binutils like <B>ld</B>, <B>objdump</B>) to work with various file formats (ELF, COFF, PE, a.out) across different architectures. This allows <b>strip</b> to be highly portable and versatile.


title: SYMBOL TYPES
content:
Symbols stripped by the command can be broadly categorized. <I>Debugging symbols</I> (e.g., DWARF information) are used by debuggers. <I>Local symbols</I> are internal to a compilation unit (e.g., static functions/variables). <I>Global symbols</I> are visible externally and used for linking between different object files or libraries. Understanding these distinctions helps in choosing the appropriate <b>strip</b> options for desired outcomes.


title: HISTORY
content:
The <b>strip</b> command is a long-standing utility, dating back to early Unix systems. It is now a core component of the GNU Binutils project, a collection of binary tools maintained by the GNU Project. Its development has focused on supporting various object file formats (like ELF, COFF, a.out) and providing fine-grained control over what information to remove, adapting to the complexities of modern compilation and linking processes.


title: PARAMETERS
content:
<b>--api-key <key></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a specific secret API key for the command. This overrides any key set via environment variables or configuration.<br><br><b>--config <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom path to the configuration file, overriding the default location (e.g., `~/.config/stripe/config.toml`).<br><br><b>--color <mode></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls the color output of the CLI. Accepted modes are 'auto' (default), 'always', and 'never'.<br><br><b>--log-level <level></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the verbosity of logging output. Valid levels include 'debug', 'info', 'warn', and 'error'.<br><br><b>--no-version-check</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the automatic check for new CLI versions on startup.<br><br><b>--project-name <name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a specific project name, useful for managing multiple Stripe projects or configurations.<br><br><b>--skip-update</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips the automatic update process that runs when the CLI starts.<br><br><b>--version, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the current version of the Stripe CLI and then exits.<br><br><b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message for the main command or a specific subcommand.<br><br>


title: DESCRIPTION
content:
The <b>Stripe CLI</b> is a powerful command-line interface developed by Stripe Inc., designed to facilitate developer interaction with the Stripe API and account directly from the terminal. It provides essential functionalities for building and debugging Stripe integrations locally. Key features include the ability to trigger webhook events for development and testing purposes, tail real-time logs from API requests, and manage various Stripe resources like customers, payments, and products without needing to access the Stripe Dashboard or write extensive code. This tool is instrumental in streamlining the development workflow, enabling rapid prototyping, and efficient debugging of applications built on the Stripe platform. It simulates production environments effectively, offering immediate feedback on API calls and event handling.


title: CAVEATS
content:
The Stripe CLI requires an active Stripe account and a working internet connection to interact with the Stripe API. For full functionality, especially for local webhook testing, you might need additional tools like `ngrok` or similar tunneling services. Proper authentication is crucial, typically achieved via `stripe login` or by providing an API key. It's highly recommended to use test mode API keys during development and only use live mode keys when absolutely necessary and with extreme caution.


title: SUBCOMMANDS
content:
The <b>stripe</b> command serves as a dispatcher for a multitude of subcommands, each addressing a specific category of tasks or resources. Examples include <i>stripe listen</i> for forwarding webhook events to your local machine, <i>stripe logs tail</i> for real-time streaming of API request logs, and various subcommands under <i>stripe customers</i>, <i>stripe payments</i>, <i>stripe products</i>, etc., for managing these respective resources. Each subcommand has its own specific set of options and arguments, which can be explored by running <i>stripe <I>subcommand</I> --help</i>.


title: AUTHENTICATION
content:
To use the Stripe CLI, you must authenticate it with your Stripe account. The most common and recommended method is to run <b>stripe login</b>, which initiates an OAuth flow in your web browser to grant the CLI access. Alternatively, you can provide your secret API key directly using the <i>--api-key</i> flag or by setting the `STRIPE_API_KEY` environment variable. It's crucial to differentiate between publishable and secret keys, and always use your secret key when authenticating the CLI.


title: HISTORY
content:
The Stripe CLI was developed by Stripe Inc. to streamline the developer experience when building integrations with their platform. Its inception was driven by the need to simplify local testing of webhooks – a critical component of many Stripe applications that was historically difficult to test without deploying code to a public endpoint. Over time, it expanded to encompass a wide range of functionalities, including API request logging, resource management, and more, establishing itself as an indispensable tool for the Stripe developer community.


title: SYNOPSIS
content:
<b>stty</b> [<i>OPTION</i>]... [<i>SETTING</i>]... <br><br><i>Example usage:</i> <br><code><b>stty -a</b></code> <i>(show all settings)</i> <br><code><b>stty raw -echo</b></code> <i>(set raw mode, disable echo)</i> <br><code><b>stty 9600 -F /dev/ttyS0</b></code> <i>(set baud rate for a serial port)</i>


title: PARAMETERS
content:
<b><b>-a</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays all current terminal settings in a human-readable format.</i><br><br><b><b>-g</b>, <b>--save</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prints the current terminal settings in a format that can be used as an argument to another <code>stty</code> command, useful for saving and restoring configurations.</i><br><br><b><b>-F</b> <i>DEVICE</i>, <b>--file=</b><i>DEVICE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Applies or queries settings for the specified terminal <code>DEVICE</code> instead of the standard input.</i><br><br><b><b>raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the terminal to <b>raw mode</b>: input is passed character-by-character without processing, echoing, or special character interpretation.</i><br><br><b><b>-raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables raw mode, typically returning to <b>canonical mode</b>.</i><br><br><b><b>cooked</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the terminal to <b>canonical (cooked) mode</b>: input is line-buffered, and special characters (e.g., backspace, Ctrl+C) are interpreted. This is the default.</i><br><br><b><b>sane</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Resets all terminal settings to a 'sensible' or default state, often used to recover from misconfigured terminals.</i><br><br><b><b>echo</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enables echoing of input characters to the terminal.</i><br><br><b><b>-echo</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables echoing of input characters (e.g., for password entry).</i><br><br><b><b>icanon</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enables <b>canonical input processing</b> (line buffering).</i><br><br><b><b>-icanon</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables canonical input processing (enables raw mode-like behavior for input).</i><br><br><b><b>isig</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enables interpretation of special control characters like <b>INTR</b> (Ctrl+C), <b>QUIT</b> (Ctrl+\), and <b>SUSP</b> (Ctrl+Z).</i><br><br><b><b>-isig</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables interpretation of signal-generating control characters.</i><br><br><b><b>ixon</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enables <b>XON/XOFF flow control</b> on input.</i><br><br><b><b>-ixon</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables XON/XOFF flow control.</i><br><br><b><b>opost</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enables <b>output post-processing</b>, such as mapping newlines to carriage return-newline sequences.</i><br><br><b><b>-opost</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables output post-processing.</i><br><br><b><b>[SPEED]</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the input and output baud rate (e.g., <b>9600</b>, <b>115200</b>).</i><br><br><b><b>eof</b> <i>CHAR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the <b>End-Of-File</b> character (default Ctrl+D).</i><br><br><b><b>intr</b> <i>CHAR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the <b>Interrupt</b> character (default Ctrl+C).</i><br><br>


title: DESCRIPTION
content:
<code>stty</code> is a fundamental Linux command used to <i><b>configure and display the settings of a terminal interface</b></i>. These settings determine how the operating system interacts with the terminal device, which can be a physical serial port, a virtual console, or a pseudo-terminal (like those used by SSH sessions or graphical terminal emulators). <br><br>The command allows users to <i><b>examine and modify various input, output, and control parameters</b></i> that influence character processing, flow control, character echoing, line buffering, and special character definitions (like interrupt, erase, or end-of-file). For instance, it can switch between <i>canonical (line-buffered)</i> and <i>non-canonical (raw)</i> input modes, enable or disable character echoing, or set the baud rate for serial communication. <br><br><code>stty</code> interacts directly with the kernel's <code>termios</code> interface, providing granular control over the terminal's behavior. It is invaluable for <i><b>troubleshooting terminal-related issues, customizing shell environments, or setting up serial communications</b></i>.


title: CAVEATS
content:
<b>stty</b> directly manipulates kernel terminal driver settings, which can have significant consequences if used incorrectly. <br><br><i><b>Potential for Unusable Terminal:</b></i> Incorrect settings (e.g., <code><b>stty raw -echo</b></code> without a plan to revert) can make your terminal session unresponsive or seemingly "frozen," as input may not be echoed and control characters might not be interpreted. Always be cautious, and consider opening a second terminal session as a fallback. <br><br><i><b>Session-Specific:</b></i> Changes made with <code><b>stty</b></code> are typically temporary and apply only to the current terminal session. For persistent changes, settings need to be applied in shell initialization files (e.g., <code>.bashrc</code>, <code>.profile</code>) or system-wide configuration. <br><br><i><b>System Differences:</b></i> While core functionality is standard, specific options or default behaviors can vary slightly between different Unix-like operating systems (e.g., Linux vs. BSD) or even different terminal emulators.


title: <B>UNDERSTANDING TERMINAL MODES</B>
content:
Terminal settings managed by <code><b>stty</b></code> are typically categorized into: <br><ul><li><i><b>Input Modes (c_iflag):</b></i> Control how input characters are processed (e.g., parity checking, newline handling, flow control).</li><li><i><b>Output Modes (c_oflag):</b></i> Govern how output characters are processed before transmission (e.g., character mapping, delays).</li><li><i><b>Control Modes (c_cflag):</i></b> Define hardware-related settings like baud rate, character size (bits per character), and parity settings.</li><li><i><b>Local Modes (c_lflag):</i></b> Affect local line discipline, such as echoing, canonical mode, and signal generation.</li><li><i><b>Special Characters (c_cc):</i></b> Define the characters used for specific functions like interrupt (INTR), erase (ERASE), kill (KILL), and end-of-file (EOF).</li></ul>


title: <B>SAVING AND RESTORING SETTINGS</B>
content:
A common and powerful use of <code><b>stty</b></code> is to save and restore terminal configurations. The command <code><b>stty -g</b></code> outputs the current settings in a format that can be directly used as arguments to another <code><b>stty</b></code> command. <br><br><i>Example:</i> <br><code><b>OLD_TTY_SETTINGS=$(stty -g)</b></code> <br><code><b>stty raw -echo</b></code> <i># Perform raw operations</i> <br><code><b>stty $OLD_TTY_SETTINGS</b></code> <i># Restore original settings</i><br><br>This technique is invaluable for scripts that temporarily alter terminal behavior, ensuring that the user's environment is returned to its original state.


title: HISTORY
content:
The <b>stty</b> command is a venerable utility, tracing its origins back to the early days of Unix. It was designed to interact with the underlying <i><b>terminal driver</b></i> and adjust various input/output processing modes. Its functionality has evolved alongside terminal hardware and operating system interfaces, moving from simpler <code>sgtty</code> structures to the more comprehensive <code>termio</code> and eventually the POSIX-standardized <b>termios</b> interface. <br><br>Despite the rise of graphical user interfaces and terminal emulators, <b>stty</b> remains a crucial tool for managing pseudo-terminals, configuring serial communication, and debugging low-level terminal behavior, embodying a core aspect of Unix's interaction with character devices.


title: SEE ALSO
content:
<b>termios(3)</b>, <b>tty(4)</b>, <b>ioctl(2)</b>, <b>setterm(1)</b>, <b>tput(1)</b>, <b>screen(1)</b>, <b>tmux(1)</b>


title: SYNOPSIS
content:
<b>stylua</b> [<i>OPTIONS</i>] [<i>FILES...</i>]<br><b>stylua</b> <b>--check</b> [<i>OPTIONS</i>] [<i>FILES...</i>]<br><b>stylua</b> <b>--stdin</b> [<i>OPTIONS</i>] < <i>FILE</i>


title: PARAMETERS
content:
<b><b>-c</b>, <b>--check</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks if the files are formatted correctly without modifying them. Exits with a non-zero code if unformatted files are found.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces formatting even if files contain parsing errors. Use with caution.<br><br><b><b>-i</b>, <b>--ignore</b> <I>GLOBS</I>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignores files matching the given glob patterns. Can be specified multiple times.<br><br><b><b>-o</b>, <b>--output</b> <I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the formatted output to a specific file instead of modifying the input file(s) in place. Only valid for a single input file.<br><br><b><b>-s</b>, <b>--stdin</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads Lua code from standard input instead of a file.<br><br><b><b>--column-width</b> <I>WIDTH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum column width for formatting (default: 100).<br><br><b><b>--indent-type</b> <I>TYPE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the indentation type to <i>Spaces</i> or <i>Tabs</i> (default: <i>Spaces</i>).<br><br><b><b>--indent-width</b> <I>WIDTH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of spaces or tabs for indentation (default: 2).<br><br><b><b>--quote-style</b> <I>STYLE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the quote style to <i>Auto</i>, <i>ForceSingle</i>, or <i>ForceDouble</i> (default: <i>Auto</i>).<br><br><b><b>--call-parentheses</b> <I>STYLE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the style for parentheses in function calls to <i>Auto</i>, <i>Always</i>, <i>NoSingleArg</i>, or <i>NoTableOrString</i>.<br><br><b><b>--table-trailing-comma</b> <I>BOOL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enforces or removes trailing commas in tables (<i>true</i> or <i>false</i>).<br><br><b><b>--collapse-simple-statement</b> <I>BOOL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Collapses simple statements like <i>local foo = bar</i> onto a single line when possible (<i>true</i> or <i>false</i>).<br><br><b><b>--config</b> <I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom configuration file to use.<br><br><b><b>--color</b> <I>WHEN</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls when to use colored output: <i>Auto</i>, <i>Always</i>, or <i>Never</i> (default: <i>Auto</i>).<br><br><b><b>--log-level</b> <I>LEVEL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging level: <i>Trace</i>, <i>Debug</i>, <i>Info</i>, <i>Warn</i>, <i>Error</i>, <i>Off</i> (default: <i>Info</i>).<br><br><b><b>--diff</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a diff of the changes that would be made without applying them.<br><br><b><b>--error-on-unformatted</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exits with a non-zero code if files are unformatted (alias for <b>--check</b>).<br><br><b><b>--stdin-filepath</b> <I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a dummy filepath for stdin, used for applying ignore patterns correctly.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints help information and exits.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints version information and exits.<br><br>


title: DESCRIPTION
content:
<b>stylua</b> is an opinionated code formatter for the Lua programming language. Written in Rust for performance, it aims to provide a consistent and predictable formatting style for Lua codebases. It automatically re-formats Lua source files according to a predefined set of rules, reducing bikeshedding over style and making code easier to read and maintain across projects and teams. It supports various configuration options to tailor the formatting slightly, such as indentation type, column width, and quote style, allowing users to align it with their preferences or project standards. <b>stylua</b> can format individual files, directories, or read from standard input, making it flexible for integration into development workflows, CI/CD pipelines, and pre-commit hooks. Its "opinionated" nature means it enforces a specific style, which might differ from an existing codebase's style, but it provides a reliable way to ensure future consistency and readability.


title: CAVEATS
content:
<b>stylua</b> is opinionated; its default formatting might not align perfectly with pre-existing codebases without custom configuration. While written in Rust for speed, processing very large files or an extremely high number of files might still take time. It expects valid Lua syntax, though the <b>--force</b> option can attempt formatting even with parsing errors, the output might be unexpected.


title: CONFIGURATION FILES
content:
<b>stylua</b> automatically looks for a <i>stylua.toml</i> or <i>.stylua.toml</i> file in the current directory or parent directories. This file can be used to set default formatting options like <i>column_width</i>, <i>indent_type</i>, <i>indent_width</i>, and <i>quote_style</i>, among others. This allows project-specific formatting rules to be easily shared and enforced without needing to specify command-line arguments every time.


title: EXIT CODES
content:
When run with <b>--check</b>, <b>stylua</b> exits with a status code of 0 if all files are formatted correctly, and a non-zero status code (typically 1) if any files are found to be unformatted. This behavior is crucial for use in CI/CD pipelines or pre-commit hooks to ensure code style compliance.


