# CommandSection

title: DESCRIPTION
content:
<i>euse</i> is a utility specific to the Gentoo Linux distribution, designed for managing <b><i>USE</i></b> flags.<br><b><i>USE</i></b> flags are keywords that define optional compile-time or runtime features for packages. They allow users to customize their system by enabling or disabling specific functionalities (e.g., <i>gnome</i>, <i>kde</i>, <i>systemd</i>, <i>bluetooth</i>). <i>euse</i> simplifies the process of viewing, enabling, and disabling these flags.<br>It operates on two main scopes: package-specific <b><i>USE</i></b> flags (stored typically in <i>/etc/portage/package.use</i>) and global <b><i>USE</i></b> flags (stored in <i>/etc/portage/make.conf</i>). Using <i>euse</i>, administrators can quickly inspect which <b><i>USE</i></b> flags are currently active, enable new ones for specific packages or globally, or disable unwanted features.<br>This helps in building a leaner, more customized system by only compiling software with the features truly needed, thereby reducing dependencies and potential attack surface. After modifying <b><i>USE</i></b> flags, a system update (<i>emerge --ask --update --deep --newuse @world</i>) is usually required for changes to take effect.


title: CAVEATS
content:
<i>euse</i> is a Gentoo-specific command and is not available on other Linux distributions.<br>Modifying <b><i>USE</i></b> flags, especially globally, can significantly impact system stability and compilation times. Incorrectly setting <b><i>USE</i></b> flags can lead to broken packages or dependency conflicts.<br>Changes made by <i>euse</i> (when enabling/disabling) are written to configuration files (e.g., <i>/etc/portage/make.conf</i> or <i>/etc/portage/package.use</i>). For these changes to take effect, a subsequent <i>emerge --ask --update --deep --newuse @world</i> command is typically required to recompile affected packages.<br>Root privileges are required to modify <b><i>USE</i></b> flags via <i>euse</i>.


title: PERSISTENT CHANGES
content:
<b><i>USE</i></b> flag modifications made with <i>euse</i> are persistent across reboots because they are written to configuration files.


title: RE-EMERGING PACKAGES
content:
After changing <b><i>USE</i></b> flags, it's crucial to run <i>emerge --ask --update --deep --newuse @world</i> to ensure all affected packages are recompiled with the new flag settings. Failing to do so can lead to inconsistencies or broken functionality.


title: HISTORY
content:
<i>euse</i> is an integral part of the Gentoo Linux distribution's toolset, developed alongside the <b><i>Portage</i></b> package manager to simplify the management of its unique <b><i>USE</i></b> flag system. The <b><i>USE</i></b> flag concept itself was a foundational design choice for Gentoo, allowing extreme flexibility and customization. <i>euse</i> emerged as a user-friendly command-line interface to interact with these flags, abstracting away the direct editing of configuration files like <i>/etc/portage/make.conf</i> and <i>/etc/portage/package.use</i>. Its development has focused on providing convenient ways to query, enable, and disable flags, making it a staple utility for Gentoo users to tailor their system to their precise needs, ensuring efficiency and minimal bloat.


title: SYNOPSIS
content:
As <b>eutp</b> is not a standard or recognized command, a general synopsis cannot be provided. If this command exists in a specific environment, its syntax would be entirely defined by its custom implementation, potentially following a pattern like:<br><br><code><b>eutp</b> [<i>OPTIONS</i>] [<i>ARGUMENTS</i>]</code><br><br>However, this is purely hypothetical and based on common command-line syntax conventions.


title: DESCRIPTION
content:
The command <b>eutp</b> does not appear to be a standard or commonly recognized utility in typical Linux distributions. Searches across common documentation, man pages, and online resources for standard Linux commands do not yield any official information about <b>eutp</b>. It is highly probable that <b>eutp</b> might be:<br><br><i>1. A Custom Script or Program</i>: Many organizations or individual users create their own scripts or small executables for specific tasks. These are not part of the standard Linux command set.<br><i>2. A Typographical Error</i>: It could be a misspelling of another command.<br><i>3. A Component of Specialized Software</i>: Some niche or proprietary software packages might include command-line tools that are not widely documented.<br><i>4. An Obscure or Deprecated Tool</i>: Very old, rarely used, or removed commands might not be easily found.<br><br>Without further context, such as the specific Linux distribution, the installed software packages, or the source of the command, a detailed analysis of <b>eutp</b>'s functionality, options, and usage is not possible. Users encountering <b>eutp</b> should investigate its origin within their specific system environment.


title: CAVEATS
content:
Since <b>eutp</b> is not a standard Linux command, its presence and behavior on any given system are unexpected in a typical environment. If found, it could signify:<br><i>1. Custom System Utilities</i>: Part of bespoke scripts or applications.<br><i>2. Malware or Unauthorized Software</i>: Commands with unknown origins should be investigated for security risks.<br><i>3. Misconfiguration or Leftover Files</i>: Accidental creation or remnants of uninstalled software.<br><br>Users should exercise extreme caution if they encounter an unknown executable named <b>eutp</b> and should verify its source and purpose before execution.


title: ABSENCE OF STANDARD DOCUMENTATION
content:
The lack of official documentation (e.g., man pages, info pages) for <b>eutp</b> further supports the conclusion that it is not a part of standard Linux command sets like GNU Core Utilities or common system administration tools.


title: HISTORY
content:
There is no known public or documented history for <b>eutp</b> as a standard Linux command-line utility. Its development and usage history, if any, would be confined to the specific context or project where it might have originated.


title: SYNOPSIS
content:
<b>eva</b> <i>&lt;command&gt;</i> [<i>options</i>] [<i>arguments</i>]<br><i><br>Note: As a non-standard command, its exact syntax is highly dependent on the specific script implementation.</i>


title: PARAMETERS
content:
<b><i>list</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Lists all installed or available Emacs versions.</i><br><br><b><i>install &lt;version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Downloads and installs a specified Emacs version. The 'version' might be a specific tag, branch, or release identifier.</i><br><br><b><i>use &lt;version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Switches the default Emacs executable in the user's PATH to the specified version, often by managing symlinks.</i><br><br><b><i>remove &lt;version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Removes a specified Emacs version from the system.</i><br><br><b><i>current</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the Emacs version currently in use.</i><br><br><b><i>help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays usage instructions for the specific 'eva' script.</i><br><br>


title: DESCRIPTION
content:
The command <b>"eva"</b> is <br><b><i>not</i></b><br> a standard, universally recognized Linux command found in most distributions' core utilities. If encountered, it typically refers to a custom script or a specialized project, most commonly associated with an <b>Emacs Version Archive (EVA)</b> tool. <br><br>In this context, <b>eva</b> would be a shell wrapper designed to manage multiple installations or versions of the Emacs text editor. Its primary purpose would be to simplify the process of switching between different Emacs versions (e.g., stable, development, or specific builds), installing new ones, or removing old ones, much like version managers for programming languages (e.g., `pyenv` for Python, `nvm` for Node.js). <br><br>The exact functionality, syntax, and existence of <b>eva</b> depend entirely on the specific implementation found on a given system, as it's not part of standard GNU/Linux tools or POSIX specifications. Users might create or install such a script to streamline their Emacs development or usage workflow.


title: CAVEATS
content:
<b>Non-Standard Command:</b> The <b>"eva"</b> command is <i>not</i> a standard utility found on most Linux distributions. <br>Its functionality, existence, and parameters are entirely dependent on how it has been implemented or installed on a particular system, often as a custom shell script or an Emacs Lisp utility with a shell wrapper. <br>There is no universal <b>man eva</b> page, and its behavior will vary wildly across different systems or user setups where it might exist.


title: TYPICAL IMPLEMENTATION
content:
<i>When <b>"eva"</b> is encountered, it is most often a shell script (e.g., Bash or Zsh) that orchestrates the management of Emacs versions. This typically involves operations like downloading Emacs source or binaries, compiling Emacs, managing symbolic links in a user's `PATH` to point to the desired Emacs installation, and handling installation directories. It might also interact with configuration files (like `~/.emacs.d`) or package managers to ensure a consistent environment across different Emacs versions. Its exact behavior is dictated by the specific content of the script.</i>


title: HISTORY
content:
The concept of "eva" as an Emacs version manager likely arose from the practical need for developers and power users to easily switch between different Emacs installations or configurations without tedious manual path manipulation. It is not a project with a single, long-standing, well-documented history like `ls` or `grep`, but rather represents a pattern for custom tools developed within the Emacs community to streamline workflow. Its development is often decentralized, with various users or small groups creating their own versions of such a tool based on their specific needs and preferences.


title: SYNOPSIS
content:
<b>eventlogadm</b> [<i>GLOBAL_OPTIONS</i>] <i>ACTION &lt;eventlog name&gt;</i> [<i>ACTION_OPTIONS</i>]


title: PARAMETERS
content:
<b><i>ACTION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the primary operation to perform on the event log. Common actions include:<br>  <b>dump</b>: Dumps the contents of the specified event log.<br>  <b>clear</b>: Clears all entries from the specified event log. <b>Use with caution!</b><br>  <b>info</b>: Displays information about the specified event log (e.g., size, number of records).<br>  <b>delete</b>: Deletes the specified event log entirely. <b>Use with caution!</b><br><br><b><i>&lt;eventlog name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the event log to operate on (e.g., <b>Application</b>, <b>System</b>, <b>Security</b>).<br><br><b><i>GLOBAL_OPTIONS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Options that apply globally to the <b>eventlogadm</b> command, regardless of the action.<br>  <b>-s, --configfile=<i>FILE</i></b>: Specifies the path to the Samba configuration file (<b>smb.conf</b>).<br>  <b>-l, --logfile=<i>FILE</i></b>: Specifies the path to the Samba log file.<br>  <b>-D, --debuglevel=<i>LEVEL</i></b>: Sets the debug level for Samba operations (0-10, higher means more verbose output).<br>  <b>-V, --version</b>: Prints the Samba version information.<br>  <b>-?, --help</b>: Displays a help message with usage information.<br>  <b>--usage</b>: Displays a brief usage message.<br>  <b>--option-name</b>: Prints known option names for internal use.<br><br><b><i>ACTION_OPTIONS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Options specific to the chosen <i>ACTION</i>.<br>  <b>--file=<i>FILE</i></b>: Used with <b>dump</b> to specify an output file for the log content instead of standard output.<br>  <b>--xml</b>: Used with <b>dump</b> to output the log content in XML format.<br>  <b>--format=<i>FORMAT</i></b>: Specifies the output format for dumped logs (e.g., <b>text</b>, <b>raw</b>, <b>xml</b>).<br><br>


title: DESCRIPTION
content:
The `eventlogadm` command is a utility provided as part of the Samba suite on Linux and Unix-like operating systems. It is designed to manage event logs that Samba itself maintains, mimicking the functionality of Windows Event Log management. This tool allows administrators to view, clear, delete, and gather information about event logs stored by a Samba server. This is particularly useful in environments where Samba acts as a domain controller or a file server for Windows clients, and it needs to host Windows-compatible event logs (e.g., Application, System, Security logs). It provides a command-line interface to interact with Samba's internal event log database, enabling scriptable log management and integration into broader system administration tasks.


title: CAVEATS
content:
This command is specifically designed for managing event logs hosted by Samba, not general Windows event logs on remote Windows machines. Its functionality relies on a correctly configured Samba installation. Operations like <b>clear</b> and <b>delete</b> are destructive and should be used with extreme care, as they permanently remove log data. The exact behavior and available options might vary slightly between different Samba versions.


title: COMMON EVENT LOG NAMES
content:
Typical event log names you might manage include <b>Application</b>, <b>System</b>, <b>Security</b>, <b>Directory Service</b>, and <b>File Replication Service</b>. These correspond to the standard logs found in a Windows environment.


title: PERMISSIONS
content:
To effectively use `eventlogadm` for operations like clearing or deleting logs, you typically need root privileges or appropriate permissions on the Samba event log files and directories.


title: HISTORY
content:
`eventlogadm` is an integral part of the Samba project, which began in 1992. As Samba evolved to provide increasingly sophisticated Windows services, including domain controller capabilities and Windows-style file sharing, the need arose to manage the associated Windows-compatible event logs. `eventlogadm` was developed to provide a command-line interface for Linux administrators to interact with these logs, mirroring the functionality found in Windows' Event Viewer. Its development reflects Samba's ongoing commitment to interoperability and providing a comprehensive suite of tools for managing Windows services on Unix-like systems.


title: SYNOPSIS
content:
<b>evil-winrm</b> <i>-i</i> <I>target_ip</I> <i>-u</i> <I>username</I> <i>-p</i> <I>password</I> [options]<br><b>evil-winrm</b> <i>-i</i> <I>target_ip</I> <i>-u</i> <I>username</I> <i>-H</i> <I>ntlm_hash</I> [options]


title: PARAMETERS
content:
<b><i>-i</i>, <i>--target</i> <I>IP</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target IP address or hostname of the Windows machine.<br><br><b><i>-u</i>, <i>--user</i> <I>username</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the username for authentication on the target machine.<br><br><b><i>-p</i>, <i>--password</i> <I>password</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the password for authentication. Use with <i>-u</i>.<br><br><b><i>-H</i>, <i>--hash</i> <I>NTLM_hash</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the NTLM hash for authentication. An alternative to using a clear-text password.<br><br><b><i>-P</i>, <i>--port</i> <I>port</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the WinRM port (default: 5985 for HTTP, 5986 for HTTPS).<br><br><b><i>-S</i>, <i>--ssl</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables SSL for WinRM communication. Used automatically for port 5986.<br><br><b><i>-s</i>, <i>--shell</i> <I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom shell executable path on the target (e.g., cmd.exe, powershell.exe).<br><br><b><i>-e</i>, <i>--exec</i> <I>command</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a single command on the target and then exits.<br><br><b><i>-r</i>, <i>--resource</i> <I>script_path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes commands from a specified resource script file locally before establishing the session.<br><br><b><i>-x</i>, <i>--no-cleanup</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the removal of the <i>evil-winrm</i> binary from the target machine after exiting.<br><br><b><i>-f</i>, <i>--files</i> <I>local_path:remote_path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uploads or downloads files before/after command execution when used with <i>--exec</i>.<br><br><b><i>-l</i>, <i>--log</i> <I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Logs the session output to a specified file.<br><br><b><i>-v</i>, <i>--verbose</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output for detailed debugging information.<br><br><b><i>-h</i>, <i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br>


title: DESCRIPTION
content:
<i>evil-winrm</i> is a Ruby-based command-line tool designed for penetration testers and red teamers to interact with Windows machines using the Windows Remote Management (WinRM) protocol. It provides an interactive PowerShell session, enabling users to execute commands, upload/download files, bypass AMSI, and load PowerShell scripts in memory. Its primary use case is post-exploitation and lateral movement within a compromised Windows environment, offering a robust and often less-monitored alternative to other remote execution methods. It supports authentication via username/password or NTLM hashes, making it a versatile tool for offensive operations.


title: CAVEATS
content:
<b>Caveats and Limitations:</b><br>1. Requires the WinRM service to be enabled and properly configured on the target Windows machine.<br>2. Firewall rules on the target might need to be adjusted to permit WinRM traffic (ports 5985/5986).<br>3. Using clear-text passwords or NTLM hashes can expose credentials if network traffic is not encrypted.<br>4. While effective, activities performed via <i>evil-winrm</i> can still be detected by advanced Endpoint Detection and Response (EDR) solutions or antivirus software.<br>5. Default behavior cleans up artifacts, but not all traces are guaranteed to be removed.


title: INTERACTIVE SESSION COMMANDS
content:
Within an active <i>evil-winrm</i> session, users can execute built-in commands such as <b>upload</b> (to transfer local files to the target), <b>download</b> (to retrieve files from the target), <b>menu_ps</b> (to load common PowerShell scripts from a local menu), <b>invoke_shellcode</b>, and <b>amsi_bypass</b>, providing extended functionality beyond standard PowerShell.


title: AMSI AND SCRIPT BYPASS
content:
A significant feature of <i>evil-winrm</i> is its ability to often bypass the Anti-Malware Scan Interface (AMSI) and other security measures, allowing the execution of malicious PowerShell scripts that would otherwise be blocked by Windows Defender or other security products. It can also load scripts directly into memory, further reducing forensic footprint.


title: AUTHENTICATION METHODS
content:
The tool supports multiple authentication methods, primarily username/password and NTLM hash-based authentication, making it versatile for various credential access scenarios obtained during penetration tests.


title: HISTORY
content:
<i>evil-winrm</i> emerged as a specialized and feature-rich tool within the offensive security community to provide a robust interactive shell over the Windows Remote Management (WinRM) protocol. It was developed to streamline post-exploitation tasks, offering capabilities like AMSI bypass, in-memory script execution, and simplified file transfers. Its ease of use and powerful features quickly made it a staple for penetration testers and red teamers for lateral movement and maintaining persistence in Windows environments.


title: SYNOPSIS
content:
<b><br>evince</b> [<i>OPTIONS...</i>] [<i>FILES...</i>]<br><br>While <b>evince</b> is the primary command, it also provides specialized modes for specific tasks:<br><i><br>evince-previewer</i> [<i>OPTIONS...</i>] [<i>FILES...</i>]<br><i><br>evince-thumbnailer</i> [<i>OPTIONS...</i>] [<i>FILES...</i>]


title: PARAMETERS
content:
<b><b>-i</b>, <b>--display=</b><i>DISPLAY</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the X display to use.<br><br><b><b>-p</b>, <b>--page-label=</b><i>PAGE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open the document at the given page label (e.g., 'vi').<br><br><b><b>-l</b>, <b>--page-index=</b><i>NUMBER</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Open the document at the given page number (0-indexed).<br><br><b><b>-f</b>, <b>--fullscreen</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Start Evince in fullscreen mode.<br><br><b><b>-s</b>, <b>--presentation</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Start Evince in presentation mode.<br><br><b><b>--find=</b><i>STRING</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Find the first occurrence of STRING in the document upon opening.<br><br><b><b>--invert-colors</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Invert the colors of the document for viewing.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show Evince's command-line help options.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display Evince's version information.<br><br>


title: DESCRIPTION
content:
Evince is a <b>free and open-source document viewer</b> designed for the GNOME desktop environment. Its primary goal is to <i>unify document viewing</i> by replacing multiple, disparate applications with a single, simple, and efficient tool. Evince supports a <b>wide array of document formats</b> including <i>PDF, PostScript, DjVu, TIFF, DVI, XPS, and comic book archives (CBR, CBZ)</i>. Key features include integrated search, page thumbnails, annotation support, and presentation modes, all aimed at providing a seamless and intuitive user experience within the GNOME ecosystem.


title: CAVEATS
content:
Evince is designed primarily as a <b>document viewer</b>; it offers <i>limited or no editing capabilities</i>. Performance with extremely large or graphically complex documents may vary depending on system resources and the efficiency of the underlying rendering libraries for specific file formats.


title: <B><BR>SUPPORTED DOCUMENT FORMATS<BR></B>
content:
Evince boasts extensive format support, enabling users to open a wide variety of documents including: <i>Portable Document Format (PDF), PostScript (PS), DjVu, TIFF, DVI, XPS, SyncTeX, Comic book archives (CBR, CBZ, CB7, CBT), and common image files like PNG, JPEG, GIF</i>.


title: <B><BR>INTEGRATION AND BACKENDS<BR></B>
content:
As a core GNOME application, Evince offers deep integration with the desktop environment. Its broad format compatibility is achieved through a <i>modular architecture</i>, leveraging various rendering backends such as <b>Poppler</b> for PDF, <b>DjVuLibre</b> for DjVu, and <b>libspectre</b> for PostScript, ensuring efficient and accurate display across diverse document types.


title: HISTORY
content:
Evince was first released in <b>2005</b>, emerging from the GNOME project with the aim of consolidating various existing document viewers (like GGv and Xpdf) into a single, unified application. Its development focused on providing a <i>consistent, user-friendly interface</i> across different document types. It relies on robust underlying libraries such as <b>Poppler</b> for PDF rendering and has since become the <i>default document viewer for the GNOME desktop</i>, maintaining active development as a core component of the environment.


title: PARAMETERS
content:
<b><b>--size=</b><i>&lt;SIZE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the maximum dimension (width or height) of the generated thumbnail in pixels. Common sizes include 128 or 256. The default is typically 128 pixels.<br><br><b><b>--page=</b><i>&lt;PAGE&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Indicates the page number of the document to be thumbnailed. By default, it generates a thumbnail for the first page (page 1).<br><br><b><b>--output-format=</b><i>&lt;FORMAT&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output image format for the thumbnail. Supported formats often include <b>jpeg</b> (default) and <b>png</b>.<br><br><b><b>--raw-output</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the raw thumbnail image data to standard output (stdout) instead of a specified file. This is useful when piping the output to another command or script.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with usage information and available options.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version information of the <i>evince-thumbnailer</i> utility.<br><br>


title: DESCRIPTION
content:
<i>evince-thumbnailer</i> is a utility bundled with the <i>Evince</i> document viewer, designed to create small preview images (thumbnails) for various document formats. It supports common types such as PDF, PostScript (PS), DjVu, XPS, DVI, and others that <i>Evince</i> can render.<br><br>Its primary role is to integrate with desktop environments and file managers like GNOME's <i>Nautilus</i> or KDE's <i>Dolphin</i>. Instead of opening the full document viewer, these file managers invoke <i>evince-thumbnailer</i> to quickly generate a visual representation of the document's first page. This allows users to browse through document collections more efficiently, providing a visual cue for file content without the overhead of launching a full application.<br><br>The command is typically not invoked directly by end-users but rather by background services or scripts adhering to the FreeDesktop.org thumbnailing specification. It takes an input document file path and an output path for the thumbnail image, usually generating a JPEG file, and can specify size and page number.


title: CAVEATS
content:
<b>Resource Usage:</b> Generating thumbnails for very large or complex documents can be CPU and memory intensive, potentially slowing down system responsiveness temporarily.<br><b>Security:</b> While <i>Evince</i> is generally robust, thumbnailing untrusted or maliciously crafted documents could theoretically expose vulnerabilities in the underlying rendering libraries.<br><b>Permissions:</b> The utility requires read access to the input document and write access to the output directory where the thumbnail is to be saved.<br><b>Unsupported Formats:</b> It can only thumbnail formats that <i>Evince</i> itself supports. If a document type isn't viewable by <i>Evince</i>, it cannot be thumbnailed.


title: INTEGRATION WITH DESKTOP ENVIRONMENTS
content:
<i>evince-thumbnailer</i> primarily functions as a backend for desktop environments. It adheres to the FreeDesktop.org Shared Thumbs specification, which defines a standardized way for applications to generate and store thumbnails. File managers detect the document type and, if a thumbnail doesn't exist in the cache, invoke the appropriate thumbnailer (like <i>evince-thumbnailer</i> for documents) to create one. These thumbnails are typically stored in a user's cache directory, usually <i>~/.cache/thumbnails/</i>, to prevent redundant generation and speed up subsequent browsing.


title: THUMBNAIL CACHE
content:
To optimize performance and avoid re-generating thumbnails every time a directory is opened, desktop environments maintain a thumbnail cache.<br>When <i>evince-thumbnailer</i> creates a thumbnail, it's saved to this cache. Before requesting a new thumbnail, the file manager checks the cache; if a valid, up-to-date thumbnail exists, it's displayed directly, significantly improving file browsing responsiveness. The cache also includes a URI and timestamp to ensure the thumbnail is valid for the current file.


title: HISTORY
content:
<i>evince-thumbnailer</i> is an integral part of the <i>Evince</i> document viewer project, which was developed for the GNOME desktop environment. <i>Evince</i> itself was designed to be a universal document viewer, replacing multiple single-format viewers like GGV (for PostScript) and Xpdf (for PDF) in early 2000s GNOME releases. As desktop environments evolved to offer richer visual browsing experiences, the need for efficient and integrated thumbnail generation became paramount.<br><br>The thumbnailer component emerged to fulfill this requirement, allowing file managers to display visual previews of documents without having to launch the full application. Its development closely tracks that of <i>Evince</i> itself, benefiting from <i>Evince's</i> robust rendering capabilities and ensuring compatibility with the diverse document formats it supports. It has been a stable and crucial part of the GNOME desktop's file management system for over a decade.


title: PARAMETERS
content:
<b><I>device</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the input event device file, e.g., <I>/dev/input/event0</I>.<br><br><b>-s, --show-v_values</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show specific value details for known event types (e.g., key names for <I>EV_KEY</I> events).<br><br><b>-S, --show-v_values-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show all known value details, including for <I>EV_SYN</I> and <I>EV_MSC</I> events.<br><br><b>-g, --grab</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Grab the device, preventing other applications (like the desktop environment) from receiving events from it until <b>evtest</b> exits. Use with caution.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress the initial device information output, showing only events.<br><br><b>-r, --raw</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show raw event values (numeric type, code, and value) instead of their descriptive names.<br><br><b>-e, --event-codes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show event codes (e.g., <I>KEY_A</I>) instead of their numeric values.<br><br><b>-c, --capabilities</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only show device capabilities (supported event types, codes, and values), then exit.<br><br><b>-C, --codes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only show event codes for a given event type, then exit.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
The <b>evtest</b> command is a crucial diagnostic utility for Linux systems, designed to test input devices that utilize the <I>evdev</I> (event device) interface. It opens a specified input device file, typically found under <I>/dev/input/eventX</I>, and then continuously prints the raw events generated by that device.<br><br>This tool is invaluable for debugging issues with keyboards, mice, touchpads, joysticks, gamepads, touchscreens, and other input peripherals. It displays detailed information about the device's capabilities, supported event types (e.g., key presses, relative movements, absolute positions), and then logs each event as it occurs, including its type, code, and value. This allows users and developers to verify if a device is recognized by the kernel, if it's sending the expected events, and to diagnose unresponsive or misbehaving input hardware. Because it accesses device files directly, <b>evtest</b> typically requires root privileges to run.


title: CAVEATS
content:
<b>evtest</b> typically requires superuser (root) privileges to open and read from input device files in <I>/dev/input/</I>.<br><br>Using the <I>--grab</I> option will prevent other applications from receiving input from the specified device, potentially making your system unresponsive to that input until <b>evtest</b> is terminated. It should be used carefully, especially on critical input devices like your primary keyboard or mouse.<br><br>The output can be very verbose, especially for active devices, making it challenging to parse without specific knowledge of the evdev event structure.


title: FINDING DEVICE PATHS
content:
Before running <b>evtest</b>, you need to identify the correct device path. Common methods include listing files in <I>/dev/input/by-id/</I> or <I>/dev/input/by-path/</I> which provide persistent symbolic links, or by examining the output of <I>cat /proc/bus/input/devices</I> which lists all detected input devices and their event numbers (e.g., <I>event0</I>, <I>event1</I>).<br><br>For example, to list devices: <I>ls -l /dev/input/</I> or <I>sudo lsinput</I> (if <I>lsinput</I> is installed).


title: INTERPRETING OUTPUT
content:
The output of <b>evtest</b> consists of event triplets: <I>Type</I>, <I>Code</I>, and <I>Value</I>.<br><ul><li><I><b>Type</b></I>: Specifies the category of event (e.g., <I>EV_KEY</I> for key presses/releases, <I>EV_REL</I> for relative movements like mouse deltas, <I>EV_ABS</I> for absolute positions like touchscreens or joystick axes, <I>EV_SYN</I> for synchronization events).<br></li><li><I><b>Code</b></I>: Identifies the specific event within its type (e.g., <I>KEY_A</I> for the 'A' key, <I>REL_X</I> for X-axis movement, <I>ABS_X</I> for absolute X coordinate).<br></li><li><I><b>Value</b></I>: The actual data for the event (e.g., <I>1</I> for key press, <I>0</I> for key release, <I>-1</I> or <I>+1</I> for mouse scroll, the coordinate value for absolute position).<br></li></ul>Synchronization events (<I>EV_SYN</I>) typically mark the end of a report, indicating that all preceding events form a consistent set of changes.


title: HISTORY
content:
<b>evtest</b> is part of the <I>input-tools</I> suite, which provides user-space utilities for interacting with the Linux <I>evdev</I> (event device) interface. The <I>evdev</I> interface itself was introduced early in the Linux kernel's development to standardize the way input devices communicate raw events to user-space applications. <b>evtest</b> emerged as the primary diagnostic tool for this interface, providing a direct window into the raw event stream from any <I>evdev</I>-compatible input device. Its development has closely tracked the evolution of Linux input device support.


title: SYNOPSIS
content:
<b>eww</b> [<i>OPTIONS</i>] <i>SUBCOMMAND</i> [<i>ARGS</i>...]<br><br>Common Subcommands:<br><b>eww open</b> <i>WINDOW_NAME</i> [<i>--no-daemon</i>]<br><b>eww close</b> <i>WINDOW_NAME</i><br><b>eww update</b> <i>VARIABLE</i>=<i>VALUE</i> [<i>...</i>]<br><b>eww reload</b><br><b>eww kill</b><br><b>eww windows</b><br><b>eww debug</b>


title: PARAMETERS
content:
<b>--config <i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative path to the <i>eww</i> configuration directory. By default, it looks in <i>$XDG_CONFIG_HOME/eww</i> or <i>~/.config/eww</i>.<br><br><b>--log-level <i>LEVEL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging verbosity for <i>eww</i>. Possible levels include <i>trace</i>, <i>debug</i>, <i>info</i>, <i>warn</i>, <i>error</i>.<br><br><b>--no-daemon</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <b>eww open</b>, prevents <i>eww</i> from running as a background daemon, keeping it in the foreground.<br><br><b><i>VARIABLE</i>=<i>VALUE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <b>eww update</b> to set a value for a specific <i>eww</i> variable, which can then be displayed or used in widgets.<br><br>


title: DESCRIPTION
content:
<i>eww</i> (pronounced "eww") is a lightweight, fast, and highly customizable widget manager specifically designed for the Wayland display server.<br>It enables users to create dynamic and interactive graphical elements directly on their desktop, such as status bars, system monitors, notification pop-ups, and more. Unlike traditional desktop environments, <i>eww</i> provides a flexible framework that integrates seamlessly with existing Wayland compositors and tiling window managers (like Sway or Hyprland). Its core strength lies in its declarative configuration language, often referred to as "Yuck," which allows users to define the layout, appearance, and behavior of widgets using a Lisp-like syntax. This powerful configuration approach, combined with its ability to execute external commands and react to system events, makes <i>eww</i> an indispensable tool for building highly personalized and functional Wayland desktop setups. It's written in Rust, ensuring good performance and memory safety.


title: CAVEATS
content:
<i>eww</i> is designed exclusively for the Wayland display server and does not function on X11.<br>Its highly customizable nature means there is a significant learning curve associated with its declarative configuration language, Yuck. While powerful, complex setups can require extensive configuration. Users typically need to manage external scripts or programs to feed data into <i>eww</i> variables for dynamic content.


title: CONFIGURATION LANGUAGE (YUCK)
content:
<i>eww</i> uses a custom declarative configuration language called <i>Yuck</i>. Yuck is a Lisp-like language that defines windows, widgets, and their properties.<br>It supports various built-in widgets (e.g., <i>box</i>, <i>label</i>, <i>button</i>, <i>scale</i>, <i>progress</i>), allows for custom CSS styling, and can execute external commands or listen to events for dynamic content. Users define 'windows' (containers for widgets) and populate them with a hierarchical structure of widgets and their attributes. This separation allows for highly modular and reusable components.


title: INTEGRATION WITH SYSTEM DATA
content:
A key feature of <i>eww</i> is its ability to display real-time system information.<br>It achieves this by defining 'variables' in its configuration. These variables can be updated programmatically by external shell scripts, command outputs, or daemon processes. For example, a script could periodically fetch CPU usage, battery status, or network speed, and <i>eww</i> would then render this information in a widget, providing a dynamic and interactive desktop experience.


title: HISTORY
content:
<i>eww</i> is a relatively recent addition to the Linux customization landscape, emerging primarily due to the growing adoption and development of the Wayland display server.<br>Developed by ElKowar, it quickly gained popularity within the Wayland community, particularly among users of tiling window managers, who sought a powerful yet lightweight alternative to traditional desktop environments for creating highly personalized and performant interfaces. Its development in Rust was a strategic choice for performance and memory safety, aligning with the modern sensibilities of the Wayland ecosystem.


title: PARAMETERS
content:
<b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Silent mode, suppresses interactive feedback.<br><br><b>-e</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts in <B>ex</B> mode, even if invoked as <I>vi</I>.<br><br><b>-R</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the file in read-only mode.<br><br><b>-c <command></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the specified <B>ex</B> command after opening the file.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets LISP mode for improved indentation and bracket matching.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recovers a crashed editor session.<br><br><b>-t <tag></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Edits the file containing the specified <I>tag</I>, positioning the cursor at the tag definition.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts in <I>vi</I> (visual) mode. This is often how <I>vi</I> itself is invoked.<br><br><b>-w <size></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the default window size (number of lines) for the visual display.<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables encryption/decryption of the file during editing.<br><br><b>-Z</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts in restricted mode, limiting shell escape and file writing capabilities.<br><br><b><file ...></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more text files to be opened and edited.<br><br>


title: DESCRIPTION
content:
<B>ex</B> is a powerful <B>line-oriented text editor</B> that serves as the foundation for the more commonly known screen-oriented editor, <I>vi</I>. Unlike <I>vi</I>, which provides a visual, full-screen interface, <B>ex</B> operates by processing text <I>line by line</I>, requiring users to specify line numbers or patterns for most operations. It's particularly well-suited for <I>batch processing</I>, <I>scripting</I>, or making <I>global changes</I> to files where a visual interface isn't necessary or practical. Many commands in <I>vi</I>'s command mode are actually <B>ex</B> commands. Users can enter <B>ex</B> mode from <I>vi</I> by typing a colon (:) followed by an <B>ex</B> command. While less common for interactive use today due to modern editors, its capabilities remain valuable for automated text manipulation.


title: CAVEATS
content:
ex has a <B>steep learning curve</B> for interactive use compared to modern screen editors. It is primarily useful for <I>batch operations</I> or <I>scripting</I> rather than day-to-day interactive text editing. Its line-oriented nature can be confusing for users accustomed to GUI or full-screen CLI editors.


title: COMMON EX COMMANDS
content:
Many <B>ex</B> commands are frequently used within <I>vi</I> by preceding them with a colon (':').<br>Here are a few common examples:<br> <I>':q'</I>: Quit the editor.<br> <I>':w'</I>: Write (save) the current file.<br> <I>':wq'</I> or <I>':x'</I>: Write and quit the editor.<br> <I>':%s/old/new/g'</I>: Globally substitute all occurrences of 'old' with 'new' throughout the entire file.<br> <I>':<line_num>'</I>: Move the cursor to the specified line number.<br> <I>':set <option>'</I>: Set editor options (e.g., <I>'set nu'</I> to display line numbers, <I>'set ic'</I> for ignore case in searches).<br> <I>':!'</I>: Execute a shell command from within the editor (e.g., <I>':!ls'</I>).


title: HISTORY
content:
<B>ex</B> was developed at the <B>University of California, Berkeley</B>, by <I>Bill Joy</I> as an extended version of the `ed` editor, providing more powerful commands and regular expression capabilities. It became the foundational layer for the <I>visual editor (vi)</I>, also created by Joy to provide a screen-oriented interface to <B>ex</B>'s capabilities. Its development was a crucial step in the evolution of Unix text editors, directly leading to the highly influential <I>vi</I> and its modern descendants like <I>vim</I>.


title: PARAMETERS
content:
<b><b>-l</b>, <b>--long</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed file information, including permissions, owner, size, and modification date.<br><br><b><b>-a</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows all files, including hidden and dotfiles (<b>.</b> and <b>..</b>).<br><br><b><b>-A</b>, <b>--almost-all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows all files, including hidden files, but excludes <b>.</b> and <b>..</b>.<br><br><b><b>-T</b>, <b>--tree</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists contents of directories recursively in a hierarchical tree format.<br><br><b><b>-R</b>, <b>--recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists contents of directories recursively.<br><br><b><b>--git</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays Git status for each file or directory within a Git repository.<br><br><b><b>--icons</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays icons for file types (requires a compatible icon font like Nerd Fonts).<br><br><b><b>--color=<i>when</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls when to use colors: <b>always</b>, <b>auto</b> (default), or <b>never</b>.<br><br><b><b>-s</b> <i>sort_field</i>, <b>--sort=<i>sort_field</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sorts by a given field: <b>name</b> (default), <b>size</b>, <b>modified</b>, <b>accessed</b>, <b>created</b>, <b>extension</b>, <b>inode</b>, <b>type</b>, <b>none</b>.<br><br><b><b>-h</b>, <b>--header</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a header row for the long listing format.<br><br><b><b>-L</b> <i>level</i>, <b>--level=<i>level</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the depth of the tree view when used with <b>-T</b>.<br><br><b><b>--group-directories-first</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Always lists directories before files, regardless of other sorting options.<br><br><b><b>--long-paths</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays full paths in the tree view instead of just filenames.<br><br><b><b>--octal-permissions</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays permissions in octal notation rather than symbolic.<br><br>


title: DESCRIPTION
content:
<i>exa</i> is a modern, feature-rich command-line file lister, designed as a more user-friendly and aesthetically pleasing alternative to the traditional <b>ls</b> command. Written in <b>Rust</b>, <i>exa</i> aims to provide better default behaviors, enhanced readability, and additional functionalities directly integrated into the listing process. Its key features include a vibrant, intelligent color scheme that highlights file types and permissions, human-readable file sizes by default, and optional Git status integration that displays the modification status of files within a repository. <br><br>Beyond basic file listing, <i>exa</i> offers a powerful recursive <b>tree view</b> (<b>-T</b>), allowing users to visualize directory structures. It can display extended file attributes, inode numbers, and provides flexible sorting options. For users with compatible icon fonts, <i>exa</i> can also render graphical icons alongside filenames, further improving visual parsing. Its default output is often more informative and easier to digest than <b>ls</b>'s, making it a popular choice for daily command-line navigation and file management.


title: CAVEATS
content:
While <b>exa</b> offers superior default formatting and features, it is not a 100% drop-in replacement for <b>ls</b> in all scripting scenarios. Its output format can differ, which might break scripts expecting <b>ls</b>'s exact output. Additionally, icon display (<b>--icons</b>) requires specific icon fonts (e.g., Nerd Fonts) to be installed and configured on the terminal, otherwise, placeholders or missing characters may appear. For very large directories, especially with deep <b>--tree</b> views, resource consumption might be slightly higher than <b>ls</b>.


title: CONFIGURATION AND ALIASING
content:
Many users alias <b>ls</b> to <b>exa</b> in their shell configuration files (e.g., <b>.bashrc</b>, <b>.zshrc</b>) to make <b>exa</b> the default listing command. A common alias is <b>alias ls='exa -lF --git --icons'</b> or <b>alias l='exa -lF'</b> to use <b>exa</b> with preferred options automatically.


title: PERFORMANCE
content:
Written in <b>Rust</b>, <b>exa</b> is designed for speed and memory safety. While it offers more features and potentially more elaborate output than <b>ls</b>, its performance for typical directory listings is generally very fast and competitive.


title: HISTORY
content:
The <b>exa</b> command was developed by <i>Benjamin S.</i> as a modern alternative to the venerable <b>ls</b> utility, written entirely in the <b>Rust</b> programming language. Its development began with a focus on improving the user experience of directory listing through better defaults, enhanced visual feedback via color and potentially icons, and integrating modern features like Git status awareness directly into the output. It quickly gained traction within the Unix/Linux community as part of a broader movement towards more user-friendly, feature-rich command-line tools written in newer, memory-safe languages.


title: SYNOPSIS
content:
As <b>exch</b> is not a standard Linux command, a definitive synopsis cannot be provided. If it were a custom script for swapping two files, a hypothetical syntax might be: <br><br><b>exch</b> <i>file1</i> <i>file2</i><br><br>However, this is purely illustrative and depends entirely on how such a hypothetical command would be implemented.


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Since <b>exch</b> is not a standard command, it does not have predefined parameters. Any parameters would depend entirely on the specific implementation of a custom script or utility bearing this name. For instance, a hypothetical file-swapping script might accept two filenames as arguments, without explicit options.<br><br>


title: DESCRIPTION
content:
The command <b>exch</b> is not a standard, widely recognized utility found in typical Linux distributions. Its appearance in a command context likely indicates one of several possibilities: <br><br>1. <i>Typographical Error:</i> It might be a misspelling of a known command, such as <b>exim</b> (a mail transfer agent), <b>exmh</b> (an email client), or a more complex script name.<br>2. <i>Custom Script or Alias:</i> It could be a locally defined shell script, alias, or function created by a system administrator or user for a specific purpose, such as exchanging (swapping) file contents, variables, or network data.<br>3. <i>Niche Application:</i> Rarely, it might refer to a highly specialized utility or component of a larger software package that isn't part of core Linux tools.<br><br>Without further context, the exact function and syntax of a command named <b>exch</b> cannot be definitively determined.


title: CAVEATS
content:
The primary caveat is that <b>exch</b> is not a built-in or commonly installed Linux command. Attempting to execute it on a standard system will likely result in a 'command not found' error. Users encountering this command should investigate its origin in their specific environment (e.g., checking aliases, PATH, or custom scripts). Its behavior can vary wildly or be entirely absent.


title: COMMON MISCONCEPTIONS
content:
Users often encounter 'exch' as a typo for 'exim' or refer to the concept of 'exchange' in a broader sense (e.g., data exchange, currency exchange) rather than a specific Linux command. It is crucial to verify the exact command being referred to.


title: LOCAL IMPLEMENTATION POTENTIAL
content:
Due to the absence of a standard 'exch' command, if a user encounters it and it performs a function, it is almost certainly a custom script, alias, or binary compiled and installed locally. Its functionality would be entirely dependent on that specific local implementation.


title: HISTORY
content:
There is no documented history or development timeline for a standard Linux command named <b>exch</b>, as it does not exist as such. Its use would be limited to specific, local implementations rather than a general evolution within the Linux ecosystem.


title: SEE ALSO
content:
<b>mv</b>(1): To rename or move files, which can effectively swap filenames if used carefully., <b>cp</b>(1): To copy files, often followed by removal of originals to achieve a swap-like effect., <b>sed</b>(1) / <b>awk</b>(1): For exchanging text patterns or columns within files., <b>rsync</b>(1): For synchronizing or exchanging files between locations., <b>exim</b>(8): A popular Mail Transfer Agent (MTA) often confused due to similar-sounding names, used for email exchange., <b>netcat</b>(1) or <b>socat</b>(1): For network-level data exchange.


title: PARAMETERS
content:
<b>command</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The <B>name</B> of the program to execute, <br>which will replace the current shell.<br><br><b>[arguments...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional <B>arguments</B> passed to the <br>executed program.<br><br><b>[-l]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Place a <B>dash</B> (`-`) as the first <br>character of the zeroth argument <br>(`argv[0]`) passed to the <br>command. This simulates <br>login shell behavior.<br><br><b>[-a name]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use <B>name</B> as the zeroth argument <br>(`argv[0]`) to the command. <br>This overrides the default behavior <br>of using the command's name.<br><br><b>[redirection...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Any <B>I/O redirections</B> (e.g., <br>`<`, `>`, `>>`, `&>`, `<&`, `>&`) <br>that are applied. If no <br>command is specified, these <br>redirections apply to the <br>current shell process <br>itself for its remaining <br>lifetime.<br><br>


title: DESCRIPTION
content:
The <B>exec</B> command is a <br>shell builtin that <br><B>replaces</B> the current shell <br>process with a specified program. <br>Unlike running a command normally, <br>which typically <I>forks</I> a new <br>child process to execute the <br>command and then returns to the <br>parent shell, <B>exec</B> <br>does not create a new process. <br>Instead, the current shell's process <br>space is overlaid with the new program. <br>This means that once the new program <br>starts, the original shell ceases to <br>exist, and control <B>will not return</B> <br>to it. <br><br>Common use cases for <B>exec</B> include: <br><I>permanently changing the shell</I> <br>for a session (e.g., <I>exec zsh</I>), <br>running a command that should be the <br><I>last action</I> of a script or <br>session (e.g., <I>exec ssh user@host</I> <br>so that the shell exits immediately <br>after <I>ssh</I> terminates), or <br><I>applying I/O redirections</I> <br>that persist for the remainder of <br>the current shell's life <br>(e.g., <I>exec > logfile</I> to redirect <br>all subsequent standard output <br>from the current shell to <I>logfile</I>). <br>It's a powerful command for <br>optimizing resource usage by <br>avoiding unnecessary process <br>creation and for precise <br>control over shell behavior.


title: CAVEATS
content:
<ul><li>Once <B>exec</B> is called, the current <br>shell process is permanently <br>replaced. Control <B>will not</B> <br>return to the calling script or <br>shell environment after the <br>executed command finishes.</li> <br><li><B>exec</B> is a <I>shell builtin</I> <br>in most shells (like bash, zsh, ksh). <br>There is no standalone <br><I>/usr/bin/exec</I> executable. <br>Consequently, its behavior and <br>available options might vary <br>slightly between different shells.</li> <br><li>Permissions: The <B>command</B> <br>specified must be executable by the <br>current user.</li></ul>


title: SHELL BUILTIN VS. EXTERNAL COMMAND
content:
It's crucial to understand that <br><B>exec</B> is a <I>shell builtin</I>, <br>not a separate executable located <br>in your system's PATH (like <br><I>/usr/bin/ls</I>). This means that <br>when you type <B>exec</B>, the shell <br>itself executes the instruction <br>directly, without spawning a new <br>process to run an 'exec' program. <br>This is precisely why <B>exec</B> can <br>replace the current shell process, <br>as it's the shell itself that <br>invokes the underlying <I>execve(2)</I> <br>system call on its own process ID.


title: PERSISTENT I/O REDIRECTION
content:
One of the most powerful and often <br>underestimated uses of <B>exec</B> is <br>to apply I/O redirections that <br>persist for the entire remaining <br>lifetime of the current shell <br>session. For example, <br><I>exec > logfile</I> will redirect <br>all subsequent standard output <br>from commands run in that shell <br>(unless explicitly redirected again) <br>to <I>logfile</I>. Similarly, <br><I>exec 3<> /dev/tcp/hostname/port</I> <br>can open a network connection on a <br>specific file descriptor for the <br>current shell and all subsequent <br>commands within it. When used this <br>way, <B>exec</B> is typically called <br>without a <B>command</B> argument.


title: REPLACING THE LOGIN SHELL
content:
A common practice in shell <br>configuration files (like <br><I>~/.profile</I> or <I>~/.bash_profile</I>) <br>is to use <B>exec</B> to switch <br>to a preferred shell. For instance, <br><I>exec zsh -l</I> executed from <br>your <I>.bash_profile</I> will replace <br>the login bash shell with a <br>login zsh shell. This ensures that <br>your desired shell becomes the <br>primary process for your session, <br>avoiding an extra layer of <br>process nesting.


title: HISTORY
content:
The concept of <B>exec</B> is deeply <br>rooted in the fundamental design of <br>Unix-like operating systems. It directly <br>corresponds to the <I>execve(2)</I> <br>system call (and its variants <br>like <I>execl(3), execvp(3)</I>, etc.), <br>which is responsible for loading a <br>new program into the address space <br>of the current process. This allows <br>a process to transform itself into <br>another, rather than always needing <br>to create a new process via <I>fork(2)</I> <br>first. <br><br>As a shell builtin, <B>exec</B> has been <br>a standard feature of Unix shells <br>since their early days (e.g., Bourne Shell). <br>Its inclusion as a builtin is crucial <br>because it allows the shell to <br>directly perform the `exec` system <br>call, thereby replacing itself without <br>creating an intermediate child <br>process for the new program. This <br>design minimizes overhead and enables <br>its specific use cases like persistent <br>I/O redirection or final program <br>execution in a session.


title: PARAMETERS
content:
<b><i>&lt;command&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the executable command to run (e.g., `python`, `pip`, `ruby`, `bundle`, `node`). This command will be resolved and executed within the context of the currently selected language version.<br><br><b>[<i>&lt;arguments&gt;</i>...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Any additional arguments that need to be passed directly to the `<i>&lt;command&gt;</i>`. These are relayed without modification.<br><br>


title: DESCRIPTION
content:
<i>exenv</i> is a foundational utility, commonly integrated within language version managers such as <b>pyenv</b> (for Python), <b>rbenv</b> (for Ruby), or <b>nvm</b> (for Node.js, though less directly named 'exenv'). Its primary purpose is to enable the execution of a command using a specific version of a programming language, without altering the active environment of the current shell session.<br><br>This functionality is invaluable for one-off commands, scripts, or automated environments (like CI/CD pipelines) where precise language version control is critical. Instead of modifying the shell's <b>PATH</b> or using `source` commands, <i>exenv</i> allows direct execution with the desired interpreter. It works by leveraging a 'shim' mechanism: when a command (e.g., `python`, `gem`, `pip`) is invoked, the `exenv` shim intercepts it, determines the correct language version based on project-specific (e.g., `.python-version`) or global configurations, and then executes the actual binary from that version's installation. This approach ensures isolation, prevents environment pollution, and simplifies managing multiple language versions concurrently.


title: CAVEATS
content:
<ul><li><b>Shim Reliance:</b> <i>exenv</i>'s functionality depends entirely on its 'shim' directory being correctly placed at the beginning of your shell's <b>PATH</b>. If shims are not found, commands managed by <i>exenv</i> will not resolve correctly.</li><li><b>Limited Environment Control:</b> While it sets up the necessary language-specific environment variables, <i>exenv</i> does not provide the same granular control over arbitrary environment variables as tools like `env(1)`.</li><li><b>Implicit Version Resolution:</b> The specific version of the language used is determined implicitly by the version manager's logic (e.g., local project file, global default, shell override). Users must be aware of this resolution order.</li></ul>


title: HOW <I>EXENV</I> WORKS (THE SHIM CONCEPT)
content:
At its core, <i>exenv</i> (or `pyenv exec`, `rbenv exec`) operates through a directory of 'shims' that is prepended to your shell's <b>PATH</b>. When you type a command like `python` or `pip`, your shell finds the `pyenv` shim for that command first. This shim is a small executable script that then invokes the actual `pyenv` (or `rbenv`) command. `pyenv` then determines which specific Python version (based on `.python-version` files, global settings, or shell overrides) should be used, finds the real `python` or `pip` executable within that version's installation directory, and `exec`utes it. This process is transparent to the user and allows for dynamic, per-project language version switching without manually managing <b>PATH</b> variables.


title: USE CASES IN SCRIPTING AND CI/CD
content:
<i>exenv</i>'s ability to run commands in isolated, version-controlled environments makes it ideal for scripting. For instance, in a shell script or a CI/CD pipeline, instead of activating a Python version with `pyenv shell 3.9.1`, you can directly use `pyenv exec pip install -r requirements.txt`. This ensures that the `pip` command associated with the correct Python version is used, without affecting subsequent commands in the script or other jobs on the CI runner, promoting reproducibility and preventing conflicts.


title: HISTORY
content:
<i>exenv</i> itself is not a standalone command but rather a conceptual prefix for execution utilities within language version managers. Its origin is deeply intertwined with the development of tools like <b>rbenv</b> (Ruby Version Manager) and later <b>pyenv</b> (Python Version Manager), which emerged in the early 2010s. These tools aimed to offer a lightweight, shim-based alternative to earlier, more intrusive version managers (like RVM for Ruby). The `<i>&lt;tool&gt;</i> exec` pattern, which <i>exenv</i> embodies, was introduced to provide a clean way to run commands using a specific language version without activating that version in the current shell, thereby avoiding shell environment pollution and simplifying scripting and CI/CD pipelines. It solved the problem of reliably executing language-specific binaries without complex PATH manipulations or shell `source` commands.


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


title: PARAMETERS
content:
<b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the main command or a specific subcommand.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version of the Exercism CLI currently installed.<br><br><b><b>configure</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets up the CLI by authenticating with your Exercism.io API token and defining your local workspace directory where exercises will be stored.<br><br><b><b>download</b> <i>&lt;track_slug&gt; &lt;exercise_slug&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads a specific coding exercise from a given language track to your local workspace, ready for you to work on.<br><br><b><b>submit</b> <i>&lt;file_path&gt; [&lt;file_path&gt;...]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Submits one or more solution files for a completed exercise back to the Exercism.io platform for review.<br><br><b><b>debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides diagnostic information about your CLI configuration and environment, which is helpful for troubleshooting setup issues.<br><br><b><b>login</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Authenticates your CLI with Exercism.io using your API token, granting access to your personal account and exercises.<br><br><b><b>logout</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clears your stored API token and logs you out of your Exercism.io account on the CLI.<br><br>


title: DESCRIPTION
content:
The <b>exercism</b> command is the official command-line interface (CLI) for Exercism.io, a free online platform for improving coding skills through practice exercises and mentorship. It allows users to interact with the Exercism platform directly from their terminal.<br><br>Users can download coding exercises (called "problems") for various programming languages (tracks), work on them locally in their preferred development environment, and then submit their solutions back to the platform for automated feedback and/or human mentorship. The CLI streamlines the entire workflow, from managing exercise directories and fetching new problems to submitting completed work, making it an indispensable tool for anyone using Exercism.io to learn and grow as a developer.


title: CAVEATS
content:
The <b>exercism</b> CLI requires an active Exercism.io account and a generated API token for full functionality. An internet connection is essential for operations like downloading exercises, submitting solutions, and configuring the client. While the CLI manages the local workspace structure, manual alterations to exercise directories can sometimes cause submission issues.


title: API TOKEN REQUIREMENT
content:
To use the <b>exercism</b> CLI, you must generate an API token from your Exercism.io account settings (typically found under 'Settings' -> 'API'). This token must be provided to the CLI, usually via the <b>exercism configure</b> command, to authenticate and perform account-specific operations like downloading new exercises or submitting solutions.


title: WORKSPACE STRUCTURE
content:
The CLI maintains a specific and critical directory structure for all downloaded exercises. By default, exercises are placed within a path like <i>your_workspace_directory/exercism/&lt;track_slug&gt;/&lt;exercise_slug&gt;/</i>. It is crucial to work within these managed directories and place your solution files appropriately for successful submission.


title: HISTORY
content:
The <b>exercism</b> CLI was developed as an open-source companion to the Exercism.io platform, aiming to provide a seamless, terminal-based workflow for developers. Its inception aimed to eliminate the need for constant browser interaction, allowing users to download, work on, and submit exercises directly from their development environment. Over time, it has evolved to support new platform features, improve user experience, and become the de facto tool for interacting with Exercism.io, streamlining the entire learning and practice lifecycle for its users.


title: PARAMETERS
content:
<b>device</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The block device containing the exFAT file system (e.g., <i>/dev/sdb1</i>).<br><br><b>new_label</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional string specifying the new volume label. If omitted, the current label is displayed. Limited to 11 characters. An empty string (<i>&quot;&quot;</i>) clears the label.<br><br>


title: DESCRIPTION
content:
<b>exfatlabel</b> is a command-line utility used to interact with the volume label of an exFAT file system. It allows users to either display the current label of an exFAT partition or modify it. When invoked with only a device path, it prints the existing label. If a new label is provided as a second argument, the command attempts to set this new label on the specified exFAT device. The label can be a maximum of 11 characters long and is case-sensitive. This utility is crucial for identifying exFAT volumes, especially when multiple storage devices are connected, as labels provide a human-readable identifier distinct from device paths. It requires administrative privileges to change a label.


title: CAVEATS
content:
Requires root privileges (or <b>sudo</b>) to modify the volume label. The <i>new_label</i> is limited to 11 characters in length. Only works with exFAT file systems; using it on other file system types may lead to errors or data corruption.


title: LABEL PERSISTENCE
content:
The volume label is stored directly within the exFAT file system's metadata on the device itself, making it persistent across reboots and different operating systems that support exFAT.


title: CLEARING A LABEL
content:
To remove an existing label, provide an empty string as the <i>new_label</i> argument, e.g., <i>sudo exfatlabel /dev/sdb1 &quot;&quot;</i>.


title: HISTORY
content:
<b>exfatlabel</b> is part of the <b>exfatprogs</b> suite of utilities, which provides essential user-space tools for managing exFAT file systems on Linux. These tools were developed to offer comprehensive support for Microsoft's exFAT file system, crucial for interoperability with various devices like USB drives and SD cards commonly formatted with exFAT.


title: PARAMETERS
content:
<b>-t <I>TAG</I>, --tag=<I>TAG</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays only the specified EXIF tag and its value, for example, 'DateTimeOriginal'.<br><br><b>-q <I>TAG</I>, --query=<I>TAG</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays only the value of the specified EXIF tag, without the tag name.<br><br><b>-m, --make</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the camera's make and model information, if available.<br><br><b>-i, --ifd</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Internal File Directory (IFD) structure, showing how tags are organized within the EXIF data.<br><br><b>-E, --extract-thumbnail</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extracts the embedded JPEG thumbnail image to a file, typically named by appending '.thm' to the original filename.<br><br><b>-o <I>FILE</I>, --output=<I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the output to the specified file instead of standard output.<br><br><b>-g <I>VALUE</I>, --gps-section=<I>VALUE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls the display of GPS information (0=never, 1=always). Default is 1.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows extra warnings and detailed processing information, useful for debugging.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays usage information and exits.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the program version and exits.<br><br>


title: DESCRIPTION
content:
The <b>exif</b> command is a utility designed to extract and display Exchangeable Image File Format (EXIF) metadata embedded within digital camera JPEG images.<br><br>EXIF is a standard that specifies formats for images, sound, and ancillary tags used by digital cameras, scanners, and other systems handling image and sound files. It stores a wide array of information including camera settings (e.g., aperture, shutter speed, ISO), date and time of capture, GPS coordinates (if supported by the camera), image dimensions, and copyright information.<br><br>Users leverage <b>exif</b> to inspect photographic details, verify camera settings, or even retrieve geographical data from their photos, making it an invaluable tool for photographers, archivists, and anyone working with digital imagery. The command presents the data in a human-readable format, often grouping related tags for clarity and structure.


title: CAVEATS
content:
The <b>exif</b> command is primarily designed for extracting EXIF metadata from <I>JPEG</I> image files. It may not work correctly or at all with other image formats (e.g., PNG, TIFF, GIF) or JPEGs that do not contain EXIF data. Furthermore, <b>exif</b> is a read-only tool; it cannot be used to modify or write EXIF data. For such operations, more advanced tools like <I>exiftool</I> are recommended. Be aware that images may contain sensitive GPS location data, which <b>exif</b> can display.


title: UNDERSTANDING EXIF DATA
content:
EXIF (Exchangeable Image File Format) is a metadata standard that digital cameras use to record crucial information about an image at the time of capture. This includes camera model, exposure settings (aperture, shutter speed, ISO), focal length, date and time, white balance, and even GPS coordinates. This data is invaluable for photographers to analyze their shots, for archival purposes, and for software to correctly interpret image properties.


title: OUTPUT STRUCTURE
content:
The <b>exif</b> command typically organizes its output in a structured, hierarchical manner. Data is often grouped into different Image File Directory (IFD) sections, such as <I>Exif.Image</I> (general image info), <I>Exif.Photo</I> (camera-specific photo info), and <I>Exif.GPSInfo</I> (geolocation data). This organization helps users navigate and understand the wealth of metadata present in their images.


title: HISTORY
content:
The <b>exif</b> command is part of the <I>libexif</I> project, an open-source C library specifically developed for parsing, editing, and saving EXIF data. <I>libexif</I> was initiated around the early 2000s, becoming a foundational library for numerous Linux applications that need to interact with digital image metadata. The <b>exif</b> command-line utility itself serves as a direct interface to this library's reading capabilities, providing a robust and standards-compliant way to inspect EXIF information from digital camera JPEGs.


title: SYNOPSIS
content:
<pre><b>exiftool</b> [<i>OPTIONS</i>] [<i>-TAG[=VALUE]</i>] [<i>FILE | DIR ...</i>]</pre><br><pre><b>exiftool</b> <i>-TAG[<SRC_TAG]</i> [<i>FILE | DIR ...</i>]</pre><br><pre><b>exiftool</b> <i>-TAG[<FILE]</i> [<i>FILE | DIR ...</i>]</pre><br><pre><b>exiftool</b> <i>-config FILE</i> [<i>FILE | DIR ...</i>]</pre><br><pre><b>exiftool</b> <i>-csv</i> [<i>-r</i>] [<i>FILE | DIR ...</i>]</pre><br><pre><b>exiftool</b> <i>-j</i> [<i>-r</i>] [<i>FILE | DIR ...</i>]</pre>


title: PARAMETERS
content:
<b><code>-a</code>, <code>--all</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include all tags, including duplicate and less common ones, in the output.<br><br><b><code>-b</code>, <code>--binary</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output tag values in binary format. Useful for extracting embedded binary data.<br><br><b><code>-c CHARSET</code>, <code>--charset CHARSET</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the character set for input or output text encoding (e.g., 'Latin' for ISO 8859-1).<br><br><b><code>-d FMT</code>, <code>--dateFormat FMT</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the format for date/time tag values. Use <i>strftime</i> codes for custom formats.<br><br><b><code>-E</code>, <code>--escapeHTML</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Escape HTML special characters (e.g., '&', '<', '>') in the output.<br><br><b><code>-G[NUM]</code>, <code>--groupNames[NUM]</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print group name for each tag. NUM specifies the group level (e.g., -G0 for family 0, -G1 for family 1).<br><br><b><code>-h</code>, <code>--htmlFormat</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output HTML-formatted pages, useful for generating reports in a web browser.<br><br><b><code>-j</code>, <code>--json</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output metadata in JSON (JavaScript Object Notation) format.<br><br><b><code>-n</code>, <code>--noNumbers</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print tag values numerically, without converting hex or numbers to text descriptions.<br><br><b><code>-o OUTFILE</code>, <code>--outFile OUTFILE</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirect the console output to a specified file.<br><br><b><code>-P</code>, <code>--preserve</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserve the original file modification date/time when writing tags.<br><br><b><code>-q</code>, <code>--quiet</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Quiet processing. Suppress warnings and minor error messages.<br><br><b><code>-r</code>, <code>--recurse</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recursively process files in subdirectories.<br><br><b><code>-s[NUM]</code>, <code>--short[NUM]</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a short output format. NUM specifies the level of abbreviation (e.g., -s1 for tag names only).<br><br><b><code>-t</code>, <code>--tabFormat</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output results in a tab-separated list format, suitable for spreadsheets.<br><br><b><code>-u</code>, <code>--unknown</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extract unknown tags, which are not part of known specifications.<br><br><b><code>-v[NUM]</code>, <code>--verbose[NUM]</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print verbose messages. Higher NUM values provide more detailed information.<br><br><b><code>-w FMT</code>, <code>--textOut FMT</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write output text to a file, using a specified format string.<br><br><b><code>-X</code>, <code>--xmlFormat</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output metadata in XML format.<br><br><b><code>-overwrite_original</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overwrite the original file without creating a backup. Use with extreme caution!<br><br><b><code>-tagsFromFile SRC_FILE</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Copy tags from a specified source file to the current file(s).<br><br><b><code>-TAG=VALUE</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write <i>VALUE</i> to the specified <i>TAG</i>. Use this syntax for modifying metadata.<br><br><b><code>-TAG<FILE</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read the <i>TAG</i> value from the contents of a specified <i>FILE</i>.<br><br><b><code>-TAG<SRC_TAG</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Copy the value from <i>SRC_TAG</i> to <i>TAG</i> within the same file.<br><br>


title: DESCRIPTION
content:
<b>exiftool</b> is a powerful, flexible, and cross-platform <i>Perl</i> library and command-line application for reading, writing, and editing meta information in a wide variety of files. Developed by <i>Phil Harvey</i>, it supports many different metadata formats including <i>Exif</i>, <i>IPTC</i>, <i>XMP</i>, <i>GPS</i>, <i>ID3</i>, <i>Photoshop IRB</i>, <i>FlashPix</i>, <i>ICC Profile</i>, <i>MIE</i>, and many manufacturer-specific <i>MakerNotes</i>.<br><br>It can process numerous file types such as images (e.g., <b>JPEG</b>, <b>TIFF</b>, <b>PNG</b>, <b>DNG</b>, <b>RAW</b> formats), video (e.g., <b>MOV</b>, <b>MP4</b>, <b>AVI</b>, <b>MPEG</b>), audio (e.g., <b>MP3</b>, <b>WAV</b>), and various document formats (e.g., <b>PDF</b>, <b>DOC</b>, <b>XLS</b>). <i>ExifTool</i> is widely used by photographers, archivists, digital forensics specialists, and developers for tasks like extracting detailed technical information, geotagging photos, correcting timestamps, removing sensitive data, or synchronizing metadata across different files. Its ability to handle complex nested data structures and perform batch operations efficiently makes it an indispensable tool for managing digital assets. It automatically creates backup files (e.g., <i>filename_original</i>) when modifications are made, ensuring data safety.


title: CAVEATS
content:
While powerful, <b>exiftool</b> operates directly on file metadata. By default, it creates backup copies (e.g., <i>filename_original</i>) before modification, but the use of the <b><code>-overwrite_original</code></b> option can permanently alter or destroy original data without a backup, so it must be used with extreme caution.<br><br>The extensive number of supported tags and options can present a steep learning curve for new users. As it's a <i>Perl</i> script, it requires a <i>Perl</i> interpreter, which is generally available on Linux distributions.


title: READING METADATA
content:
To simply view all metadata in a file, run <b><code>exiftool <i>filename.ext</i></code></b>.<br>To view specific tags, specify them: <b><code>exiftool -<i>creatordate</i> -<i>model</i> <i>image.jpg</i></code></b>.<br>Adding options like <b><code>-G</code></b> will show the group for each tag, and <b><code>-s</code></b> will provide a short output format.


title: WRITING METADATA
content:
To write or modify a tag, use the <b><code>-<i>TAG</i>=<i>VALUE</i></code></b> syntax: <b><code>exiftool -<i>comment</i>="<i>My new comment</i>" <i>file.jpg</i></code></b>.<br>Multiple tags can be written in a single command: <b><code>exiftool -<i>artist</i>="<i>John Doe</i>" -<i>copyright</i>="<i>© 2023 J. Doe</i>" <i>photo.jpg</i></code></b>.<br>To remove a tag, assign an empty string: <b><code>exiftool -<i>keywords</i>= <i>image.png</i></code></b>.


title: BATCH PROCESSING
content:
<i>ExifTool</i> can process multiple files or entire directories recursively.<br>To process all <b>JPEG</b> files in the current directory: <b><code>exiftool <i>*.jpg</i></code></b>.<br>To process all files in a directory and its subdirectories: <b><code>exiftool -r <i>./path/to/directory/</i></code></b>.<br>This allows for efficient bulk modification of metadata.


title: HISTORY
content:
<b>ExifTool</b> was created and is actively maintained by <i>Phil Harvey</i>. Its initial public release was in <b>2003</b>. Written entirely in <i>Perl</i>, it quickly gained popularity due to its comprehensive support for various metadata formats, cross-platform compatibility, and robust feature set. Over the years, it has become a de-facto standard for metadata manipulation, continuously updated to support new cameras, file formats, and metadata standards.


title: SEE ALSO
content:
<code>identify</code> (1) (from ImageMagick) - A tool to describe the format and characteristics of one or more image files., <code>file</code> (1) - Determine file type., <code>mediainfo</code> (1) - Display technical and tag data for audio/video files., <code>exiv2</code> (1) - A C++ library and command-line utility to manage Exif, IPTC, and XMP metadata., <code>jhead</code> (1) - A command line program to manipulate EXIF data in JPEG files., <code>ffprobe</code> (1) (from FFmpeg) - Multimedia stream analyzer, useful for video/audio metadata.


title: PARAMETERS
content:
<b>-o <i>timespec</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List messages older than the specified time. Examples: '1h' (1 hour), '1d' (1 day), '2w' (2 weeks).<br><br><b>-y <i>timespec</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List messages younger than the specified time.<br><br><b>-s <i>size_spec</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List messages with a size matching the specification. Can use operators like '>' or '<'. Example: '>1M' (larger than 1MB).<br><br><b>-f <i>pattern</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter messages where the sender matches the given regular expression pattern.<br><br><b>-r <i>pattern</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter messages where any recipient matches the given regular expression pattern.<br><br><b>-t <i>pattern</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter messages where the subject line matches the given regular expression pattern.<br><br><b>-i <i>pattern</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter messages where the message ID matches the given regular expression pattern.<br><br><b>-z</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List only frozen messages (messages that are currently not being retried).<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List only non-frozen messages (messages actively being retried).<br><br><b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instead of listing messages, output a count of matching messages.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List detailed information for each message, similar to <code>exim -bpl</code> output.<br><br><b>-b</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produce brief output, showing only the message ID.<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display sizes and times in human-readable format (e.g., '1M', '1h').<br><br><b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all messages in the queue (often used in conjunction with other filters).<br><br><b>[<i>pattern</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A general regular expression pattern to match against default fields (typically sender, recipient, or message ID if not specified by other options).<br><br>


title: DESCRIPTION
content:
<i><b>exiqgrep</b></i> is a specialized utility designed to list and filter messages within the Exim Mail Transfer Agent (MTA) queue. It acts as a convenient wrapper around Exim's internal queue listing command (e.g., <code>exim -bpl</code> or <code>exim -bp</code>) and pipes its output through a powerful filtering mechanism, similar to the <i>grep</i> command.<br><br>System administrators commonly use <i>exiqgrep</i> to quickly identify, inspect, and manage messages in the Exim queue. It allows for filtering by various criteria such as sender, recipient, subject, message ID, age, size, and frozen status. This makes it invaluable for troubleshooting mail delivery issues, identifying spam, or monitoring queue health without having to parse the raw Exim queue output directly. It provides a user-friendly and efficient way to query specific queue entries.


title: CAVEATS
content:
<i>exiqgrep</i> relies on parsing the output of <code>exim -bpl</code>. Future changes to Exim's queue listing format could potentially break <i>exiqgrep</i>'s functionality. <br>It typically requires root privileges or to be run as the Exim user to access the mail queue and list messages properly. For very large queues, iterating and filtering can be resource-intensive, though it's generally efficient for most administrative tasks.


title: COMMON USAGE SCENARIOS
content:
<ul><li><b>Find messages from a specific sender:</b> <code>exiqgrep -f 'bad_spammer@example.com'</code></li><li><b>List all frozen messages:</b> <code>exiqgrep -z -l</code></li><li><b>Count messages older than 2 days:</b> <code>exiqgrep -o 2d -c</code></li><li><b>View messages to a specific recipient:</b> <code>exiqgrep -r 'user@destination.com'</code></li><li><b>Delete found messages (requires root and care):</b> <code>exiqgrep -i '^<message_id>' | xargs exim -Mrm</code> (<i>Use with extreme caution!</i>)</li></ul>


title: HISTORY
content:
<i>exiqgrep</i> is distributed as part of the Exim Mail Transfer Agent's suite of utilities. Its development paralleled the growth and widespread adoption of Exim, providing system administrators with a dedicated and powerful tool for managing and troubleshooting the Exim mail queue, simplifying tasks that would otherwise require complex scripting around the raw <code>exim -bpl</code> output.


title: PARAMETERS
content:
<b><I>n</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional integer representing the <b>exit status</b> to be returned to the parent process. This value should be between <i>0</i> and <i>255</i>. If omitted, the exit status of the <b>last executed command</b> is used.<br><br>


title: DESCRIPTION
content:
The <i><I>exit</I></i> command is a <b>built-in</b> shell command used to terminate the current shell execution environment, whether it's an interactive shell session, a shell script, or a shell function. When <i><I>exit</I></i> is executed, the shell process terminates, and control is returned to its parent process. An <b>exit status</b> (also known as a return code or exit code) can be provided as an argument, which is then passed back to the parent process. This status is a numerical value typically used to indicate the success or failure of the exited process.<br><br>By convention, an exit status of <i><b>0 (zero)</b></i> signifies <b>success</b>, while any non-zero value typically indicates a <b>failure</b> or an error condition. Different non-zero values can be used to distinguish between various types of errors. If no argument is supplied to <i><I>exit</I></i>, the exit status defaults to the exit status of the <b>last command</b> executed before <i><I>exit</I></i>. The exit status is an integer ranging from <i>0</i> to <i>255</i>. If a value outside this range is provided, it is usually taken modulo <i>256</i>. This command is crucial for controlling flow in shell scripts, allowing scripts to signal their outcome to calling programs or other scripts.


title: CAVEATS
content:
The exit status is an <b>integer</b> in the range <i>0-255</i>. Values outside this range will be truncated (modulo <i>256</i>).<br>When <i><I>exit</I></i> is used inside a <b>subshell</b> or a <b>shell function</b>, it will only terminate that specific subshell or function, not necessarily the parent script, unless the subshell is the main execution context.<br>If <i><I>exit</I></i> is called without an argument, its status is that of the <b>last command</b> executed. Be mindful of this default behavior when debugging scripts.<br>Using <i><I>exit</I></i> in an <b>interactive login shell</b> will terminate your shell session.


title: EXIT STATUS CONVENTIONS
content:
The convention of <i>0</i> for <b>success</b> and non-zero for <b>failure</b> is universally adopted in Unix-like systems. This allows scripts and programs to reliably check the outcome of executed commands. The exit status of the most recently executed foreground command is stored in the special shell parameter <i><b>$?</b></i>, which can be accessed for conditional logic within scripts.


title: BUILT-IN NATURE
content:
Unlike external programs which are located in the file system (e.g., <i>/bin/ls</i>), <i><I>exit</I></i> is a <b>built-in</b> command. This means it is an integral part of the shell's executable code, making its execution faster as the shell does not need to search for it in the <i>PATH</i> environment variable or create a new process for it.


title: HISTORY
content:
The <i><I>exit</I></i> command has been a fundamental <b>built-in</b> feature of Unix shells since their early days, including the original Bourne shell (<i>sh</i>) and subsequent shells like <i>csh</i>, <i>ksh</i>, and <i>bash</i>. Its behavior, particularly regarding exit status handling, is standardized by <b>POSIX</b> (Portable Operating System Interface), ensuring consistent operation across different compliant shells. It is a cornerstone for shell scripting, enabling explicit control over program termination and inter-process communication via exit codes.


title: PARAMETERS
content:
<b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display verbose messages, showing more details about operations.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress all non-critical messages, showing only errors or warnings.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the program's version number and exit.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a concise help message with common options and actions.<br><br><b><b>-g</b> &lt;<i>key</i>&gt;, <b>--grep</b> &lt;<i>key</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter output to show only lines containing the specified key or tag name.<br><br><b><b>-k</b>, <b>--keep</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When modifying a file, keep the original file by adding an `_original` suffix.<br><br><b><b>-u</b>, <b>--usage</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print a brief usage statement for the command.<br><br><b><b>-a</b> &lt;<i>value</i>&gt;, <b>--adjust</b> &lt;<i>value</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adjust date/time Exif tags by the specified offset (e.g., '<i>+1:0:0</i>' for 1 hour). This is an action-specific option often used with '<i>mo</i>' (modify).<br><br><b><b>-c</b> &lt;<i>comment</i>&gt;, <b>--comment</b> &lt;<i>comment</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set or update the JPEG comment of the image.<br><br><b><b>-T</b> &lt;<i>type</i>&gt;, <b>--type</b> &lt;<i>type</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the metadata type (e.g., '<i>Exif</i>', '<i>IPTC</i>', '<i>XMP</i>') for actions.<br><br><b><b>--dryrun</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a dry run; simulate operations without making actual changes to files.<br><br>


title: DESCRIPTION
content:
<b>exiv2</b> is a powerful command-line utility for manipulating metadata in digital images. It supports <i>Exif</i>, <i>IPTC</i>, and <i>XMP</i> metadata standards, as well as JPEG comments.<br><br>Users can read, write, modify, or delete metadata tags embedded in various image formats like JPEG, TIFF, PNG, and many RAW formats (e.g., Canon CR2, Nikon NEF). It's widely used by photographers, developers, and system administrators for tasks such as geotagging images, adding copyright information, adjusting date/time stamps, or simply inspecting detailed camera settings.<br><br>Its flexibility allows for complex batch operations and scripting, making it an essential tool for managing large collections of digital photos. <b>exiv2</b> provides fine-grained control over metadata, ensuring data integrity and compliance with various metadata standards. It also supports printing metadata in human-readable or structured formats (e.g., CSV).


title: CAVEATS
content:
Modifying metadata directly can be risky; always back up important files or use the <b>-k</b> (<i>--keep</i>) option. Different image formats have varying levels of metadata support (e.g., JPEG fully supports Exif/IPTC/XMP, while PNG mostly supports XMP). Incorrect manipulation can lead to corrupted tags or files. Ensure appropriate write permissions for files being modified. Some camera-specific or proprietary metadata might not be fully understood or editable by <b>exiv2</b>.


title: CORE ACTIONS
content:
Beyond general options, <b>exiv2</b> relies on specific 'actions' to perform its primary functions:<br><b>pr</b> (<i>print</i>): Displays metadata from files in various formats.<br><b>ex</b> (<i>extract</i>): Extracts metadata to sidecar files (e.g., .xmp, .icc profiles).<br><b>in</b> (<i>insert</i>): Inserts metadata from sidecar files into images.<br><b>rm</b> (<i>remove</i>): Removes all Exif, IPTC, and XMP metadata from a file.<br><b>ad</b> (<i>add</i>): Adds a new tag with a specified value.<br><b>mo</b> (<i>modify</i>): Modifies existing tags, often used with options like <b>--adjust</b> for date/time.<br><b>set</b>: Directly sets a specific tag's value (e.g., <i>exiv2 set Exif.Image.Artist "John Doe" file.jpg</i>).


title: METADATA STANDARDS
content:
<b>exiv2</b> primarily deals with three major metadata standards:<br><b>Exif</b> (<i>Exchangeable image file format</i>): Contains technical information about the photo, such as camera model, lens, exposure settings (shutter speed, aperture, ISO), date/time of capture, and GPS data.<br><b>IPTC</b> (<i>International Press Telecommunications Council</i>): Mainly used for news photography, including descriptive information like captions, keywords, categories, photographer's contact details, and copyright information.<br><b>XMP</b> (<i>Extensible Metadata Platform</i>): An Adobe-created, XML-based standard that is highly flexible. It can embed virtually any type of metadata, including ratings, labels, extended descriptions, and complex structured data. XMP is often used for metadata that spans across different applications and workflows.


title: HISTORY
content:
<b>exiv2</b> is implemented as a C++ library and a command-line tool, initially developed by Robin Mills with its first major release around 2004. It has since evolved into a widely recognized and utilized tool for programmatic access to image metadata. Its robust design and comprehensive feature set have led to its adoption in numerous open-source photography and image management projects, including darktable, digiKam, and gThumb. Active development continues to ensure compatibility with new camera models and evolving metadata standards.


title: PARAMETERS
content:
<b>-Q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Query the local (installed) package database.<br><br><b>-S</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Query the sync (repository) package database.<br><br><b>-L</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all available format fields with their descriptions. Useful for constructing custom format strings.<br><br><b>-q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress warnings and errors. Only output requested data.<br><br><b>-H</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print a header row before the formatted output, indicating the fields.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more details about the query process.<br><br><b>-V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the version information for <i>expac</i>.<br><br><b>--cached</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Query packages in the pacman cache directory. Requires package names.<br><br><b>--foreign</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limit query to 'foreign' packages (packages not found in any configured sync database, typically AUR packages).<br><br><b>--ignored</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limit query to packages that are currently ignored by pacman.<br><br><b>--uninstalled</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limit query to packages that are NOT currently installed.<br><br><b>--groups</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Query package groups instead of individual packages.<br><br><b>--depends &lt;package&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List packages that depend on the specified <I>package</I>.<br><br><b>--requiredby &lt;package&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List packages that are required by the specified <I>package</I>.<br><br><b>--search &lt;regex&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search package names and descriptions using the provided regular expression.<br><br><b>--regex</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat subsequent package names as regular expressions for matching.<br><br><b>--separator &lt;string&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use the specified <I>string</I> as a field separator for list-type fields (e.g., dependencies).<br><br><b>--format &lt;string&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the format string using this option instead of as a positional argument. Useful for complex strings.<br><br><b>--pager</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pipe the output through a pager (e.g., 'less') for easier viewing of long results.<br><br><b>--color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable color output for fields where applicable.<br><br>


title: DESCRIPTION
content:
<i>expac</i> is a powerful and flexible command-line utility designed for querying and displaying information about packages in Arch Linux. Built upon <I>libalpm</I>, the core library of <I>pacman</I>, it provides a highly customizable way to retrieve package details from both the local package database and synced repositories.<br><br>Unlike <I>pacman -Qi</I> or <I>pacman -Ss</I> which offer fixed output formats, <I>expac</I> allows users to define arbitrary output formats using <I>printf</I>-like format strings, enabling precise control over the displayed data. This makes it invaluable for scripting, custom package listings, and quick lookups, providing access to a vast array of package attributes such as name, version, architecture, description, install date, size, dependencies, required-by packages, conflicts, provides, and much more. It supports various query modes, including installed packages, repository packages, foreign packages, and specific database lookups.


title: CAVEATS
content:
<i>expac</i> is primarily an Arch Linux specific utility and relies on the <I>libalpm</I> library and <I>pacman</I> package databases. It is not available by default on other Linux distributions. The power of its custom format strings also implies a learning curve to master the various field specifiers and modifiers. Complex queries or those involving large datasets might have noticeable performance implications.


title: FORMAT STRING SYNTAX
content:
The core strength of <i>expac</i> lies in its <I>printf</I>-like format strings. These strings define how package information is presented. Fields are specified using a percent sign followed by a character (e.g., <I>%n</I> for package name, <I>%v</I> for version, <I>%d</I> for description). Many fields support modifiers for different output formats; for example, <I>%S</I> for human-readable size or <I>%t</I> for formatted time. To discover all available fields and their modifiers, use the <I>expac -L</I> command.


title: FIELD TYPES AND MODIFIERS
content:
<i>expac</i> supports various field types including strings, numbers, booleans, and lists. It automatically handles type conversions and formatting based on the field type and any provided modifiers. For instance, a list of dependencies might be separated by a default comma, but can be customized using the <I>--separator</I> option. Boolean fields can be formatted to display 'yes'/'no' or other custom strings.


title: HISTORY
content:
<i>expac</i> was developed as a more flexible and powerful alternative to <I>pacman</I>'s built-in query capabilities within the Arch Linux ecosystem. Its genesis was driven by the need for fine-grained control over package information output, which was lacking in the standard <I>pacman -Qi</I> or <I>pacman -Ss</I> commands. Leveraging <I>libalpm</I>, the same underlying library used by <I>pacman</I> itself, <i>expac</i> ensures seamless integration and consistency with Arch's official package management system. It has become a staple utility for Arch Linux users and script developers who require highly customized package data for system reporting, automation, and advanced package introspection.


title: SYNOPSIS
content:
<b>expand</b> [<i>OPTION</i>]... [<i>FILE</i>]...<br><b>expand</b> [<i>OPTION</i>]... <i>--files-from=F</i>


title: PARAMETERS
content:
<b><i>-t N</i>, <i>--tabs=N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set tab stops at every <i>N</i> columns. Each tab character is replaced by enough spaces to reach the next multiple of <i>N</i> column position.<br><br><b><i>-t N1,N2,...</i>, <i>--tabs=N1,N2,...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set tab stops at specific column positions: <i>N1</i>, <i>N2</i>, etc. Subsequent tabs will expand to the next specified stop. If a tab goes beyond the last specified stop, it expands to a uniform width (defaulting to 8 spaces) relative to that last stop.<br><br><b><i>-i</i>, <i>--initial</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only convert initial tabs (tabs at the beginning of a line) and not tabs appearing later on the line.<br><br><b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output version information and exit.<br><br>


title: DESCRIPTION
content:
The <i>expand</i> command is a standard Linux utility designed to convert tab characters into an equivalent number of space characters within files or from standard input. This is particularly useful for ensuring consistent indentation in source code, configuration files, or plain text documents, as different text editors or display environments might interpret tab characters differently. By default, <i>expand</i> replaces each tab with 8 space characters. However, users can specify custom tab stop settings, either by defining a uniform tab width (e.g., 4 spaces per tab) or by providing a list of absolute column positions where tab stops should occur. When a tab character is encountered, <i>expand</i> inserts enough spaces to reach the next defined tab stop. It processes the input line by line, printing the modified content to standard output, making it an invaluable tool for formatting consistency.


title: CAVEATS
content:
When specifying absolute tab stops (e.g., <i>-t 5,10,15</i>), the numbers must be in strictly increasing order. If they are not, <i>expand</i> may report an error or exhibit unexpected behavior. The command works on byte offsets, meaning it correctly handles multi-byte characters in UTF-8 locales if the terminal also interprets them correctly, but its column calculations are based on monospace characters.


title: DEFAULT TAB BEHAVIOR
content:
If no tab stops are specified using <i>-t</i> or <i>--tabs</i>, <i>expand</i> defaults to setting tab stops every 8 columns. This means each tab character encountered will be replaced by enough spaces to reach the next column position that is a multiple of 8.


title: INPUT AND OUTPUT FLOW
content:
By default, if no <i>FILE</i> is specified, <i>expand</i> reads its input from standard input (stdin) and writes the processed, expanded content to standard output (stdout). This makes it highly versatile for use within shell pipelines, allowing it to easily chain with other commands (e.g., <i>cat file.txt | expand -t 4 | less</i>).


title: HISTORY
content:
The <i>expand</i> command is a foundational Unix utility, part of the core text processing tools that have been available since early versions of the Unix operating system. It was standardized by POSIX (Portable Operating System Interface) to ensure consistent behavior across different Unix-like systems. Its design predates many modern text editors and IDEs that incorporate built-in tab-to-space conversion, making it a crucial tool for batch processing or preparing files for environments without such advanced features. Its continued inclusion in GNU Core Utilities underscores its enduring utility for basic text manipulation tasks.


title: SYNOPSIS
content:
<br><b>expect</b> [<I>-c command</I>] [<I>-d</I>] [<I>-D debug_flags</I>] [<I>-f</I>] [<I>-i</I>] [<I>-N</I>] [<I>-P interpreter</I>] [<I>-B</I>] [<I>-L logfile</I>] [<I>-l</I>] [<I>-s</I>] [<I>-b</I>] [<I>-t timeout</I>] [<I>--</I>] [<I>script</I>] [<I>script_args</I>]


title: PARAMETERS
content:
<b>-c command</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Executes the specified <I>command</I> string as an Expect script. Useful for one-liners.<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Enables debugging output, showing all <I>spawn</I>, <I>expect</I>, and <I>send</I> actions.<br><br><b>-D debug_flags</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Enables specific debugging modes (e.g., <I>0x01</I> for Tcl stack trace, <I>0x02</I> for Expect internal trace).<br><br><b>-f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Forces execution of the script even if it seems insecure (e.g., world-writable).<br><br><b>-i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Forces interactive mode, even if stdout is not a TTY.<br><br><b>-N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Prevents Expect from parsing script arguments, passing them directly to the script.<br><br><b>-P interpreter</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Specifies an alternative Tcl interpreter.<br><br><b>-B</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Enables batch mode, preventing stdout buffering.<br><br><b>-L logfile</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Logs all input and output to the specified <I>logfile</I>.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Same as <I>-L</I>.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Enables synchronous output, flushing stdout after every print.<br><br><b>-b</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Buffers input, reading more than just one character at a time.<br><br><b>-t timeout</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Sets the default timeout for <I>expect</I> commands in seconds.<br><br><b>--</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Marks the end of command-line options, useful if the script name starts with a hyphen.<br><br><b>script</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>The path to the Expect script file to be executed.<br><br><b>script_args</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Arguments passed to the Expect script.<br><br>


title: DESCRIPTION
content:
expect is a powerful <I>Tcl</I>-based scripting language designed to automate interactive command-line programs. It "expects" specific output from a program and "sends" input in response, mimicking human interaction. This is particularly useful for tasks that require user input, such as logging into remote servers (<I>ssh</I>), transferring files (<I>scp</I>, <I>ftp</I>), or running installation scripts. By scripting these interactions, expect enables batch processing, unattended execution, and robust automation of previously manual, interactive workflows, significantly improving efficiency and reducing human error.


title: CAVEATS
content:
<b>Security Risks</b>: <br>Passing sensitive information like passwords directly in scripts or as arguments is insecure. Consider using secure credential management systems.<br><b>Fragility</b>: <br>Expect scripts are sensitive to changes in the interactive program's prompts or output. Minor changes can break a script.<br><b>Debugging Complexity</b>: <br>Debugging can be challenging, especially with complex interactions and timeouts. The <I>-d</I> and <I>-D</I> flags are crucial.<br><b>Resource Usage</b>: <br>For very high-volume or long-running tasks, <I>expect</I> can consume more resources than a non-interactive solution, if one exists.


title: CORE COMMANDS
content:
<br>The power of <I>expect</I> lies in its core commands:<br>    <I>spawn</I>: <br>Starts a new process and attaches it to Expect's control.<br>    <I>expect</I>: <br>Waits for a specific pattern (string or regex) from the spawned process's output.<br>    <I>send</I>: <br>Sends a string of characters (including special characters like newlines) to the spawned process's input.<br>    <I>interact</I>: <br>Relinquishes control to the user, allowing direct interaction with the spawned process until a specific key sequence or pattern is encountered.


title: PATTERN MATCHING
content:
<br><I>expect</I> uses powerful pattern matching capabilities, including glob-style and regular expressions, to identify specific outputs from programs, making it highly flexible in responding to various prompts.


title: TIMEOUT HANDLING
content:
<br>Each <I>expect</I> command can have a timeout. If the expected pattern is not received within the timeout period, the script can handle the condition, preventing infinite waits.


title: HISTORY
content:
<br>The <I>expect</I> utility was created by <B>Don Libes</B> at the <B>National Institute of Standards and Technology (NIST)</B> in the early 1990s (around 1990-1991). It was developed to address the significant challenge of automating interactive programs, which previously required manual human intervention. Built on the <I>Tcl</I> (Tool Command Language) scripting language, <I>expect</I> provided a robust and flexible framework for sending inputs and waiting for specific outputs, revolutionizing the automation of tasks like remote logins, software installations, and batch processing. Its widespread adoption solidified its role as an indispensable tool for system administrators and developers.


title: PARAMETERS
content:
<b><i>-c</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks for expired passwords and reports accounts that require password changes without forcing any actions.<br><br><b><i>-f</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces password expiration for accounts that have exceeded their validity period or are about to, potentially requiring a password change on next login.<br><br><b><i>-h</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and exits.<br><br><b><i>-q</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs in quiet mode, suppressing most standard output messages, making it suitable for cron jobs.<br><br>


title: DESCRIPTION
content:
The <b>expiry</b> command is a utility found within the <i>shadow-utils</i> package, designed to manage and enforce password expiration policies on Linux systems. It scans through the system's user accounts, primarily consulting the password aging information stored in the <i>/etc/shadow</i> file for each user. Its main purpose is to identify accounts where the password has expired or is about to expire.<br><br>Depending on its invocation (with or without options), <b>expiry</b> can force users to change their passwords upon their next login, lock accounts that have critically overdue password changes, or simply report on the status of user passwords. System administrators commonly schedule <b>expiry</b> to run periodically via <i>cron</i> jobs to maintain a strong security posture by ensuring regular password updates and preventing the use of long-stale credentials.


title: CAVEATS
content:
The <b>expiry</b> command requires root privileges to function correctly, as it interacts with sensitive system files like <i>/etc/shadow</i>. Its exact behavior and available options may vary slightly depending on the specific version of the <i>shadow-utils</i> package and the Linux distribution being used. It is often configured to run automatically via a <i>cron</i> job.


title: CONFIGURATION FILES
content:
<b>expiry</b> relies heavily on two primary configuration files: <i>/etc/shadow</i>, which stores per-user password aging information (like last changed date, minimum/maximum days between changes, and warning days), and <i>/etc/login.defs</i>, which defines system-wide default values for password policies (e.g., <i>PASS_MAX_DAYS</i>, <i>PASS_MIN_DAYS</i>, <i>PASS_WARN_AGE</i>).


title: SECURITY IMPLICATIONS
content:
Regular use of <b>expiry</b> is fundamental for maintaining strong system security. By enforcing timely password changes, it mitigates the risk of compromised or brute-forced passwords remaining active indefinitely, thereby reducing potential attack vectors and improving overall system resilience against unauthorized access.


title: HISTORY
content:
The <b>expiry</b> command is an integral part of the <i>shadow-utils</i> suite, which was developed to enhance the security of Unix-like systems by separating user passwords from the publicly readable <i>/etc/passwd</i> file into the secured <i>/etc/shadow</i> file. This separation allowed for more robust password aging policies and stronger password hashes.<br><br><b>expiry</b> evolved as a tool to enforce these policies, ensuring that users regularly update their credentials, a crucial aspect of system security. It has been a standard utility in most Linux distributions for many years, working in conjunction with tools like <b>chage</b> to manage password aging.


title: PARAMETERS
content:
<b><i>name</i>[<i>=value</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the variable to export, optionally setting its value. If <i>value</i> is provided, the variable's value is set before marking it for export. If no <i>name</i> is given, all currently exported variables are displayed.<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Export the specified <i>name</i>s as shell functions rather than variables. This makes the function definitions available to child shell processes.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove the export property from the specified <i>name</i>s. This makes the variables local to the current shell, preventing them from being passed to child processes.<br><br><b><b>-p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a list of all currently exported variables and functions in the current shell environment. This option should be used without any <i>name</i> or <i>value</i> arguments.<br><br>


title: DESCRIPTION
content:
The <b>export</b> command is a shell builtin that marks variables and functions to be passed into the environment of child processes. When a variable is <i>exported</i>, any new processes launched from the current shell will inherit a copy of that variable and its value. This is crucial for configuring programs, specifying paths, or passing data between different parts of a system.<br><br>Without <b>export</b>, a variable set in the current shell remains local to that shell instance and is not visible to commands or scripts executed from it. For instance, the <i>PATH</i> variable, which lists directories where the shell looks for executables, must be exported to ensure all commands can be found by subsequent processes. It is a fundamental command for managing the shell's environment and ensuring proper program execution.


title: CAVEATS
content:
<ul><li>Variables exported by <b>export</b> are inherited by <i>child</i> processes, but they do <i>not</i> affect the <i>parent</i> shell or sibling processes. Each shell runs in its own distinct environment.</li><li>Values of exported variables are always treated as strings. If you assign a complex type (like an array in Bash), only the first element or a string representation might be exported, depending on the shell's behavior.</li><li>Changes to an exported variable's value in a child process do not propagate back to the parent shell.</li><li>The <b>export</b> command itself does not set a variable's value; it only marks an existing variable (or one being set simultaneously) for export.</li></ul>


title: VIEWING EXPORTED VARIABLES
content:
To see all currently exported variables and their values, simply run <b>export -p</b>. Alternatively, <b>env</b> displays the environment variables that would be passed to a new process, and <b>printenv</b> can display specific environment variables or all of them if no argument is given.


title: VARIABLE SCOPE
content:
A variable defined simply as <i>VAR=value</i> is local to the current shell. It exists and can be used within that shell session, but it will not be inherited by any commands or scripts executed from it. <b>export VAR=value</b> not only defines the variable but also marks it for inheritance by child processes. It's common practice to use <b>export</b> in shell initialization files (e.g., <i>.bashrc</i>, <i>.profile</i>, <i>.zshrc</i>) to set up the environment for interactive sessions and scripts.


title: FUNCTIONS AND EXPORT
content:
While less common than exporting variables, <b>export -f</b> allows shell functions to be inherited by child shell processes. This is useful when a child shell needs to execute a specific function defined in the parent shell's environment, though it's important to note that functions are typically only exported to <i>child shell instances</i>, not to arbitrary executables.


title: HISTORY
content:
The <b>export</b> command is a fundamental feature of the Bourne shell (<b>sh</b>) and has been inherited by its successors, including Bash (<b>bash</b>), Zsh (<b>zsh</b>), and Ksh (<b>ksh</b>). Its core functionality—making variables available to child processes—has remained consistent across these shells, reflecting its importance in Unix-like operating systems. The introduction of options like <b>-f</b> for functions and <b>-p</b> for listing exports has evolved with the shells, enhancing its utility over time and solidifying its role in shell scripting and environment management.


title: SYNOPSIS
content:
<b>exportfs</b> [<i>-avi</i>] [<i>-o options</i>] [<i>-f</i>] [<i>-s</i>] [<i>-r</i>] [<i>-u directory</i>] [<i>host:/path</i>]<br>Common usages:<br><b>exportfs</b> <i>-a</i><br><b>exportfs</b> <i>-r</i><br><b>exportfs</b> <i>-u directory</i>


title: PARAMETERS
content:
<b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Export or unexport all directories listed in <b>/etc/exports</b>. Typically used to load all exports into the kernel or remove them all.<br><br><b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reexport all directories. This causes <i>exportfs</i> to re-read <b>/etc/exports</b> and update the kernel's export table with any changes, effectively refreshing all exports.<br><br><b><b>-u</b> <i>directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unexport the specified <i>directory</i>. This removes the given directory from the kernel's export table, making it unavailable to NFS clients.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verbose output. Shows what <i>exportfs</i> is doing.<br><br><b><b>-o</b> <i>options</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify export <i>options</i> directly on the command line, similar to those found in <b>/etc/exports</b> (e.g., <b>ro</b>, <b>rw</b>, <b>sync</b>). These apply to the specified <i>host:/path</i> or all exports if <b>-a</b> is used.<br><br><b><b>-i</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore <b>/etc/exports</b>. When this option is used, command-line arguments are the definitive source, and <b>/etc/exports</b> is not read.<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force <i>exportfs</i> to flush and reload the kernel's export table. Useful for situations where the kernel state might be out of sync.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress output. Disables the default behavior of showing which exports are added or removed.<br><br>


title: DESCRIPTION
content:
<i>exportfs</i> is a utility used to maintain the kernel's table of currently exported NFS filesystems. It works in conjunction with the <b>/etc/exports</b> file, which defines the list of directories that NFS servers should make available to NFS clients. While <b>/etc/exports</b> defines the <i>desired</i> state of exports, <i>exportfs</i> is the command that <i>applies</i> these definitions to the running kernel. It can be used to export all directories listed in <b>/etc/exports</b>, unexport specific directories, or re-export them to apply changes without needing to restart the entire NFS server (<b>nfsd</b> service). This dynamic capability is crucial for managing NFS shares on a live server without service interruptions, allowing administrators to add, remove, or modify export options on the fly. However, it's important to remember that changes made solely with <i>exportfs</i> are not permanent and will be lost upon reboot unless saved to <b>/etc/exports</b> and re-applied at system startup.


title: CAVEATS
content:
<b>Persistence:</b> Changes made with <i>exportfs</i> are not persistent across reboots unless the <b>/etc/exports</b> file is updated accordingly and the NFS server service is configured to apply these changes at startup.<br><b>Security:</b> Ensure that the options specified via <i>exportfs -o</i> are carefully chosen to prevent unintended access or security vulnerabilities.<br><b>Client Cache:</b> NFS clients might cache information; changes might not be immediately reflected on all clients. Clients may need to remount.<br><b>Firewall:</b> <i>exportfs</i> only manages the kernel export table; it does not configure firewall rules. Ensure NFS-related ports (2049, 111, etc.) are open if required.


title: APPLYING CHANGES PERMANENTLY
content:
To make changes to NFS exports permanent, first modify the <b>/etc/exports</b> file. Then, use <b>exportfs -r</b> (to re-export all, applying changes) or <b>exportfs -a</b> (to export all if not already exported) to update the kernel's export table. Finally, ensure your system's NFS server service is configured to re-read and apply <b>/etc/exports</b> at boot (e.g., by enabling <b>nfs-server.service</b> with <b>systemctl</b>).


title: VERIFYING EXPORTS
content:
After running <i>exportfs</i>, you can verify the currently exported directories using <b>showmount -e <i>localhost</i></b> or by checking the contents of <b>/proc/fs/nfsd/exports</b> (though this file might vary or be less human-readable).


title: HISTORY
content:
<i>exportfs</i> has been a fundamental part of the NFS server utilities since its early implementations on Linux. It provides a crucial mechanism for dynamically controlling NFS exports without requiring full server restarts, which is particularly important for high-availability systems and production environments. Its development has focused on reliability and integration with the kernel's NFS module to ensure consistent and efficient export management.


title: SYNOPSIS
content:
The command <i>'expose'</i> does not have a standard, universal syntax as it is not a standalone Linux command. Its conceptual usage varies depending on the specific resource being made accessible, utilizing other system utilities.


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;No standard parameters exist for a non-existent command. The options and arguments depend entirely on the specific Linux command or tool used to achieve the 'expose' action (e.g., <i>iptables</i> options for port exposure, <i>export</i> arguments for variables).<br><br>


title: DESCRIPTION
content:
The command <i>'expose'</i> is not a standard, standalone utility found in typical Linux distributions. When users refer to 'expose,' they often mean the act of making a resource, such as a network port, a file, an environment variable, or a service, accessible from outside its immediate scope or environment. This concept is implemented through various other standard Linux commands and system configurations, rather than a single <i>'expose'</i> command. For instance, making a network port accessible involves firewall rules or service configurations. Exporting a shell variable uses the <i>export</i> command. Making a file accessible might involve adjusting file permissions or configuring network shares. Therefore, <i>'expose'</i> describes an action or desired outcome achieved by a combination of existing tools and configurations.


title: CAVEATS
content:
The command <i>'expose'</i> is not a standard utility in Linux distributions. Any reference to 'expose' typically refers to a conceptual action, a command within a specific application (e.g., a cloud CLI tool, a framework like Ruby on Rails), or a custom script. Users should not expect to find a manual page for a general <i>'expose'</i> command in their system's man pages.


title: CONCEPTUAL USES OF 'EXPOSE' IN LINUX
content:
When discussing 'exposing' in Linux, various contexts arise:<br><br><b>1. Network Ports:</b> Making a service port accessible from outside a server, typically involving firewall rules (e.g., with <i>iptables</i>, <i>ufw</i>, or <i>firewalld</i>) or network address translation (NAT).<br><br><b>2. Environment Variables:</b> Making a shell variable available to child processes by using the <i>export</i> command.<br><br><b>3. Files/Directories:</b> Making specific files or directories accessible over a network (e.g., via NFS, Samba, or HTTP servers like Apache/Nginx) or by adjusting their permissions (<i>chmod</i>).<br><br><b>4. Container Ports:</b> In containerization technologies (like Docker, Podman), 'exposing' a port means declaring that an application inside the container listens on a specific port, which can then be mapped to a port on the host machine.<br><br><b>5. API Endpoints:</b> In software development, an application might 'expose' an API endpoint for external consumption, meaning it makes a URL accessible that provides specific functionality or data.


title: SEE ALSO
content:
export(1), iptables(8), ufw(8), firewalld(1), chmod(1), ssh(1), netstat(8), ss(8), systemctl(1), docker(1)


title: SYNOPSIS
content:
<b>expr</b> <i>EXPRESSION</i><br><b>expr</b> <i>OPTION</i><br><br><i>Where EXPRESSION is a sequence of arguments representing operands and operators. Operators and operands must be separated by whitespace. Shell metacharacters must be escaped or quoted.</i>


title: DESCRIPTION
content:
<b>expr</b> is a command-line utility in Unix-like operating systems used to evaluate expressions and print the result to standard output. It can perform arithmetic operations (addition, subtraction, multiplication, division, modulo), relational comparisons, logical operations, and various string manipulations (like pattern matching, extracting substrings, and finding string length).<br><br>Unlike shell's built-in arithmetic expansions (e.g., `((...))` in Bash), <b>expr</b> is a standalone utility, making it useful in older shells or for more complex string operations that might be cumbersome with shell globbing. Each operator and operand must be a separate argument to the command. Special shell characters like `*`, `(`, `)` must be escaped or quoted to prevent the shell from interpreting them.<br><br>The command's exit status provides information about the result: 0 if the expression evaluates to a non-zero or non-null value, 1 if it evaluates to zero or null, and 2 if there's an error in the expression.


title: CAVEATS
content:
<i><br><b>Shell Metacharacters:</b> Many operators (e.g., `*`, `(`, `)`, `>`, `<`, `|`, `&`) are shell metacharacters and must be escaped (`\*`) or quoted (`'*'`) to prevent the shell from interpreting them before <b>expr</b> sees them.<br><br><b>Argument Separation:</b> Every operand and operator must be a separate argument. For example, `expr 1+2` is incorrect; it should be `expr 1 + 2`.<br><br><b>Integer Arithmetic:</b> By default, <b>expr</b> primarily performs integer arithmetic. Division (`/`) truncates to an integer.<br><br><b>Performance:</b> For simple integer arithmetic, shell built-in expansions (like `((...))` or `$((...))` in Bash) are generally more efficient and convenient than invoking an external command like <b>expr</b>.</i>


title: OPERATORS
content:
<b>expr</b> supports various types of operators, evaluated from left to right, with specific precedence rules. Parentheses `(` `)` can be used to override precedence, but they must be escaped or quoted.<br><br><i><b>Arithmetic Operators:</b></i><br>`+` (addition), `-` (subtraction), `*` (multiplication), `/` (division), `%` (remainder/modulo).<br><br><i><b>Relational Operators:</b></i><br>`=` (equal), `!=` (not equal), `<` (less than), `<=` (less than or equal), `>` (greater than), `>=` (greater than or equal). These return 1 if true, 0 if false.<br><br><i><b>Logical Operators:</b></i><br>`|` (OR): Returns the first non-null/non-zero argument, else the second. `&` (AND): Returns the first argument if neither is null/zero, else 0. (These often need escaping or quoting)<br><br><i><b>String Operators:</b></i><br>`<i>EXPRESSION</i> : <i>PATTERN</i>` (match): Matches EXPRESSION against PATTERN (a regular expression). Returns the length of the matched string, or 0 if no match. If part of the pattern is enclosed in `\( ... \)`, it returns the substring matched by that part.<br>`length <i>STRING</i>`: Returns the length of STRING.<br>`substr <i>STRING</i> <i>POSITION</i> <i>LENGTH</i>`: Returns a substring of STRING starting at POSITION for LENGTH characters.<br>`index <i>STRING</i> <i>CHARSET</i>`: Returns the first position in STRING where any character from CHARSET is found, or 0 if not found.<br>`match <i>STRING</i> <i>PATTERN</i>`: Equivalent to the `STRING : PATTERN` operator.


title: EXIT STATUS
content:
<b>expr</b> uses its exit status to indicate the outcome of the evaluation:<br><i>0</i>: The expression evaluated to a non-zero, non-null string.<br><i>1</i>: The expression evaluated to zero or a null string.<br><i>2</i>: An invalid expression was given, or an error occurred.


title: HISTORY
content:
<b>expr</b> has been a fundamental utility in Unix-like operating systems since its early days, predating many of the advanced arithmetic and string manipulation capabilities now built into modern shells like Bash or Zsh. Its existence reflects a time when shells were simpler and external commands were necessary for even basic computations. While modern shells offer more integrated ways to perform calculations, <b>expr</b> remains valuable for writing portable shell scripts that need to work across a wide range of Unix environments, especially when dealing with certain types of string pattern matching.


title: SYNOPSIS
content:
<br><b><code>exrex</code></b> [<i>options</i>] <i>REGEX</i><br><b><code>exrex</code></b> [<i>options</i>] <b><code>-h</code></b> | <b><code>--help</code></b><br><b><code>exrex</code></b> [<i>options</i>] <b><code>-v</code></b> | <b><code>--version</code></b>


title: PARAMETERS
content:
<b><i>REGEX</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The regular expression string from which to generate strings.<br><br><b><b><code>-a</code></b>, <b><code>--all</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate and print all possible unique strings matching the <i>REGEX</i>. This can produce a very large output for complex expressions.<br><br><b><b><code>-r</code></b>, <b><code>--random</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate and print a single random string matching the <i>REGEX</i>. This is the default behavior if no other output mode (like <b><code>--all</code></b> or <b><code>--number</code></b>) is specified.<br><br><b><b><code>-n</code></b> <i>N</i>, <b><code>--number</code></b> <i>N</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate and print <i>N</i> random strings matching the <i>REGEX</i>. This option implicitly enables random generation mode.<br><br><b><b><code>-m</code></b> <i>M</i>, <b><code>--max-repeat</code></b> <i>M</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of repetitions for quantifiers like <b><code>*</code></b>, <b><code>+</code></b>, and <b><code>{}</code></b>. The default value is 5. This limits the complexity and length of generated strings.<br><br><b><b><code>-l</code></b> <i>L</i>, <b><code>--limit</code></b> <i>L</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of generated strings. This is particularly useful when using <b><code>--all</code></b> to prevent excessive output and resource consumption.<br><br><b><b><code>-s</code></b> <i>SEED</i>, <b><code>--seed</code></b> <i>SEED</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the seed for the random number generator, ensuring reproducible results when generating random strings.<br><br><b><b><code>--encoding</code></b> <i>ENCODING</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the character encoding for input and output, such as 'utf8' (default) or 'latin1'.<br><br><b><b><code>-h</code></b>, <b><code>--help</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the help message and exit.<br><br><b><b><code>-v</code></b>, <b><code>--version</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the program's version number and exit.<br><br>


title: DESCRIPTION
content:
<b><code>exrex</code></b> is a powerful command-line utility and Python library designed to generate strings that match a given regular expression. It can produce either all possible unique strings defined by the regex or a specified number of random strings. This tool is exceptionally useful for various tasks such as testing regular expressions, generating sample data for development or security analysis (e.g., fuzzing), and exploring the permutations a regex can define. It simplifies the process of creating valid input based on a pattern, saving significant manual effort and enabling rapid prototyping. The utility supports standard Python <i>re</i> module syntax, making it versatile for a wide range of common regex patterns, from simple character sets to complex group structures. Its primary aim is to automate the creation of data conforming to a defined pattern, proving indispensable in scenarios requiring patterned input validation or generation.


title: CAVEATS
content:
Using <b><code>exrex</code></b> with the <b><code>--all</code></b> option on complex or broad regular expressions (e.g., those with many alternatives or unbounded repetitions) can lead to extremely long execution times and consume significant system memory, potentially exhausting resources. The <b><code>--max-repeat</code></b> option limits the depth of repetition, which can prevent the generation of all truly possible strings if the regex implies more repetitions than the set limit. As a Python-based utility, it requires a Python environment and installation via <i>pip</i>, and it adheres to Python's regular expression syntax.


title: INSTALLATION
content:
<b><code>exrex</code></b> is not a built-in Linux command. It needs to be installed using Python's package installer, <i>pip</i>. To install it, run: <br> <b><code>pip install exrex</code></b><br>Ensure you have Python and <i>pip</i> installed on your system.


title: REGEX SYNTAX COMPLIANCE
content:
The regular expressions used with <b><code>exrex</code></b> must conform to Python's standard <i>re</i> module syntax. This includes support for most common regex features like character classes, quantifiers, groups, and anchors, but does not include advanced features specific to other regex engines (e.g., PCRE-specific lookarounds not supported by Python's <i>re</i>).


title: HISTORY
content:
<b><code>exrex</code></b> emerged as a Python package designed to address the need for generating strings based on regular expressions, a capability not natively present in standard command-line tools. Its development as an open-source project provided a simple and effective command-line interface for Python's robust <i>re</i> module, making regex-based string generation accessible to a broader user base for various testing and data generation purposes.


title: PARAMETERS
content:
<b><i>N/A</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>No standard parameters or options are defined for a non-existent command.</i><br><br>


title: DESCRIPTION
content:
The command 'extrace' does not appear to be a standard, widely recognized, or documented utility in typical Linux distributions. While the term 'extrace' (or 'eXtrace', 'Extended Trace') might refer to specific tracing functionalities within specialized debugging tools, embedded systems development environments, or proprietary software (e.g., related to ARM debuggers, JTAG interfaces, or custom tracing frameworks), it is <i>not</i> a general-purpose command-line utility available via standard package managers or included in the core GNU/Linux toolset akin to <b>strace</b> or <b>ltrace</b>.<br><br>Therefore, a standard synopsis, specific parameters, or general usage history for a command named 'extrace' that operates as a standalone Linux utility cannot be provided. If you intended to inquire about another tracing tool, please verify the command name.


title: CAVEATS
content:
<b>extrace</b> is not a standard Linux command. Attempts to run it on a typical system will likely result in a 'command not found' error. If you are looking for system call tracing, consider <b>strace</b>. For library call tracing, consider <b>ltrace</b>. For advanced performance analysis and kernel-level tracing, explore <b>perf</b> or <b>BPF</b> tools.


title: POSSIBLE MISINTERPRETATION OR NICHE CONTEXT
content:
It is possible that 'extrace' refers to a specific, non-mainstream tool, a custom script, or a feature within a very niche software ecosystem (e.g., embedded development tools, specific hardware debuggers). Without further context, it is impossible to analyze such a command. Users seeking tracing capabilities on Linux are strongly advised to refer to the widely available and well-documented tools like <b>strace</b>, <b>ltrace</b>, and the comprehensive <b>perf</b> suite, along with kernel tracing frameworks such as <b>ftrace</b> and <b>BPF/bcc</b> tools.


title: HISTORY
content:
Given that 'extrace' is not a standard, general-purpose Linux command, there is no public development or usage history for a unified utility by this specific name. The concept of 'extended trace' might be implemented in various proprietary or specialized tools, but not as a singular, widely adopted command-line utility in the Linux ecosystem.


title: SYNOPSIS
content:
<b>extrepo</b> <I>command</I> [ <I>options</I> ] [ <I>arguments</I> ]<br><br>Common commands include:<br><b>extrepo add</b> <I>name</I> [ <I>url</I> ] [ <I>components...</I> ]<br><b>extrepo remove</b> <I>name</I><br><b>extrepo list</b><br><b>extrepo enable</b> <I>name</I><br><b>extrepo disable</b> <I>name</I><br><b>extrepo refresh</b><br><b>extrepo update</b><br><b>extrepo version</b>


title: PARAMETERS
content:
<b><b>add</b> <I>name</I> [ <I>url</I> ] [ <I>components...</I> ]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Adds a new external repository definition. It requires a unique <I>name</I>, an optional <I>url</I> (if not inferred), and a list of <I>components</I> (e.g., `main`, `contrib`).</i><br><br><b><b>remove</b> <I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Removes an existing external repository definition.</i><br><br><b><b>list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Lists all configured external repositories, indicating their status (enabled/disabled).</i><br><br><b><b>enable</b> <I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enables a previously disabled repository, making it active for APT.</i><br><br><b><b>disable</b> <I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables an active repository, preventing APT from using it without removing its configuration.</i><br><br><b><b>refresh</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Refreshes <i>extrepo</i>'s internal cache of repository definitions.</i><br><br><b><b>update</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Performs an APT update (`apt update`) after making changes to repositories, ensuring APT's package lists are current.</i><br><br><b><b>version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the installed version of <i>extrepo</i>.</i><br><br><b><b>--no-check-gpg</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Applicable to `add` command) Skips the GPG signature verification during repository addition. Use with extreme caution as it compromises security.</i><br><br><b><b>--arch</b> <I>architectures</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Applicable to `add` command) Specifies a comma-separated list of architectures (e.g., 'amd64,i386') for which the repository should provide packages.</i><br><br><b><b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Applicable to `remove` command) Forces the removal of a repository, bypassing certain warnings or interactive prompts.</i><br><br>


title: DESCRIPTION
content:
<i>extrepo</i> is a powerful command-line utility designed to simplify the management of external software repositories on Debian-based Linux distributions. It provides a structured and declarative way to add, remove, enable, and disable third-party APT sources, moving beyond manual modifications of `sources.list` files. A key feature is its ability to handle associated GPG keys, either by automatically importing them or by utilizing the `signed-by` mechanism, which enhances security and trust by verifying package signatures. <i>extrepo</i> stores repository definitions in the `/etc/extrepo.d/` directory, using the `deb822` format, and manages their presence in `/etc/apt/sources.list.d/` via symlinks. This approach helps maintain a cleaner and more organized system, making it easier to track and update external software. It's particularly useful for developers and users who frequently rely on software not available in the main distribution archives, providing a safer and more maintainable way to integrate such packages. <i>extrepo</i> automates the necessary steps, including fetching GPG keys and updating APT's cache, streamlining the process of adding new software sources. <i>extrepo</i> is part of the `extrepo` package, ensuring it integrates well with the system's package management.


title: CAVEATS
content:
<b>Root privileges</b> are required to use <i>extrepo</i> effectively, as it modifies system-wide APT configuration files. Adding <b>untrusted or poorly maintained repositories</b> can introduce significant <b>security risks</b> and system instability, potentially leading to package conflicts or system breakage. Always verify the trustworthiness of a source before adding it. GPG key issues, while often handled by <i>extrepo</i>, can still occur if keys are unavailable or revoked, preventing package installation or updates. Compatibility across different Debian/Ubuntu releases for external repositories is not guaranteed and can sometimes lead to issues.


title: <B>DEB822 FORMAT AND CONFIGURATION LOCATION</B>
content:
<i><i>extrepo</i> stores its repository definitions in `/etc/extrepo.d/` using the `deb822` format, a modern and more expressive format for APT sources. These definitions are then linked into `/etc/apt/sources.list.d/` via symlinks, making them active for APT. This structured approach helps in maintaining a clean and organized overview of external sources, distinguishing them from manually added entries.</i>


title: <B>COMPARISON WITH ADD-APT-REPOSITORY</B>
content:
<i>While both <i>extrepo</i> and <i>add-apt-repository</i> (from the `software-properties-common` package) facilitate adding external repositories, they serve slightly different niches. `add-apt-repository` is predominantly focused on managing Launchpad PPAs (Personal Package Archives) and automatically handles their GPG keys. <i>extrepo</i> offers a more general-purpose solution for adding any APT repository, including non-PPA sources, and provides explicit control over components and architectures. It emphasizes a declarative configuration and robust GPG key handling, often using the `signed-by` option for enhanced security.</i>


title: HISTORY
content:
<i>extrepo</i> emerged as part of the ongoing evolution of APT and repository management in Debian and Ubuntu. It addresses the need for a more declarative, structured, and secure way to handle external repositories beyond simple manual edits or the PPA-centric `add-apt-repository`. Its development gained traction with the adoption of the `deb822` format for `sources.list` entries, which provides more flexibility and better metadata handling. By managing repository definitions in `/etc/extrepo.d/` and using symlinks to `sources.list.d/`, <i>extrepo</i> offers a cleaner alternative, especially when managing multiple external sources not necessarily hosted on Launchpad PPAs. It aims to streamline GPG key management by either automatically fetching them or supporting the `signed-by` directive, aligning with modern APT security practices and making it easier to ensure package authenticity.


title: SYNOPSIS
content:
<i>extundelete</i> [<i>options</i>] <<i>device</i>> [<i>-- <path_to_undelete></i>]<br><br>Common usage examples:<br><i>extundelete --restore-all <<i>/dev/sdb1</i>></i><br><i>extundelete --restore-file <<i>/path/to/deleted/file.txt</i>> <<i>/dev/sdb1</i>></i><br><i>extundelete --restore-directory <<i>/path/to/deleted/dir/</i>> <<i>/dev/sdb1</i>></i><br><i>extundelete --output-dir <<i>/tmp/recovered</i>> --restore-all <<i>/dev/sdb1</i>></i>


title: PARAMETERS
content:
<b>--restore-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to restore all possible deleted files and directories found on the specified filesystem device.<br><br><b>--restore-file <<i>path</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restores a specific deleted file identified by its original path relative to the root of the filesystem.<br><br><b>--restore-directory <<i>path</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restores a specific deleted directory and its contents, identified by its original path.<br><br><b>--output-dir <<i>directory</i>>, -o <<i>directory</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory where recovered files will be placed. Defaults to <i>RECOVERED_FILES/</i> in the current working directory.<br><br><b>--inode <<i>inode_number</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restores the file or directory associated with the specified inode number.<br><br><b>-j <<i>journal_device</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an external journal device to use for recovery, if the journal is not on the same device as the filesystem.<br><br><b>-b <<i>block_size</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the use of a specific block size for the filesystem, overriding auto-detection.<br><br><b>-d <<i>block_group</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scans only a specific block group for deleted files, which can speed up the process.<br><br><b>-c <<i>config_file</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a specified configuration file for advanced options.<br><br><b>--log <<i>logfile</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects verbose log output to the specified file.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables additional debug messages for troubleshooting.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the program version information.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with command usage and options.<br><br>


title: DESCRIPTION
content:
<i>extundelete</i> is a powerful open-source utility designed for recovering deleted files from <b>ext3</b> and <b>ext4</b> filesystems. When a file is "deleted" on Linux, its inode is marked as unallocated, and the data blocks it pointed to are freed. However, the data itself often remains on the disk until it is overwritten by new data. <i>extundelete</i> works by scanning the filesystem's journal (if available and enabled) for entries that still point to the deleted file's inode and data blocks. It can also inspect the filesystem's inode tables for unallocated inodes that might still contain valid information about deleted files. This tool is particularly useful for accidental deletions, providing a chance to restore lost data, especially if the filesystem was unmounted quickly after the deletion. It reconstructs the directory structure and file contents into a specified output directory, typically named <i>RECOVERED_FILES</i>. Success depends heavily on how much disk activity has occurred since deletion.


title: CAVEATS
content:
<b>1. Time Sensitivity:</b> The success rate of <i>extundelete</i> decreases drastically the longer the time between deletion and recovery attempt. Any new writes to the disk can overwrite the deleted file's data blocks, making recovery impossible.<br><br><b>2. Filesystem State:</b> For best results, the filesystem from which you are trying to recover files should be <b>unmounted immediately</b> after deletion. If unmounting is not an option (e.g., it's the root filesystem), mount it <b>read-only</b>. Continuing to write to the filesystem can lead to permanent data loss.<br><br><b>3. Partial Recovery:</b> It's common for <i>extundelete</i> to recover files partially or with corruption, especially if the file was fragmented or its blocks have been partially overwritten.<br><br><b>4. Inode Re-use:</b> If the deleted file's inode has been re-used by a new file, <i>extundelete</i> may not be able to identify or recover the original file.<br><br><b>5. Ext2/Other Filesystems:</b> <i>extundelete</i> is specifically designed for <b>ext3</b> and <b>ext4</b> filesystems and will not work on other filesystem types like <b>ext2</b>, <b>XFS</b>, <b>Btrfs</b>, or <b>NTFS</b>.<br><br><b>6. Device Path:</b> Always specify the raw device path (e.g., <i>/dev/sdb1</i>), not a mounted directory.


title: <B>BEST PRACTICES FOR RECOVERY</B>
content:
<br><b>1. Act Quickly:</b> The moment you realize a file is deleted, stop all activity on the affected filesystem.<br><b>2. Unmount or Mount Read-Only:</b> The best practice is to unmount the filesystem (e.g., <i>sudo umount /dev/sdb1</i>). If it's the root filesystem or cannot be unmounted, mount it read-only (e.g., <i>sudo mount -o remount,ro /dev/sdb1 /mnt/point</i>). This prevents any new data from overwriting the deleted files.<br><b>3. Recover to a Different Disk:</b> Always recover files to a different physical disk or partition than the one from which you are recovering. Recovering to the same disk can overwrite the very data you are trying to restore.<br><b>4. Identify the Device:</b> Ensure you know the correct device path (e.g., <i>/dev/sda1</i>, <i>/dev/sdb2</i>) of the partition where the file was deleted. Using the wrong device can lead to data loss on another partition.<br><b>5. Backup First (If Possible):</b> If the data is critically important and the filesystem is stable, consider creating a disk image (e.g., using <i>dd</i>) before attempting recovery, as a safety measure.


title: HISTORY
content:
<i>extundelete</i> emerged as a dedicated open-source solution to address the common problem of accidental file deletion on Linux systems utilizing the widely adopted <b>ext3</b> and <b>ext4</b> filesystems. Unlike some general-purpose data recovery tools, <i>extundelete</i> was specifically engineered to leverage the journaling capabilities of these filesystems, which record changes to the metadata. Its development filled a niche for a command-line utility focused solely on this task, providing a lighter and more direct approach compared to full forensic suites. It has been maintained by its community and often included in various Linux distribution repositories and data recovery live environments, becoming a go-to tool for quick recovery attempts by system administrators and users.


title: SEE ALSO
content:
debugfs(8): <br>A filesystem debugger for the ext2/ext3/ext4 filesystems, which can sometimes be used for manual inode recovery., testdisk(8): <br>A powerful free data recovery software primarily designed to recover lost partitions and/or make non-booting disks bootable again, but also offers file undeletion capabilities., photorec(8): <br>A companion program to TestDisk, PhotoRec is file data recovery software designed to recover lost files including video, documents and archives from Hard Disks, CD-ROMs, and Digital Camera Memory. It recovers files by signature., e2fsck(8): <br>Used to check and repair ext2/ext3/ext4 filesystems. While not for undeletion, a healthy filesystem is a prerequisite for recovery., foremost(1): <br>Another console-based tool for carving files based on headers, footers, and internal data structures, often used for forensic data recovery.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help message and exits.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the program version and exits.<br><br><b><b>-L</b>, <b>--list-genres</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all supported ID3 genre names and their IDs.<br><br><b><b>-a</b> <i>ARTIST</i>, <b>--artist</b> <i>ARTIST</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the artist tag field.<br><br><b><b>-t</b> <i>TITLE</i>, <b>--title</b> <i>TITLE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the title tag field.<br><br><b><b>-A</b> <i>ALBUM</i>, <b>--album</b> <i>ALBUM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the album tag field.<br><br><b><b>-G</b> <i>GENRE</i>, <b>--genre</b> <i>GENRE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the genre tag field using a name or ID.<br><br><b><b>-Y</b> <i>YEAR</i>, <b>--year</b> <i>YEAR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the year tag field.<br><br><b><b>-n</b> <i>NUM</i>, <b>--track-num</b> <i>NUM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the track number tag field.<br><br><b><b>--remove-all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes all ID3v1 and ID3v2 tags from the file.<br><br><b><b>--add-image</b> <i>FILE:TYPE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds an image (e.g., cover art) to the tag. TYPE can be front_cover, back_cover, etc.<br><br><b><b>--list-images</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all images embedded in the tag.<br><br><b><b>--remove-image</b> <i>TYPE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes images of a specific type (e.g., front_cover).<br><br><b><b>--set-version</b> <i>VERSION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the ID3 tag version (e.g., 2.3, 2.4). Creates new tags if none exist.<br><br><b><b>--force-update</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces file update even if no changes are detected by the tool.<br><br><b><b>--encoding</b> <i>ENCODING</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the character encoding for text frames (e.g., utf-8, iso-8859-1).<br><br><b><b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses informational and warning output.<br><br>


title: DESCRIPTION
content:
<i>eyeD3</i> is a command-line tool written in Python for viewing and editing ID3 tags in MP3 audio files. It supports various ID3 tag versions including ID3v1, ID3v2.3, and ID3v2.4, making it a versatile utility for managing audio metadata. Users can effortlessly add, modify, or remove information such as artist, title, album, genre, year, and track number. Beyond basic text fields, <i>eyeD3</i> also allows for the manipulation of more complex metadata like album artwork (cover art), lyrics, and comments. Its robust features make it an indispensable tool for organizing large music collections, ensuring consistency and accuracy of metadata across all MP3s. It also provides options for listing supported genres, displaying detailed file information, and performing batch operations.


title: CAVEATS
content:
<b><i>eyeD3</i></b> requires Python to be installed on the system to run. While powerful, incorrect usage or interruptions during write operations can potentially corrupt MP3 files, especially if not handled gracefully by the filesystem; always consider backing up important files before making significant tag changes.<br>Support for ID3v2.4 is robust, but some older or less compliant media players might not fully interpret all features of this version, potentially leading to inconsistent display of metadata or embedded artwork.


title: BATCH PROCESSING
content:
<b><i>eyeD3</i></b> supports processing multiple files at once by passing multiple filenames as arguments (e.g., <code>eyed3 *mp3</code>). This allows for efficient batch updates to metadata across an entire music library, streamlining the organization process.


title: IMAGE SUPPORT
content:
One of <b><i>eyeD3</i></b>'s key features is its comprehensive support for embedding and extracting cover art and other images directly within the ID3 tags. It supports various image types (e.g., front cover, back cover, artist/performer picture) and can handle different image formats like JPEG and PNG.


title: HISTORY
content:
<b><i>eyeD3</i></b> is an open-source project written in Python, maintained on GitHub. It has been under active development for many years, evolving to support newer ID3 standards (like ID3v2.4) and addressing various metadata complexities. Its Pythonic nature makes it extensible and widely used within the Python ecosystem for audio processing tasks, standing as a testament to the versatility of command-line tools for multimedia management.


title: PARAMETERS
content:
<b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the program's version number and exits.<br><br><br><b><b>--track</b> <i>NUM[/TOTAL]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the track number and optionally the total tracks.<br><br><br><b><b>--artist</b> <i>TEXT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the artist name.<br><br><br><b><b>--album</b> <i>TEXT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the album title.<br><br><br><b><b>--title</b> <i>TEXT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the song title.<br><br><br><b><b>--genre</b> <i>NUM_OR_TEXT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the genre by ID number or name. Use <b>--list-genres</b> for a list.<br><br><br><b><b>--release-date</b> <i>YYYY-MM-DD</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the release date.<br><br><br><b><b>--comment</b> <i>TEXT[:DESCRIPTION[:LANG]]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds or modifies a comment. Optional description and language.<br><br><br><b><b>--remove-all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes all ID3v1 and ID3v2 tags from the file.<br><br><br><b><b>--set-text-frame</b> <i>ID:TEXT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a custom ID3v2 text frame (e.g., <i>TXXX:MyCustomFrame:Value</i>).<br><br><br><b><b>--add-image</b> <i>PATH[:TYPE[:DESCRIPTION]]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds an image (e.g., album art) to the tags. Type can be 'FRONT_COVER', 'BACK_COVER', etc.<br><br><br><b><b>--remove-image</b> <i>TYPE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes image(s) of a specific type (e.g., 'FRONT_COVER').<br><br><br><b><b>--rename</b> <i>PATTERN</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Renames files based on tag data. Use placeholders like <i>%A</i> (artist), <i>%t</i> (title), <i>%n</i> (track number).<br><br><br><b><b>--list-genres</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all supported ID3 genres and their corresponding numeric IDs.<br><br><br><b><b>--id3-version</b> <i>V</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the ID3 version to write (e.g., <i>1</i>, <i>2.3</i>, <i>2.4</i>).<br><br><br><b><b>--encoding</b> <i>ENC</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the text encoding for tag fields (e.g., <i>utf8</i>, <i>iso-8859-1</i>).<br><br><br><b><b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs operations without prompting for confirmation.<br><br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details during processing.<br><br><br><b><b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses most output messages.<br><br><br>


title: DESCRIPTION
content:
<i>eyed3</i> is a robust command-line utility and Python library designed for managing <b>ID3 tags</b> in audio files, primarily focusing on <b>MP3s</b> but also supporting <b>FLAC</b> and <b>Ogg Vorbis</b>. It empowers users to read, write, and modify a wide array of metadata fields, including <b>artist</b>, <b>album</b>, <b>title</b>, <b>genre</b>, <b>year</b>, <b>track number</b>, and <b>comments</b>. The tool also supports embedding <b>album artwork</b>. <i>eyed3</i> handles <b>ID3v1</b>, <b>ID3v2.3</b>, and <b>ID3v2.4</b> standards, offering comprehensive control over audio file metadata. Beyond basic tag editing, it can rename files based on tag information, list existing tags, and perform various file management tasks, making it an indispensable tool for music library organization.


title: CAVEATS
content:
While <i>eyed3</i> supports <b>ID3v2.4</b>, older audio players or software might not fully recognize or correctly display tags written in this version; <b>ID3v2.3</b> is often more widely compatible. Renaming operations can be destructive if not used carefully, especially on a large number of files. It's always advisable to back up your files before performing bulk renaming or tag removal.<br>


title: SCRIPTING AND AUTOMATION
content:
Due to its powerful command-line interface, <i>eyed3</i> is exceptionally well-suited for scripting and integrating into automated workflows. It can be used for batch processing entire music libraries, standardizing tag information, and organizing files systematically.<br>


title: CROSS-PLATFORM COMPATIBILITY
content:
Being written in Python, <i>eyed3</i> is inherently cross-platform, functioning seamlessly across <b>Linux</b>, <b>macOS</b>, and <b>Windows</b> environments, ensuring consistent behavior regardless of the operating system.<br>


title: HISTORY
content:
<i>eyed3</i> is a Python-based utility that has evolved to provide a robust and versatile solution for managing <b>ID3 tags</b>. Its development has focused on supporting various ID3 versions (v1, v2.3, v2.4) and extending its capabilities beyond just MP3s to include <b>FLAC</b> and <b>Ogg Vorbis</b>. As a widely adopted command-line tool, it's frequently used in Linux environments for scripting, automating music library management, and performing precise metadata modifications.


title: SYNOPSIS
content:
<i><b>yuvtoppm</b></i> [-raw] [-frames=<I>N</I>] [-nframes] [-verbose] [-width=<I>W</I>] [-height=<I>H</I>] [<I>yuvfile</I>]


title: PARAMETERS
content:
<b>-raw</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assumes the input is a raw YUV stream without any header information. This is typically the default behavior and ensures the command interprets the data directly.<br><br><b>-frames=<I>N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Converts only the first <I>N</I> frames from the input YUV stream. If this option is omitted, <b>yuvtoppm</b> attempts to convert all available frames.<br><br><b>-nframes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instead of performing a conversion, this option causes the command to print the total number of frames found in the input YUV file to standard output and then exit, useful for inspecting file metadata.<br><br><b>-verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the conversion process, such as frame numbers processed, to standard error (stderr).<br><br><b>-width=<I>W</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the width of the input YUV image in pixels. This option is mandatory if the raw YUV stream does not contain embedded resolution information, as the command needs to know how to interpret the pixel data correctly.<br><br><b>-height=<I>H</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the height of the input YUV image in pixels. Similar to the width, this option is crucial and often mandatory for raw YUV streams lacking intrinsic metadata about image dimensions.<br><br><b><I>yuvfile</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the input YUV file. If this argument is not specified, <b>yuvtoppm</b> reads the YUV data from standard input (stdin), allowing it to be part of a pipeline.<br><br>


title: DESCRIPTION
content:
The command 'eyuvtoppm' is not a standard Linux command. It is highly probable that this is a typographical error and the intended command is <b>yuvtoppm</b>, which is part of the Netpbm suite of graphics utilities.<br><br><b>yuvtoppm</b> reads a raw YUV (Y'CbCr) image stream from standard input or a specified file and converts it into a Portable Pixmap (PPM) image file. YUV is a color encoding system commonly used in video processing and compression, separating luma (brightness) from chrominance (color) components. PPM is a simple, full-color raster image format. This tool is crucial for processing raw video data, enabling users to convert individual frames or sequences from a YUV stream into a more universally viewable and editable image format like PPM. It is particularly useful for debugging video pipelines, extracting specific frames from raw video captures, or integrating raw video data into other image processing workflows.


title: CAVEATS
content:
The command 'eyuvtoppm' is not a standard Linux utility and is most likely a typographical error. The analysis provided above pertains to <b>yuvtoppm</b>, which is part of the Netpbm package. To use <b>yuvtoppm</b>, ensure that the Netpbm suite is installed on your system. For raw YUV streams, providing correct <b>-width</b> and <b>-height</b> parameters is critical for a successful and accurate conversion, as the command cannot automatically deduce image dimensions without them.


title: NETPBM SUITE INTEGRATION
content:
<b>yuvtoppm</b> is one of hundreds of specialized tools within the Netpbm suite. These tools are designed to be composable, allowing users to pipe the output of one tool to the input of another. This modular design facilitates complex image processing workflows through simple command-line operations, adhering to the Unix philosophy of providing small, focused utilities that perform a single task well.


title: YUV COLOR SPACE EXPLAINED
content:
YUV is a color space encoding system where 'Y' represents the luma (brightness) component, and 'U' and 'V' represent the chrominance (color) components. This separation is advantageous for video compression and transmission because the human visual system is more sensitive to changes in brightness than color. <b>yuvtoppm</b> converts these separate components into the standard RGB (Red, Green, Blue) format, which is used by PPM and is directly compatible with most display devices and image editors.


title: HISTORY
content:
The <b>yuvtoppm</b> command is a fundamental component of the Netpbm project, a comprehensive and long-standing toolkit for graphics manipulation. Netpbm evolved from the Pbmplus package, originally created by Jef Poskanzer in the late 1980s, with the goal of providing portable means for image format conversions. <b>yuvtoppm</b> was developed to specifically address the need to handle raw YUV video data, a common format in various video processing contexts, and seamlessly integrate it into the Netpbm ecosystem, which predominantly operates with PPM, PGM, and PBM image formats.


title: PARAMETERS
content:
<b>-l, --long</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a long listing format, showing detailed file information (permissions, user, group, size, date, etc.).<br><br><b>-a, --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not ignore entries starting with '.' (hidden files and directories).<br><br><b>-F, --classify</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Append an indicator to entries: '*' for executables, '/' for directories, '@' for symlinks, '|' for FIFOs, and '=' for sockets.<br><br><b>-T, --tree</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recurse into directories and display the contents as a hierarchical tree. Combine with -L for depth limit.<br><br><b>-G, --git</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show Git status for each file or directory (e.g., modified, new, untracked, ignored).<br><br><b>--icons</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display file type icons next to file names for better visual identification, requiring a Nerd Font enabled terminal.<br><br><b>--color=WHEN</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Control when to use color: 'always', 'auto' (default, uses color if terminal supports), or 'never'.<br><br><b>-s, --sort=WORD</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sort the output by a specified word, e.g., 'name', 'size', 'type', 'time', 'inode', 'extension'.<br><br><b>-S, --sort-size</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sort by file size, largest first. Equivalent to '--sort=size'.<br><br><b>-r, --reverse</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reverse the order of the sort, making smallest first for size or Z-A for name.<br><br><b>-i, --inode</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the inode number of each file or directory.<br><br><b>--extended</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show extended attributes and SELinux contexts (if present) alongside regular permissions.<br><br><b>--hyperlink</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display file paths as clickable hyperlinks in supported terminals (e.g., Kitty, iTerm2).<br><br><b>-g, --group-directories-first</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List directories before files, then sort by name within each group. This can be combined with other sorting options.<br><br>


title: DESCRIPTION
content:
<i>eza</i> is a contemporary command-line file lister, designed as a robust and visually enhanced alternative to the traditional <i>ls</i>. Written in Rust for speed and safety, it offers numerous improvements over its predecessor, including built-in Git status integration, display of file type icons, detailed file information (like inode, blocks, extended attributes), a recursive tree view, and various display formats (long, grid, across). It aims to provide a more intuitive and informative directory listing experience, leveraging color and formatting to highlight crucial details and streamline command-line navigation.<br><br>It's designed to be a faster, more user-friendly, and more powerful tool for browsing directories and files, making it a popular choice for developers and power users.


title: CAVEATS
content:
While <i>eza</i> is an excellent <i>ls</i> replacement, it may not be a 100% drop-in for all shell scripts or aliases that rely on very specific <i>ls</i> output parsing or obscure options. Users transitioning from <i>ls</i> should test existing scripts that process directory listings. It also needs to be explicitly installed as it's not part of the standard core Unix/Linux utilities.


title: CUSTOMIZATION WITH ENVIRONMENT VARIABLES
content:
<i>eza</i> primarily uses environment variables for extensive customization, such as controlling colors (e.g., <i>EZA_COLORS</i>) and icon sets (e.g., <i>EZA_ICONS</i>, <i>EZA_ICONS_AUTO</i>). This allows for highly personalized visual output without relying on traditional configuration files like <i>.ezarc</i>.


title: COMMON USAGE PATTERN
content:
Many users alias <i>ls</i> to <i>eza</i> or <i>eza -l</i> in their shell configuration (e.g., <i>alias ls='eza'</i> or <i>alias ll='eza -l'</i>) to seamlessly integrate it into their workflow and immediately benefit from its enhanced features, making it their default directory lister.


title: HISTORY
content:
<i>eza</i> originated as a fork of <i>exala</i> (which was itself a fork of <i>lsd</i>), a modern <i>ls</i> alternative written in Rust. The project was created to provide more active maintenance, resolve long-standing issues, and introduce new features beyond the scope of its predecessor. It has quickly gained popularity as a robust and feature-rich directory listing utility, maintaining a strong focus on performance and user experience and becoming a successor to earlier modern <i>ls</i> efforts.


title: SYNOPSIS
content:
<b>f2py</b> [<I>options</I>] <I>fortran_source_file</I>...<br><b>f2py</b> -h <I>signature_file</I> [<I>options</I>] <I>fortran_source_file</I>...<br><b>f2py</b> -c [<I>build_options</I>] <I>fortran_source_file</I>... [-m <I>module_name</I>]


title: PARAMETERS
content:
<b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compile the Fortran source files into a Python extension module. This is the most common usage for building binary modules.<br><br><b>-m <I>module_name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the resulting Python module (e.g., -m <I>mymodule</I> creates <I>mymodule.so</I> or <I>mymodule.pyd</I>).<br><br><b>-h <I>signature_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generate a signature file (a <I>.pyf</I> file) that describes the Fortran interface to Python, instead of compiling. This file can be manually edited.<br><br><b>--fcompiler=<I>compiler</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the Fortran compiler to use (e.g., gfortran, intel, or path to executable).<br><br><b>--opt='<I>options</I>'</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pass additional optimization flags or compiler-specific options to the Fortran compiler during compilation.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print detailed information and debug messages about the compilation process, helping troubleshoot issues.<br><br>


title: DESCRIPTION
content:
<b>f2py</b> (Fortran to Python Interface Generator) is a powerful command-line tool that facilitates the integration of Fortran code into Python programs. It parses Fortran source files (supporting Fortran 77, 90, and 95), automatically generating a Python extension module that allows Python code to call Fortran subroutines and functions directly. <b>f2py</b> handles the intricate details of argument passing, automatic data type conversion (e.g., Fortran arrays to NumPy arrays), and memory management, significantly simplifying the process of creating Python bindings for high-performance Fortran numerical routines.<br>It is an integral part of the NumPy package, commonly used to leverage existing Fortran libraries or write performance-critical sections of code in Fortran while maintaining a Pythonic interface, accelerating scientific and engineering computations.


title: CAVEATS
content:
<b>f2py</b> relies on a functional Fortran compiler (such as gfortran or Intel Fortran) being installed and discoverable on the system path.<br>While powerful, integrating complex Fortran features like advanced pointers, highly customized derived types, or intricate global common blocks might require manual adjustments to the generated signature files.<br>Debugging can be challenging as it involves interaction between both Python and Fortran codebases. Additionally, the generated modules are heavily reliant on NumPy for efficient array manipulation and expect NumPy to be installed.


title: SIGNATURE FILE (<I>.PYF</I>)
content:
When invoked with the <b>-h</b> option, <b>f2py</b> generates a signature file (with a <I>.pyf</I> extension). This file describes the Fortran interface to Python, detailing subroutines, functions, arguments, and their types. It can be manually edited to fine-tune the interface, add callbacks, or handle specific Fortran constructs, providing granular control over the generated Python module before actual compilation.


title: HISTORY
content:
<b>f2py</b> was originally developed by Pearu Peterson and later became an integral part of the SciPy and NumPy ecosystem. Its development aimed to provide a robust and user-friendly mechanism for Python users to leverage existing high-performance Fortran libraries, which were prevalent in scientific and engineering computations. It has continuously evolved, supporting newer Fortran standards and adapting to changes in the Python scientific stack, making it a foundational tool for bridging these two powerful programming paradigms and facilitating high-performance computing in Python.


title: DESCRIPTION
content:
<i>f3fix</i> is a utility from the <i>f3</i> (Fight Flash Fraud) project, designed to adjust the apparent size of fraudulent flash drives. These drives report a larger capacity than they physically possess, leading to silent data corruption when data is written beyond the actual usable space. After utilities like <i>f3write</i> fill the drive with test data and <i>f3read</i> verifies the actual usable space, <i>f3fix</i> can be used to truncate the file system or partition table to reflect the true, usable capacity. This effectively makes the drive usable by preventing attempts to write data to non-existent sectors. It does not physically repair bad sectors or increase capacity; it only makes the operating system see the correct, smaller, usable size, thereby mitigating data loss.


title: CAVEATS
content:
<b>Data Loss</b>: Running <i>f3fix</i> modifies the partition table or file system metadata. Any data residing outside the *true* capacity of the device will be irrevocably lost. It is crucial to back up any important data before running this command.<br><b>Irreversible Changes</b>: The modifications made by <i>f3fix</i> are generally irreversible without manually re-partitioning and re-formatting the drive, potentially back to its original (fake) reported size.<br><b>Requires Prior Testing</b>: <i>f3fix</i> should only be run after <i>f3write</i> and <i>f3read</i> have been used to accurately determine the actual usable capacity. It relies on the information gathered by <i>f3read</i>.<br><b>No Physical Repair</b>: This utility does not fix physical damage, bad sectors, or increase the drive's capacity. Its sole function is to adjust the reported size to match the true physical capacity.


title: HOW IT WORKS
content:
<i>f3fix</i> operates by identifying the last successfully written block, as determined by the <i>f3read</i> utility. It then modifies the partition table (e.g., MBR or GPT) or the file system's internal metadata (like the superblock for filesystems such as FAT32, ext4, etc.) to reflect this actual, smaller capacity. This process effectively 'shrinks' the drive's reported size to match its true physical limits, preventing the operating system from attempting to write data to non-existent sectors beyond the physical capacity.


title: HISTORY
content:
The <i>f3</i> (Fight Flash Fraud) project was initiated by Michel Machado to combat the widespread issue of fraudulent USB flash drives and SD cards sold with inflated reported capacities. <i>f3fix</i> is a core component of this suite, developed to offer a practical solution for users to repurpose these fake drives. By truncating the drive to its true usable size, it prevents silent data corruption that would otherwise occur. The project empowers users to identify and manage such deceptive storage devices, providing tools for both testing and remediation.


title: PARAMETERS
content:
<b>-p, --percent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display progress as a percentage.<br><br><b>-r, --read-only</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a read-only test. Safer for existing data but less effective for detecting fake capacity.<br><br><b>-e, --exit-if-corrupted</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exit immediately if any data corruption is detected during the probe.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a brief help message and exit.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, providing more details about the probing process.<br><br><b>-o, --output=<I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirect all standard output to the specified file.<br><br><b>-b, --block-size=<I>SIZE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the I/O block size (e.g., 512, 4K, 1M). Defaults to 1 MiB.<br><br><b>-s, --starting-offset=<I>OFFSET</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the offset (in bytes) from the beginning of the device where probing should start.<br><br><b>-l, --log-file=<I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Append probing log messages to the specified file.<br><br><b>-c, --count=<I>COUNT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limit the number of blocks to test. Useful for quick checks on large devices.<br><br><b>-B, --bad-blocks=<I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write a list of detected bad blocks to the specified file.<br><br><b>-f, --full-probe</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force <i>f3probe</i> to write and read beyond the first 16 MiB, providing a more thorough probe. It still attempts to be non-destructive.<br><br><b>-a, --auto-probe</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable auto-probing, which might skip some extensive checks for faster execution.<br><br>


title: DESCRIPTION
content:
<i>f3probe</i> is a command-line utility from the <I>f3</I> (Fight Flash Fraud) project designed to quickly and non-destructively determine the true storage capacity and integrity of flash drives (USB sticks, SD cards, etc.). Counterfeit flash drives often report a much larger capacity than they physically possess. <i>f3probe</i> works by writing small amounts of data and immediately reading them back, comparing the written and read content. It carefully stores and restores original data to ensure the device's content remains intact. This makes it a fast and safe method for an initial assessment, unlike the more thorough but destructive <I>f3write</I> and <I>f3read</I> commands which fill and verify the entire drive. It helps users identify fraudulent devices before significant data loss occurs.


title: CAVEATS
content:
Requires root privileges to access raw block devices (e.g., <I>/dev/sdX</I>).<br>While designed to be non-destructive, any interruption (e.g., power loss) or system crash during the process could potentially leave the device in an inconsistent state. Always back up critical data.<br>Probing can still take a significant amount of time for very large devices, although generally faster than <I>f3write</I>/<I>f3read</I>.<br>Primarily detects capacity fraud; other types of flash drive issues (e.g., slow speed, intermittent failures) might not be fully revealed.


title: NON-DESTRUCTIVE NATURE
content:
Unlike <I>f3write</I> which fills the entire device with test patterns (destroying existing data), <I>f3probe</I> writes a small amount of data, temporarily stores the original data from those locations, performs its test, and then restores the original data. This makes it suitable for testing drives with existing files.


title: TESTING APPROACH
content:
<I>f3probe</I> primarily works by testing specific regions of the flash drive, especially towards the end of the reported capacity, where fraudulent devices often fail to retain data. It reports the <i>actual</i> usable capacity found.


title: HISTORY
content:
<i>f3probe</i> is part of the <i>f3</i> (Fight Flash Fraud) project, initiated and developed by Michel Martens. The <i>f3</i> suite was created to combat the widespread issue of counterfeit flash storage devices. While earlier tools like <i>f3write</i> and <i>f3read</i> provided comprehensive (but destructive) testing, <i>f3probe</i> was introduced later to offer a quicker, non-destructive method for initial assessment, addressing the need for a safer way to verify devices without erasing existing data.


title: PARAMETERS
content:
<b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with usage information and then exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version information of <b>f3read</b> and then exits.<br><br><b><b>--output</b> <i>FILENAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects the standard output of the command to the specified <i>FILENAME</i> instead of displaying it on the console.<br><br><b><i>DIRECTORY</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the directory containing the files written by <b>f3write</b> that need to be verified. If this argument is omitted, <b>f3read</b> defaults to the current working directory.<br><br>


title: DESCRIPTION
content:
<b>f3read</b> (Fight Flash Fraud) is a command-line utility designed to verify the integrity of data previously written to flash drives and memory cards, typically by its companion tool, <b>f3write</b>. Its primary purpose is to detect counterfeit flash storage devices that falsely report a larger capacity than they physically possess. These fraudulent drives often exhibit data loss or corruption once their true, smaller capacity is exceeded.<br><br><b>f3read</b> operates by reading the test files created by <b>f3write</b> (which fills the device with known data patterns). It then compares the data read from the device against the expected patterns, identifying any discrepancies, corruptions, or misplaced blocks. The command provides a summary of read blocks, data errors, and the total time taken for the verification process, thereby confirming whether the device reliably stores data across its advertised capacity and helping users identify unreliable or fake storage media.


title: CAVEATS
content:
<ul><li><b>f3read</b> relies on files previously created by <b>f3write</b>. It cannot be used independently to generate test data or verify drives not prepared by <b>f3write</b>.</li><li>The verification process can be time-consuming, especially for high-capacity flash drives, as it involves reading all written data.</li><li>Ensure <b>f3write</b> has completed successfully before running <b>f3read</b>; an incomplete <b>f3write</b> operation will lead to incorrect or misleading <b>f3read</b> results.</li></ul>


title: TYPICAL USAGE WORKFLOW
content:
To effectively test a flash drive for its real capacity and integrity, a two-step process is typically followed:<br>1. Use <b>f3write</b> to completely fill the device with test data. For example: <b>f3write /media/your_usb_drive</b><br>2. After <b>f3write</b> has successfully completed, run <b>f3read</b> on the same directory to verify the data: <b>f3read /media/your_usb_drive</b><br>The output will indicate if any data corruption or discrepancies occurred, which are strong indicators of a potentially fake or faulty drive.


title: INTERPRETING RESULTS
content:
A truly reliable flash drive will result in a <b>f3read</b> output reporting zero data errors and zero misplaced blocks. If <b>f3read</b> reports any errors (e.g., 'data loss', 'misplaced blocks', or 'wrong data'), it signifies that the data written by <b>f3write</b> could not be read back correctly. This is a critical indicator of a problem with the flash drive's integrity or that its advertised capacity is fraudulent. Such errors are hallmarks of counterfeit devices that fail to store data reliably across their entire stated capacity.


title: HISTORY
content:
<b>f3read</b> is an integral part of the <b>f3</b> (Fight Flash Fraud) project, which emerged as a critical toolset to combat the pervasive issue of counterfeit USB flash drives and SD cards circulating in the market. These fraudulent devices are notorious for reporting inflated storage capacities while possessing significantly less physical memory, leading to data loss once their true limits are reached. The <b>f3</b> utilities, including <b>f3write</b> and <b>f3read</b>, were developed to empower users with a reliable method to test and verify the actual storage capacity and data integrity of their flash media. The project quickly gained recognition as a practical and essential solution for consumers and professionals alike, helping them identify and avoid deceptive storage products and ensure the authenticity of their purchased devices.


title: PARAMETERS
content:
<b>-a, --append</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Appends new files to existing ones on the target device. Use with caution to avoid unintended data modification.<br><br><b>-b <<i>bytes</i>>, --block-size=<<i>bytes</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the I/O block size in bytes. The default is 1M (1048576 bytes).<br><br><b>-f, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces writing, even if the device appears busy or contains data. <b>Use this option with extreme caution, as it can lead to data loss.</b><br><br><b>-g, --full-device</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes to the full raw device (e.g., <i>/dev/sdb</i>), not just a partition. The device must be unmounted for this option to work correctly.<br><br><b>-L, --low-memory</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optimizes <i>f3write</i>'s operation for systems with limited memory resources.<br><br><b>-s <<i>offset</i>>, --start-offset=<<i>offset</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the starting offset in bytes from the beginning of the device where writing should begin.<br><br><b>-S <<i>offset</i>>, --end-offset=<<i>offset</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the ending offset in bytes, indicating where writing should stop.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of the output, providing more detailed information about the writing process.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of <i>f3write</i> and exits.<br><br>


title: DESCRIPTION
content:
<i>f3write</i> (Fight Flash Fraud <i>write</i>) is a command-line utility designed to test the actual capacity and integrity of flash storage devices, such as USB drives, SD cards, and SSDs. It achieves this by filling the target device with known data patterns.<br><br>Part of the <i>f3</i> suite, <i>f3write</i> aims to detect counterfeit flash drives that report a larger capacity than they physically possess, often by looping the address space. By writing data to the entire usable space, it prepares the device for verification by <i>f3read</i>. This two-step process helps users identify if a drive is fake, has bad blocks, or is otherwise corrupted, ensuring that the advertised capacity is genuinely usable.


title: CAVEATS
content:
<b>Data Loss:</b> <i>f3write</i> will overwrite existing data on the target device. <b>It is crucial to back up any important data before running this command.</b><br><br><b>Unmounting:</b> For accurate and safe testing, especially when using the <i>-g</i> option to test the full device, the target device or partition should be unmounted. Writing to a mounted filesystem can lead to data corruption or an incomplete test.<br><br><b>Time Consuming:</b> Testing large capacity drives can take a significant amount of time, depending on the drive's size and write speed.<br><br><b>Permissions:</b> Writing to raw devices (e.g., <i>/dev/sdb</i>) typically requires root privileges or appropriate user permissions.


title: USAGE WORKFLOW
content:
The typical workflow for testing a flash drive involves two main steps: first, writing data with <i>f3write</i>, and then verifying that data with <i>f3read</i>. For example:<br>1. <b>Write data:</b> <code>sudo f3write /dev/sdb1</code> (or <code>sudo f3write -g /dev/sdb</code> for the whole device)<br>2. <b>Verify data:</b> <code>sudo f3read /dev/sdb1</code> (or <code>sudo f3read -g /dev/sdb</code>)<br>The output of <i>f3read</i> will indicate if any data was corrupted or if the drive has fake capacity, reporting the actual usable size.


title: TARGET SPECIFICATION
content:
You can specify either a raw device (e.g., <i>/dev/sdb</i>) or a mounted partition (e.g., <i>/mnt/usb</i>). When specifying a raw device, exercise extreme caution to ensure you select the correct device, as <i>f3write</i> will completely overwrite it. For the most comprehensive testing, especially for detecting fake capacity, it is recommended to test the full raw device after ensuring it is unmounted.


title: HISTORY
content:
The <i>f3</i> (Fight Flash Fraud) utilities, including <i>f3write</i>, were developed by Michel Machado. The project emerged in response to the pervasive problem of counterfeit USB flash drives and SD cards that falsely report larger capacities than they physically possess. The <i>f3</i> suite provides robust, open-source tools for users to reliably verify the authenticity and integrity of their flash storage devices, helping to combat this common fraud.


title: SYNOPSIS
content:
<b>fab</b> [<b>-H</b> <hosts>] [<b>-f</b> <fabfile>] [<b>-u</b> <user>] [<b>-p</b> <password>] [<b>-i</b> <key_filename>] [<b>--warn-only</b>] [<b>--abort-on-error</b>] [<b>--list</b>] [<i>task_name</i> [<i>:arg=value</i>...]]


title: PARAMETERS
content:
<b><b>-H</b> <i>HOSTS</i>, <b>--hosts</b>=<i>HOSTS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a comma-separated list of target host strings (e.g., 'user@host:port') on which to execute tasks. Overrides hosts defined in the <I>fabfile</I>.<br><br><b><b>-f</b> <i>FABFILE</i>, <b>--fabfile</b>=<i>FABFILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom Python <I>fabfile</I> to load instead of the default <I>fabfile.py</I> or <I>tasks.py</I>.<br><br><b><b>-u</b> <i>USER</i>, <b>--user</b>=<i>USER</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the username to use for SSH authentication when connecting to remote hosts.<br><br><b><b>-p</b> <i>PASSWORD</i>, <b>--password</b>=<i>PASSWORD</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the password for SSH authentication. This should be used with caution, as it exposes the password in the command history.<br><br><b><b>-i</b> <i>KEY_FILENAME</i>, <b>--identity</b>=<i>KEY_FILENAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to an SSH identity (private key) file for authentication.<br><br><b><b>-l</b>, <b>--list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays all available tasks (Python functions) defined within the loaded <I>fabfile</I>.<br><br><b><b>-R</b> <i>ROLES</i>, <b>--roles</b>=<i>ROLES</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes tasks only on hosts belonging to the specified comma-separated roles, as defined in the <I>fabfile</I>.<br><br><b><b>-W</b>, <b>--warn-only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents Fabric from aborting execution immediately if a remote command returns a non-zero exit code; instead, it prints a warning and continues.<br><br><b><b>--abort-on-error</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces Fabric to abort execution immediately if any remote command returns a non-zero exit code. This is often the default but can be specified for clarity.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the program's version number and exits.<br><br>


title: DESCRIPTION
content:
The <b>fabric</b> (often invoked as <b>fab</b>) command is a powerful <i>Python library and command-line tool</i> designed to automate the execution of shell commands remotely over SSH. It allows users to define "tasks" (Python functions) within a file, typically named <I>fabfile.py</I>, which can then be invoked from the command line to perform complex operations. These operations range from deploying applications and managing server configurations to orchestrating multi-server deployments.<br><br>Fabric abstracts away the complexities of direct SSH interactions, providing a high-level API for running commands, uploading and downloading files, and managing connection state. Its strength lies in its simplicity for scripting common administrative routines, making repetitive tasks efficient, reliable, and easily reproducible across multiple remote hosts. It is widely utilized for continuous deployment pipelines and general server automation due to its flexibility and ease of integration.


title: CAVEATS
content:
<b>Python 2 vs. Python 3 Compatibility:</b> Early versions of Fabric (<I>Fabric 1.x</I>) were built for Python 2, while modern versions (<I>Fabric 2.x</I> and later) are Python 3 only. The APIs are significantly different, meaning scripts written for one version are generally not compatible with the other.<br><br><b>Reliance on <I>fabfile.py</I>:</b> Fabric requires a Python script (<I>fabfile.py</I> or <I>tasks.py</I>) to define its operations, which might be an initial hurdle for users unfamiliar with Python or for very simple, one-off command executions.<br><br><b>Error Handling:</b> While Fabric provides options like <b>--warn-only</b>, careful consideration must be given to error handling within tasks to ensure robust automation, as default behavior on command failure can be abrupt.<br><br><b>Idempotency:</b> Fabric itself does not enforce idempotency (the property that applying an operation multiple times produces the same result as applying it once); it is up to the user to write idempotent tasks for reliable state management.


title: <I>FABFILE.PY</I>
content:
The core of <b>Fabric</b> operations lies within the <I>fabfile.py</I> (or <I>tasks.py</I>) file. This Python script defines functions that are treated as callable tasks by the <b>fab</b> command-line tool. Within these tasks, users specify target hosts, define roles, and write Python code that leverages Fabric's API to execute shell commands remotely, transfer files, manipulate directories, and manage various aspects of remote systems. It's where the logic for deployment steps, server configuration, and other automation routines is encapsulated.


title: HISTORY
content:
Developed by Jeff Forcier, <b>Fabric</b> gained significant popularity in the Python community during its <I>1.x</I> series, which was built on Python 2 and the low-level SSH library <I>Paramiko</I>. It became a de facto standard for automating application deployments and system administration tasks due to its simplicity and Pythonic interface.<br><br>With the transition to Python 3, a major rewrite was undertaken, leading to the <I>Fabric 2.x</I> series. This version modularized the project, separating core functionalities into <I>Paramiko</I> (for SSH communication), <I>Invoke</I> (for task running and command-line parsing), and <I>Fabric</I> itself providing the high-level deployment-oriented API on top. This modernization improved maintainability and allowed for better integration with other Python tools, maintaining its relevance in modern CI/CD pipelines and custom automation scripts.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display brief help information and exit.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the <i>facter</i> version and exit.<br><br><b><b>-j</b>, <b>--json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output facts in JSON format. This is often preferred for scripting.<br><br><b><b>-y</b>, <b>--yaml</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output facts in YAML format.<br><br><b><b>-p</b>, <b>--puppet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load Puppet's internal facts, making them available to <i>facter</i>.<br><br><b><b>-d</b>, <b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debug logging, showing more verbose output about fact resolution.<br><br><b><b>--trace</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable backtraces for errors, useful for debugging fact failures.<br><br><b><b>-e DIR</b>, <b>--external-dir DIR</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a directory to search for external facts.<br><br><b><b>-c DIR</b>, <b>--custom-dir DIR</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a directory to search for custom (Ruby) facts.<br><br><b><b>--list-facts</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all available fact names without resolving their values.<br><br><b><b>--no-custom-facts</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable the loading and resolution of custom facts.<br><br><b><b>--no-external-facts</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable the loading and resolution of external facts.<br><br><b><b>-t</b>, <b>--timing</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the time taken to resolve each fact, aiding performance analysis.<br><br><b><b>--config FILE</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a custom configuration file for <i>facter</i>.<br><br><b><b>--no-ruby</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable all Ruby-based features, including custom and external facts that rely on Ruby.<br><br><b><b>--strict</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable strict checking, causing <i>facter</i> to fail on certain warnings or errors.<br><br>


title: DESCRIPTION
content:
<i>facter</i> is a powerful, cross-platform system profiling tool developed by Puppet Inc.<br>It collects fundamental information, known as "facts," about a system's hardware, operating system, network interfaces, and configuration. These facts include details like the operating system type and version, CPU count, memory, IP addresses, hostname, kernel version, and more.<br>While primarily designed as a core component of the Puppet configuration management system, providing dynamic data for manifest compilation, <i>facter</i> can also be used as a standalone command-line utility. System administrators and developers leverage <i>facter</i> to quickly audit system configurations, gather inventory data, and script automated tasks based on system attributes. Its extensibility allows users to define custom and external facts, enabling the collection of highly specific or application-level data. The output can be presented in various formats, including plain text, JSON, and YAML, facilitating integration with other tools and scripts.


title: CAVEATS
content:
<b>Performance overhead</b>: On very large systems or during initial runs, <i>facter</i> can consume notable CPU and memory as it gathers extensive system data.<br><b>Sensitive data</b>: Some facts (e.g., IP addresses, MAC addresses) might be considered sensitive. Care should be taken when sharing <i>facter</i> output.<br><b>External dependencies</b>: Relies on various system commands and files to gather information, potentially failing if these are missing or permissions are incorrect.<br><b>Ruby dependency</b>: While modern <i>facter</i> versions (4.x+) are largely C++ based, custom and external facts written in Ruby still require a Ruby runtime.


title: FACT TYPES
content:
<i>facter</i> categorizes facts into three main types:<br><b>Core Facts</b>: Built-in facts provided by <i>facter</i> itself, covering common system attributes like OS, CPU, and memory.<br><b>External Facts</b>: Facts resolved from static files (e.g., JSON, YAML, text files) or executable scripts placed in specific directories. These are useful for static data or simple script-based data.<br><b>Custom Facts</b>: Facts written in Ruby, providing dynamic data collection logic for highly specific system attributes or application-level information. These offer the most flexibility.


title: FACT RESOLUTION ORDER
content:
<i>facter</i> loads facts in a specific order: <b>Core Facts</b>, then <b>External Facts</b>, and finally <b>Custom Facts</b>. If a fact with the same name is defined in multiple sources, the value from the last source processed will take precedence. For instance, a custom fact can override an external fact, and an external fact can override a core fact.


title: HISTORY
content:
<i>facter</i> was originally developed by Puppet Inc. as a crucial component of the Puppet configuration management system. It was initially written entirely in Ruby, serving as the default fact-gathering mechanism for Puppet agents. Over time, to improve performance and reduce dependencies, <i>facter</i> underwent significant architectural changes. With <i>facter 4.x</i> and later, a substantial portion of the core fact resolution logic was rewritten in C++, making it faster and more resource-efficient, especially on systems with a large number of facts or extensive custom/external fact directories. Its evolution reflects the need for robust and efficient system introspection in dynamic IT environments.


title: SYNOPSIS
content:
<b>factor</b> [<i>OPTION</i>]... [<i>NUMBER</i>]...<br>If no <i>NUMBER</i> is given, read numbers from standard input.


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


title: DESCRIPTION
content:
The <b>factor</b> command in Linux is a simple yet powerful utility used to compute the prime factors of specified positive integers. It takes one or more numbers as arguments and outputs their prime factorization. For each number, it lists the number itself, followed by all its prime factors, repeating factors as many times as they divide the original number. For instance, `factor 12` would output `12: 2 2 3`. If no numbers are provided on the command line, <b>factor</b> will read numbers from standard input, one per line, making it versatile for scripting or processing lists of numbers. The command is part of the GNU Core Utilities, making it a standard tool available on most Linux distributions. While efficient for numbers that are products of relatively small primes or numbers within its practical limits (typically up to 2^63 - 1 on 64-bit systems), it's important to note that factoring very large numbers (especially those with large prime factors) can be computationally intensive and time-consuming, even for this utility. It serves as an excellent tool for basic number theory tasks and is widely used for educational purposes or quick checks of number properties.


title: CAVEATS
content:
Factoring large numbers is a computationally intensive problem. While <b>factor</b> is optimized for common cases and numbers up to a typical 64-bit integer limit, it is not designed for cryptographic-grade factorization of extremely large numbers (e.g., hundreds of digits long). For such numbers, it might run indefinitely or fail to find factors within a reasonable timeframe. It primarily uses trial division and Pollard's rho algorithm for factorization.


title: EXAMPLES
content:
<b>1. Factor a single number:</b><br><code>factor 100</code><br><i>Output:</i> <code>100: 2 2 5 5</code><br><br><b>2. Factor multiple numbers:</b><br><code>factor 17 36 1000</code><br><i>Output:</i><br><code>17: 17</code><br><code>36: 2 2 3 3</code><br><code>1000: 2 2 2 5 5 5</code><br><br><b>3. Read numbers from standard input:</b><br><code>echo -e "1234567890\n987654321" | factor</code><br><i>Output:</i><br><code>1234567890: 2 3 5 7 11 13 37 101 9901</code><br><code>987654321: 3 3 17 379721</code>


title: INPUT FORMAT
content:
The command expects positive integers as input. If a negative number is provided, its absolute value will be factored. Non-integer inputs or inputs that exceed the system's maximum supported integer size (e.g., 2^63 - 1 on 64-bit systems) may result in errors or unexpected behavior.


title: HISTORY
content:
The <b>factor</b> command is a standard utility included in the GNU Core Utilities package, which provides fundamental command-line tools for Unix-like operating systems. Its purpose has remained consistent: to provide a straightforward way for users to find the prime factors of integers, an essential operation in number theory and basic mathematics. Its development focuses on robustness and accessibility as a core system utility.


title: PARAMETERS
content:
<b>--start-server <i>SAVE_FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts a dedicated multiplayer server using the specified save file. If the file doesn't exist, a new game is created.<br><br><b>--create <i>SAVE_FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new game save file using default or specified map generation settings.<br><br><b>--map-gen-settings <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a JSON file containing advanced map generation settings for new games.<br><br><b>--mod-directory <i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overrides the default directory where Factorio looks for mods. Useful for server-specific mod sets.<br><br><b>--benchmark</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the game in benchmark mode, measuring performance for a specified number of ticks or until manually stopped.<br><br><b>--benchmark-ticks <i>TICKS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used in conjunction with `<b>--benchmark</b>` to specify the number of game ticks to run the benchmark.<br><br><b>--port <i>NUMBER</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the network port for the dedicated server (default is 34197).<br><br><b>--config <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative path for the Factorio configuration file.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current Factorio game version and build information.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a summary of all available command-line options.<br><br>


title: DESCRIPTION
content:
The `factorio` command refers to the executable for the popular factory-building simulation game, Factorio. While primarily known for its graphical user interface, the Linux executable provides robust command-line interface (CLI) options, particularly useful for running dedicated servers, performing benchmarks, managing mods, and automating various game-related tasks without launching the full GUI. <br><br>The game's core loop involves mining resources, researching technologies, building intricate production lines, and defending your factory from hostile alien creatures. The CLI capabilities extend this, allowing for the deployment of persistent multiplayer servers, scripting of specific game states, and detailed performance analysis. This makes `factorio` a versatile application that caters to both interactive gameplay and backend server administration.


title: CAVEATS
content:
The `factorio` command is the game executable itself, not a typical system utility. Its path may vary depending on installation (e.g., `<i>/opt/factorio/bin/x64/factorio</i>` or within a user's Steam library). While many options are available, most are relevant for running headless servers, modding, or debugging, rather than standard desktop gameplay.<br><br>Running a dedicated server requires understanding of network configuration and potentially firewall rules. Game licenses are typically required to play the full game, though the server executable may function without a graphical license.


title: HEADLESS SERVER OPERATION
content:
The primary use of the `<b>factorio</b>` command on Linux is to run a dedicated server without a graphical interface. This is typically done using `<b>--start-server</b>` which creates a process that can host multiplayer games, consuming fewer system resources than running the full client. Often, this is paired with terminal multiplexers like `<i>screen</i>` or `<i>tmux</i>` to keep the server running even after the user disconnects from the terminal.


title: MOD MANAGEMENT VIA CLI
content:
Factorio's modding capabilities are extensive. The command line allows server administrators to manage mods for their dedicated servers, including specifying mod directories (`<b>--mod-directory</b>`) and managing mod lists (`<b>--mod-list</b>`). This ensures that specific mod packs are loaded correctly for multiplayer sessions.


title: CONFIGURATION AND SAVE FILES
content:
The `factorio` executable interacts with various configuration files (e.g., `<i>config.ini</i>`) and save files (`<i>.zip</i>` archives). Command-line options allow for specifying custom paths for these files, enabling multiple server instances or custom game setups on a single machine.


title: HISTORY
content:
Factorio was first released in early access in 2016 by Wube Software, with its full 1.0 release in August 2020. From its inception, the game prioritized moddability and multiplayer functionality. The command-line interface, especially for headless server operation, evolved significantly alongside the game's development to support the burgeoning community of dedicated server hosts and mod developers. This robust CLI has been a cornerstone for its thriving multiplayer scene, allowing for stable, long-running server instances independent of a graphical client.


title: SYNOPSIS
content:
<b>#include &lt;fcntl.h&gt;</b><br><b>int posix_fadvise(int <i>fd</i>, off_t <i>offset</i>, off_t <i>len</i>, int <i>advice</i>);</b>


title: PARAMETERS
content:
<b>fd</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The file descriptor of the open file to which the advice applies.<br><br><b>offset</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The starting byte offset within the file where the advice begins.<br><br><b>len</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes from the offset to which the advice applies. If <i>len</i> is 0, the advice applies from <i>offset</i> to the end of the file.<br><br><b>advice</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An integer specifying the access pattern advice. Common values include:<br><i>POSIX_FADV_NORMAL</i>: No special treatment. This is the default.<br><i>POSIX_FADV_SEQUENTIAL</i>: Expect data to be accessed sequentially. Kernel may perform aggressive readahead.<br><i>POSIX_FADV_RANDOM</i>: Expect data to be accessed randomly. Kernel may reduce readahead.<br><i>POSIX_FADV_WILLNEED</i>: Expect data to be accessed in the near future. Kernel may prefetch the data into cache.<br><i>POSIX_FADV_DONTNEED</i>: No longer need the specified data. Kernel may free associated pages from cache.<br><i>POSIX_FADV_NOREUSE</i>: Similar to <i>DONTNEED</i>, indicating data will not be accessed again. (Less common, not universally supported or effective compared to <i>DONTNEED</i>).<br><br>


title: DESCRIPTION
content:
fadvise, more formally known as <b>posix_fadvise(2)</b>, is a system call in Linux (and other POSIX-compliant systems) that allows an application to declare its expected access pattern for a specified region of a file. This declaration provides a hint to the operating system's kernel regarding how the application intends to use the file data. The kernel can then use this information to optimize its caching and I/O strategies, potentially improving performance by reducing disk I/O and memory pressure.<br><br>For instance, an application might declare that a section of a file will only be read once (<i>POSIX_FADV_DONTNEED</i>), allowing the kernel to discard that data from its cache soon after use. Conversely, if data is expected to be accessed randomly (<i>POSIX_FADV_RANDOM</i>), the kernel might choose not to perform aggressive readahead. While <b>posix_fadvise</b> provides valuable hints, the kernel is not obligated to follow them; it may ignore them or interpret them differently based on system load, available memory, and other factors. It's primarily a performance optimization tool, not a correctness feature. It operates on open file descriptors, specifying an offset and length within the file.


title: CAVEATS
content:
<b>Caveats:</b><br><i>posix_fadvise</i> provides hints to the kernel, not strict commands. The kernel may choose to ignore or partially implement the advice based on its internal heuristics, system load, and resource availability. Its effects are primarily performance-oriented and do not affect the correctness or behavior of I/O operations beyond potential speed improvements or slowdowns. Misuse can sometimes lead to performance degradation rather than improvement. File system type and underlying storage device can also influence the effectiveness of the advice.


title: NOT A DIRECT SHELL COMMAND
content:
It is crucial to understand that <i>fadvise</i> (or <i>posix_fadvise</i>) is not a standalone shell command that you can directly execute from the terminal. Instead, it is a system call (a C function) that programmers invoke within their applications to optimize file I/O at a lower level. While some higher-level utilities or programming language bindings might expose similar functionality, the core <i>fadvise</i> mechanism is part of the operating system's API.


title: COMMON USE CASES
content:
<i>posix_fadvise</i> is particularly useful in scenarios involving large files or specific access patterns:<br><b>Streaming Applications:</b> Using <i>POSIX_FADV_SEQUENTIAL</i> for video players or data processing pipelines that read data sequentially.<br><b>Databases/Indexing:</b> Employing <i>POSIX_FADV_RANDOM</i> for random access patterns, or <i>POSIX_FADV_WILLNEED</i> to prefetch indexes.<br><b>One-Time Reads:</b> Applying <i>POSIX_FADV_DONTNEED</i> after processing a chunk of data that won't be revisited, freeing up cache for other operations.


title: HISTORY
content:
<i>posix_fadvise</i> was introduced as part of the POSIX.1-2001 standard (IEEE Std 1003.1-2001) to provide applications with a portable way to give file access hints to the operating system. It was later incorporated into Linux kernels, making it widely available for optimizing file I/O.


title: SYNOPSIS
content:
<b>fail2ban-client</b> [<i>OPTIONS</i>] <i><COMMAND></i> [<i><ARGS></i>]<br><b>fail2ban-client</b> <i>status</i> [<i><JAIL></i> | <i><IP></i> | <i><ACTION></i>]<br><b>fail2ban-client</b> <i>ban</i> <i><IP></i> [<i><PROTOCOL></i>] [<i><PORT></i>] [<i><JAIL></i>] [<i><REASON></i>]<br><b>fail2ban-client</b> <i>unban</i> <i><IP></i> [<i><JAIL></i>]


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's version number and exit.<br><br><b>-s <SOCKET>, --socket=<SOCKET></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the Fail2ban server socket path. Default: <b>/var/run/fail2ban/fail2ban.sock</b>.<br><br><b>-i, --internal</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use internal (less documented) commands. Generally not for regular use.<br><br><b>-v <LEVEL>, --loglevel=<LEVEL></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the log level for the client session (DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL).<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress all output except for errors.<br><br>


title: DESCRIPTION
content:
<i>fail2ban-client</i> is the primary command-line interface for interacting with the <i>fail2ban</i> daemon. It allows administrators to query the status of jails and filters, manually ban or unban IP addresses, retrieve configuration parameters, and control the daemon's behavior. The client communicates with the <i>fail2ban</i> server through a Unix domain socket, typically located at <b>/var/run/fail2ban/fail2ban.sock</b>.<br><br>This utility is crucial for real-time monitoring and troubleshooting of <i>fail2ban</i>'s security measures. It provides insights into which IPs are currently banned, the reasons for their bans, and the effectiveness of the configured rules. Whether you need to quickly unblock a legitimate user, check the status of a specific jail like <b>sshd</b>, or observe the global logging level, <i>fail2ban-client</i> serves as the essential gateway to your <i>fail2ban</i> instance. Its intuitive command structure simplifies the management of this powerful intrusion prevention system.


title: CAVEATS
content:
The <i>fail2ban-client</i> requires the <b>fail2ban</b> server daemon to be running and accessible.<br>Users need appropriate permissions (typically root or part of the <b>fail2ban</b> group) to communicate with the daemon's Unix socket.<br>Careless use of <b>ban</b> or <b>unban</b> commands can inadvertently block legitimate users or expose services if used incorrectly. Always double-check IP addresses before manual bans.


title: COMMON COMMANDS
content:
Some frequently used commands include: <br><b>status</b>: Show status of all jails or a specific jail. <br><b>ban <IP></b>: Manually ban an IP address. <br><b>unban <IP></b>: Manually unban an IP address. <br><b>reload [JAIL]</b>: Reload configuration for all jails or a specific jail. <br><b>stop</b>: Stop the Fail2ban server daemon. <br><b>add <JAIL> <FILTER> <ACTION></b>: Add a new jail dynamically. <br><b>set <JAIL> <PARAM> <VALUE></b>: Set parameters for a jail.


title: SOCKET LOCATION
content:
By default, <i>fail2ban-client</i> connects to the daemon via a Unix domain socket, usually located at <b>/var/run/fail2ban/fail2ban.sock</b>. If the socket path is different, it can be specified using the <b>-s</b> or <b>--socket</b> option.


title: HISTORY
content:
Fail2ban was initially conceived to address brute-force attacks on services like SSH. Developed in Python, it emerged as an open-source project designed to automatically update firewall rules (like <b>iptables</b>) to ban IP addresses that exhibit malicious behavior, such as repeated login failures. The <i>fail2ban-client</i> component has been an integral part of the project since its early stages, providing the necessary interface for administrators to monitor and manage the daemon without directly manipulating its configuration files or firewall rules. Its development has mirrored the evolution of Fail2ban itself, focusing on robustness, extensibility, and ease of use in diverse server environments.


title: SYNOPSIS
content:
faillock [options] [username]<br>This concise syntax shows the command name faillock, followed by optional command-line <I>options</I> that modify its behavior, and an optional <I>username</I> to specify which user's records to operate on. If no username is provided, it typically defaults to operating on the current user or displaying information for all users when combined with the <B>-a</B> option.


title: PARAMETERS
content:
<b>-u <I>USER</I>, --user <I>USER</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the user whose faillock records are to be displayed or modified.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resets (clears) the failure count and unlock status for the specified user or all users if combined with -a.<br><br><b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Applies the operation to all users, often used with -r to clear all lockouts.<br><br><b>--dir <I>DIRECTORY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative directory where faillock files are stored, overriding the default configured by PAM.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br>


title: DESCRIPTION
content:
faillock is a command-line utility used to <I>display</I> and <I>modify</I> the login failure records for users on a Linux system. It works in conjunction with the <B>pam_faillock.so</B> PAM module, which is responsible for tracking consecutive failed authentication attempts and temporarily locking user accounts to prevent brute-force attacks.<br>The tool allows administrators to view the current number of failed attempts for a specific user or all users. More importantly, it provides the capability to <B>reset</B> these failure counts, which is crucial for unlocking accounts that have been temporarily locked due to exceeding the configured maximum number of failed login attempts. This command is an essential component for enforcing robust account security policies in Linux environments, ensuring system integrity against unauthorized access attempts.


title: CAVEATS
content:
Requires <B>root</B> privileges to view or modify faillock records for users other than the current one. The effectiveness of <B>faillock</B> heavily relies on the proper configuration of the <B>pam_faillock.so</B> module within PAM, which manages the actual lockout policies. Incorrect usage or configuration can lead to unintended account lockouts or reduced security.


title: INTEGRATION WITH PAM
content:
The core functionality of account lockout based on failed logins is provided by the <B>pam_faillock.so</B> module. This PAM module writes login failure information to a specific directory (commonly <I>/var/run/faillock</I> or <I>/var/log/faillock</I>). The <B>faillock</B> command then reads from and writes to these same files to display counts or reset them, acting as the administrative interface for the PAM module's tracking mechanism.


title: TEMPORARY VS. PERSISTENT STORAGE
content:
By default, <B>pam_faillock.so</B> often stores failure records in a temporary filesystem location like <I>/var/run/faillock</I>, meaning records are lost on reboot. For persistent lockout records across reboots, administrators must configure <B>pam_faillock.so</B> to use a persistent directory (e.g., <I>/var/log/faillock</I>), which <B>faillock</B> can then also interact with via the <B>--dir</B> option.


title: HISTORY
content:
The <B>faillock</B> command, typically part of the <I>shadow-utils</I> package, emerged as a modern solution for managing login failures in Linux, particularly with the advent and widespread adoption of Pluggable Authentication Modules (PAM). It provides a more robust and granular mechanism for defending against brute-force attacks compared to older methods, evolving to support sophisticated account lockout policies and integration with system-wide authentication frameworks.


title: PARAMETERS
content:
<b><b>-a</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display <i>faillog</i> records for all users registered on the system. This option is often used in conjunction with <b>-r</b> to reset all failed login attempts or <b>-m</b> to set maximum attempts for all users.<br><br><b><b>-u</b> <i>USER</i>, <b>--user</b> <i>USER</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify one or more user names for whom to display or modify <i>faillog</i> records. This is used to target specific accounts. Multiple users can be specified separated by spaces.<br><br><b><b>-r</b>, <b>--reset</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reset the failed login count for the specified user(s) or for all users if used with <b>-a</b>. This is commonly used to unlock an account that has been temporarily locked due to too many failed login attempts.<br><br><b><b>-t</b> <i>DAYS</i>, <b>--time</b> <i>DAYS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display <i>faillog</i> records that are more recent than the specified number of <i>DAYS</i>. This allows filtering the output to show only recent failed attempts.<br><br><b><b>-m</b> <i>MAX</i>, <b>--maximum</b> <i>MAX</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of consecutive failed login attempts allowed for a user before their account is locked. This option must be used with <b>-u</b> or <b>-a</b>.<br><br>


title: DESCRIPTION
content:
<i>faillog</i> is a command-line utility used to display and manage a log of failed login attempts for users on a Linux system. It's a crucial tool for system administrators to monitor potential brute-force attacks and manage user account security. The command primarily interacts with the <i>/var/log/faillog</i> file, which stores information such as the number of consecutive failed login attempts, the time of the last failure, and the terminal from which the attempt originated. <br><br>While <i>faillog</i> can display this information for all users or specific users, it also provides options to reset the failed login count, which can be necessary to unlock a user's account after too many incorrect password entries. Furthermore, it can be used to set a maximum number of allowed failed attempts for a user, though the actual locking policy is typically enforced by Pluggable Authentication Modules (PAM) like <i>pam_faillock</i>. Accessing or modifying all user records generally requires root privileges.


title: CAVEATS
content:
Viewing or modifying <i>faillog</i> records for all users (e.g., with <b>-a</b> or <b>-r</b> without <b>-u</b>) typically requires root privileges. <br>The <i>faillog</i> file (<i>/var/log/faillog</i>) is a sparse file, not a plain text file, and should not be edited manually or viewed with standard text utilities like <i>cat</i> or <i>less</i>. <br>While <i>faillog</i> stores the data, the actual enforcement of account locking policies (e.g., temporarily locking an account after N failures) is handled by Pluggable Authentication Modules (PAM), specifically <i>pam_faillock.so</i>, which reads from and writes to the <i>faillog</i> file. <br>This command primarily tracks local login failures. Other services (like SSH) might also contribute to <i>faillog</i> entries if configured through PAM, but their own logging mechanisms might also exist.


title: FILE LOCATION
content:
The <i>faillog</i> data is stored in the <i>/var/log/faillog</i> file. This file is not a human-readable text file and should only be accessed and managed by the <i>faillog</i> command itself or other tools designed to interact with its specific format.


title: PAM INTEGRATION
content:
The primary mechanism for enforcing account lockout policies based on failed login attempts on modern Linux systems is through PAM (Pluggable Authentication Modules), particularly the <i>pam_faillock.so</i> module. This module leverages the <i>faillog</i> file to track failures and apply configured policies, such as temporarily locking an account. <i>faillog</i> itself provides the interface to view and reset this underlying data, but PAM handles the real-time policy enforcement.


title: SECURITY AUDITING
content:
<i>faillog</i> output can be valuable for security auditing, allowing administrators to quickly identify users experiencing numerous failed login attempts, which might indicate a brute-force attack or a user repeatedly forgetting their password. Regularly reviewing <i>faillog</i> data helps maintain system security.


title: HISTORY
content:
<i>faillog</i> is a longstanding utility that has been part of the <i>shadow-utils</i> package for many years. The <i>shadow-utils</i> project emerged to enhance system security by separating sensitive user account information (like hashed passwords) from public files. <i>faillog</i> provides a simple and standardized way to record and manage failed login attempts, an essential feature for identifying and mitigating brute-force attacks against user accounts. Its core functionality has remained consistent, serving as the data backend for more sophisticated PAM-based authentication policies.


title: SYNOPSIS
content:
<I>Not typically invoked directly by users.</I><br>Internally used by the <b>fakeroot(1)</b> command to manage System V IPC objects within a simulated root environment.


title: PARAMETERS
content:
<b><I>None</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>faked-sysv</b> is an internal helper program and does not expose user-configurable command-line parameters. It communicates internally with the <b>fakeroot</b> daemon via environment variables and IPC mechanisms (e.g., UNIX domain sockets) to manage the fake IPC state.<br><br>


title: DESCRIPTION
content:
<b>faked-sysv</b> is a utility program that forms an integral part of the <b>fakeroot</b> package. Its primary function is to intercept and manage System V IPC (Inter-Process Communication) calls, including semaphores, message queues, and shared memory, when a process is running within the <b>fakeroot</b> environment. While <b>fakeroot</b> itself effectively simulates root privileges for file system operations, direct System V IPC objects are kernel-level resources that cannot be faked in the same manner. <b>faked-sysv</b> works in conjunction with <b>fakeroot</b> to provide a comprehensive fake root environment by mapping IPC object IDs and ensuring that operations appear to succeed as if performed by a privileged user, without requiring actual root privileges. Users typically do not invoke <b>faked-sysv</b> directly; it is automatically launched and managed by the <b>fakeroot(1)</b> command as needed to ensure consistent behavior for IPC-intensive applications.


title: CAVEATS
content:
<b><I>Caveats and Limitations:</I></b><br><b>Not for Direct Use:</b> <b>faked-sysv</b> is not designed for direct user interaction or standalone execution. Running it manually is unlikely to be useful and may lead to unexpected behavior.<br><b>System V IPC Only:</b> This utility specifically addresses System V IPC mechanisms (semaphores, message queues, shared memory). It does not manage POSIX IPC or other inter-process communication methods.<br><b>Fakeroot Dependent:</b> Its functionality is entirely dependent on the <b>fakeroot</b> environment. It has no purpose outside of being invoked by <b>fakeroot</b>.


title: <B>MECHANISM OF OPERATION</B>
content:
<b>faked-sysv</b> operates by intercepting System V IPC-related system calls (such as <b>semget</b>, <b>msgget</b>, <b>shmget</b>, and their respective operations) made by programs running under <b>fakeroot</b>. Instead of allowing these calls to interact with the real kernel IPC facilities, <b>faked-sysv</b> maintains an internal, non-privileged state for IPC objects. This allows it to return fake IPC identifiers and manage permissions and ownership within the simulated root environment, ensuring that applications behave as if they are interacting with root-owned IPC objects. This interception is typically achieved through library preloading (LD_PRELOAD) by <b>fakeroot</b>.


title: HISTORY
content:
<b>faked-sysv</b> was developed as an integral part of the <b>fakeroot</b> project, which aims to provide a means for unprivileged users to build software packages (like .deb or .rpm files) that contain files with root ownership and permissions. Initially, <b>fakeroot</b> primarily handled file system operations. However, some build processes and applications rely on System V IPC. The need for a comprehensive fake root environment led to the inclusion of <b>faked-sysv</b> to specifically address the challenge of simulating root privileges for System V IPC objects, thereby extending the capabilities of <b>fakeroot</b> to a wider range of scenarios.


title: PARAMETERS
content:
<b>--syn-ack</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends a SYN-ACK packet in response to an incoming SYN, making a closed port appear open.<br><br><b>--rst-ack</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends a RST-ACK packet in response, useful for explicitly resetting connections or making a port appear immediately closed.<br><br><b>--fin-ack</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends a FIN-ACK packet, potentially mimicking a graceful connection termination or for deceptive purposes.<br><br><b>--set-ttl <I>ttl</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Time-To-Live (TTL) value for the generated faked packet. <br>This can be used to control how many hops the packet can traverse.<br><br><b>--set-window <I>size</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the TCP window size for the faked packet. <br>This can influence how the remote host perceives the buffer capacity.<br><br><b>--set-seq <I>seq_num</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the TCP sequence number for the faked packet. <br>Useful for precise TCP state manipulation.<br><br><b>--set-ack-seq <I>ack_seq_num</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the TCP acknowledgment sequence number for the faked packet. <br>Crucial for maintaining or faking TCP flow.<br><br><b>--set-src-port <I>port</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the source port of the faked TCP packet. <br>Normally, this is automatically set to the destination port of the incoming packet.<br><br>


title: DESCRIPTION
content:
The <I>faked-tcp</I> functionality refers to a module within the Linux <I>netfilter</I> framework, typically provided by <I>xtables-addons</I>. It is not a standalone command but an <B>iptables</B> extension (often a <B>target</B> module) designed to generate deceptive TCP responses to incoming packets. This allows system administrators to manipulate how a host appears to network scanners or remote systems. For instance, a closed port can be made to appear open (by sending a SYN-ACK in response to a SYN), or various other TCP flags and sequence numbers can be manipulated to confuse, delay, or misdirect network probes. It's a powerful tool for honeypots, obfuscating network services, or implementing advanced firewall evasion and detection countermeasures.


title: CAVEATS
content:
The <I>faked-tcp</I> functionality is not part of the standard Linux kernel or default <B>iptables</B> distribution. It typically requires the installation of <I>xtables-addons</I> (or similar third-party <B>iptables</B> extensions) and corresponding kernel modules. <br>Misuse can lead to unexpected network behavior, interfere with legitimate traffic, or make debugging network issues more complex. <br>Advanced network scanners or intrusion detection systems may be able to detect the deceptive nature of these faked responses.


title: EXAMPLE USAGE: FAKING AN OPEN PORT
content:
To make a closed port 80 appear open to an incoming SYN packet, you could use the following rule:<br><br><B>iptables -A INPUT -p tcp --dport 80 -j FAKED_TCP --syn-ack</B><br><br>This rule instructs <B>iptables</B> to respond with a SYN-ACK packet to any TCP SYN packet arriving on destination port 80, even if no service is actually listening there. This can trick simple port scanners into believing the port is open.


title: HISTORY
content:
The ability to perform advanced packet manipulation within <I>netfilter</I> has evolved alongside the Linux kernel's networking capabilities. <I>faked-tcp</I> emerged as part of the broader <I>xtables-addons</I> project, which extends <B>iptables</B> with specialized match and target modules. Its development was driven by the need for more sophisticated network security tactics, including honeypot implementations and advanced host-based deception, allowing administrators to craft highly specific responses to network probes that go beyond simple packet drops or accepts.


title: SYNOPSIS
content:
Since <b>fakedata</b> is not a standard command, a universal synopsis does not exist. However, a hypothetical synopsis for a tool with this name might look like:<br><br><b>fakedata</b> [<i>OPTIONS</i>] <i>TYPE</i> [<i>COUNT</i>]<br><br>Where <i>TYPE</i> specifies the kind of fake data to generate (e.g., 'users', 'products', 'logs'), and <i>COUNT</i> specifies the number of records or entries to produce.


title: PARAMETERS
content:
<b>-t, --type <I>TYPE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hypothetically, specifies the predefined type of data to generate (e.g., 'user', 'address', 'product', 'transaction').<br><br><b>-n, --count <I>NUMBER</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hypothetically, specifies the number of data records or entries to generate.<br><br><b>-f, --format <I>FORMAT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hypothetically, defines the output format, such as 'csv', 'json', 'sql', 'xml', or 'plain'.<br><br><b>-o, --output <I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hypothetically, specifies an output file to write the generated data to, instead of standard output.<br><br><b>-s, --seed <I>VALUE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hypothetically, provides a seed for the random number generator to ensure reproducible fake data generation.<br><br><b>-p, --profile <I>PROFILE_NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hypothetically, selects a predefined data generation profile or schema for more complex data structures.<br><br><b>--locale <I>LOCALE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hypothetically, specifies the locale for generating localized fake data (e.g., 'en_US', 'fr_FR').<br><br>


title: DESCRIPTION
content:
Please note that <b>fakedata</b> is <I>not</I> a standard or commonly available Linux command found in core utilities or most mainstream distributions. If encountered, it likely refers to a custom script, a utility from a very specific software package, or a command-line wrapper for a programming library (e.g., Python's Faker).<br><br>However, conceptually, a command named 'fakedata' would typically be designed to generate synthetic, non-real data for various purposes such as software testing, database population, development mocks, or performance benchmarking. It would aim to produce data that resembles real-world information (like names, addresses, phone numbers, email addresses, product details, log entries) but is entirely fictional. This helps developers and testers work with realistic data volumes and formats without compromising privacy or relying on sensitive production data. Output formats could include CSV, JSON, SQL inserts, or plain text.


title: CAVEATS
content:
The command <b>fakedata</b> is <I>not</I> a standard Linux command and will likely not be found on most systems. Any tool named 'fakedata' would be a custom implementation, part of a specialized package, or a wrapper for a programming library. Users should not expect to find this command pre-installed or in standard repositories.


title: ACHIEVING FAKE DATA GENERATION ON LINUX
content:
To generate fake data on a Linux system, users typically rely on:<br><ul><li><b>Scripting Languages:</b> Python with libraries like 'Faker' is extremely popular for generating complex and realistic fake data. Users write Python scripts that leverage these libraries.<br><li><b>Custom Shell Scripts:</b> For simpler data, shell scripts combining commands like <b>shuf</b>, <b>head</b>, and basic string manipulation can be effective.<br><li><b>Specialized Tools:</b> Some databases or development frameworks might provide their own command-line utilities for data seeding or generation.<br><li><b>Online Services:</b> Websites like Mockaroo.com provide powerful online tools to generate large datasets in various formats, which can then be downloaded and used locally.


title: HISTORY
content:
As <b>fakedata</b> is not a standard Linux command, there is no documented history of its development or widespread adoption as a core utility. The concept of generating fake data has evolved primarily within programming languages (e.g., Python's Faker, JavaScript's Chance.js) and specialized data generation tools, rather than as a standalone shell command.


title: SEE ALSO
content:
dd(1) (for generating dummy files), shuf(1) (for randomizing lines/numbers), awk(1) / sed(1) (for text processing and data manipulation), pwgen(1) (for generating random passwords), yes(1) (for repeating a string indefinitely, useful in conjunction with head for large dummy files)


title: SYNOPSIS
content:
<code><B>faker</B> <I>&lt;data_type&gt;</I> [<I>options</I>]</code><br>or<br><code><B>faker</B> <I>generate</I> <I>&lt;data_type&gt;</I> [<I>options</I>]</code>


title: PARAMETERS
content:
<b>name</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a full name (e.g., John Doe).<br><br><b>address</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a street address, city, state, and postal code.<br><br><b>phone_number</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a realistic-looking phone number.<br><br><b>email</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a fake email address.<br><br><b>text</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates Lorem Ipsum text of a specified length.<br><br><b>date_time</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a date and/or time.<br><br><b>credit_card_number</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a valid (but fake) credit card number.<br><br><b>locale</b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Optional) Specifies the locale for generated data (e.g., 'en_US', 'fr_FR').<br><br><b>count</b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Optional) Specifies the number of items to generate.<br><br>


title: DESCRIPTION
content:
The `faker` command is <I>not a standard utility</I> found in typical Linux distributions. It is highly probable that when referred to as a Linux command, it implies a <I>custom script</I>, an <I>alias</I>, or more commonly, a <I>wrapper around the popular Python library named 'Faker'</I>. This Python library is widely used for generating realistic-looking, yet fake, data such as names, addresses, phone numbers, credit card numbers, Lorem Ipsum text, and more, across various locales.<br><br>If a `faker` command were implemented, its primary purpose would likely be to provide a command-line interface to such data generation capabilities. Users could specify the type of data they need (e.g., name, address, email) and potentially other options like locale, quantity, or specific formatting. This would be invaluable for developers needing test data, database administrators populating dummy tables, or anyone requiring large sets of synthetic information without relying on real-world sensitive data.


title: CAVEATS
content:
The `faker` command is <B>not a standard Linux utility</B>. Its existence and behavior are entirely dependent on whether it has been custom-implemented on a specific system. If it exists, its functionality will directly mirror the design choices of its creator, likely wrapping a library like Python's `Faker`. Therefore, its options, arguments, and output format may vary significantly and are not universally defined.


title: CONTEXT: THE FAKER PYTHON LIBRARY
content:
The most common context for the term 'faker' in software development, particularly in Python, refers to the <B>Faker library</B>. This library provides a rich set of 'providers' that can generate various types of fake data. A command-line `faker` utility would typically leverage this library to expose its capabilities to the shell. Users can install the Python library via `pip install Faker`.


title: SYNOPSIS
content:
<b>fakeroot</b> [<i>OPTIONS</i>] <i>COMMAND</i> [<i>ARGUMENTS...</i>]<br><b>fakeroot</b> <i>-s FILE</i> [<i>OPTIONS</i>] <i>COMMAND</i> [<i>ARGUMENTS...</i>]<br><b>fakeroot</b> <i>-i FILE</i> [<i>OPTIONS</i>] <i>COMMAND</i> [<i>ARGUMENTS...</i>]


title: PARAMETERS
content:
<b><i>-l LIBRARY</i>, <i>--lib=LIBRARY</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative shared library to use. This is rarely needed for typical use cases.<br><br><b><i>-i FILE</i>, <i>--load=FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load a previously saved <i>fakeroot</i> state from the specified <i>FILE</i>. Useful for continuing a build or operation across multiple <i>fakeroot</i> invocations.<br><br><b><i>-s FILE</i>, <i>--save=FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save the current <i>fakeroot</i> state to the specified <i>FILE</i> before exiting. This allows for persistent fake root information.<br><br><b><i>-u</i>, <i>--unknown-is-real</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat unknown UIDs/GIDs (those not explicitly managed by <i>fakeroot</i>) as real UIDs/GIDs on the actual filesystem. This is typically the default behavior.<br><br><b><i>-f</i>, <i>--force</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force <i>fakeroot</i> to run, even if it detects that it might not be necessary (e.g., when running as root). Useful for debugging or consistent environments.<br><br><b><i>-c</i>, <i>--unlib-is-real</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat unsupported <i>fakeroot</i> library calls as real. This means operations not intercepted by <i>fakeroot</i> will apply directly to the real filesystem.<br><br><b><i>-v</i>, <i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of <i>fakeroot</i>.<br><br><b><i>-h</i>, <i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><i>COMMAND</i> [<i>ARGUMENTS...</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The command and its arguments to be executed within the <i>fakeroot</i> environment.<br><br>


title: DESCRIPTION
content:
<i>fakeroot</i> is a program that runs a command in an environment wherein it appears to have <b>root privileges</b> for file manipulation. This is achieved by intercepting library calls that perform operations like <i>stat</i>, <i>chmod</i>, <i>chown</i>, <i>mknod</i>, <i>mkdir</i>, <i>rename</i>, and <i>unlink</i>. Instead of performing these operations with real root permissions, <i>fakeroot</i> maintains an internal table of file ownerships and permissions, making it seem as though the calling process is root.<br><br>It's particularly useful for building software packages (e.g., .deb, .rpm) as an unprivileged user. During package creation, files often need to be owned by <i>root:root</i> or have specific permissions. <i>fakeroot</i> allows the build process to create these files with the desired attributes without requiring actual root access, ensuring the integrity of the packaging while maintaining user security. The fake root environment is purely local to the <i>fakeroot</i> process and its children; it does not affect the real filesystem or system security.


title: CAVEATS
content:
<i>fakeroot</i> provides a userspace emulation and does not grant actual root privileges. It cannot intercept all system calls (e.g., <i>setuid()</i> or direct kernel interactions). Processes that explicitly check the real UID (via <i>getuid()</i>) or perform operations outside the scope of intercepted library calls (like network operations or kernel module loading) will not be fooled. It also does not work with <i>suid</i> binaries, as they usually drop privileges or bypass library interception. The state file can grow significantly for large builds, potentially impacting performance or disk space.


title: HOW IT WORKS: LD_PRELOAD
content:
<i>fakeroot</i> operates by setting the <i>LD_PRELOAD</i> environment variable. This variable tells the dynamic linker to load a specified shared library before any other libraries. <i>fakeroot</i>'s library contains its own versions of common filesystem functions (like <i>open</i>, <i>stat</i>, <i>chown</i>). When a program executed under <i>fakeroot</i> calls one of these functions, <i>fakeroot</i>'s version is loaded instead of the system's version. This allows <i>fakeroot</i> to intercept the call and return 'fake' information (e.g., that a file is owned by root) or modify the operation's parameters before passing it to the real system call, without requiring special kernel privileges or modifications.


title: TYPICAL USE CASES
content:
The most common use case for <i>fakeroot</i> is during the creation of package archives such as <i>.deb</i> (Debian/Ubuntu) or <i>.rpm</i> (Red Hat/Fedora) files. Packaging tools often require files within the package to have specific permissions and ownerships, usually <i>root:root</i>, to ensure they are installed correctly on the target system. By running the package build commands under <i>fakeroot</i>, an unprivileged user can create these files with the desired attributes, and the resulting package will contain the correct metadata without needing to actually run the build process as the root user.


title: HISTORY
content:
<i>fakeroot</i> was primarily developed within the context of building Debian packages, where it addresses the challenge of creating packages with correct file ownerships (typically <i>root:root</i>) and permissions by unprivileged build users. Its initial development can be attributed to Joost W. Witteveen. It leverages the <i>LD_PRELOAD</i> mechanism, a powerful feature of the Linux dynamic linker, to inject its custom library and intercept standard C library calls. This design made it a widely adopted tool in various Linux packaging ecosystems, simplifying the build process for many open-source projects.


title: PARAMETERS
content:
<b>-l <I>library</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a different shared library to load for interception. By default, <b>fakeroot</b> finds its own library automatically.<br><br><b>-s <I>save-file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save the fakeroot environment (UID/GID/mode mappings) to <I>save-file</I> on exit. This allows continuation of operations across multiple <b>fakeroot</b> invocations, ensuring consistent faked permissions.<br><br><b>-i <I>load-file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load a fakeroot environment from <I>load-file</I> at startup. This must be a file previously created with the <I>-s</I> option.<br><br><b>-u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run an un-faked command within the fakeroot environment. This is primarily for testing or debugging, allowing you to see actual permissions vs. faked ones.<br><br><b>-D</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activate debug mode. Prints detailed debugging information to stderr, useful for troubleshooting.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information of <b>fakeroot-sysv</b> and exit.<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a brief help message explaining command usage and options, then exit.<br><br>


title: DESCRIPTION
content:
The <b>fakeroot-sysv</b> command allows a user to run a command in an environment where it appears to have root privileges for file manipulation operations, while in reality, no actual root privileges are granted. This is particularly useful for building software packages (e.g., Debian .deb packages, RPMs) that require files to be owned by root or specific system users and groups during the build process, but the build itself must be performed by an unprivileged user. It works by intercepting library calls to functions like <i>stat</i>, <i>chown</i>, and <i>chmod</i>.<br><br>Instead of performing the actual operation, <b>fakeroot-sysv</b> maintains an internal database of file ownerships and permissions, making it appear as if the operations succeeded as root. The <i>-sysv</i> suffix indicates that this particular implementation uses System V IPC (Inter-Process Communication) mechanisms for its internal communication and data storage, which is generally robust and reliable.


title: CAVEATS
content:
<b>fakeroot-sysv</b> does not provide actual root privileges. It cannot, for example, perform operations requiring kernel-level access, load kernel modules, or access raw devices. It only simulates file system ownership and permission changes at the user-space library level.<br><br>Operations performed outside the <b>fakeroot-sysv</b> environment will not reflect the simulated root privileges. There might be a slight performance overhead due to the interception mechanism and IPC communication.


title: HOW IT WORKS
content:
<b>fakeroot-sysv</b> operates by replacing key functions in the C library (like <i>stat</i>, <i>chown</i>, <i>chmod</i>, <i>mknod</i>) with its own versions. These replacement functions are loaded into the executing program's memory via the <i>LD_PRELOAD</i> environment variable. When a program running inside the <b>fakeroot-sysv</b> environment calls one of these intercepted functions, <b>fakeroot-sysv</b> does not pass the call directly to the kernel. Instead, it consults or updates an internal database (stored via System V IPC shared memory and semaphores) that maps original file UIDs/GIDs to their faked counterparts. This allows it to report back faked root privileges (e.g., UID 0, GID 0) even though the underlying filesystem still sees the unprivileged user's actual UID/GID.


title: PORTABILITY AND ALTERNATIVES
content:
While <b>fakeroot-sysv</b> is a common and robust implementation, other versions exist, such as <b>fakeroot-tcp</b>, which uses TCP sockets for inter-process communication instead of SysV IPC. The choice between implementations can sometimes depend on system configuration or specific needs, though <b>fakeroot-sysv</b> is often the default or preferred due to its local nature and robustness. Regardless of the implementation, the core functionality of simulating root privileges remains the same, providing a consistent facade for package building and other unprivileged operations requiring temporary root-like access.


title: HISTORY
content:
The <b>fakeroot</b> utility was originally developed primarily to assist in the creation of Debian packages. During the package building process, it's often necessary to perform operations like changing file ownerships to root or specific system users (e.g., 'root:root', 'daemon:daemon'), or setting specific file permissions, which typically require root privileges. However, building packages as an actual root user is a security risk.<br><br><b>fakeroot</b> solved this by providing a fake root environment. The <i>-sysv</i> implementation, utilizing System V IPC, was one of the early and robust methods for its internal communication, ensuring consistency and reliability of the fake filesystem state across multiple processes within the environment. It has been a cornerstone tool for secure and reproducible package building workflows on Linux distributions.


title: PARAMETERS
content:
<b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>--version, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints debugging information to stderr, which can be useful for troubleshooting.<br><br><b>--</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used to separate <b>fakeroot-tcp</b> options from the options of the <i>COMMAND</i> to be executed. Any arguments after this are treated as part of the <i>COMMAND</i>.<br><br>


title: DESCRIPTION
content:
The <b>fakeroot-tcp</b> command is a variant of the <b>fakeroot</b> utility, designed to simulate root privileges (UID 0, GID 0) for a given command without actually granting them. This is primarily achieved by intercepting library calls that perform file system operations (like <i>stat</i>, <i>chmod</i>, <i>chown</i>, <i>mkdir</i>, <i>mknod</i>, etc.) and modifying their reported results.<br><br>The key distinction of <b>fakeroot-tcp</b> from the standard <b>fakeroot</b> is its communication mechanism. Instead of using shared memory or FIFOs (which are common IPC methods for <b>fakeroot</b>), <b>fakeroot-tcp</b> utilizes TCP sockets to communicate between the main <b>fakeroot</b> process (the daemon) and the processes running under the fake root environment. This makes it particularly useful in restricted environments, such as <i>chroot</i> jails or containers, where traditional IPC mechanisms might be disabled, unavailable, or have complex permission requirements, thus providing a more robust and flexible solution for creating build environments or testing scripts that require root access.


title: CAVEATS
content:
<b>Not a Security Mechanism:</b> <b>fakeroot-tcp</b> does not provide actual root privileges and should not be used as a security tool. It can be easily bypassed by malicious code or applications that don't rely on standard library calls for file system operations.<br><br><b>Limited Scope:</b> It only fakes file system ownership and permissions. Operations requiring actual kernel privileges, such as loading kernel modules, mounting file systems, or specific device access, will fail.<br><br><b>Performance Overhead:</b> Intercepting system calls and communicating via TCP sockets introduces a slight performance overhead compared to native execution.<br><br><b>Environment Dependencies:</b> Relies on the <i>LD_PRELOAD</i> mechanism, which might not work with statically linked binaries or in environments configured to prevent library preloading for security reasons.


title: HOW IT WORKS
content:
<b>fakeroot-tcp</b> operates by using the <i>LD_PRELOAD</i> mechanism to inject a library into the executed command's environment. This library intercepts relevant system calls (e.g., <i>stat</i>, <i>chmod</i>, <i>chown</i>). Instead of passing these calls directly to the kernel, the library communicates with a separate <b>fakeroot</b> daemon process (typically the parent <b>fakeroot-tcp</b> process itself). This daemon maintains an internal database mapping real UIDs/GIDs and permissions to fake root (0/0) or other simulated values. The communication between the intercepted library and the daemon is performed over a TCP socket, allowing <b>fakeroot-tcp</b> to work even when traditional shared memory or FIFO pipes are not available or restricted.


title: HISTORY
content:
The original <b>fakeroot</b> utility was developed by Lennart Poettering, Joost Kooijman, and others, primarily to allow unprivileged users to build software packages (like Debian packages) that require root privileges during the build process to set correct file ownership and permissions. The <b>fakeroot-tcp</b> variant was later introduced to address specific limitations of the default IPC mechanisms (FIFOs, shared memory) in certain environments, particularly within <i>chroot</i> jails or containers, where TCP communication offered a more reliable and flexible alternative.


title: PARAMETERS
content:
<b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays a help message and exits.</i><br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Outputs version information and exits.</i><br><br><b>-m, --monotonous</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Causes the monotonic clock (<b>CLOCK_MONOTONIC</b>) to also start at the fake time, maintaining a consistent offset from the real monotonic clock.</i><br><br><b>-p, --pretty</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prints the current fake time to standard error before executing the command, providing a quick verification.</i><br><br><b>-r, --realtime</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Ensures the monotonic clock proceeds with real time, even if <b>-m</b> is used. Useful for specific scenarios where a fixed fake time is desired for the wall clock but real time progression for monotonic.</i><br><br><b>-f <i>&lt;file&gt;</i>, --file <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Reads the <b>FAKETIME</b> setting from the specified file instead of directly from the command line or environment variable.</i><br><br><b>-l <i>&lt;lib&gt;</i>, --load <i>&lt;lib&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies an alternative <b>libfaketime.so</b> library to preload, useful for custom or debug versions.</i><br><br>


title: DESCRIPTION
content:
faketime is a command-line utility for Linux and other Unix-like systems that allows you to run a program as if the system time were different from the actual current time. It achieves this by intercepting calls to standard time-related library functions (like <b>time()</b>, <b>gettimeofday()</b>, <b>clock_gettime()</b>) using the <b>LD_PRELOAD</b> mechanism. Instead of returning the real system time, faketime's injected library (<b>libfaketime.so</b>) returns a time based on the user-specified offset or absolute timestamp.<br><br>This functionality is invaluable for testing time-sensitive applications, simulating future or past events, debugging date-related bugs, or replicating specific scenarios without needing to manually change the system-wide clock. Importantly, faketime only affects the targeted program and its child processes, leaving the rest of the system's time unchanged. Users can specify an absolute timestamp or a relative offset (e.g., "+10d" for 10 days in the future). This tool provides a powerful and isolated environment for time manipulation.


title: CAVEATS
content:
faketime relies on the <b>LD_PRELOAD</b> mechanism, which means it primarily works for dynamically linked executables. It generally <i>does not</i> affect:<br><i>Kernel-level operations</i> or hardware clocks.<br><i>SUID/SGID binaries</i> due to security restrictions that often prevent `LD_PRELOAD` from being honored.<br>Programs that use alternative, non-standard methods to obtain time (e.g., directly querying NTP servers or using very low-level hardware timers).<br>File modification times (<b>mtime</b>, <b>ctime</b>) of files created or modified by the faked program.<br>System logs that record real time.


title: <I>ENVIRONMENT VARIABLE (FAKETIME)</I>
content:
Beyond the faketime command-line wrapper, the core functionality can be achieved by directly setting the <b>FAKETIME</b> environment variable before executing a command.<br><br><i>Example:</i> <b>FAKETIME="+1y" my_program</b><br>This allows for direct integration into scripts or makefiles without the explicit faketime command. The same timestamp formats apply.


title: <I>TIMESTAMP FORMATS</I>
content:
faketime supports a variety of timestamp formats for specifying the desired fake time:<br><br><i>Absolute Time:</i><br> &nbsp;&nbsp;&nbsp;&nbsp;<b>YYYY-MM-DD HH:MM:SS</b> (e.g., 2025-01-01 10:00:00)<br> &nbsp;&nbsp;&nbsp;&nbsp;<b>@YYYY-MM-DD HH:MM:SS</b> (e.g., @2025-01-01 10:00:00) - <i>Useful when the command itself starts with a '+' or '-'.</i><br><i>Relative Time:</i><br> &nbsp;&nbsp;&nbsp;&nbsp;<b>+N[yMwdHMS]</b> (e.g., <b>+10d</b> for 10 days in the future, <b>+1h30m</b> for 1 hour 30 minutes)<br> &nbsp;&nbsp;&nbsp;&nbsp;<b>-N[yMwdHMS]</b> (e.g., <b>-5y</b> for 5 years in the past)<br><i>Fixed Time and Progression:</i><br> &nbsp;&nbsp;&nbsp;&nbsp;<b>start-at-timestamp[xmultiplier]</b> (e.g., <b>"2020-01-01 10:00:00x2"</b> to start at a specific time and progress at twice the real speed).


title: HISTORY
content:
faketime emerged as a practical solution to a common problem in software development and testing: the need to test time-sensitive applications without altering the system-wide clock. Prior to tools like faketime, developers often resorted to manually changing system dates, which was cumbersome and could disrupt other running processes. Leveraging the dynamic linker's <b>LD_PRELOAD</b> capability, faketime provides an elegant and isolated method for time manipulation. It has been actively developed and maintained within the open-source community, becoming a de-facto standard for time-mocking in Unix-like environments due to its robustness and ease of use.


title: SEE ALSO
content:
date(1): <i>System date and time display/setting utility.</i>, strace(1): <i>Traces system calls and signals, useful for observing which time-related calls a program makes.</i>, ld.so(8): <i>Dynamic linker/loader, which handles the <b>LD_PRELOAD</b> mechanism.</i>, hwclock(8): <i>Utility for querying and setting the hardware clock.</i>


title: SYNOPSIS
content:
<b>fallocate</b> [<i>options</i>] <i>file</i><br><b>fallocate</b> {<b>-c</b>|<b>-d</b>|<b>-p</b>|<b>-z</b>} [<b>-o</b> <i>offset</i>] <b>-l</b> <i>length</i> <i>file</i><br><b>fallocate</b> <b>-x</b> [<b>-o</b> <i>offset</i>] <b>-l</b> <i>length</i> <i>file</i>


title: PARAMETERS
content:
<b><b>-l</b>, <b>--length</b> <i>LENGTH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the length of the allocation or deallocation range in bytes.<br><br><b><b>-o</b>, <b>--offset</b> <i>OFFSET</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the starting offset (position) for the operation within the file.<br><br><b><b>-c</b>, <b>--collapse-range</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes a specified range from the file and shifts subsequent data to the left, shrinking the file size.<br><br><b><b>-d</b>, <b>--deallocate</b>, <b>--punch-hole</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deallocates (punches a hole in) a specified range of bytes, turning them into unallocated sparse regions.<br><br><b><b>-p</b>, <b>--punch-hole</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for <b>--deallocate</b>, also deallocates space within a range.<br><br><b><b>-z</b>, <b>--zero-range</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes zeros into a specified range of the file, guaranteeing that the blocks are allocated and contain zeros.<br><br><b><b>-x</b>, <b>--posix</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the <i>posix_fallocate(3)</i> system call, which guarantees disk space allocation and may write zeros if necessary.<br><br><b><b>-n</b>, <b>--keep-size</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the file size from being extended by the allocation operation.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details about the operation.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs version information and exits.<br><br>


title: DESCRIPTION
content:
The <b>fallocate</b> command is a powerful utility for managing disk space allocation for files. Unlike simply extending a file's size, which might create a sparse file with unallocated 'holes,' <b>fallocate</b> explicitly preallocates disk blocks. This is crucial for applications like virtual machine disk images, databases, or large video files that require contiguous or guaranteed disk space to prevent fragmentation and ensure consistent performance.<br><br>It can efficiently reserve space without immediately writing data (unless using the <b>-z</b> or <b>-x</b> options), making it significantly faster than using tools like <b>dd</b> for large file preallocation. Beyond preallocation, <b>fallocate</b> can also deallocate space (create holes) within a file using the <b>-d</b> or <b>-p</b> options, or even remove a range of a file and shift subsequent data (<b>-c</b>), effectively shrinking the file from within. This operation directly manipulates the file system's block allocation information, providing a low-overhead method for disk space management.


title: CAVEATS
content:
<b>Filesystem Support</b>: Not all file systems support the underlying <i>fallocate(2)</i> system call. Modern Linux file systems like ext4, XFS, Btrfs, and ZFS typically do, but older or network file systems (e.g., NFS, FAT) may not.<br><b>Atomic Operations</b>: While <b>fallocate</b> operations are generally atomic on supported file systems, some operations like <b>--collapse-range</b> might not be fully atomic against system crashes, potentially leading to data corruption if a crash occurs mid-operation.<br><b>Sparse Files</b>: Using options like <b>-d</b> or <b>-z</b> can create 'holes' in files, leading to discrepancies between the apparent file size (as seen by <b>ls -l</b>) and the actual disk space consumed (as seen by <b>du -h</b>).


title: SPARSE FILES AND HOLES
content:
<b>fallocate</b> can create 'sparse files' by reserving blocks or punching holes. A sparse file appears to be a certain size (e.g., 1GB) but only consumes disk space for the blocks that actually contain data. The unallocated regions are 'holes.' This is beneficial for saving disk space and speeding up file creation where not all data is immediately available.


title: UNDERLYING SYSTEM CALLS
content:
The <b>fallocate</b> command primarily interfaces with the <i>fallocate(2)</i> system call, which is Linux-specific and offers features like `punch-hole` and `collapse-range`. The <b>-x</b> option specifically uses <i>posix_fallocate(3)</i>, which is a POSIX-standardized way to allocate space but has slightly different semantics (e.g., it might write zeros to the allocated region if needed to guarantee space).


title: HISTORY
content:
The <i>fallocate(2)</i> system call, which <b>fallocate</b> utilizes, was introduced into the Linux kernel in version 2.6.23 (released October 2007). The <b>fallocate</b> utility, part of the <i>util-linux</i> project, provides a user-space interface to this system call. Its development was driven by the need for more efficient and robust disk space management, particularly for applications requiring guaranteed contiguous (or at least pre-reserved) disk blocks, such as virtual machine disk images and database files, where traditional <b>dd</b> methods were too slow and inefficient.


title: PARAMETERS
content:
<b>[arguments...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Any supplied command line arguments are <i>ignored</i> and have no effect on the command's behavior. This is explicitly stated in some <b>false</b> manual pages.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit. This option is typically available when <b>false</b> is an external utility (e.g., <code>/bin/false</code>), not a shell built-in.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output version information and exit. This option is typically available when <b>false</b> is an external utility, not a shell built-in.<br><br>


title: DESCRIPTION
content:
The <b>false</b> command is a fundamental Unix-like utility designed to perform a single, straightforward action: it always exits with a <i>non-zero</i> status code. By convention in shell scripting and Unix philosophy, a non-zero exit status indicates a 'failure' or 'unsuccessful' operation, while a zero status signifies 'success'.<br><br>It serves as the logical opposite of the <b>true</b> command, which always exits with a zero (success) status. Despite its apparent simplicity, <b>false</b> is extremely useful in shell scripting for controlling program flow, particularly in conditional statements (like <b>if</b> and <b>while</b> loops) or logical operations (<b>&&</b>, <b>||</b>). It can be used to intentionally trigger a failure path, prevent a loop from running, or as a placeholder where an unsuccessful command is required.<br><br>Most commonly, <b>false</b> is implemented as a shell built-in (e.g., in <b>bash</b> or <b>sh</b>), meaning it is executed directly by the shell without launching an external program. This makes it highly efficient, incurring minimal overhead. The command typically accepts no meaningful arguments; any supplied arguments are usually ignored.


title: CAVEATS
content:
The behavior of <b>false</b> can vary slightly depending on whether it is executed as a standalone external utility (e.g., <code>/bin/false</code>) or as a shell built-in. Shell built-in versions are generally more efficient as they avoid the overhead of spawning a new process. External versions might support standard GNU options like <code>--help</code> and <code>--version</code>, which built-ins often do not.


title: EXIT STATUS
content:
The primary function of <b>false</b> is to exit with a <i>non-zero</i> status code, conventionally indicating a 'failure' or 'unsuccessful' operation. In most Unix-like systems, this exit status is <code>1</code>, though any non-zero value signifies failure.


title: COMMON USE CASES IN SHELL SCRIPTING
content:
<b>false</b> is invaluable in shell scripting for controlling program flow:<br><br><i>Conditional Logic:</i><br><code><pre>if <b>false</b>;<br>then<br>    echo "This message will <b>not</b> be printed.";<br>fi</pre></code><br><i>Loop Control:</i><br><code><pre>while <b>false</b>;<br>do<br>    echo "This loop will <b>never</b> execute.";<br>done</pre></code><br><i>Logical Operations:</i><br><code><pre># Forces the logical AND chain to fail<br>command_that_succeeds && <b>false</b> && command_that_wont_run<br><br># Forces the logical OR chain to execute the second command<br><b>false</b> || command_that_will_run</pre></code>


title: HISTORY
content:
The <b>false</b> command, like its counterpart <b>true</b>, is a fundamental and ancient utility in Unix-like operating systems. It dates back to the very early days of Unix, providing a simple, reliable way to signal a failure status. Its extreme simplicity has meant little to no 'development' in terms of features over the decades. Its most significant evolution has been its common implementation as a shell built-in in popular shells like <b>sh</b> and <b>bash</b>, enhancing its performance for scripting by avoiding the overhead of external process execution.


title: SYNOPSIS
content:
<i><b>farge</b> is not a standard Linux command. A universal synopsis cannot be provided as its syntax would be entirely dependent on its custom implementation.</i>


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;This is not a standard Linux command. No universally defined parameters exist; any options would be specific to a custom implementation.<br><br>


title: DESCRIPTION
content:
<i><b>farge</b> is not a standard, universally available Linux command. Its name, which means 'color' in several Scandinavian languages (e.g., Norwegian, Danish), strongly suggests that if such a command exists on a system, it is a custom script, alias, or a niche utility designed for adding color to terminal output, files, or text.</i><br><br><i>In standard Linux environments, output coloring is typically achieved through various methods. Many core utilities like <b>grep</b> and <b>ls</b> provide a <b>--color</b> option to enable syntax highlighting or differentiate output types. Shell aliases are commonly used (e.g., alias grep='grep --color=auto') to automatically apply coloring. Direct ANSI escape codes can be embedded in scripts or strings (e.g., echo -e '\\e[31mRed Text\\e[0m'). Third-party tools like <b>bat</b> (a <b>cat</b> clone with syntax highlighting), <b>ccat</b>, or <b>colordiff</b> are available for enhanced colorization of files and command differences.</i><br><br><i>Therefore, any specific functionality attributed to a 'farge' command would be specific to the system where it is defined, rather than a part of the standard Linux command set.</i>


title: CAVEATS
content:
<i><b>farge</b> is not a standard, pre-installed Linux command. Its presence or behavior depends entirely on custom scripts, aliases, or specific third-party installations. Therefore, its functionality, options, and availability will vary greatly and are not universally defined. Users encountering 'farge' should consult local documentation or the script/alias definition to understand its purpose and usage.</i>


title: MEANING OF 'FARGE'
content:
<i>The word 'farge' means 'color' in several Scandinavian languages (e.g., Norwegian, Danish). This strongly suggests that a custom command or script named 'farge' would likely pertain to adding color to text output, files, or terminal displays, or perhaps managing color schemes.</i>


title: ACHIEVING COLORED OUTPUT IN LINUX
content:
<i>Linux environments extensively utilize ANSI escape codes for coloring terminal output. Many standard commands like <b>grep</b> and <b>ls</b> have specific <b>--color</b> options.<br>Users often create shell aliases (e.g., alias grep='grep --color=auto') or employ dedicated tools like <b>bat</b>, <b>ccat</b>, or <b>highlight</b> to enhance output readability with colorization.<br>Custom shell functions can also be written to wrap commands and add color.</i>


title: HISTORY
content:
<i>As <b>farge</b> is not a standard Linux command, there is no official development history. Any usage or development would be confined to specific user environments or niche projects where a utility with this name has been created. It does not belong to any widely recognized open-source project or Linux distribution's core utilities.</i>


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information about the command's usage, detailing available options and arguments.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current version number of the <i>fast-cli</i> tool installed on the system.<br><br><b><b>-s</b>, <b>--single-stream</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Conducts the internet speed test using only a single connection stream, which can sometimes provide a more conservative or specific measurement in certain network conditions.<br><br><b><b>-u</b>, <b>--upload</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates an upload speed test immediately after the download test has completed. By default, only the download speed is measured.<br><br><b><b>--json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the speed test results in a structured JSON format, making it suitable for scripting, automation, and programmatic parsing of the data.<br><br>


title: DESCRIPTION
content:
<i>fast-cli</i> is a command-line interface tool that allows users to check their internet download and optionally upload speed directly from the terminal. It leverages the <i>fast.com</i> API, which is provided by Netflix, to perform speed measurements. Unlike many native Linux commands, <i>fast-cli</i> is built on Node.js and distributed as an <b>npm</b> package, making it easily installable across various platforms including Linux, macOS, and Windows, provided Node.js and npm are installed. Its primary purpose is to offer a quick and straightforward way to assess network bandwidth without needing to open a web browser, providing a consistent experience to the web-based service.


title: CAVEATS
content:
The command '<b>fast</b>' is not a standard, built-in Linux command. This analysis refers to '<b>fast-cli</b>', a popular third-party tool distributed via Node.js's <b>npm</b> package manager. Therefore, it requires Node.js and <b>npm</b> to be installed on your system for its functionality. Its results are derived from the <i>fast.com</i> service and might differ from other speed test services (e.g., <i>speedtest-cli</i>) due to varying server locations, testing methodologies, or network routing.


title: INSTALLATION
content:
Since <i>fast-cli</i> is an <b>npm</b> package, it needs to be installed globally on your system. Assuming Node.js and <b>npm</b> are already set up, you can install it using the following command:<br><code>npm install --global fast-cli</code>


title: INTERNET REQUIREMENT
content:
As an internet speed testing utility, <i>fast-cli</i> fundamentally requires an active and stable internet connection to perform its functions correctly and provide accurate network performance measurements. Without an internet connection, the command will not be able to reach the <i>fast.com</i> servers.


title: HISTORY
content:
<i>fast-cli</i> was developed by Sindre Sorhus and a community of contributors as part of the vibrant Node.js ecosystem. It emerged from the desire to bring the simplicity and effectiveness of the <i>fast.com</i> web service—a Netflix-provided internet speed test—directly to the command line. Its development reflects a broader trend of porting web-based utilities to the terminal for enhanced convenience, automation, and a more streamlined user experience.


title: PARAMETERS
content:
<b>-c <I>config_file</I>, --config <I>config_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the main configuration file. This is usually required.<br><br><b>-d, --daemon</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs <i>fastd</i> in daemon mode, detaching from the controlling terminal.<br><br><b>-p <I>pid_file</I>, --pid-file <I>pid_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the daemon's process ID (PID) to the specified file.<br><br><b>-u <I>user</I>, --user <I>user</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Drops privileges to the specified user after initialization. Requires running as root initially.<br><br><b>-g <I>group</I>, --group <I>group</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Drops privileges to the specified group after initialization. Often used with <I>--user</I>.<br><br><b>-s <I>socket_path</I>, --status-socket <I>socket_path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a Unix domain socket at the given path for status queries and control.<br><br><b>-L <I>level</I>, --log-level <I>level</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the verbosity level for logging. Possible values include <I>error</I>, <I>warn</I>, <I>info</I>, <I>debug</I>, and <I>verbose</I>.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information for <i>fastd</i> and exits.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a brief help message with available command-line options and exits.<br><br>


title: DESCRIPTION
content:
<i>fastd</i> is a user-space VPN daemon designed for creating fast, secure, and low-overhead encrypted tunnels between network nodes. It excels in scenarios requiring high performance, such as mesh VPN networks, IoT deployments, or embedded systems. <i>fastd</i> primarily uses UDP as a transport protocol and supports modern cryptographic algorithms like Curve25519 for key exchange and Poly1305 for authentication, ensuring strong security. It can operate over <I>tap</I> (Layer 2 Ethernet) or <I>tun</I> (Layer 3 IP) devices, allowing for flexible network configurations, including both IPv4 and IPv6.<br><br>Unlike some more feature-rich VPN solutions, <i>fastd</i> focuses purely on establishing the secure, encrypted tunnel, leaving higher-level network configurations (like routing or firewall rules) to be managed separately by the system. Its modular design and emphasis on cryptographic agility make it a robust choice for building decentralized and resilient network infrastructures.


title: CAVEATS
content:
<i>fastd</i> requires careful configuration, particularly concerning its network interfaces (<I>tap</I> or <I>tun</I> devices) and peer definitions. While it provides the secure tunnel, managing IP addressing, routing, and firewall rules for the virtual network interface must be handled separately using standard Linux networking tools (e.g., <I>ip</I> command or network manager services). For dynamic peer discovery or complex mesh networks, external scripts or services might be needed to update the <i>fastd</i> configuration or interact with its status socket.


title: CONFIGURATION FILE IMPORTANCE
content:
<i>fastd</i>'s primary mode of operation is driven by its configuration file (typically <I>/etc/fastd/fastd.conf</I> or within <I>/etc/fastd/</I> includes). This file defines virtually all aspects of its behavior, including the listening address, interface type (tap/tun), peer public keys, shared secrets, cryptographic methods, and various scripting hooks. A correct and secure configuration is crucial for its proper functioning.


title: CRYPTOGRAPHIC PRIMITIVES
content:
<i>fastd</i> distinguishes itself by relying on modern and robust cryptographic primitives. It primarily uses Curve25519 for elliptic curve Diffie-Hellman key exchange, which provides forward secrecy, and Poly1305 for message authentication codes (MACs), often combined with AES or ChaCha20 for encryption. This choice of algorithms contributes to its speed and security profile.


title: HISTORY
content:
<i>fastd</i> was developed by the Freifunk community, a grassroots initiative for building decentralized wireless networks. It emerged as a response to the need for a more performant, lightweight, and cryptographically modern VPN solution compared to existing options like OpenVPN, which could be resource-intensive for embedded devices and high-speed mesh links. Its development began in the early 2010s, with a focus on low latency and efficient use of system resources, making it ideal for the infrastructure of community-driven mesh VPNs.


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the help message and exits.</i><br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays version information and exits.</i><br><br><b><b>-c &lt;file&gt;</b>, <b>--config &lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Uses a custom configuration file instead of the default.</i><br><br><b><b>-s &lt;key&gt;=&lt;value&gt;</b>, <b>--set &lt;key&gt;=&lt;value&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Overrides a configuration key with a new value for the current run.</i><br><br><b><b>--disable-modules &lt;modules&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Disables specific modules (comma-separated list, e.g., 'cpu,gpu').</i><br><br><b><b>--enable-modules &lt;modules&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enables specific modules, implicitly disabling all others not specified.</i><br><br><b><b>--list-modules</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Lists all available information modules that can be displayed.</i><br><br><b><b>--list-logos</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Lists all available ASCII logos that can be used.</i><br><br><b><b>--color-keys &lt;color&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the ANSI color for the key names (e.g., 'red', '#FF0000').</i><br><br><b><b>--color-values &lt;color&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the ANSI color for the values (e.g., 'blue', '#0000FF').</i><br><br><b><b>--logo &lt;type|path&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies the ASCII logo type to use or a path to a custom image. Use 'none' to disable the logo.</i><br><br><b><b>--format &lt;format&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sets the output format (e.g., 'json', 'plain', 'ansi').</i><br><br>


title: DESCRIPTION
content:
<i>Fastfetch</i> is a <b>modern</b>, <b>high-performance</b> command-line utility designed to fetch and display various system information details. It serves as a significantly faster and more efficient alternative to older tools like <i>Neofetch</i> and <i>Screenfetch</i>, thanks to its optimized C++ codebase and direct utilization of native system APIs. Fastfetch can present a wide array of information, including OS, Kernel, Uptime, Packages, Shell, Resolution, Desktop Environment/Window Manager, CPU, GPU, Memory, and Disk usage.<br><br>It is highly configurable, allowing users to precisely control which modules are displayed, their order, and the output formatting, making it ideal for system showcases, quick diagnostics, or automated reporting. Its modular design and emphasis on speed make it a preferred choice for many Linux enthusiasts.


title: CAVEATS
content:
<i>While highly optimized, performance can still vary depending on the system's hardware, the number of enabled modules, and the specific APIs available. Some modules may require elevated privileges or specific system configurations (e.g., kernel modules) to fetch accurate data. The extensive configuration options, while providing great flexibility, can introduce a learning curve for new users.</i>


title: CONFIGURATION FILE
content:
<i>Fastfetch primarily uses a <b>TOML</b> or <b>JSONC</b> based configuration file (default: <i>~/.config/fastfetch/config.jsonc</i> or <i>~/.config/fastfetch/config.toml</i>) to define which modules to display, their order, and various formatting options. This allows for highly customized and persistent outputs across sessions, saving users from typing long command-line arguments repeatedly.</i>


title: MODULE SYSTEM
content:
<i>The tool is built around a robust modular architecture. Each piece of information, such as the Operating System, CPU, RAM, or GPU details, is handled by a separate module. This design allows users to easily enable or disable specific modules, tailoring the output precisely to their requirements and optimizing performance by only fetching necessary data. This modularity also simplifies future expansions and contributions.</i>


title: CROSS-PLATFORM SUPPORT
content:
<i>While widely popular on Linux, fastfetch also provides support for other operating systems, including <b>macOS</b> and <b>Windows</b>. This makes it a versatile system information utility that can be utilized across different computing environments, maintaining a consistent interface and feature set for users regardless of their underlying OS.</i>


title: HISTORY
content:
<i>Fastfetch emerged as a modern, high-performance alternative to existing system information tools like Neofetch, which were largely script-based (e.g., Bash) and could be slower or less efficient in fetching system details. Developed primarily in <b>C++</b> by KitsuneAlex, its core focus was on leveraging native system APIs and optimized algorithms to achieve significantly faster execution times and lower resource consumption. This development philosophy aimed to address the performance limitations of its predecessors while offering extensive configurability and broad cross-platform support. It quickly gained traction within the Linux community for its speed and rich feature set, establishing itself as a preferred utility for displaying system information.</i>


title: PARAMETERS
content:
<b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints out more information during execution, including all the commands that are being run.<br><br><b>--silent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hides all fastlane output, except for errors and critical information.<br><br><b>--env <environment></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a fastlane environment. This loads a specific <i>.env</i> file (e.g., <i>.env.production</i>) to define environment variables for the run.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the <b>fastlane</b> command, a specific tool (e.g., <i>fastlane gym --help</i>), or a defined lane.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the currently installed <b>fastlane</b> version.<br><br><b><I>key:value</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes arbitrary arguments to a specific fastlane lane. These arguments can then be accessed and utilized within the lane's definition (e.g., <i>fastlane deploy build_number:123</i>).<br><br>


title: DESCRIPTION
content:
<b>fastlane</b> is an open-source platform designed to simplify and automate the entire mobile app development lifecycle for both iOS and Android. It provides a collection of tools, known as <i>actions</i>, and a flexible Ruby-based Domain Specific Language (DSL) to define custom workflows called <i>lanes</i>.<br><br>Developers define these lanes and their sequence of actions in a file named <I>Fastfile</I> within their project. Common automation tasks handled by fastlane include: managing code signing assets (provisioning profiles, certificates) with <i>match</i>, building app binaries with <i>gym</i> (for iOS) or <i>gradle</i> (for Android), generating localized screenshots with <i>snapshot</i>, distributing beta versions to testers via services like TestFlight or Firebase App Distribution, and submitting final builds to the Apple App Store or Google Play Store using <i>deliver</i>.<br><br>By integrating with various development tools and services, fastlane helps ensure consistent, repeatable, and error-free app delivery processes, significantly reducing manual effort and speeding up development cycles.


title: CAVEATS
content:
<b>fastlane</b> requires a Ruby environment to run, typically managed via <i>Bundler</i>. While it runs on Linux, its primary utility is for automating iOS (which usually requires macOS for Xcode) and Android (which can be done on Linux) mobile app workflows. Initial setup involves configuring project-specific files like <I>Fastfile</I> and managing mobile development dependencies (e.g., Xcode, Android SDK, signing assets).


title: <B>FASTFILE</B>
content:
The central configuration file for <b>fastlane</b>, written in Ruby. It defines the automated workflows (<i>lanes</i>) and orchestrates the execution of various <i>actions</i> and <i>plugins</i> for a mobile project.


title: <B>LANES</B>
content:
Specific sequences of actions defined within the <I>Fastfile</I>. Each lane represents a distinct workflow, such as <I>beta</I> for distributing test builds, <I>release</I> for submitting to app stores, or <I>tests</I> for running unit/UI tests.


title: <B>ACTIONS</B>
content:
Individual building blocks or tasks that make up a fastlane lane. <b>fastlane</b> provides hundreds of built-in actions (e.g., <i>gym</i> for building, <i>deliver</i> for submission, <i>match</i> for code signing) and supports custom actions created by developers.


title: <B>PLUGINS</B>
content:
Extend fastlane's capabilities by adding new actions or integrations with third-party services that are not part of the core fastlane distribution. The fastlane community actively develops and shares plugins.


title: HISTORY
content:
<b>fastlane</b> was created by <i>Felix Krause</i> in 2014 to address the pain points of mobile app release automation. It quickly gained popularity within the iOS and Android development communities due to its comprehensive feature set and extensibility. In 2017, Google acquired <b>fastlane</b>, but it continues to be developed as a thriving open-source project, maintained by a community of contributors and Google engineers.


title: PARAMETERS
content:
<b>device</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the block device (e.g., /dev/sdb1) containing the FAT filesystem whose label is to be read or modified.<br><br><b>new-label</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional string specifying the new volume label for the FAT filesystem. If omitted, the current label is displayed.<br><br>


title: DESCRIPTION
content:
<i>fatlabel</i> is a utility from the <i>dosfstools</i> package used to query or modify the volume label of FAT (FAT12, FAT16, FAT32) filesystems. When invoked with only a device argument, it displays the current volume label. If an additional argument (the desired new label) is provided, it attempts to set the filesystem's label to that value.<br><br>The label can be up to 11 characters long and is case-insensitive. This command is particularly useful for identifying USB drives, SD cards, or other removable media formatted with a FAT filesystem. It operates directly on the block device and requires appropriate permissions, typically root, to write a new label.


title: CAVEATS
content:
<ul><li>Requires root privileges to modify the label.</li><li>Labels are limited to 11 characters and are case-insensitive.</li><li>Only works with FAT (FAT12, FAT16, FAT32) filesystems. Using it on other filesystem types (e.g., ext4, NTFS) will result in an error.</li><li>Ensure the device is not mounted or used by other processes when modifying the label to prevent data corruption, though reading is generally safe.</li></ul>


title: LABEL CHARACTERS
content:
FAT volume labels typically consist of uppercase letters, numbers, and some special characters. Lowercase letters entered will often be converted to uppercase by the filesystem. Invalid characters may be rejected or converted.


title: HISTORY
content:
<i>fatlabel</i> is part of the <i>dosfstools</i> project, a collection of utilities for creating, checking, and maintaining FAT filesystems on Linux and other Unix-like systems. The project originated to provide robust tools for interoperability with DOS/Windows filesystems, which were prevalent on removable media. <i>fatlabel</i> specifically addresses the need to manage the volume label, a common attribute for identifying disk partitions in the FAT ecosystem. Its functionality has been stable for a long time, evolving with FAT standards (FAT12, FAT16, FAT32) without significant changes to its core interface.


title: SYNOPSIS
content:
<b>fatrace</b> [<b>-p</b> <i>PID</i>] [<b>-t</b> <i>mountpoint</i>] [<b>-s</b> <i>SECONDS</i>] [<b>-o</b> <i>OUTPUT_FILE</i>]


title: PARAMETERS
content:
<b><b>-p</b> <i>PID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters file access events to only show those performed by the process with the specified <i>PID</i>.<br><br><b><b>-t</b> <i>mountpoint</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restricts monitoring to file access events occurring within the specified <i>mountpoint</i> (e.g., <i>/home</i>, <i>/var</i>).<br><br><b><b>-s</b> <i>SECONDS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a timeout in <i>SECONDS</i> after which <i>fatrace</i> will automatically terminate.<br><br><b><b>-o</b> <i>OUTPUT_FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects the output of <i>fatrace</i> from standard output to the specified <i>OUTPUT_FILE</i>.<br><br>


title: DESCRIPTION
content:
<i>fatrace</i> is a command-line utility for Linux systems designed to monitor and report file access events across the entire system or specific mount points. It leverages the <i>fanotify</i> kernel subsystem, which is more scalable and efficient than <i>inotify</i> for system-wide file activity monitoring. <i>fatrace</i> can track various file operations, including opening, reading, writing, and closing files. Its primary use cases include debugging unexpected disk activity, identifying processes performing I/O on specific files or directories, and auditing file access patterns. It provides output detailing the process name, process ID (PID), the type of file event (e.g., <i>O</i> for open, <i>R</i> for read, <i>W</i> for write, <i>C</i> for close), and the full path to the file involved. Due to its use of <i>fanotify</i>, <i>fatrace</i> requires root privileges to run.


title: CAVEATS
content:
<ul><li>Requires root privileges to run due to its reliance on the <i>fanotify</i> kernel API.</li><li>Can generate a large volume of output on busy systems, making it difficult to analyze without filtering.</li><li>The <i>fanotify</i> API itself has limitations; for example, it reports events on inodes, not necessarily on specific file descriptors, and events might not perfectly correspond to traditional <i>open()</i>/<i>read()</i>/<i>write()</i> calls in all scenarios.</li><li>The <i>fanotify</i> API is available in Linux kernel 2.6.37 and later.</li></ul>


title: OUTPUT FORMAT
content:
The output of <i>fatrace</i> typically follows the format: <i>PROCESS_NAME(PID): EVENT_TYPE FILE_PATH</i>.<br><i>EVENT_TYPE</i> can be: <br>&bull; <i>O</i> (Open)<br>&bull; <i>R</i> (Read)<br>&bull; <i>W</i> (Write)<br>&bull; <i>C</i> (Close)<br>&bull; Other less common types may also appear depending on kernel version and event flags.


title: PRIVILEGES
content:
Running <i>fatrace</i> requires root privileges. Attempting to run it as a regular user will result in a permission denied error. This is because the underlying <i>fanotify</i> kernel interface requires elevated permissions to monitor system-wide file events.


title: HISTORY
content:
<i>fatrace</i> was developed as a simpler and more efficient alternative to approaches like <i>strace</i> for system-wide file access monitoring. It specifically leverages the <i>fanotify</i> API, introduced in Linux kernel 2.6.37 (early 2011), which was designed for highly scalable file activity notification, especially for security applications like anti-virus scanning or hierarchical storage management. Prior to <i>fanotify</i>, <i>inotify</i> was available but was less suited for monitoring entire filesystems due to its per-directory watch limits and potential for performance overhead. <i>fatrace</i> simplifies access to this powerful kernel feature for system administrators and developers.


title: SYNOPSIS
content:
<b>fc</b> [-e <i>editor</i>] [-lnr] [<i>first</i>] [<i>last</i>]<br><b>fc</b> -s [<i>old</i>=<i>new</i>] [<i>command</i>]


title: PARAMETERS
content:
<b>-e <i>editor</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify Editor</i>. Invokes the specified <i>editor</i> to edit the commands. If <i>editor</i> is '-', no editor is invoked, and the commands are simply re-executed. If omitted, <b>FCEDIT</b> or <b>EDITOR</b> environment variables are used, or <b>vi</b> by default.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>List History</i>. Lists the commands rather than invoking an editor. Commands are printed to standard output.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Suppress Numbers</i>. Used with <b>-l</b>, suppresses the command numbers when listing history.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Reverse Order</i>. Reverses the order of commands. When listing (<b>-l</b>), it prints newest commands first. When editing or re-executing, it processes them in reverse chronological order.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Substitute and Re-execute</i>. Re-executes a command without invoking an editor. An optional <i>old</i>=<i>new</i> substitution can be applied to the command before execution. If <i>command</i> is omitted, the most recent command is used.<br><br><b><i>first</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Start Range</i>. Specifies the beginning of the command range. Can be a number (positive for absolute history number, negative for offset from current), or a string that matches the most recent command beginning with that string.<br><br><b><i>last</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>End Range</i>. Specifies the end of the command range. Behaves like <i>first</i>. If omitted when <i>first</i> is provided, it defaults to <i>first</i> for editing/re-execution, or the current command for listing.<br><br>


title: DESCRIPTION
content:
The <b>fc</b> (<i>fix command</i>) utility is a powerful shell built-in command that allows users to interact with their shell's command history. Its primary function is to invoke an editor on a range of previous commands, enabling easy modification and re-execution without retyping.<br><br>Alternatively, <b>fc</b> can simply list previous commands to standard output, providing a quick way to review executed commands. This command is particularly useful for correcting errors in long commands, reusing complex command structures, or quickly executing a slightly modified version of a previous command.<br><br>By default, <b>fc</b> uses the editor specified by the <b>FCEDIT</b> environment variable, or <b>EDITOR</b>, falling back to <b>vi</b> if neither is set. When editing, the commands are loaded into the editor, and upon saving and exiting, they are re-executed by the shell. The range of commands can be specified by their history numbers or by a string prefix matching a previous command.


title: CAVEATS
content:
<b>fc</b> is a shell built-in command, and its exact behavior and available options can vary slightly between different shells (e.g., Bash, Zsh, Ksh). The effectiveness of <b>fc</b> depends on the shell's history mechanism being enabled and properly configured (e.g., <b>HISTSIZE</b>, <b>HISTFILE</b>). The command relies on an external text editor being available on the system. If no editor is specified or found, <b>fc</b> might fail or resort to a default that is not user-friendly.


title: DEFAULT EDITOR
content:
By default, <b>fc</b> attempts to use the editor specified by the <b>FCEDIT</b> environment variable. If <b>FCEDIT</b> is not set, it falls back to the <b>EDITOR</b> environment variable. If neither is set, it typically defaults to <b>vi</b>. Users can explicitly set <b>FCEDIT</b> in their shell's configuration file (e.g., <b>.bashrc</b>) to their preferred editor (e.g., <b>export FCEDIT=nano</b>).


title: COMMAND NUMBERING
content:
Command numbers can be positive (absolute history index) or negative (relative to the current command, where -1 is the previous command). For example, <b>fc -e vi -1</b> edits the last command, and <b>fc -l 10</b> lists from history entry 10 to the current.


title: IMPLICIT RANGE
content:
If <i>first</i> is provided but <i>last</i> is not, and <b>fc</b> is used for editing, the range defaults to just <i>first</i>. If <b>fc -l</b> is used, the range defaults from <i>first</i> to the current command. If neither <i>first</i> nor <i>last</i> is provided, <b>fc -l</b> lists the last 16 commands by default, while <b>fc</b> for editing/re-execution defaults to the last command executed.


title: HISTORY
content:
The <b>fc</b> command originated in the Korn shell (<b>ksh</b>) and was subsequently adopted by other popular shells like Bash and Zsh. Its design was intended to provide a more sophisticated command-line editing and history manipulation capability than previously available. It built upon the simpler history mechanisms found in earlier shells, introducing the concept of invoking an external editor for command modification, making it a powerful tool for interactive shell users. Its inclusion in POSIX standards has ensured its widespread availability and consistent behavior across compliant Unix-like systems.


title: SYNOPSIS
content:
<i><b>fc-cache</b></i> [ <i>-frsvV</i> ] [ <i>--really-force</i> ] [ <i>--system-only</i> ] [ <i>--verbose</i> ] [ <i>--version</i> ] [ <i>--help</i> ] [ <i>dir...</i> ]


title: PARAMETERS
content:
<b><i>-f</i>, <i>--force</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the regeneration of the cache files, even if they appear to be up-to-date.<br><br><b><i>-r</i>, <i>--really-force</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An older option that behaves similarly to <i>--force</i>, typically meaning to remove existing caches before rebuilding. On modern systems, it's often synonymous with <i>--force</i>.<br><br><b><i>-s</i>, <i>--system-only</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scan only the system-wide font directories and caches (e.g., <i>/var/cache/fontconfig</i>) and ignore user-specific directories (e.g., <i>~/.cache/fontconfig</i>).<br><br><b><i>-v</i>, <i>--verbose</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print verbose status information while scanning and building caches, showing which directories and fonts are being processed.<br><br><b><i>-E</i>, <i>--config</i>=<i>file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative configuration file to use instead of the default.<br><br><b><i>-V</i>, <i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the <i>fontconfig</i> version and exit.<br><br><b><i>-h</i>, <i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a brief help message and exit.<br><br><b><i>dir...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional: One or more directories to scan for fonts. If no directories are specified, <i><b>fc-cache</b></i> scans all directories listed in the active <i>fontconfig</i> configuration.<br><br>


title: DESCRIPTION
content:
<i><b>fc-cache</b></i> is a utility program provided by the <i>fontconfig</i> library. Its primary purpose is to scan the directories specified in the font configuration files (e0g., <i>/etc/fonts/fonts.conf</i> or user-specific files) for fonts and create or update binary cache files. These cache files allow <i>fontconfig</i> and applications that use it to quickly look up available fonts and their properties without having to scan the font directories every time. <br><br>When you install new fonts, remove existing ones, or modify your font configuration, it is often necessary to run <i><b>fc-cache</b></i> to ensure that your system's font information is up-to-date. This command typically runs automatically during font package installation, but it can also be invoked manually by users or administrators to troubleshoot font-related issues or to force a cache regeneration. The cached data includes font names, styles, weights, character sets, and other metadata essential for font matching and selection.


title: CAVEATS
content:
Permissions: <i><b>fc-cache</b></i> requires appropriate write permissions to create or update cache files. System-wide caches (in <i>/var/cache/fontconfig</i>) typically require root privileges (e.g., running with <i>sudo</i>). User-specific caches (in <i>~/.cache/fontconfig</i>) only require user permissions.<br><br>Cache Corruption: Although rare, corrupted cache files can sometimes lead to font display issues. In such cases, manually deleting the cache directories (<i>/var/cache/fontconfig/</i> and <i>~/.cache/fontconfig/</i>) and then running <i><b>fc-cache -f -v</b></i> can resolve the problem.<br><br>Performance: While generally fast, running <i><b>fc-cache</b></i> on systems with an extremely large number of font directories or fonts can take a noticeable amount of time.


title: CACHE LOCATIONS
content:
<i><b>fc-cache</b></i> creates binary cache files in specific locations. System-wide caches are typically found in <i>/var/cache/fontconfig/</i>, while user-specific caches are stored in <i>~/.cache/fontconfig/</i>. These directories contain subdirectories for various font-related configurations and locale-specific caches.


title: WHEN TO RUN
content:
You usually don't need to run <i><b>fc-cache</b></i> manually as it's often triggered automatically when font packages are installed or updated by your system's package manager. However, you might run it if you:<br>1. Manually add or remove font files to font directories.<br>2. Experience font display issues after system updates or configuration changes.<br>3. Modify <i>fontconfig</i> configuration files (e.g., <i>fonts.conf</i>) directly.


title: HISTORY
content:
The <i>fontconfig</i> library and its associated utilities, including <i><b>fc-cache</b></i>, were primarily developed by Keith Packard, starting around 2000. Its creation was a crucial step in standardizing font management on Linux and other Unix-like systems, providing a robust, extensible, and predictable way for applications to discover and select fonts. Before <i>fontconfig</i>, font handling was often ad-hoc and inconsistent across different desktop environments and applications. <i><b>fc-cache</b></i> emerged as a necessary tool to optimize this process by pre-generating font metadata, significantly improving application startup times and font rendering performance.


title: SYNOPSIS
content:
<b>fc-cat</b> [ <I>-v</I> | <I>--verbose</I> ] [ <I>-e</I> | <I>--error</I> ] [ <I>--skip-deprecated</I> ] [ <I>file...</I> ]


title: PARAMETERS
content:
<b><I>-v</I>, <I>--verbose</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the effective configuration with verbose output, including detailed parsing information and where each rule originated.<br><br><b><I>-e</I>, <I>--error</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints error messages when parsing configuration files.<br><br><b><I>--skip-deprecated</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips processing of deprecated configuration elements.<br><br><b><I>file...</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more Fontconfig XML configuration files to process. If no files are specified, <b>fc-cat</b> processes the default system configuration.<br><br>


title: DESCRIPTION
content:
<b>fc-cat</b> is a utility from the <I>Fontconfig</I> library designed to process and display the effective font configuration. It reads Fontconfig XML configuration files, typically <I>fonts.conf</I> or user-specific files, and concatenates their content, resolving includes and applying rules, before printing the resulting configuration to standard output. This tool is invaluable for <I>debugging</I> and <I>understanding</I> how Fontconfig resolves font paths, aliases, and preferences across the system and user directories. It helps administrators and developers to verify the cumulative configuration derived from multiple font configuration files, which can be distributed across various locations like <I>/etc/fonts/conf.d/</I> and user's <I>~/.config/fontconfig/fonts.conf</I>. By examining its output, one can identify issues with font rendering, missing fonts, or incorrect font matching rules. Unlike simply concatenating XML files, <b>fc-cat</b> performs the actual Fontconfig parsing logic, including conditional processing and variable expansion, providing a true representation of the active configuration.


title: CAVEATS
content:
The output of <b>fc-cat</b> can be very verbose and complex, especially for large font configurations, making it challenging to parse manually. It's primarily a diagnostic tool for understanding Fontconfig's internal parsing logic rather than a general-purpose XML viewer. Users need to be familiar with Fontconfig's XML schema to fully interpret the output.


title: PURPOSE
content:
The primary purpose of <b>fc-cat</b> is to demonstrate how Fontconfig parses and consolidates multiple configuration files into a single, effective configuration. This is crucial because Fontconfig often combines system-wide settings, application-specific overrides, and user preferences to determine the final font rendering behavior. <b>fc-cat</b> effectively shows this merged view.


title: HISTORY
content:
<b>fc-cat</b> is an integral part of the <I>Fontconfig</I> library, which was developed by Keith Packard and released in 2000. Fontconfig provides system-wide font configuration, customization, and application access. As a utility for debugging and understanding this complex configuration system, <b>fc-cat</b> has been present since early versions of Fontconfig. Its purpose remains consistent: to reveal the complete, active font configuration as interpreted by the Fontconfig library, aiding in troubleshooting font-related issues in Linux and other Unix-like environments.


title: SYNOPSIS
content:
<b>fc-list</b> [-lnr] [first [last]]<br><i>Options:</i><br><b>-l</b>: Lists the commands.<br><b>-n</b>: Suppresses line numbers.<br><b>-r</b>: Reverses display order (newest first).<br><i>Arguments:</i><br><b>first</b>: Specifies the starting history entry (number or string).<br><b>last</b>: Specifies the ending history entry (number or string).


title: PARAMETERS
content:
<b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the commands from history. This option is often implicit but can be used for clarity.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the display of line numbers for each history entry.<br><br><b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reverses the order of the displayed commands, showing the newest first.<br><br><b><i>first</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the starting history entry. Can be a positive number (absolute index), a negative number (relative from current), or a string (to search for the most recent command starting with that string).<br><br><b><i>last</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the ending history entry. Behaves identically to <i>first</i>.<br><br>


title: DESCRIPTION
content:
<b>fc-list</b> is a shell builtin command that displays entries from the command history list. It allows users to view specific ranges or all history entries, offering options to control output format like line numbers and order. It's often used to identify commands for re-execution or editing via the <b>fc</b> command, serving as the "listing" component of the history mechanism. Its primary function is to provide a quick reference to previously executed commands for auditing or recall.


title: CAVEATS
content:
<b>fc-list</b> is a shell builtin, not an external executable. Its behavior can vary slightly between shells like <b>bash</b> and <b>ksh</b>, and it relies on the shell's history configuration (e.g., <b>HISTFILE</b>, <b>HISTSIZE</b>). In <b>bash</b>, it's often an alias or implemented via the <b>history</b> builtin, making <b>history -l</b> functionally similar.


title: INTEGRATION WITH <B>FC</B>
content:
While <b>fc-list</b> only displays history, it's intrinsically linked to the broader <b>fc</b> (fix command) utility, which allows users to edit and re-execute commands identified by <b>fc-list</b>.


title: SHELL BUILTIN NATURE
content:
Unlike most commands, <b>fc-list</b> is not a standalone executable file but a command built directly into the shell itself. This means its presence and exact features are determined by the shell (e.g., <b>bash</b>, <b>ksh</b>) you are using.


title: HISTORY
content:
The concept of advanced history manipulation, including listing and editing, originated with the <b>fc</b> command in the KornShell (<b>ksh</b>). The <b>fc-list</b> aspect specifically deals with displaying these entries. Later, shells like <b>bash</b> adopted similar robust history features, often integrating <b>fc-list</b>'s functionality into their own <b>history</b> builtin, making it a standard way to interact with command history.


title: SYNOPSIS
content:
<b>fc-match</b> <I>[-sV]</I> <I>[-c | --config config-file]</I> <I>[-v | --verbose]</I> <I>[-f | --format format]</I> <I>[pattern ...]</I>


title: PARAMETERS
content:
<b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Obsolete option to print the score of the matched font. This option is now ignored.</i><br><br><b>-c, --config <I>config-file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Use the specified Fontconfig configuration file instead of the default system configuration.</i><br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display verbose output of the matching process, including all fonts considered and their match qualities.</i><br><br><b>-f, --format <I>format</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Format the output according to the given Fontconfig pattern format specifier, as described in the Fontconfig manual.</i><br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Show the program's version information and exit.</i><br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display a summary of available command-line options.</i><br><br><b><I>pattern</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>The font pattern to match. If no pattern is supplied, the default font pattern is used.</i><br><br>


title: DESCRIPTION
content:
<b>fc-match</b> is a utility that <br>matches a given font pattern against the fonts available on the system. It then prints the <br>best-matching font from the system's font cache. If no specific pattern is provided, it uses a <br>default pattern to find a font. The command is primarily used for debugging Fontconfig <br>configurations and understanding how patterns are resolved to actual fonts. When used with the <br><I>--verbose</I> option, it provides detailed output, listing all fonts considered during the <br>matching process along with their respective match qualities, helping to diagnose font <br>selection issues. It's an essential tool for developers and system administrators working with <br>font rendering on Linux systems.


title: CAVEATS
content:
The <b>-s</b> option, although present in the synopsis, is obsolete and is now ignored by <b>fc-match</b>.


title: RETURN CODES
content:
<b>fc-match</b> returns <b>0</b> if a match is successfully found, and <b>1</b> if no matching font could be located.


title: BUGS
content:
Bug reports for Fontconfig, including issues with <b>fc-match</b>, should be filed against the "fontconfig" product in the freedesktop.org bugzilla.


title: SEE ALSO
content:
fc-list(1), fc-cat(1), fc-scan(1), fc-pattern(1), fc-query(1), fc-cache(1), fc-conflate(1), fc-edit(1), fc-nopattern(1), FcFontSet(3)


title: PARAMETERS
content:
<b><I>-v</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output. This provides more detailed information about the parsing process and the resulting pattern attributes.<br><br><b><I>-V</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version of the Fontconfig library and exit.<br><br><b><I>pattern ...</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more font pattern strings to be parsed and displayed. These are the input patterns that Fontconfig will interpret.<br><br>


title: DESCRIPTION
content:
The <I>fc-pattern</I> command is a utility provided by the Fontconfig library, designed to parse a given font pattern string and display the resulting Fontconfig pattern in a canonical, human-readable format. This tool is invaluable for debugging Fontconfig configurations, understanding precisely how specific font patterns are interpreted, and verifying the syntax of pattern strings before they are used by applications.<br><br>It takes one or more font pattern strings as arguments and outputs the detailed, parsed pattern for each. The output includes various font properties like family, style, weight, slant, size, and other specific features that Fontconfig uses to match fonts. By showing exactly what attributes Fontconfig extracts from a pattern, <I>fc-pattern</I> greatly aids developers and system administrators in troubleshooting font rendering issues, diagnosing unexpected font selections, and fine-tuning font configuration files.


title: CAVEATS
content:
<I>fc-pattern</I> is primarily a diagnostic and debugging tool; it does not modify system configuration or font caches.<br><I>Understanding its output</I> requires familiarity with Fontconfig's internal representation of font attributes.<br>It requires the Fontconfig library to be installed on the system.


title: FONT PATTERN SYNTAX
content:
A font pattern is a string that specifies a desired font by a series of attributes. For example, '<I>serif:bold:size=12</I>' is a simple pattern. Fontconfig parses these patterns into a structured set of properties. <I>fc-pattern</I> helps to visualize this internal representation, showing how 'serif' becomes a family name, 'bold' becomes a weight property, and 'size=12' sets the font size attribute. More complex patterns can include multiple families, specific languages, spacing types, and other advanced features.


title: HISTORY
content:
<I>fc-pattern</I> is an integral part of the Fontconfig project, which was initiated by Keith Packard around 2000. Fontconfig was developed to provide a standard, robust, and extensible method for managing fonts on Linux and other Unix-like operating systems. As a core utility, <I>fc-pattern</I> has been present since the early versions of Fontconfig, serving its fundamental role in helping users and developers understand how font pattern strings are interpreted by the library.


title: PARAMETERS
content:
<b><i>file</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more paths to font files (e.g., .ttf, .otf) whose Fontconfig properties are to be queried.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Fontconfig version and exits.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message explaining command usage and options, then exits.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays more detailed Fontconfig properties for each queried font file. This can include additional internal attributes.<br><br>


title: DESCRIPTION
content:
<code>fc-query</code> is a command-line utility provided by the <i>Fontconfig</i> library. Its primary purpose is to display the Fontconfig properties of specific font files. Unlike <code>fc-list</code> which queries the entire Fontconfig database or <code>fc-match</code> which finds the best matching font for a given pattern, <code>fc-query</code> focuses on individual font files.<br><br>When given one or more font file paths as arguments, <code>fc-query</code> parses each file and outputs the Fontconfig properties (like family, style, slant, weight, size, spacing, etc.) that Fontconfig would associate with that particular font. This makes it an invaluable diagnostic tool for font developers, system administrators, or users debugging font issues. It helps in understanding how Fontconfig interprets the metadata within a font file and how those properties might influence font matching and rendering in applications.


title: CAVEATS
content:
<code>fc-query</code> operates directly on specified font files and does not consult the Fontconfig caches or global configuration files (like <code>fonts.conf</code>) for resolving aliases or default values, except for how it parses the intrinsic properties of the font file itself. This means the output might not exactly reflect the final properties a font would have after full Fontconfig pattern matching and rule application within an application. It's a low-level inspection tool.


title: OUTPUT FORMAT
content:
The output of <code>fc-query</code> for each font file is a list of Fontconfig properties, presented as `<i>property</i>: <i>type</i> = <i>value</i>`. For instance, `family: string = "DejaVu Sans"` indicates the font family, while `weight: int = 80` represents the weight property. The specific properties displayed depend on the font file's metadata and the verbosity level.


title: USAGE EXAMPLE
content:
To query the properties of a specific font file, for example, '<i>/usr/share/fonts/dejavu/DejaVuSans.ttf</i>', you would use the command:<br><br><code>fc-query /usr/share/fonts/dejavu/DejaVuSans.ttf</code><br><br>To see more detailed information, including internal Fontconfig attributes, use the verbose flag:<br><br><code>fc-query -v /usr/share/fonts/dejavu/DejaVuSans.ttf</code>


title: HISTORY
content:
<code>fc-query</code> is an integral part of the <i>Fontconfig</i> library, which was originally developed by Keith Packard and others to provide a standard and efficient way for applications on Unix-like systems, particularly those using the X Window System, to discover, select, and manage fonts. Fontconfig emerged as a crucial component for modern desktop environments (like GNOME and KDE) to handle font rendering consistently across applications, abstracting away the complexities of various font formats and locations. <code>fc-query</code> specifically serves as a diagnostic utility to inspect the metadata of individual font files as interpreted by Fontconfig.


title: PARAMETERS
content:
<b><i>FILE...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more paths to font files to be scanned. If no files are specified, <I>fc-scan</I> attempts to read filenames from standard input.<br><br><b><b>-f</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads font filenames to be scanned from the specified <i>&lt;file&gt;</i>, with each filename expected on a new line.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the Fontconfig library version and exits.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information during the scanning process, useful for debugging parsing issues.<br><br><b><b>-y</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints only the filenames of the fonts that were successfully scanned, suppressing the detailed property output for each font.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints a summary of the fonts found in each file, offering a more concise output than the full property listing.<br><br><b><b>--format=</b><i>&lt;format&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom output format string using printf-like syntax. This allows users to define exactly which font properties are displayed and how, using property names (e.g., '%{family}', '%{pixelsize}').<br><br><b><b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses warnings that might occur during the scanning process, useful for automated scripts.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with command usage and available options.<br><br>


title: DESCRIPTION
content:
The <b><i>fc-scan</i></b> command is a utility from the <I>Fontconfig</I> library, designed to inspect and extract information from specific font files. Unlike <I>fc-list</I> which queries the font cache, <I>fc-scan</I> directly processes font files (e.g., TrueType, OpenType, OpenType CFF) provided as arguments or via standard input. It parses the font data and outputs a detailed list of its properties, such as family name, style, weight, width, spacing, PostScript name, and unique ID. This tool is invaluable for <br>debugging font-related issues, verifying the integrity of font files, or understanding the precise characteristics of a font before adding it to the system's font cache. It helps developers and system administrators to confirm if <I>Fontconfig</I> can correctly interpret a font file's metadata and properties.


title: CAVEATS
content:
<b><i>fc-scan</i></b> is primarily an inspection tool; it does not modify the system's font cache or install fonts. For font installation and cache management, use <b><i>fc-cache</i></b>. The default output format is detailed and XML-like, which might require parsing for automated scripting, although the <b>--format</b> option provides more control. <br>The exact set of available options and their behavior can vary slightly between different versions of the <I>Fontconfig</I> library. Users should consult their system's specific man page for the most accurate information.


title: OUTPUT FORMAT
content:
By default, <b><i>fc-scan</i></b> outputs font properties in an XML-like structure, detailing various attributes like family, style, weight, width, slant, spacing, pixelsize, scalable status, and the file path itself. This structured output facilitates programmatic parsing. The <b>--format</b> option offers greater control over the output, allowing users to specify a printf-like format string to extract specific properties, making it highly suitable for scripting and custom reporting.


title: USE CASES
content:
Key use cases for <b><i>fc-scan</i></b> include: <br><i>Verifying Font Integrity</i>: Checking if a downloaded or newly created font file is valid and readable by <I>Fontconfig</I>'s parsing engine. <br><i>Debugging Font Issues</i>: Pinpointing why a particular font might not be appearing correctly in applications by examining its reported properties and comparing them to expectations. <br><i>Inspecting Font Metadata</i>: Quickly retrieving detailed metadata about a font file without needing to install it on the system or rebuild font caches. <br><i>Scripting and Automation</i>: Extracting specific font properties for custom scripts that process or categorize font collections.


title: HISTORY
content:
The <I>Fontconfig</I> library, which includes <b><i>fc-scan</i></b>, was developed by Keith Packard as a robust and flexible system for font configuration and customization on Linux and other Unix-like operating systems. It was first released in the early 2000s, providing a much-needed standardized approach to font management beyond the traditional X11 font mechanisms. <br><b><i>fc-scan</i></b> has been a fundamental part of the <I>Fontconfig</I> utility suite since its early days, consistently serving its purpose of direct font file inspection as a core debugging and information-gathering tool within the font ecosystem.


title: SYNOPSIS
content:
fc-validate [ -f <i>file</i> | --file=<i>file</i> ]... [ -c | --config ] [ -i | --info ] [ -q | --quiet ]


title: PARAMETERS
content:
<b>-f <file>, --file=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Validates the specified Fontconfig XML <i>file</i>. This option can be used multiple times to validate several files. If no specific <i>FILE</i> arguments or <b>-f</b> options are provided, <b>fc-validate</b> defaults to validating the effective Fontconfig configuration (as if <b>-c</b> were used).<br><br><b>-i, --info</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints informational details about the parsed configuration structure, such as the number of directories, aliases, and rules found, in addition to performing the validation.<br><br><b>-c, --config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Validates the effective Fontconfig configuration. This means it loads and processes the default <i>fonts.conf</i> file and any files in the <i>conf.d</i> directories, exactly as Fontconfig would normally do to build its font database.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the output of validation errors. The command will still return a non-zero exit status if validation fails, making it suitable for scripting where only the exit status is needed to determine success or failure.<br><br>


title: DESCRIPTION
content:
The <b>fc-validate</b> command is a utility provided by the Fontconfig library. It is used to parse and validate Fontconfig XML configuration files for structural and basic semantic correctness. This tool helps administrators and users identify common issues, syntax errors, and inconsistencies within their font configuration, ensuring that the Fontconfig system can correctly interpret and apply the defined rules.<br><br>It can validate individual files specified as arguments or using the <b>-f</b> option. Alternatively, it can validate the composite, effective configuration that Fontconfig would use, which includes the primary <i>fonts.conf</i> and files within <i>conf.d</i> directories. Upon successful validation, the command exits with a zero status; otherwise, it returns a non-zero status and typically prints error messages to standard error.


title: CAVEATS
content:
<b>fc-validate</b> primarily checks for structural integrity and basic semantic correctness of Fontconfig XML files according to the Fontconfig DTD. It does not, however, guarantee that the fonts referenced actually exist, are accessible, or that the configuration will produce the desired visual rendering effects. It is a tool for syntax and basic consistency checking, not a rendering simulator. Ensure Fontconfig is properly installed for this command to function.


title: EXIT STATUS
content:
The command exits with status <b>0</b> if the configuration is valid and no errors are found during processing. A non-zero exit status (typically <b>1</b>) indicates that validation failed, an error occurred during processing, or invalid options were provided. This makes it suitable for use in shell scripts to automate configuration checks.


title: DEFAULT BEHAVIOR
content:
When <b>fc-validate</b> is invoked without any file arguments (i.e., no <b>-f</b> options or explicit <i>FILE</i> paths) and without the <b>-c</b> option, it implicitly acts as if <b>-c</b> was specified. It attempts to load and validate the system's active Fontconfig configuration, which typically resides in <i>/etc/fonts/fonts.conf</i> and the <i>conf.d</i> directory.


title: PARAMETERS
content:
<b><b>-d</b>, <b>--daemon</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs Fcitx in the background as a daemon process.<br><br><b><b>-r</b>, <b>--replace</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replaces an already running Fcitx instance with a new one.<br><br><b><b>-s</b>, <b>--no-systray</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents Fcitx from displaying a system tray icon.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Fcitx version information and then exits.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a help message with available command-line options and exits.<br><br>


title: DESCRIPTION
content:
<b>Fcitx</b> (Flexible Context Input X) is a widely used <i>input method framework</i> (IMF) for Unix-like operating systems, primarily Linux. It provides a robust and extensible platform for handling keyboard input, especially for languages that require complex input methods like Chinese, Japanese, and Korean. Instead of direct key-to-character mapping, Fcitx allows users to type sequences of keys which are then processed, converted, and displayed, often leveraging dictionaries and predictive text.<br><br>It supports a vast array of input methods (e.g., Pinyin, Wubi, Cangjie, Anthy, Mozc) through its modular architecture and plugin system. Fcitx integrates smoothly with desktop environments like GNOME, KDE, XFCE, and LXDE, typically offering a system tray icon for easy switching between input methods and configuration. Designed to be lightweight, fast, and highly customizable, Fcitx caters to diverse user needs and development requirements. Its plugin-based design facilitates the addition of new features, input methods, and themes, making it a versatile choice for internationalized input.


title: CAVEATS
content:
Proper configuration of environment variables (e.g., <i>XMODIFIERS</i>, <i>GTK_IM_MODULE</i>, <i>QT_IM_MODULE</i>) is crucial for Fcitx to function correctly with graphical applications, especially in X11 environments. Incomplete setup can lead to input issues or Fcitx not being recognized by applications.<br>While generally stable, compatibility with certain niche applications or specific Wayland setups might require additional configuration or could occasionally present minor quirks.


title: ENVIRONMENT VARIABLES
content:
For Fcitx to integrate seamlessly with various graphical applications, crucial environment variables must be correctly set. These typically include <i>XMODIFIERS=@im=fcitx</i> for X Window System applications, and <i>GTK_IM_MODULE=fcitx</i> along with <i>QT_IM_MODULE=fcitx</i> for GTK+ and Qt applications, respectively. These variables inform the application toolkits about the active input method engine.


title: ARCHITECTURE
content:
Fcitx features a highly modular and plugin-based architecture. This design enables developers to create and integrate new input methods, engines, themes, and various functionalities as independent plugins. This approach makes the framework exceptionally flexible and extensible, allowing for extensive customization without altering the core Fcitx system itself.


title: HISTORY
content:
Fcitx originated as a simplified Chinese input method for the X Window System. Over time, it expanded into a full-fledged, multi-language input method framework. A significant development was <i>Fcitx4</i>, a major rewrite that introduced a modern, modular, and extensible architecture. Ongoing development focuses on enhancing performance, improving Wayland compatibility, and adding new features, solidifying its position as a leading input solution on Linux.


title: SYNOPSIS
content:
<B>fclones</B> <I>[COMMAND]</I> <I>[OPTIONS]</I> <I>[PATH...]</I><br><br>Common commands:<br> <B>fclones find</B> <I>[OPTIONS]</I> <I>[PATH...]</I> <br> <B>fclones group</B> <I>[OPTIONS]</I> <I>[PATH...]</I> <br> <B>fclones rm</B> <I>[OPTIONS]</I> <I>[PATH...]</I> <br> <B>fclones link</B> <I>[OPTIONS]</I> <I>[PATH...]</I> <br> <B>fclones dedupe</B> <I>[OPTIONS]</I> <I>[PATH...]</I>


title: PARAMETERS
content:
<b><B>--help</B>, <I>-h</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a <I>help message</I> for the command or subcommand.<br><br><b><B>--version</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the <I>version information</I> of <I>fclones</I>.<br><br><b><B>--dry-run</B>, <I>-n</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulates the operation without making <I>any actual changes</I> to the file system.<br><br><b><B>--min-size</B> <I>&lt;SIZE&gt;</I>, <I>-s</I> <I>&lt;SIZE&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only considers files <I>larger than or equal to</I> the specified size (e.g., <I>1K</I>, <I>1M</I>).<br><br><b><B>--max-size</B> <I>&lt;SIZE&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only considers files <I>smaller than or equal to</I> the specified size (e.g., <I>10G</I>).<br><br><b><B>--exclude</B> <I>&lt;PATTERN&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes files or directories matching the given <I>glob pattern</I>.<br><br><b><B>--include-hidden</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes <I>hidden files</I> and directories in the scan.<br><br><b><B>--dedupe-strategy</B> <I>&lt;STRATEGY&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines which file to <I>keep</I> among duplicates (e.g., <I>oldest</I>, <I>newest</I>, <I>largest</I>, <I>smallest</I>).<br><br><b><B>--no-confirm</B>, <I>-f</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs actions <I>without</I> asking for user confirmation. Use with caution.<br><br><b><B>--hardlink</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replaces duplicate files with <I>hard links</I> to the original.<br><br><b><B>--symlink</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replaces duplicate files with <I>symbolic links</I> to the original.<br><br><b><B>--xfstype</B> <I>&lt;TYPE&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes files residing on <I>filesystems</I> of a specific type (e.g., <I>tmpfs</I>).<br><br><b><B>--one-filesystem</B>, <I>-x</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents crossing <I>filesystem boundaries</I> when scanning directories.<br><br>


title: DESCRIPTION
content:
<I>fclones</I> is a highly optimized command-line utility written in <I>Rust</I> designed to efficiently identify and manage duplicate files on a file system. It uses a multi-stage approach, typically starting with comparing file sizes, then block-by-block comparison, and finally cryptographic hashing (<I>e.g.</I>, <I>Blake3</I>) to ensure accuracy. This method significantly reduces the I/O operations and CPU cycles needed compared to simpler tools. <I>fclones</I> can find duplicates, group them, and then perform actions like deleting redundant copies or replacing them with hard links, thereby freeing up disk space. It provides features for safe operation, such as <I>dry-run</I> modes, and offers flexible filtering options to target specific files or directories. Its performance makes it suitable for large datasets.


title: CAVEATS
content:
<B>Caveats and Limitations:</B><br> <I>Data Loss Risk:</I> The <B>rm</B> and <B>dedupe</B> commands can permanently delete files. Always use <B>--dry-run</B> first, and carefully understand the implications of the <B>--dedupe-strategy</B> before proceeding with actual deletion or linking.<br> <I>Hard Link Limitations:</I> Hard links cannot span across different file systems. Attempting to create hard links between different file systems will result in an error or the creation of new copies instead of links.<br> <I>Performance on Large Scale:</I> While highly optimized, scanning an extremely large number of files or files located on very slow storage can still be time-consuming and I/O intensive. Consider limiting scan depths or using filters for extremely large datasets.


title: <B>PERFORMANCE OPTIMIZATION</B>
content:
<I>fclones</I> employs a multi-stage duplicate detection process: an initial <I>size comparison</I>, followed by <I>block-by-block comparison</I>, and finally a <I>cryptographic hash</I> (<B>Blake3</B> is often the default due to its exceptional speed and collision resistance). This intelligent approach minimizes the amount of data read from disk, leading to significant performance gains, especially on large datasets compared to tools that rely solely on full file hashing.


title: <B>MODULAR SUBCOMMANDS</B>
content:
<I>fclones</I> is structured with distinct subcommands for different operations (<B>find</B>, <B>group</B>, <B>rm</B>, <B>link</B>, <B>dedupe</B>), which allows for more granular control over its functionality. Users can first <I>find duplicates</I>, then <I>review the groups</I>, and only then proceed with actions like <I>removal</I> or <I>linking</I>, enhancing both safety and flexibility in managing duplicate files.


title: HISTORY
content:
<I>fclones</I> is a relatively modern utility, first released around <I>2019-2020</I>. It was created by <B>Paweł Kołaczyk</B> with the primary goal of providing a faster and more efficient alternative to existing duplicate file finders, leveraging the performance benefits of the <B>Rust</B> programming language and advanced hashing algorithms like <B>Blake3</B>. Its development focuses on speed, accuracy, and safe operation for large file collections, making it a popular choice for disk space management on modern Linux systems.


title: PARAMETERS
content:
<b><b>-b</b>, <b>--brute-force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates a brute-force attack, trying all possible character combinations.<br><br><b><b>-D</b>, <b>--dictionary</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a dictionary attack using words from the specified <i>&lt;file&gt;</i>.<br><br><b><b>-u</b>, <b>--unzip</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses external unzip for speedup (default and recommended behavior for traditional ZIP encryption).<br><br><b><b>-c</b>, <b>--charset</b> <i>&lt;charspec&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the character set to use for brute-force attacks (e.g., 'a:z', 'A:Z', '0:9', 'all').<br><br><b><b>-l</b>, <b>--length</b> <i>&lt;min-max&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the minimum and maximum password length range (e.g., '3-8').<br><br><b><b>-p</b>, <b>--pattern</b> <i>&lt;pattern&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the brute-force attack from a specific pattern or prefix.<br><br><b><b>-L</b>, <b>--last-pattern</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continues a previous brute-force attack from the last pattern tried.<br><br><b><b>-j</b>, <b>--jobs</b> <i>&lt;N&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs <i>N</i> concurrent jobs or threads to speed up the cracking process.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing progress and details.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses most output, only showing the password if found.<br><br><b><b>-o</b>, <b>--output</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the found password to the specified <i>&lt;file&gt;</i>.<br><br><b><b>-s</b>, <b>--slow</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a slower but less memory-intensive cracking method.<br><br><b><b>-C</b>, <b>--check</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks the integrity of the ZIP file before attempting to crack it.<br><br><b><b>-t</b>, <b>--temp-dir</b> <i>&lt;dir&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a temporary directory for intermediate files.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows version information and exits.<br><br>


title: DESCRIPTION
content:
<i>fcrackzip</i> is a dedicated command-line utility designed to recover forgotten or lost passwords from encrypted ZIP archives. It employs both <i>brute-force</i> and <i>dictionary</i> attack methods to systematically guess the correct password. Utilizing techniques like leveraging uncompressed data within the ZIP file (the default behavior) and multi-threading capabilities, it aims to optimize the password recovery process. While effective for ZIP files encrypted with traditional, weaker algorithms, its success rate heavily depends on the password's complexity and length, as well as the computational resources available. It is a valuable tool for legitimate password recovery.


title: CAVEATS
content:
<i>fcrackzip</i> is primarily designed for cracking ZIP files encrypted with the <b>traditional ZipCrypto algorithm</b>, which is known to be relatively weak. It generally <b>does not support stronger encryption methods</b> like AES-256, commonly used by newer ZIP tools (e.g., 7-Zip, WinZip with modern settings).<br>Password recovery success depends heavily on the complexity and length of the password, as well as the available computational power. Long or complex passwords can take an impractical amount of time to crack via brute-force. Always use this tool responsibly and only for files you have legitimate rights to access.


title: <B>ATTACK METHODS</B>
content:
<i>fcrackzip</i> supports two primary attack methods:<br><b>Dictionary Attack:</b> Attempts passwords from a provided list of common words or phrases. This is much faster if the password is simple and in the dictionary.<br><b>Brute-Force Attack:</b> Systematically tries every possible combination of characters within a defined set and length range. This method guarantees finding the password if enough time and computational power are available, but can be extremely time-consuming for longer or more complex passwords.


title: <B>PERFORMANCE CONSIDERATIONS</B>
content:
The time required to crack a password is directly proportional to its length and the complexity of its character set. Using the <b><code>-j</code></b> (<i><code>--jobs</code></i>) option with multiple CPU cores can significantly accelerate brute-force attempts. Leveraging the <b><code>-u</code></b> (<i><code>--unzip</code></i>) option (default) is also crucial as it uses external `unzip` to speed up the verification process by exploiting known-plaintext vulnerabilities within ZIP files.


title: HISTORY
content:
<i>fcrackzip</i> was initially developed by A. L. E. G. O. R. Y. in the early 2000s, specifically targeting the password recovery of ZIP archives utilizing the common, though less secure, <b>ZipCrypto</b> encryption method. Its development aimed to provide an efficient command-line tool for this niche, leveraging techniques to speed up the cracking process where possible. It has remained a go-to utility for legitimate password recovery of older or traditionally encrypted ZIP files due to its specialized nature.


title: PARAMETERS
content:
<b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help message.<br><br><b>--version, -V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show version information.<br><br><b>--hidden, -H</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search hidden files and directories (those starting with a dot).<br><br><b>--no-ignore, -I</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not respect <I>.gitignore</I>, <I>.ignore</I>, or <I>.fdignore</I> files.<br><br><b>--case-sensitive, -s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a case-sensitive search. Overrides smart-case and <I>--ignore-case</I>.<br><br><b>--ignore-case, -i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a case-insensitive search. Overrides smart-case.<br><br><b>--glob, -g</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret the pattern as a glob pattern instead of a regular expression.<br><br><b>--extension, -e <ext></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter by file extension. Can be used multiple times (e.g., <I>-e txt -e md</I>).<br><br><b>--type, -t <type></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter by file type. Types include: <I>f</I> (file), <I>d</I> (directory), <I>l</I> (symlink), <I>s</I> (socket), <I>p</I> (pipe), <I>b</I> (block device), <I>c</I> (char device).<br><br><b>--exec, -x <cmd></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Execute a command for each search result. The placeholder <I>{}</I> is replaced by the path of the found entry. For example: <I>fd .txt -x cat</I>.<br><br><b>--exec-batch, -X <cmd></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Execute a command once, passing all search results as arguments. The placeholder <I>{}</I> is replaced by all found paths. More efficient for commands that can handle multiple inputs.<br><br><b>--max-depth, -d <num></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum search depth from the starting path.<br><br><b>--min-depth, -m <num></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the minimum search depth from the starting path.<br><br><b>--full-path, -p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the full path of the search results instead of just the file name.<br><br><b>--follow, -L</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Follow symbolic links.<br><br><b>--color, -c <when></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Control color output. Values: <I>auto</I> (default), <I>always</I>, <I>never</I>.<br><br><b>--size, -S <+|-|=size></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter by size. Examples: <I>+1M</I> (greater than 1MB), <I>-500K</I> (less than 500KB), <I>=2G</I> (exactly 2GB).<br><br><b>--owner, -o <user:group></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter by owner and/or group. Examples: <I>john:staff</I>, <I>:users</I>.<br><br><b>--changed-within, -D <date/duration></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter by modification time. Examples: <I>2023-01-01</I>, <I>2weeks</I>, <I>3days ago</I>.<br><br><b>--exclude, -E <pattern></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exclude files/directories that match the given pattern. Can be used multiple times. Patterns are treated as regular expressions by default.<br><br><b>--prune</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not descend into directories that match an exclude pattern.<br><br><b>--threads, -j <num></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the number of worker threads to use. Defaults to the number of CPU cores.<br><br>


title: DESCRIPTION
content:
<B>fd</B> is a program to find entries in your filesystem, built as a modern, user-friendly, and significantly faster replacement for the traditional <B>find</B> utility. Written in Rust, it leverages Rust's performance capabilities to deliver search results quickly, especially on large directories.<BR><BR>Key features that differentiate <B>fd</B> include a simpler, more intuitive syntax compared to <B>find</B>, smart case-sensitive searching (case-sensitive if the pattern contains uppercase letters, otherwise insensitive), and colorized output by default for better readability. It intelligently ignores hidden files and directories, as well as patterns specified in <I>.gitignore</I>, <I>.ignore</I>, and <I>.fdignore</I> files by default, making daily searches less cluttered.<BR><BR><B>fd</B> supports regular expressions for powerful pattern matching, but also offers a glob mode. It can filter results by file type (files, directories, symlinks), extension, size, and modification date. Furthermore, <B>fd</B> includes robust options to execute commands on the found search results, either individually or in batches, similar to <B>find</B>'s <I>-exec</I> option, but with a more straightforward syntax. Its focus on speed and ease of use makes it a popular choice for developers and system administrators.


title: CAVEATS
content:
While <B>fd</B> aims to be a modern replacement for <B>find</B>, it is not a complete drop-in substitute for all <B>find</B> use cases. It simplifies many common operations but might lack the exhaustive set of options for extremely niche or complex filesystem attribute queries that <B>find</B> offers. Its default behavior of ignoring hidden files and <I>.gitignore</I> patterns, while convenient, can sometimes be unexpected for users accustomed to <B>find</B>'s default inclusiveness, requiring the use of <I>-H</I> or <I>-I</I> flags.


title: DEFAULT BEHAVIOR & SMART-CASE
content:
<B>fd</B> has several user-friendly defaults. By default, it ignores hidden files and directories (those starting with a dot) and files/directories specified in <I>.gitignore</I>, <I>.ignore</I>, or <I>.fdignore</I> files. The search pattern is treated as a regular expression.<BR><BR>The 'smart-case' feature is enabled by default: if your search pattern contains any uppercase characters, the search becomes case-sensitive. Otherwise, it remains case-insensitive. This behavior can be overridden using the <I>--case-sensitive</I> (<I>-s</I>) or <I>--ignore-case</I> (<I>-i</I>) flags.


title: EXECUTION WITH <B>-X</B> AND <B>-X</B>
content:
<B>fd</B>'s <I>-x</I> (<I>--exec</I>) and <I>-X</I> (<I>--exec-batch</I>) options provide powerful ways to act on search results. <I>-x</I> executes the specified command for <I>each</I> found file, replacing <I>{}</I> with the file's path. For example, <I>fd .txt -x cat</I> would display the content of each found <I>.txt</I> file.<BR><BR><I>-X</I> executes the command only once, passing <I>all</I> found files as arguments to the command. This is more efficient for commands that can handle multiple inputs. For example, <I>fd .txt -X rm</I> would remove all found <I>.txt</I> files in one <B>rm</B> call.


title: HISTORY
content:
<B>fd</B> was created by David Herges and first released in 2017. It was developed in Rust with the explicit goal of providing a faster and more intuitive alternative to the long-standing <B>find</B> command. Its adoption grew rapidly due to its performance benefits and user-friendly design, quickly becoming a preferred tool for file searching in many development and system administration workflows. The project continues to be actively maintained and improved, integrating new features while retaining its core principles of speed and simplicity.


title: PARAMETERS
content:
<b><i>device</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The block device to operate on (e.g., <i>/dev/sda</i>, <i>/dev/nvme0n1</i>). This argument is required for interactive mode or most non-listing operations.<br><br><b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List partition tables for the specified devices or all available devices if no <i>device</i> is given. This option forces non-interactive mode.<br><br><b><b>-s</b> <i>partition</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the size of the specified <i>partition</i> in 512-byte sectors.<br><br><b><b>-b</b> <i>sectorsize</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the sector size of the disk. Defaults to 512 bytes.<br><br><b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable DOS compatibility mode. This can be useful for non-DOS partitions.<br><br><b><b>-u</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When listing partitions, give sizes in sectors instead of cylinders (useful for precise measurements).<br><br><b><b>-w</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the partition table to disk and exit. This is a non-interactive way to save changes after modifying the partition table (e.g., using `echo 'n



w' | fdisk -w /dev/sdb`).<br><br><b><b>-N</b> <i>partnum</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Change the partition number of an existing partition.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print a help message and exit.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print version information and exit.<br><br>


title: DESCRIPTION
content:
<i>fdisk</i> is a powerful, menu-driven command-line utility used for <I>disk partition manipulation</I> on Linux and other Unix-like systems. It allows users to <I>create, delete, resize</I>, and modify partitions on hard drives, SSDs, and other storage devices. <br><br>While primarily known for its robust handling of <I>MBR (Master Boot Record)</I> partition tables, it also has basic support for <I>GPT (GUID Partition Table)</I>, though specialized tools like <i>gdisk</i> or <i>parted</i> are often preferred for complex GPT operations. <br><br><i>fdisk</i> interacts directly with the kernel's block device interface, making it an essential tool for preparing storage devices for file systems and operating system installations. Its default interactive mode presents a menu of options, guiding users through partition management tasks, while non-interactive options allow for scripting.


title: CAVEATS
content:
<b><I>Data Loss Risk:</I></b> <i>fdisk</i> is extremely powerful. Incorrect usage can lead to permanent data loss. Always back up critical data before making changes.<br><b><I>Root Privileges:</I></b> Requires root privileges to run.<br><b><I>MBR Focus:</I></b> While it has some basic GPT support, <i>fdisk</i> is traditionally optimized for MBR partition tables. For GPT-formatted disks, <i>gdisk</i> or <i>parted</i> are generally recommended due to their native handling of GPT features.<br><b><I>Changes Not Immediate:</I></b> In interactive mode, changes are only written to the disk's partition table when you explicitly use the 'w' command (write). Until then, changes are only in memory.<br><b><I>In-use Partitions:</I></b> Modifying an in-use (mounted) partition can cause system instability or data corruption. It's best to unmount partitions or work from a live boot environment when performing critical changes.


title: INTERACTIVE MODE
content:
When invoked without the <b>-l</b> option (e.g., <b>fdisk /dev/sda</b>), <i>fdisk</i> enters an interactive, menu-driven mode. Users can type single-letter commands to manipulate the partition table. Common interactive commands include: <br><b>n</b>: Add a new partition<br><b>d</b>: Delete a partition<br><b>p</b>: Print the partition table<br><b>t</b>: Change a partition's system ID<br><b>L</b>: List known partition types<br><b>w</b>: Write table to disk and exit (<i>saves changes permanently!</i>)<br><b>q</b>: Quit without saving changes<br><br>Changes are only written to disk upon explicit confirmation with the <b>w</b> command, providing a crucial safeguard against accidental modifications.


title: PARTITION TABLE TYPES
content:
<i>fdisk</i> primarily works with <I>MBR (Master Boot Record)</I> partition tables, which are commonly found on older systems or smaller drives. MBR supports up to four primary partitions or three primary and one extended partition, with the extended partition potentially containing multiple logical partitions. While <i>fdisk</i> has basic capabilities to read and manipulate GPT (GUID Partition Table) disks, for comprehensive and robust GPT management, tools like <i>gdisk</i> or <i>parted</i> are generally recommended as they natively support GPT's advanced features, such as larger disk sizes and a virtually unlimited number of partitions.


title: HISTORY
content:
<i>fdisk</i> has been a fundamental utility in Unix-like systems for decades, tracing its origins back to the early days of disk management. It is part of the <I>util-linux</I> project, which bundles various essential system utilities for Linux. Its stable and mature codebase has made it a default choice for basic partition manipulation. While newer tools like <i>parted</i> and <i>gdisk</i> offer more modern features, especially for GPT, <i>fdisk</i> remains widely used due to its simplicity, efficiency, and robust handling of MBR partition tables.


title: PARAMETERS
content:
<b><b>-T</b> <i>format</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format (e.g., <i>png</i>, <i>svg</i>, <i>pdf</i>, <i>ps</i>, <i>dot</i>). This option is crucial for saving the graph in a usable image or document format.<br><br><b><b>-o</b> <i>output_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the generated graph to the specified file. If this option is omitted, <b>fdp</b> writes its output to standard output (stdout).<br><br><b><b>-G</b> <i>attribute</i>=<i>value</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a global graph attribute. This option can be used multiple times to set different attributes for the entire graph (e.g., <i>-Gbgcolor=lightgrey</i>).<br><br><b><b>-N</b> <i>attribute</i>=<i>value</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a default node attribute. This allows you to define properties for all nodes unless overridden by specific node definitions (e.g., <i>-Nshape=circle</i>).<br><br><b><b>-E</b> <i>attribute</i>=<i>value</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a default edge attribute. Similar to <b>-N</b>, this applies properties to all edges (e.g., <i>-Ecolor=blue</i>).<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses warning messages during graph processing. Useful for scripting where warnings might clutter output.<br><br><b><b>-s</b> [<i>factor</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scales the output layout. If no <i>factor</i> is given, it attempts to scale the layout to fit within standard paper sizes or a default boundary.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, displaying progress and layout details to stderr. Helpful for debugging or understanding layout phases.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of the <b>fdp</b> command and exits.<br><br><b><i>input_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to a file containing the graph definition in DOT language. If this argument is omitted, <b>fdp</b> reads the graph definition from standard input (stdin).<br><br>


title: DESCRIPTION
content:
<b>fdp</b> is a layout engine from the Graphviz suite, specifically designed for visualizing undirected graphs using a force-directed (or spring-model) algorithm. This method treats graph nodes as mutually repulsive particles and edges as attractive springs, iteratively adjusting their positions to achieve a visually balanced and stable layout. It is particularly effective for graphs where the overall structure, clustering, and relative proximity of nodes are more important than strict hierarchical or radial arrangements.<br><br><b>fdp</b> reads graph descriptions in the DOT language, processes them, and outputs the rendered graph in various formats, including PNG, SVG, PDF, and PostScript. Its primary goal is to minimize edge crossings, place related nodes closer together, and distribute nodes evenly, thereby making complex graph structures more intelligible and aesthetically pleasing for analysis and presentation.


title: CAVEATS
content:
<b>Performance:</b> For extremely large graphs (tens of thousands of nodes/edges), <b>fdp</b> can be computationally intensive and slow, as force-directed algorithms typically have higher complexity. For such cases, <b>sfdp</b> (Scalable Force Directed Placement) is often a more suitable and faster alternative.<br><br><b>Layout Determinism:</b> While <b>fdp</b> aims for consistent layouts, minor changes in input or different Graphviz versions might lead to slightly varied layouts due to the iterative nature of the algorithm and potential floating-point precision differences.<br><br><b>Parameter Tuning:</b> Achieving optimal or desired layouts often requires careful tuning of graph, node, and edge attributes (e.g., <i>len</i>, <i>K</i>, <i>repulsiveforce</i>), which can involve experimentation.


title: BEST USE CASES
content:
<b>fdp</b> excels at visualizing undirected graphs where relationships are non-hierarchical, such as social networks, biological interaction maps, protein-protein interaction networks, or software dependency graphs. Its inherent ability to reveal clusters and highly connected components naturally makes it a powerful tool for exploring the intrinsic structure and organization of such data.


title: DOT LANGUAGE DEPENDENCY
content:
Effective utilization of <b>fdp</b> heavily relies on understanding and correctly using the DOT language for graph description. Familiarity with DOT syntax for defining nodes, edges, and their attributes is essential for customizing the appearance and influencing the layout behavior of your graphs.


title: HISTORY
content:
<b>fdp</b> is a foundational component of the open-source Graphviz (Graph Visualization Software) project, which originated at AT&T Labs Research in the mid-1990s. The project was conceived to automate graph drawing, a critical need for visualizing complex data structures. Along with <b>dot</b> and <b>neato</b>, <b>fdp</b> was among the early and core layout engines developed to address different graph structures and layout requirements. Its force-directed approach proved invaluable for effectively visualizing complex, non-hierarchical data, establishing it as a key tool for graph analysis and representation within the scientific, engineering, and data visualization communities.


title: SYNOPSIS
content:
<I>fdroid</I> [<B>OPTIONS</B>] <B>COMMAND</B> [<B>ARGUMENTS...</B>]<br><br>Common Commands:<br><B>fdroid init</B> [<B>OPTIONS</B>]<br><B>fdroid build</B> [<B>OPTIONS</B>] <B>PACKAGE_NAME</B>...<br><B>fdroid update</B> [<B>OPTIONS</B>]<br><B>fdroid publish</B> [<B>OPTIONS</B>]<br><B>fdroid lint</B> [<B>OPTIONS</B>]<br><B>fdroid sign</B> [<B>OPTIONS</B>] <B>APK_FILE</B><br><B>fdroid version</B><br><B>fdroid help</B> [<B>COMMAND</B>]


title: PARAMETERS
content:
<b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's help message and exit.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show program's version number and exit.<br><br><b><b>--verbose</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output more information during execution.<br><br><b><b>--pretty-print</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pretty print JSON output.<br><br><b><b>--no-sig-check</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not check signatures (use with caution).<br><br><b><b>--server-dir</b> <B>DIR</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the server directory (default: current directory).<br><br><b><b>--repo-url</b> <B>URL</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The URL of the repository (required for publishing).<br><br><b><b>--repo-name</b> <B>NAME</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the repository.<br><br><b><b>--repo-key</b> <B>KEY_ID</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The GPG key ID to use for signing the repository.<br><br><b><b>--signer</b> <B>SIGNER</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The signing command to use (e.g., 'jarsigner' or 'apksigner').<br><br><b><b>--user-agent</b> <B>AGENT</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set custom user agent for network requests.<br><br><b><b>--disable-check-updates</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not check for new <I>fdroidserver</I> versions.<br><br><b><i>Specific to build command:</i><br><b>--force-build</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force a build even if APK exists.<br><br><b><b>--skip-check-upstream-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not check upstream for new versions.<br><br><b><b>--clean</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clean build directory before building.<br><br><b><b>--skip-clean</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not clean build directory after building.<br><br><b><b>--tag</b> <B>TAG</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Build a specific Git tag.<br><br><b><b>--version-code</b> <B>CODE</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Build a specific version code.<br><br><b><b>--subdir</b> <B>SUBDIR</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Build from a specific subdirectory within the app's source.<br><br><b><i>Specific to update command:</i><br><b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Update all apps.<br><br><b><b>--latest</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only add the latest version to the repo.<br><br><b><b>--include-signed-apks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include already signed APKs.<br><br><b><i>Specific to publish command:</i><br><b>--force-publish</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Publish even if repository is not clean.<br><br><b><b>--json-only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only update the JSON index, do not copy APKs.<br><br><b><b>--zip-only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only generate the ZIP file, do not copy APKs or update JSON.<br><br><b><b>--copy-apks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Copy APKs to the repository directory.<br><br>


title: DESCRIPTION
content:
The <I>fdroid</I> command on Linux is part of the <I>fdroidserver</I> suite, a collection of tools designed for building, managing, and publishing F-Droid application repositories. Unlike the F-Droid client application on Android, this command-line utility empowers developers and organizations to host their own independent F-Droid stores. It automates the process of fetching application source code, compiling it, creating signed APKs, and generating the necessary metadata and index files for an F-Droid repository. Users can define application configurations, manage build recipes, and keep their repositories updated with new versions or patches. It's a crucial component for fostering a decentralized and open-source Android ecosystem, providing an alternative distribution channel to proprietary app stores. This tool is primarily used for creating and maintaining custom F-Droid repositories.


title: CAVEATS
content:
<I>fdroidserver</I> and the <I>fdroid</I> command require a complex setup, including Java Development Kit (JDK), Python 3, and various build tools (e.g., Android SDK build tools, Git). The configuration for building apps, especially older ones, can be intricate due to varying Android API levels, build systems (Gradle, Ant, Maven), and dependencies. Managing GPG keys for repository signing is critical and requires careful handling. Building apps can be resource-intensive, requiring significant CPU, RAM, and disk space. Errors often arise from environment misconfigurations or issues with upstream source code.


title: <B>TYPICAL WORKFLOW</B>
content:
The typical workflow for using the <I>fdroid</I> command involves first initializing a repository using <B>fdroid init</B>. Then, app metadata (YML files) are added or updated in the <I>metadata</I> directory. Applications are then built and added to the repository using <B>fdroid build</B> followed by <B>fdroid update</B> to generate the repository index. Finally, <B>fdroid publish</B> is used to copy the APKs and index files to the serving directory. This structured approach ensures all apps are built from source and properly signed before distribution.


title: <B>CONFIGURATION FILES</B>
content:
The <I>fdroid</I> command heavily relies on configuration files, primarily located within the server directory. These include YML files in the <I>metadata/</I> directory, which define each application's details and build instructions, and the main <I>config.py</I> file, which contains global repository settings. Understanding and correctly configuring these files is essential for effective use of the <I>fdroid</I> command.


title: HISTORY
content:
F-Droid was founded in 2010 by Ciaran Gultnieks, aiming to provide a fully free and open-source alternative to proprietary Android app stores. The <I>fdroidserver</I> toolkit, including the <I>fdroid</I> command, emerged as the core technology enabling this vision. It was developed to automate the entire process of building, signing, and publishing applications from their source code, ensuring reproducibility and transparency. The project has consistently focused on user privacy, security, and decentralized distribution, evolving its tools and processes to support a growing ecosystem of independent app developers and repository maintainers. Its development is community-driven and open-source.


title: SEE ALSO
content:
<b>adb(1)</b>: Android Debug Bridge, for interacting with Android devices., <b>git(1)</b>: Distributed version control system, crucial for fetching app sources., <b>jarsigner(1)</b>: Java tool for signing JAR files, used for APKs., <b>apksigner(1)</b>: Android SDK tool for signing APKs., <b>gpg(1)</b>: GNU Privacy Guard, for managing cryptographic keys and signing.


title: SYNOPSIS
content:
<b>fdroidcl</b> [<I>options</I>] <I>command</I> [<I>arguments...</I>]<br><b>fdroidcl</b> [<I>options</I>] <I>subcommand</I> [<I>subcommand-options</I>] [<I>arguments...</I>]


title: PARAMETERS
content:
<b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a comprehensive help message and exits.<br><br><b>--version, -V</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <b>fdroidcl</b> program's version number and exits.<br><br><b>--verbose, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of the output, showing more details about operations.<br><br><b>--quiet, -q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Decreases the verbosity of the output, suppressing non-essential messages.<br><br><b>--non-interactive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the command in non-interactive mode, avoiding prompts for user input.<br><br>


title: DESCRIPTION
content:
<b>fdroidcl</b> is a robust command-line interface (CLI) for interacting with the F-Droid open-source software repository. It empowers users to manage their F-Droid applications directly from the terminal, offering functionalities such as searching for apps, installing them, keeping them updated, and removing them. Unlike graphical F-Droid clients, <b>fdroidcl</b> is ideal for scripting, automation, and for users who prefer a text-based workflow. It leverages the F-Droid repository's metadata to provide comprehensive information about applications, including their descriptions, versions, and permissions. The tool supports managing multiple repositories, making it flexible for accessing various F-Droid-compatible sources. It's an essential utility for users who want fine-grained control over their Android applications without relying on proprietary app stores or a graphical user interface.


title: CAVEATS
content:
<ul><li><b>fdroidcl</b> requires <I>adb</I> (Android Debug Bridge) to be installed and properly configured on the system to interact with Android devices.</li><li>The Android device must have USB debugging enabled and be authorized for the <I>adb</I> connection.</li><li>It primarily manages F-Droid applications and does not interact with Google Play Store apps.</li><li>Installation typically happens via ADB, which means the device needs to be connected and recognized by ADB.</li></ul>


title: KEY SUBCOMMANDS
content:
<b>fdroidcl</b> operates primarily through subcommands, each performing a specific task:<br><ul><li><b>search</b> <I>&lt;query&gt;</I>: Used to find applications in configured F-Droid repositories. The <I>&lt;query&gt;</I> can be part of the app name, package ID, or description.</li><li><b>install</b> <I>&lt;package_id&gt;</I>: Installs the specified application on the connected Android device. Requires <I>adb</I> to be set up and the device to be connected.</li><li><b>update</b>: Refreshes the local F-Droid repository index from configured sources, ensuring you have the latest app information.</li><li><b>show</b> <I>&lt;package_id&gt;</I>: Displays detailed information about an application, including its description, versions, permissions, and metadata.</li><li><b>list</b>: Lists all applications currently installed on the connected device that were managed by <b>fdroidcl</b>.</li><li><b>remove</b> <I>&lt;package_id&gt;</I>: Uninstalls the specified application from the connected Android device.</li><li><b>repo</b>: A subcommand itself, used for managing F-Droid repositories. Common uses include <b>fdroidcl repo add</b> <I>&lt;url&gt;</I> <I>&lt;fingerprint&gt;</I>, <b>fdroidcl repo list</b>, and <b>fdroidcl repo remove</b> <I>&lt;url&gt;</I>.</li></ul>


title: HISTORY
content:
<b>fdroidcl</b> emerged as a project to provide a command-line alternative to the graphical F-Droid client, catering to developers, system administrators, and users who prefer terminal-based interactions or automation. Its development has focused on leveraging the existing F-Droid repository structure and <I>adb</I> capabilities to offer a seamless experience for managing open-source Android applications without requiring a GUI. It fills a niche for headless server setups or integrating F-Droid app management into larger scripts.


title: PARAMETERS
content:
<b>-r, --recurse</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Recursively scan specified directories.</I><br><br><b>-s, --symlink</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Follow symbolic links found in arguments and during recursive scans.</I><br><br><b>-d, --delete</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Prompt user for files to preserve, delete all others in a set of duplicates.</I><br><br><b>-N, --noprompt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Used with <B>--delete</B>; preserve the first file, delete others without prompting. <B>Use with extreme caution!</B></I><br><br><b>-f, --omitfirst</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Omit the first file in each set of duplicates from output.</I><br><br><b>-L, --hardlink</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Replace all duplicate files with hardlinks to the first file in each set.</I><br><br><b>-S, --symlink</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Replace all duplicate files with symlinks to the first file in each set.</I><br><br><b>-m, --summarize</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Summarize duplicate file information, showing total duplicates and space saved.</I><br><br><b>-n, --noempty</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Exclude zero-length files from consideration.</I><br><br><b>-1, --sameline</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>List each set of duplicate files on a single line, separated by spaces.</I><br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Do not show progress indicator.</I><br><br><b>-p, --preservepermissions</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Preserve permissions of original file when hardlinking or symlinking duplicates.</I><br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Display fdupes version information and exit.</I><br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Display usage instructions and exit.</I><br><br>


title: DESCRIPTION
content:
<I>fdupes</I> is a command-line utility written in C for efficiently finding and managing duplicate files within specified directories. It identifies duplicates by first comparing file sizes, then by comparing cryptographic hash signatures (like MD5 or SHA-1) of their content. This two-stage approach minimizes unnecessary byte-by-byte comparisons, making it quite fast.<br><br>Files with identical sizes are subjected to a full content hash validation to confirm their identical nature. Upon discovery, <I>fdupes</I> offers several powerful actions: it can simply list the duplicates, allow for interactive deletion where the user chooses which files to preserve, or replace duplicates with hardlinks or symlinks to the first encountered instance, thereby saving disk space. It supports recursive scanning of directories, following symbolic links, and various output formats for flexibility. As a robust tool, <I>fdupes</I> is invaluable for cleaning up cluttered storage, optimizing disk usage, and maintaining an organized file system.


title: CAVEATS
content:
<ul><li>Using options like <B>--delete</B>, especially in combination with <B>--noprompt</B>, can lead to irreversible data loss if used incorrectly. Always double-check commands before execution.</li><li>The default behavior of <I>fdupes</I> might recursively scan directories depending on the version and compilation options; it's always safer to explicitly use <B>--recurse</B> if that's the desired behavior.</li><li>Hardlinking or symlinking duplicates changes the filesystem structure. Be aware of implications, especially with backups or applications that expect distinct file paths.</li><li><I>fdupes</I> relies on file content hashes (MD5/SHA-1 by default). While collisions are rare, they are theoretically possible, meaning two different files could have the same hash. However, for practical purposes, this is usually not a concern for typical file management.</li></ul>


title: PERFORMANCE CONSIDERATIONS
content:
<I>fdupes</I> processes files in order of size, which helps in quickly discarding non-duplicates. For large numbers of files, especially across different storage devices, its performance can be significantly impacted by disk I/O. Using faster storage or limiting the scope of the scan can improve speed.


title: CHECKSUM ALGORITHMS
content:
While <I>fdupes</I> historically used MD5, newer versions might support SHA-1 or other algorithms, providing stronger guarantees against hash collisions. Check your specific version's man page for details on which algorithms are used or can be configured.


title: INTERACTIVE DELETION
content:
The interactive deletion mode (<B>-d</B>) presents each set of duplicate files and asks the user to choose which files to keep. This is a very safe way to remove duplicates, as it provides granular control. The files are numbered, and the user enters the numbers of files to preserve, separated by spaces. Entering a blank line preserves all files in the current set, and entering <B>?</B> or <B>h</B> shows help.


title: HISTORY
content:
<I>fdupes</I> was originally written by <b>Adrian Lopez</b> and first released in 2003. It quickly became a popular and lightweight utility for duplicate file detection on Unix-like systems due to its efficiency and straightforward approach. Over the years, it has seen contributions from various developers, adding features like more robust hashing algorithms (e.g., SHA-1, SHA-256 in newer versions), improved output formatting, and additional options for handling duplicates like symlinking. Its development has focused on maintaining a fast and reliable tool for a common system administration task.


title: SYNOPSIS
content:
<b>feedreader</b> [<i>OPTIONS</i>]<br>or if installed via Flatpak:<br><b>flatpak run org.gnome.FeedReader</b> [<i>OPTIONS</i>]


title: PARAMETERS
content:
<b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the application's version information and exits.<br><br><b><i>--display=DISPLAY</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the X display to use (a common GTK option for GUI applications).<br><br>


title: DESCRIPTION
content:
FeedReader is a modern, open-source desktop application for Linux designed to aggregate and read RSS, Atom, and JSON feeds. It provides a clean and intuitive graphical user interface (GUI) for subscribing to various news sources, blogs, and podcasts, allowing users to keep up-to-date with their favorite content in one centralized location. The application supports features such as unread article tracking, article starring, dark mode, customizable layouts, and integration with external web browsers for viewing full articles. FeedReader often leverages system notifications for new content and can synchronize with various online feed services or operate standalone. It aims to offer a user-friendly experience for feed consumption without browser clutter.


title: CAVEATS
content:
FeedReader is primarily a graphical user interface (GUI) application. It requires a desktop environment to function and is not designed for command-line-only operations. Its command-line usage is generally limited to launching the application or querying basic information like help or version.


title: INSTALLATION
content:
FeedReader is commonly installed via Flatpak or Snap, offering sandboxed environments and easy updates. It can also be found in the official repositories of some Linux distributions, depending on the maintainers' choices.


title: DESKTOP INTEGRATION
content:
It integrates well with the GNOME desktop environment, supporting features like dark mode, system notifications for new articles, and native themeing, providing a seamless user experience within the desktop ecosystem.


title: HISTORY
content:
FeedReader is a relatively modern application, primarily developed for the GNOME desktop environment. It started as a community project aiming to provide a native GTK-based RSS/Atom reader, distinct from web-based solutions or integrated mail clients. Its development has seen it become a part of the 'GNOME Circle' initiative, highlighting well-integrated and high-quality applications for the GNOME ecosystem. It's often distributed via Flatpak for broader compatibility across Linux distributions, making it easily accessible on many systems.


title: SYNOPSIS
content:
<i>The term "selinux" refers to a Linux kernel security module, not a standalone executable command. Therefore, there is no direct command synopsis for "selinux" itself. Interaction and management of the SELinux system are performed using a suite of dedicated utilities. Common examples include:<br><br><b>getenforce</b><br><b>setenforce</b> [ <i>Enforcing | Permissive | 0 | 1</i> ]<br><b>sestatus</b> [ <i>-v | -b | -f</i> ]<br><b>semanage</b> { <i>login | user | port | fcontext | boolean | permissive | dontaudit</i> } ...<br><b>chcon</b> [ <i>OPTION</i> ]... <i>CONTEXT FILE...</i> | <i>-R</i> [ <i>OPTION</i> ]... <i>FILE...</i><br><b>restorecon</b> [ <i>OPTION</i> ]... <i>FILE...</i></i>


title: DESCRIPTION
content:
<i>The term "selinux" (Security-Enhanced Linux) refers to a Linux kernel security module, not a single standalone command. It is a mandatory access control (MAC) system that provides an additional layer of security on top of the traditional discretionary access control (DAC) model. Unlike DAC, where users can control access to their own resources, SELinux policies enforce system-wide access rules, regardless of user permissions. <br><br>SELinux operates by labeling every file, process, port, and other system object with a security context. Policy rules then define which interactions are allowed between these contexts. This fine-grained control helps to confine services, protect against privilege escalation, and mitigate the impact of compromised applications, even if they achieve root privileges. <br><br>Management and interaction with the SELinux system are performed through a collection of specialized commands, each designed for a specific task (e.g., checking status, changing modes, managing contexts, or querying policy).</i>


title: CAVEATS
content:
<i><br><b>Complexity:</b> SELinux has a steep learning curve due to its intricate policy language and conceptual model. Misunderstanding can lead to functional breakage.<br><br><b>Debugging:</b> Policy violations are logged to the audit log (typically <code>/var/log/audit/audit.log</code>). Interpreting these logs and creating appropriate policy rules requires specific tools and knowledge.<br><br><b>Distribution Differences:</b> While core concepts are consistent, the default policies and command implementations can vary slightly between Linux distributions (e.g., Red Hat-based vs. Debian-based systems).<br><br><b>Performance Overhead:</b> Although generally negligible on modern systems, SELinux policy enforcement can introduce a slight performance overhead in some I/O-intensive scenarios.</i>


title: <I>OPERATIONAL MODES</I>
content:
<i>SELinux can operate in three main modes:<br><b>Enforcing:</b> SELinux policy is fully active and violations are blocked and logged. This is the most secure mode.<br><b>Permissive:</b> SELinux policy is active, but violations are only logged and not blocked. This mode is useful for troubleshooting and policy development, as it allows identification of issues without hindering system operation.<br><b>Disabled:</b> SELinux is turned off and no policy is loaded. This is generally discouraged for production systems as it removes a significant security layer.</i>


title: <I>SECURITY CONTEXTS</I>
content:
<i>Every subject (process) and object (file, port, device) in an SELinux-enabled system is assigned a security context, typically represented as a string with four or more fields:<br><code>user:role:type:sensitivity[:category]</code><br><br><b>User:</b> An SELinux user, mapping to a Linux user (e.g., <code>system_u</code>, <code>unconfined_u</code>).<br><b>Role:</b> Defines the role a user or process can play (e.g., <code>object_r</code> for files, <code>system_r</code> for processes).<br><b>Type:</b> The most critical component, defining the SELinux type of an object or domain of a process (e.g., <code>httpd_t</code> for an Apache process, <code>httpd_sys_content_t</code> for web content). Policy rules are primarily based on types.<br><b>Sensitivity/Category:</b> Used for Multi-Level Security (MLS) or Multi-Category Security (MCS) and typically represented as <code>s0</code> or <code>s0:c0.c1023</code>.</i>


title: HISTORY
content:
<i>SELinux was originally developed by the National Security Agency (NSA) of the United States. It was released to the open-source community in 2000 and subsequently integrated into the mainstream Linux kernel in version 2.6, released in 2003. Its primary adoption as a default security mechanism is notably in Red Hat Enterprise Linux, Fedora, and CentOS distributions, where it has become a cornerstone of their security posture.</i>


title: SEE ALSO
content:
getenforce(8), setenforce(8), sestatus(8), semanage(8), chcon(1), restorecon(8), audit2allow(1), seinfo(8), sesearch(8)


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Show <b>dive</b>'s usage and options.</i><br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display the version information for <b>dive</b>.</i><br><br><b>-j, --json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Output image analysis in JSON format to stdout, instead of the interactive UI. Useful for scripting.</i><br><br><b>-o, --output FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>When used with <b>--json</b>, specifies a file to write the JSON output to.</i><br><br><b>--ci</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Run in CI mode, which disables the interactive UI and is intended for automated environments. It will output to console or specified file.</i><br><br><b>--source SOURCE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify the image source (e.g., 'docker', 'podman', 'docker-archive', 'oci-archive', 'tar'). Defaults to 'docker'.</i><br><br><b>--sort SIZE_DESC</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Sort layers by size in descending order (true/false). Defaults to 'false'.</i><br><br>


title: DESCRIPTION
content:
<b>dive</b> is an open-source command-line tool that allows users to explore the contents of Docker (or OCI) images, layer by layer, directly within the terminal. It provides an interactive TUI (Terminal User Interface) that visualizes the filesystem changes and history of each image layer.<br><br>The primary goal of <b>dive</b> is to help developers understand how images are constructed, identify wasted space, duplicate files, and inefficiencies in their Dockerfiles. By inspecting the differences between layers, users can detect opportunities for image size optimization, improve build performance, and ensure their container images are as lean and secure as possible. It supports both local images and remote images (pulled by Docker/Podman).


title: CAVEATS
content:
<b>dive</b> requires a running Docker or Podman daemon to pull and analyze images. While powerful, analyzing very large images or images with a high number of layers can sometimes be slow. The interactive terminal UI may have compatibility issues with some older or non-standard terminal emulators. It's a tool for analysis, not for building or modifying images.


title: INTERACTIVE UI
content:
The <b>dive</b> interactive interface is typically split into two panes:<br><i><br><b>Left Pane: Layers View</b><br></i>This pane displays a list of image layers, showing their size, the command that created them, and their efficiency. Users can navigate through these layers to see how the image's filesystem evolves.<br><br><i><b>Right Pane: Filesystem Changes View</b><br></i>This pane shows the filesystem changes (added, removed, or modified files) specific to the currently selected layer. It allows users to browse the directory structure, identify individual files, and understand their contribution to the layer's size. It also highlights 'wasted' space and duplicate files.


title: WASTED SPACE ANALYSIS
content:
One of <b>dive</b>'s key features is its ability to automatically detect and highlight 'wasted space' within an image. This includes files that are added in one layer but later removed or overwritten in subsequent layers, contributing to the overall image size without providing final value. By identifying such inefficiencies, <b>dive</b> helps users optimize their Dockerfiles to produce smaller, more efficient container images.


title: HISTORY
content:
<b>dive</b> was created by Alex Goodman and first released around 2018. It is written in Go and quickly gained popularity within the container community due to its intuitive and powerful interactive interface for image analysis. Its development is community-driven and actively maintained on GitHub, continually adding features and improving performance to keep pace with evolving container technologies.


title: SYNOPSIS
content:
<b>django-admin</b> <i><subcommand></i> [<i>options</i>]<br><b>django-admin</b> <i>--version</i><br><b>django-admin</b> <i>--help</i>


title: PARAMETERS
content:
<b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Django version.<br><br><b>--settings=<I>settings.module</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the settings module to use (e.g., <i>myproject.settings</i>). Used by <b>django-admin</b> to find project-specific configuration.<br><br><b>--pythonpath=<I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a Python path to add to <i>sys.path</i>.<br><br><b>--traceback</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a full traceback for exceptions during command execution.<br><br><b>--no-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables colored output, often useful for scripting.<br><br><b>--force-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces colored output, even if the terminal doesn't support it by default.<br><br><b>--skip-checks</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips Django's system checks that run before certain commands.<br><br><b>check</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs system checks and validates the project and installed applications.<br><br><b>makemigrations</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates new database migrations based on changes detected in models.<br><br><b>migrate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Applies database migrations to the database, syncing schema with models.<br><br><b>runserver</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts a lightweight development server for the project.<br><br><b>startproject</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new Django project directory structure with default files.<br><br><b>startapp</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new Django application directory structure within a project.<br><br><b>shell</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts an interactive Python shell with the Django project environment loaded.<br><br><b>createsuperuser</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates an administrative user for the Django admin site.<br><br><b>collectstatic</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Collects static files (CSS, JavaScript, images) from apps into <i>STATIC_ROOT</i> for deployment.<br><br><b>test</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs tests for all installed apps or specific apps.<br><br>


title: DESCRIPTION
content:
<b>django-admin</b> is Django's command-line utility for administrative tasks. It provides a wide array of built-in subcommands that allow developers to interact with their Django projects without writing code. This includes creating new projects and applications, running database migrations, managing the database shell, clearing the cache, running development servers, collecting static files, and much more. It's an essential tool for every Django developer, simplifying common development and deployment workflows.<br><br>For many subcommands, <b>django-admin</b> needs to know which Django settings module to use, which is typically inferred from the current working directory's project structure or explicitly specified via the <i>--settings</i> option or <i>DJANGO_SETTINGS_MODULE</i> environment variable. While <b>django-admin</b> handles project-wide tasks, a similar command, <b>manage.py</b>, is automatically created inside each Django project. <b>manage.py</b> is effectively a wrapper around <b>django-admin</b>, providing the same subcommands but automatically setting up the <i>DJANGO_SETTINGS_MODULE</i> environment variable to point to your project's settings, making it the preferred way to run commands within a specific Django project.


title: CAVEATS
content:
Using <b>django-admin</b> directly often requires specifying the <i>--settings</i> option or setting the <i>DJANGO_SETTINGS_MODULE</i> environment variable, especially when not run from the root of a Django project. For project-specific tasks, it's generally recommended to use the <b>manage.py</b> script located in your project's root directory, as it automatically configures the necessary environment variables.


title: COMMON ENVIRONMENT VARIABLE
content:
The <i>DJANGO_SETTINGS_MODULE</i> environment variable can be set to point to your project's settings file (e.g., <i>export DJANGO_SETTINGS_MODULE=myproject.settings</i>). This allows <b>django-admin</b> to locate your project's configuration without needing the <i>--settings</i> option or being run from a specific directory, which is particularly useful in scripting.


title: THE MANAGE.PY WRAPPER
content:
The <i>manage.py</i> script, automatically generated in every Django project, is the preferred way to interact with your project's specific configurations. It is essentially a wrapper around <b>django-admin</b> that handles the setup of <i>DJANGO_SETTINGS_MODULE</i> for the current project, making it easier to run project-specific commands like <i>python manage.py runserver</i>.


title: HISTORY
content:
Django itself was created in 2003 and open-sourced in 2005. The <b>django-admin</b> command-line utility has been a core component since its early days, providing a standardized and comprehensive way to manage Django projects. Its design reflects the 'batteries included' philosophy of Django, offering a wide set of tools directly from the command line, thereby streamlining development and deployment processes for web applications.


title: SYNOPSIS
content:
<b>dmsetup</b> [<I>global_options</I>] <I>command</I> [<I>device_name</I>...] [<I>command_specific_arguments</I>...]


title: PARAMETERS
content:
<b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of the output, providing more detailed information about operations and device states.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version of the <b>dmsetup</b> command and exits.<br><br><b>-f, --noflush</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When deactivating a device, this option prevents flushing outstanding I/O requests. This should be used with extreme caution, as it can lead to data loss or corruption if I/O operations are still pending on the device.<br><br><b>-r, --readonly</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens devices in read-only mode where applicable, preventing any write operations.<br><br><b>-u, --uuid</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ensures that UUIDs (Universally Unique Identifiers) are displayed for devices when listing or querying information, providing a unique identifier for each device.<br><br><b>-j, --nouuid</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the display of UUIDs for devices, resulting in a more concise output.<br><br><b>-l, --nolocking</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables LVM (Logical Volume Manager) locking. This is a highly dangerous option that should only be used in specific debugging scenarios by experienced administrators, as it can lead to race conditions and severe data corruption if multiple processes attempt to modify device-mapper configuration concurrently.<br><br>


