# CommandSection

title: DESCRIPTION
content:
<i>ecryptfs-find</i> is a conceptual utility designed to locate files within an eCryptfs encrypted filesystem. <b>It is important to note that this command is NOT a standard utility provided by the `ecryptfs-utils` package in most Linux distributions.</b> If such a command existed, its primary purpose would be to address the complexities of searching on volumes where filenames themselves are encrypted. It would allow users to search for files using their original (decrypted) names, or by matching patterns against their encrypted counterparts. This would be invaluable for system administrators and users trying to identify specific files when raw directory listings show only obfuscated filenames. The command would likely traverse the eCryptfs mount point, intelligently handling filename decryption on the fly to match search criteria, and outputting both the encrypted and decrypted paths to the found files, bridging the gap between the standard `find` command and the unique requirements of eCryptfs's filename encryption.


title: CAVEATS
content:
<b>This command ("ecryptfs-find") is NOT a standard utility provided by the `ecryptfs-utils` package in most Linux distributions.</b> Its functionality as described is hypothetical, based on common requirements for eCryptfs and the `find` command paradigm. Users typically rely on the standard `find` command, potentially combined with manual decryption or `ecryptfs-utils` scripting and knowledge of eCryptfs path structures, to achieve similar results. The performance of such a hypothetical command might be impacted by the constant need for on-the-fly decryption for filename matching.


title: <B>WORKAROUND FOR FINDING FILES ON ECRYPTFS</B>
content:
Because a dedicated `ecryptfs-find` command does not exist in standard distributions, users must employ workarounds. To find files by their <b>decrypted (plaintext) name</b>, one would typically use the standard `find` command on the mounted eCryptfs directory, as the operating system presents the decrypted filenames there. For example: <br> `find /home/user/.Private -name 'my_document.txt'` <br><br> To find files by their <b>encrypted name</b> (e.g., when viewing the raw encrypted directory or during recovery), one would use `find` on the raw encrypted view, potentially combined with `ls -A` or other `ecryptfs-utils` commands to map encrypted names back to plaintext, which often requires scripting.


title: HISTORY
content:
Since "ecryptfs-find" is not a standard command, it has no direct development history. The need for such a tool arises from the unique challenges of filename encryption in eCryptfs, where traditional file searching can be hampered by obfuscated names. Discussions in forums and mailing lists often cover how to achieve "find"-like functionality within eCryptfs, typically by scripting existing `find` with `ecryptfs` awareness, rather than a dedicated utility.


title: PARAMETERS
content:
<b><b>-p</b> <i>&lt;tpm_owner_password&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the password for the TPM owner. This is often required if the TPM is initialized and owned.<br><br><b><b>-u</b> <i>&lt;tpm_user_password&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the password for the TPM user, if different from the owner password.<br><br><b><b>-r</b> <i>&lt;pcr_values&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of <i>Platform Configuration Registers (PCRs)</i> to seal the key against (e.g., '0,2,4'). The key will only unseal if the current values of these specific PCRs match those recorded during sealing.<br><br><b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Seals the key against <i>all</i> available <i>Platform Configuration Registers (PCRs)</i>. While providing robust integrity checks, this can make the key more sensitive to any changes in the boot environment.<br><br><b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists the current values of the <i>Platform Configuration Registers (PCRs)</i> on the system. This option is useful for determining which PCRs are relevant to your system's boot process when choosing which ones to seal against.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the key generation and sealing process, which can be helpful for debugging.<br><br><b><i>&lt;key_path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The mandatory file path where the newly generated and TPM-sealed private key will be stored. This file contains the sealed blob that <b>eCryptfs</b> can later use to unseal the key.<br><br>


title: DESCRIPTION
content:
The <b>ecryptfs-generate-tpm-key</b> command is a crucial utility within the <b>ecryptfs-utils</b> package, designed to enhance the security of <b>eCryptfs</b> encrypted data. It performs two primary functions: first, it generates a new <b>eCryptfs</b> encryption key; second, and most importantly, it uses the <i>Trusted Platform Module (TPM)</i> to <i>seal</i> this newly generated key.<br><br>Sealing a key with the <b>TPM</b> means that the key is encrypted in such a way that it can only be unsealed (decrypted) by that specific <b>TPM</b> chip. Furthermore, the key can be bound to specific <i>Platform Configuration Registers (PCRs)</i>. These <b>PCRs</b> contain cryptographic hashes reflecting the system's boot state, including components like the <i>BIOS</i>, bootloader, and kernel. This binding ensures that the key is only accessible if the system's integrity and configuration match the state at the time of sealing, providing strong hardware-backed protection against tampering.<br><br>The generated sealed key is typically stored in a file, which <b>eCryptfs</b> can later use to automatically unseal and retrieve the encryption key from the <b>TPM</b>, enabling features like automated login for encrypted home directories or full-disk encryption without requiring manual passphrase entry on every boot, provided the system's integrity is maintained.


title: CAVEATS
content:
Requires a functional and initialized <b>TPM</b> (<i>Trusted Platform Module</i>) chip on the system, with owner credentials potentially already set.<br>Any changes to the system's boot environment (e.g., <i>BIOS/UEFI</i> updates, kernel upgrades, bootloader modifications) that alter the sealed <b>PCR</b> values will prevent the key from being automatically unsealed, potentially locking access to encrypted data and requiring manual intervention or re-sealing.<br>The <b>ecryptfs-utils</b> package must be installed for this command to be available and functional.


title: <B>TPM OWNERSHIP</B>
content:
Before using <b>ecryptfs-generate-tpm-key</b>, it is essential to ensure that your system's <i>Trusted Platform Module</i> (TPM) is properly initialized and 'owned'. This process typically involves setting a TPM owner password. The command might require this owner password to perform sealing operations, often specified using the <b>-p</b> option.


title: <B>UNDERSTANDING PCRS</B>
content:
<i>Platform Configuration Registers (PCRs)</i> are special registers within the <b>TPM</b> that store cryptographic hashes of various system components and configurations (e.g., <i>BIOS firmware</i>, bootloader, kernel, loaded modules) measured during the boot process. When a key is sealed to specific <b>PCR</b> values, the <b>TPM</b> is configured to release or unseal that key only if the current system's <b>PCR</b> values precisely match those recorded at the time of sealing, thereby ensuring the integrity of the system's boot environment.


title: HISTORY
content:
The <b>ecryptfs-generate-tpm-key</b> command is an integral part of the <b>ecryptfs-utils</b> package, a collection of tools designed to manage <b>eCryptfs</b> encrypted filesystems. Its development arose from the growing need to integrate <b>eCryptfs</b> with hardware-backed security features provided by <b>TPM</b> chips.<br><br>This integration aimed to enhance the security posture of encrypted data, particularly in scenarios involving full-disk encryption where master keys are typically stored in the kernel keyring. Commands like <b>ecryptfs-generate-tpm-key</b> and its counterpart, <b>ecryptfs-unwrap-passphrase</b>, were crucial in enabling features such as automated login for encrypted home directories on Linux distributions like <i>Ubuntu</i>, where the master passphrase could be automatically unsealed by the <b>TPM</b> only if the system's boot integrity was verified, significantly improving usability while maintaining robust security.


title: SEE ALSO
content:
ecryptfs(7), ecryptfs-unwrap-passphrase(1), ecryptfs-mount-private(1), tpm_sealdata(8), tpm_unsealdata(8)


title: PARAMETERS
content:
<b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and exits.<br><br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a more detailed help message and exits.<br><br><br>


title: DESCRIPTION
content:
<i>ecryptfs-manager</i> provides an interactive interface for managing eCryptfs encrypted directories. It simplifies common encryption tasks such as creating new encrypted directories, mounting existing ones, unmounting them securely, and changing passphrases for existing encrypted mounts. Acting as a user-friendly frontend, it abstracts away the complexities of the underlying <i>ecryptfs-utils</i> command-line tools. While <i>eCryptfs</i> itself is a kernel-level stacked filesystem that performs cryptographic operations on the fly, <i>ecryptfs-manager</i> streamlines the initial setup and day-to-day management of these encrypted mounts. This utility was particularly useful for setting up home directory encryption or creating private user directories, offering a layer of data protection for specific user data. It is commonly found as part of the <i>ecryptfs-utils</i> package and was historically a prominent feature on Ubuntu and other Debian-based systems for simplifying home directory encryption for many users.


title: CAVEATS
content:
eCryptfs has largely been superseded by other encryption methods like LUKS for full-disk encryption and fscrypt for per-directory encryption on modern Linux distributions, primarily due to considerations around performance, complexity, and ongoing maintainability. Data recovery can be exceptionally challenging if the passphrase is lost or if the underlying <i>.ecryptfs</i> structures become corrupted. Using eCryptfs introduces a noticeable performance overhead due to the on-the-fly encryption and decryption operations.


title: INTERACTIVE INTERFACE
content:
The primary function of <i>ecryptfs-manager</i> is to launch an interactive user interface. This interface can manifest as a text-based curses UI in a terminal or a graphical UI if X is available and the necessary dependencies are met. Users navigate this interface to perform various management tasks, such as creating new encrypted directories, mounting existing ones, unmounting them, and managing passphrases, rather than relying on complex command-line arguments.<br>


title: SPECIFIC PURPOSE
content:
Unlike full-disk encryption solutions (e.g., LUKS), <i>ecryptfs-manager</i> is specifically designed to simplify the management of individual encrypted directories. This typically includes a user's home directory or a designated 'Private' directory, offering a localized layer of data protection rather than encompassing an entire storage device or partition.<br>


title: HISTORY
content:
<i>eCryptfs</i> was a prominent choice for home directory encryption in Ubuntu for several major releases (e.g., up to 16.04 LTS). <i>ecryptfs-manager</i> was developed to provide a simpler, interactive interface for users to manage their <i>eCryptfs</i> setups, thereby abstracting away some of the complexities of the underlying <i>ecryptfs-utils</i> commands. Its general usage has declined in recent years, largely in favor of newer, more robust, and often faster encryption solutions like LUKS (for Full Disk Encryption) and <i>fscrypt</i> (for per-directory encryption) on contemporary Linux systems.


title: SEE ALSO
content:
ecryptfs(7), ecryptfs-mount-private(1), ecryptfs-unwrap-passphrase(1), mount(8), cryptsetup(8), fscrypt(8)


title: SYNOPSIS
content:
<b>ecryptfs-migrate-home</b> [-u <<i>username</i>>] [-d] [-i] [-b] [-a] [-y] [-q] [-v] [-r] [-s] [-E] [-h]


title: PARAMETERS
content:
<b><b>-u</b> <<i>username</i>></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the user whose home directory is to be migrated. This is usually a required option.<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Debug mode. Provides more verbose output for troubleshooting.<br><br><b><b>-i</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interactive mode. Prompts the user for confirmation at various stages.<br><br><b><b>-b</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Background mode. Runs the migration in the background (less common for this command).<br><br><b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Advanced mode. May expose additional options or steps.<br><br><b><b>-y</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assume yes. Automatically answers "yes" to all prompts, non-interactive.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Quiet mode. Suppresses most output except for errors.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verbose mode. Provides more information about the progress.<br><br><b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restore mode. Used to revert a failed or incomplete migration.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip <i>eCryptfs</i> setup. For advanced users who want to handle the setup manually.<br><br><b><b>-E</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable <i>eCryptfs</i> automatically on boot. Configures the system to automatically mount the encrypted home.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br>


title: DESCRIPTION
content:
<i>ecryptfs-migrate-home</i> is a utility script provided by the <i>ecryptfs-utils</i> package. Its primary purpose is to seamlessly convert an existing, unencrypted user home directory into an <i>eCryptfs</i> encrypted home directory. This is particularly useful for users who did not opt for home directory encryption during operating system installation but wish to add this security feature later.<br><br>The script handles the complex process of setting up the necessary <i>eCryptfs</i> mount points, copying all data from the old home directory to a newly created encrypted structure, and then swapping the directories. It ensures that the user's files are encrypted on disk, providing enhanced privacy and data protection. The process typically requires the target user to be logged out and often involves a system reboot after completion to finalize the changes.


title: CAVEATS
content:
<b>Data Backup Critical:</b> It is highly recommended to perform a full backup of the user's home directory before initiating the migration. While the tool is designed to be safe, data loss can occur in rare cases of system failure or unexpected interruptions.<br><br><b>User Must Be Logged Out:</b> The target user (whose home directory is being migrated) must not be logged in during the entire process. No active processes should be accessing the home directory.<br><br><b>Root Privileges:</b> The command must be executed with root privileges (<i>sudo</i>).<br><br><b>Disk Space:</b> Ensure sufficient free disk space. The migration process temporarily requires disk space equal to or greater than the size of the original home directory to create the encrypted copy.<br><br><b>Potential for Interruption:</b> Do not interrupt the migration process once it has started. Interruptions can lead to an inconsistent state, making recovery difficult.<br><br><b>System Reboot:</b> A system reboot is often required after a successful migration to ensure all changes are applied and the encrypted home directory is properly mounted.<br><br><b>Recovery (<i>-r</i> option):</b> In case of issues, the <i>-r</i> (restore) option can sometimes be used to revert the changes, but its success depends on the stage at which the migration failed.


title: PRE-MIGRATION CHECKS
content:
Before running <i>ecryptfs-migrate-home</i>, it's advisable to perform a few checks:<br><br>- Ensure <i>ecryptfs-utils</i> package is installed.<br>- Verify that the target user is logged out.<br>- Check for sufficient free disk space (<i>df -h</i>).<br>- Confirm the integrity of the existing home directory.


title: POST-MIGRATION VERIFICATION
content:
After the migration and a system reboot, it's crucial to verify that the encryption is active:<br><br>- Log in as the migrated user.<br>- Check the mount points using <i>mount | grep ecryptfs</i>. You should see <i>/home/username</i> mounted on <i>.Private</i> and <i>.ecryptfs/username/.ecryptfs</i> on <i>username</i>'s home directory.<br>- Create a new file and then log out and log back in to ensure it's still accessible.<br>- Optionally, inspect the raw disk (if possible) to confirm that files appear encrypted outside the mounted home.


title: HISTORY
content:
<i>ecryptfs-migrate-home</i> is part of the <i>ecryptfs-utils</i> package, which provides a set of command-line tools for managing <i>eCryptfs</i> encrypted filesystems. <i>eCryptfs</i> itself is a stacked cryptographic filesystem for Linux, designed to provide per-file encryption. The <i>ecryptfs-utils</i> suite, including <i>ecryptfs-migrate-home</i>, was developed to simplify the setup and management of <i>eCryptfs</i> encryption, particularly for user home directories, which became a common feature in distributions like Ubuntu for enhanced security. Its development has focused on automating the complex steps involved in migrating data securely.


title: SEE ALSO
content:
ecryptfs-mount-private(1), ecryptfs-setup-private(1), ecryptfs-unwrap-passphrase(1), mount(8), umount(8), cryptsetup(8), pam_ecryptfs(8)


title: PARAMETERS
content:
<b><b>--undo</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unmounts the previously mounted private directory, making its contents inaccessible.<br><br><b><b>--ecryptfs-dir=<i>DIR</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the encrypted source directory (e.g., <i>~/.Private</i>) if it differs from the default location.<br><br><b><b>--private-dir=<i>DIR</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the mount point for the decrypted view of the private directory (e.g., <i>~/Private</i>) if it differs from the default location.<br><br><b><b>--no-autostart</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the command from attempting to automatically start any associated background services or daemons.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints more detailed information during execution, useful for debugging.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of the <b>ecryptfs-mount-private</b> utility.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with usage instructions and available options.<br><br>


title: DESCRIPTION
content:
<b>ecryptfs-mount-private</b> is a user-friendly helper script provided by the <i>ecryptfs-utils</i> package. Its primary purpose is to simplify the mounting of a user's private encrypted directory, typically <i>~/.Private</i> (the encrypted eCryptfs filesystem) onto <i>~/Private</i> (the decrypted view). This command automates the complex <b>mount</b> command syntax required for eCryptfs, handling details like cryptographic setup, key management, and directory locations. It often prompts the user for their login passphrase, which is then used to derive the necessary eCryptfs master passphrase. This utility is a cornerstone for users who have set up their home directory encryption using <b>ecryptfs-setup-private</b> or <b>ecryptfs-setup-home</b>, providing a convenient way to access their encrypted files after logging in. It ensures that the decrypted content is only accessible when explicitly mounted by the authorized user.


title: CAVEATS
content:
<b>ecryptfs-mount-private</b> relies on a correctly configured eCryptfs setup, typically managed by <b>ecryptfs-setup-private</b>. Misconfiguration can lead to data inaccessibility. Users must carefully manage their login passphrase, as it's often used to derive the eCryptfs master passphrase. While convenient, the command only encrypts data within the specified private directory; files stored elsewhere are not protected. Performance might be slightly impacted due to the on-the-fly encryption/decryption. Always ensure the private directory is unmounted when not in use for maximum security.


title: <B>AUTOMATIC MOUNTING WITH PAM</B>
content:
Many systems, especially Ubuntu, configure <b>ecryptfs-mount-private</b> to run automatically through PAM (Pluggable Authentication Modules) when a user logs in. This seamless integration ensures that the encrypted private directory is mounted and accessible without requiring manual intervention every time the user logs in.


title: <B>PASSPHRASE DERIVATION</B>
content:
When executed, this command often prompts for the user's login passphrase. This passphrase is then securely used to derive the eCryptfs master passphrase, which is essential for decrypting the file encryption keys and ultimately the user's data. This mechanism ensures that the encryption keys are never stored directly on disk in an unencrypted format.


title: HISTORY
content:
The <i>ecryptfs-utils</i> suite, which includes <b>ecryptfs-mount-private</b>, emerged to provide user-friendly management of eCryptfs, a cryptographic filesystem integrated directly into the Linux kernel. Its development gained significant traction, particularly with its adoption by distributions like Ubuntu for simplified user home directory encryption, offering an alternative to full disk encryption. Over time, the tools have evolved to better integrate with PAM, allowing for automatic mounting of the private directory upon user login, thereby enhancing user experience and security.


title: SEE ALSO
content:
ecryptfs(7), ecryptfs-setup-private(1), ecryptfs-setup-home(1), ecryptfs-umount-private(1), mount(8), ecryptfs-add-passphrase(1)


title: SYNOPSIS
content:
<b>ecryptfs-recover-private</b> [<I>-s SOURCE_DIRECTORY</I> | <I>SOURCE_DIRECTORY</I>] [<I>-t TARGET_DIRECTORY</I>] [<I>OPTIONS</I>]


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>-d, --dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a scan and shows what would happen without actually attempting to mount any filesystems.<br><br><b>-f, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the mount operation, overriding some warnings or checks.<br><br><b>-j, --json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs scan results in JSON format, suitable for programmatic parsing.<br><br><b>-s SOURCE_DIRECTORY, --source-directory SOURCE_DIRECTORY</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the source directory containing the encrypted <I>eCryptfs</I> data. If not specified, the command will scan common locations or the entire filesystem.<br><br><b>-t TARGET_DIRECTORY, --target-directory TARGET_DIRECTORY</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target directory where the recovered <I>eCryptfs</I> content will be mounted. If not specified, a temporary directory will be created automatically.<br><br>


title: DESCRIPTION
content:
<b>ecryptfs-recover-private</b> is a utility designed to help users recover and mount <I>eCryptfs</I> encrypted directories. It automatically scans specified paths (or the entire filesystem if none is given) for <I>eCryptfs</I> metadata, prompts for the passphrase(s), and attempts to mount the discovered encrypted content to a temporary location. This command is particularly useful in scenarios where the original system is unbootable, a user needs to access their encrypted home directory from a live environment, or after a system reinstall where the <I>eCryptfs</I> filesystem wasn't automatically remounted. It significantly simplifies the often complex process of manually mounting <I>eCryptfs</I> volumes by handling mount options and key management, making data recovery more accessible.


title: CAVEATS
content:
<ul><li><b>ecryptfs-recover-private</b> absolutely requires the correct passphrase(s) associated with the encrypted data. Without it, recovery is impossible.</li><li>The kernel's <i>ecryptfs</i> module must be loaded for this command to function properly.</li><li>It assumes the existence of the original encrypted files and their metadata. If these are corrupted or deleted, recovery may not be possible.</li><li>Mounted directories will typically be owned by root if run with <b>sudo</b>; careful handling of permissions may be required after mounting.</li><li>The command typically mounts to a temporary directory under <I>/tmp</I> or <I>/media</I>, which will be unmounted upon reboot or user logout unless explicitly unmounted.</li></ul>


title: AUTOMATIC SCANNING
content:
If no source directory is explicitly provided, <b>ecryptfs-recover-private</b> will automatically scan common locations such as <I>/home/*/.Private</I> or even the entire filesystem (when run as root) for <I>eCryptfs</I> encrypted data. This makes it incredibly convenient for recovery operations from a live CD or rescue environment.


title: INTERACTIVE PASSPHRASE PROMPT
content:
The command will interactively prompt for the user's login passphrase, which is often used to wrap the <I>eCryptfs</I> master passphrase. This secure interactive prompt ensures that sensitive keying material is handled appropriately.


title: TEMPORARY MOUNT POINTS
content:
By default, recovered directories are mounted to a newly created temporary directory, typically under <I>/tmp</I> or <I>/media</I>. This streamlined approach means users don't have to manually create and manage mount points, simplifying the access to their decrypted data.


title: HISTORY
content:
<b>ecryptfs-recover-private</b> is an integral part of the <I>ecryptfs-utils</I> package, which provides userspace utilities for managing the <I>eCryptfs</I> cryptographic filesystem. Its development emerged from the need to simplify common <I>eCryptfs</I> operations, especially in recovery scenarios, as manual mounting of <I>eCryptfs</I> volumes can be complex due to various keying options and mount parameters. Its inclusion reflects the commitment to providing user-friendly tools for managing encrypted home directories, a common security feature across many Linux distributions.


title: DESCRIPTION
content:
The <b><I>ecryptfs-rewrap-passphrase</I></b> command is a utility within the eCryptfs (Enterprise Cryptographic Filesystem) framework, designed for Linux systems. eCryptfs provides a secure, encrypted filesystem, often used to protect user home directories.<br><br>At its core, eCryptfs uses a 'mount passphrase' which is a key component for decrypting the master file encryption key and allowing access to your encrypted data. This command's primary function is to change this mount passphrase without requiring a full decryption and re-encryption of all your files. Instead, it efficiently re-encrypts only the stored passphrase (often found in <I>~/.ecryptfs/wrapped-passphrase</I>) with a new one.<br><br>The command operates interactively. It will prompt you first for your <b>old</b> eCryptfs mount passphrase, which is necessary to decrypt the existing wrapped passphrase. Once successfully provided, it then prompts for your <b>new</b> desired passphrase, asking for it to be entered twice for confirmation. This process ensures that your eCryptfs volume can continue to be mounted and decrypted using the updated passphrase.<br><br>A common and critical use case for <b><I>ecryptfs-rewrap-passphrase</I></b> arises when you change your system login password, especially if your eCryptfs setup (like an encrypted home directory in Ubuntu) links the eCryptfs mount passphrase to your system password via PAM. Failing to run this command after a system password change would prevent you from decrypting and mounting your encrypted home directory on subsequent logins, as the stored eCryptfs passphrase would no longer match your new login credentials.


title: CAVEATS
content:
Requires knowledge of the <b>old</b> eCryptfs mount passphrase to proceed.<br><br>Crucial for encrypted home directories: If your system login password changes, and eCryptfs is integrated with PAM (common in Ubuntu), you <b>must</b> run this command to avoid losing access to your encrypted home directory upon next login.<br><br>This command only rewraps the mount passphrase; it does not change the underlying encryption keys used for individual files, nor does it re-encrypt file data.<br><br>Ensure you are in a secure environment when running this command, as it handles sensitive passphrase information.


title: INTERACTIVE PROMPTS
content:
The command operates interactively, prompting the user first for their <b>old</b> eCryptfs mount passphrase and then for their <b>new</b> desired passphrase. It typically asks for the new passphrase to be entered twice for confirmation.


title: INTEGRATION WITH SYSTEM PASSWORD
content:
When using eCryptfs for an encrypted home directory (e.g., in Ubuntu), the eCryptfs mount passphrase is often derived from or linked to your system login password via PAM. If you change your system login password, you <b>must</b> run <I>ecryptfs-rewrap-passphrase</I> to update the stored eCryptfs passphrase, otherwise, you will be unable to decrypt and mount your home directory on subsequent logins.


title: HISTORY
content:
Part of the <I>ecryptfs-utils</I> package, <b><I>ecryptfs-rewrap-passphrase</I></b> has been a fundamental utility since the early days of eCryptfs. Its importance grew significantly with distributions like Ubuntu adopting eCryptfs for default home directory encryption, making this command vital for users needing to maintain their passphrase security post-system password changes. It reflects the ongoing commitment to robust data encryption solutions in Linux.


title: DESCRIPTION
content:
The <b>ecryptfs-rewrite-file</b> command is a utility within the eCryptfs filesystem suite designed to rewrite the contents of a file that resides within an eCryptfs mount.<br><br>This operation is crucial for several maintenance tasks, such as updating the file's header to the latest eCryptfs version supported by the kernel, or re-encrypting the file using the currently active session key. It effectively decrypts the data using the file's current key and then re-encrypts it using the session key, without needing to copy or manually decrypt the file outside the eCryptfs mount. This is particularly useful when the eCryptfs passphrase is changed or when migrating files to a new encryption policy or key.


title: CAVEATS
content:
This command operates directly on the encrypted file within an eCryptfs mount. Ensure that the eCryptfs filesystem is properly mounted and the necessary keys are loaded into the kernel keyring before execution. Incorrect usage or system issues during the rewrite process could potentially lead to data corruption or inaccessibility. It's advisable to have backups of critical data before performing such operations. The process re-encrypts the file with the <i>currently mounted session key</i>, so ensure the desired key is active.


title: HISTORY
content:
The <b>ecryptfs-rewrite-file</b> command is an integral part of the eCryptfs utilities, which have been developed as a stacked cryptographic filesystem for Linux. eCryptfs was initially developed by the IBM Linux Technology Center and later integrated into the mainline Linux kernel. Utilities like <b>ecryptfs-rewrite-file</b> were developed to provide necessary maintenance and management capabilities for encrypted filesystems, enabling operations like key updates and format migrations without manual intervention.


title: SEE ALSO
content:
ecryptfs(7), mount.ecryptfs_private(1), ecryptfs-manager(1), ecryptfs-insert-wrapped-passphrase-into-keyring(1), ecryptfs-add-new-key-to-keyring(1)


title: SYNOPSIS
content:
<b>ecryptfs-setup-private</b><br><br>The command is primarily an interactive script and does not typically accept command-line options or arguments. It prompts the user for necessary information during execution.


title: PARAMETERS
content:
<b><i>(none)</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;This command is an interactive script and does not accept traditional command-line parameters. All necessary information, such as passphrases, is collected via interactive prompts during its execution.<br><br>


title: DESCRIPTION
content:
<b>ecryptfs-setup-private</b> is a utility designed to simplify the creation and management of a user's encrypted private directory using the <I>eCryptfs</I> filesystem.<br><br>Upon execution, it interactively guides the user through setting up an encrypted area. This typically involves choosing a passphrase to protect the encryption keys. The command automatically creates a hidden directory, usually <I>~/.Private</I>, which stores the encrypted data, and sets up a visible mount point, typically <I>~/Private</I>, where the decrypted contents are accessed.<br><br>A key feature of <b>ecryptfs-setup-private</b> is its integration with <I>PAM</I> (Pluggable Authentication Modules). This allows the encrypted private directory to be automatically mounted when the user logs in and unmounted when they log out, providing a transparent and secure way to protect sensitive files without requiring manual mounting operations for daily use. It leverages the underlying <I>eCryptfs</I> kernel module for on-the-fly encryption and decryption.<br><br>This command is particularly useful for users who need to secure specific sensitive documents or data within their home directory, offering a balance between security and ease of use.


title: CAVEATS
content:
<ul><li><b>Performance Overhead</b>: Encryption and decryption introduce some performance overhead, which can be noticeable with large files or frequent I/O operations.</li><li><b>Data Loss Risk</b>: Forgetting the chosen passphrase or corruption of the eCryptfs metadata could lead to permanent data loss. Regular backups of the <I>.Private</I> directory are highly recommended.</li><li><b>Scope Limitation</b>: It only encrypts a specific user's private directory; it is not a solution for full disk or partition encryption (for which <I>LUKS</I> is generally preferred).</li><li><b>Kernel Module Requirement</b>: Requires the <I>eCryptfs</I> kernel module to be loaded and functional.</li><li><b>Older Technology</b>: While still functional, eCryptfs for home directories is less common in newer Linux distributions which often favor full-disk encryption solutions like LUKS for overall system security.</li></ul>


title: INTERACTIVE SETUP
content:
The command is highly interactive, guiding the user through the process. It prompts for a login passphrase (if different from the system login) and a new mount passphrase for the encrypted directory. It then automatically handles the creation of necessary directories, configuration files, and key setup.


title: DIRECTORY STRUCTURE
content:
Upon successful setup, two key directories are created: <I>~/.Private</I> (a hidden directory containing the actual encrypted files) and <I>~/Private</I> (the mount point where the decrypted contents are accessed. Users interact with <I>~/Private</I> as if it were a regular directory).


title: AUTOMATIC ACCESS
content:
Thanks to <I>PAM</I> integration, the <I>~/Private</I> directory is automatically mounted when the user logs into the graphical desktop or a terminal session, and unmounted upon logout. This provides a seamless user experience, making encryption transparent for daily use.


title: HISTORY
content:
<I>eCryptfs</I> and its associated utilities, including <b>ecryptfs-setup-private</b>, gained significant adoption, particularly within the Ubuntu Linux distribution, where it was offered as an option for encrypting a user's home directory during installation. This provided an accessible way for users to secure their personal data. While still supported, newer Ubuntu installations often lean towards <I>LUKS</I> for full-disk encryption, which provides a broader scope of protection. <b>ecryptfs-setup-private</b> remains a convenient tool for setting up specific encrypted directories.


title: SEE ALSO
content:
ecryptfs(7), mount.ecryptfs(8), ecryptfs-mount-private(1), ecryptfs-unmount-private(1), ecryptfs-unwrap-passphrase(1), ecryptfs-recover-private(1), ecryptfs-migrate-home(8), pam_ecryptfs(8), cryptsetup(8)


title: PARAMETERS
content:
<b>-f, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the setup of encrypted swap, even if existing swap partitions are detected or other conditions might normally prevent the process. Use with caution as it can overwrite existing configurations.<br><br>


title: DESCRIPTION
content:
The <b>ecryptfs-setup-swap</b> command automates the process of creating and configuring encrypted swap space on a Linux system. This is particularly crucial for systems utilizing <I>eCryptfs</I> for home directory encryption, as it prevents sensitive data from being written unencrypted to disk when the system's RAM is fully utilized and data is swapped out. The command typically creates a dedicated swap file, encrypts it using <I>dm-crypt</I> (device mapper crypt), and then configures the system to use this encrypted swap space on boot. It ensures that any data leaving RAM for swap is always encrypted, thus mitigating the risk of sensitive information leakage through forensic analysis of the swap partition/file. It's an essential security measure for maintaining data privacy on systems with encrypted user data.


title: CAVEATS
content:
<b><I>Kernel Modules:</I></b> Requires the <I>dm-crypt</I> kernel module and related cryptographic modules to be loaded and functional.<br><br><b><I>Performance Impact:</I></b> Encryption and decryption overhead can lead to a slight performance degradation when heavy swapping occurs.<br><br><b><I>Disk Space:</I></b> Requires sufficient free disk space to create the encrypted swap file. The size of the swap file is often determined by the system's RAM or user input.<br><br><b><I>Key Management:</I></b> The encrypted swap key is typically generated randomly at boot and discarded on shutdown, providing strong forward secrecy for swap data. This means swap contents are not persistent across reboots.<br><br><b><I>System Configuration:</I></b> Modifies system configuration files like <I>/etc/crypttab</I> and <I>/etc/fstab</I>. Manual intervention might be required if these files are custom-configured or if issues arise.


title: HISTORY
content:
The <b>ecryptfs-setup-swap</b> command is part of the <I>ecryptfs-utils</I> package, which provides utilities for managing <I>eCryptfs</I> encrypted filesystems. <I>eCryptfs</I> itself was initially developed by IBM and later adopted by various Linux distributions, most notably Ubuntu, for its encrypted home directory feature. This command emerged as a critical component to address the security vulnerability of unencrypted swap space when using <I>eCryptfs</I> for user data, ensuring end-to-end data confidentiality on disk.


title: SEE ALSO
content:
ecryptfs-mount-private(1), ecryptfs-unwrap-passphrase(1), swapon(8), swapoff(8), cryptsetup(8), fstab(5), crypttab(5)


title: PARAMETERS
content:
<b><i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The target path, which can be an <i>eCryptfs</i> mount point or an encrypted file/directory within an <i>eCryptfs</i> mount. This is the primary argument.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief usage message and exits.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs version information and exits.<br><br><b><b>-i</b>, <b>--infile <file></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an input file to read policy information from. Less commonly used than directly providing <i>PATH</i>.<br><br>


title: DESCRIPTION
content:
<i><b>ecryptfs-stat</b></i> is a utility included with the eCryptfs cryptographic filesystem package. It provides detailed statistical and policy information about <i>eCryptfs</i> encrypted files and directories. When executed against an <i>eCryptfs</i> mount point, it can show the status of the master key, key caches, and overall policy applied to the mount. When run against an individual encrypted file within an <i>eCryptfs</i> mount, it reveals details such as the master key signature associated with that file, whether filename encryption is enabled, and other file-specific encryption policies. This command is invaluable for verifying the encryption status and ensuring correct configuration of <i>eCryptfs</i> mounts. It helps users understand which encryption parameters are active for a given path.


title: CAVEATS
content:
Requires the <i>ecryptfs-utils</i> package to be installed.<br>Only provides information for files and directories within an active <i>eCryptfs</i> mount.<br>The level of detail shown depends on the specific <i>eCryptfs</i> policy and kernel keyrings.<br>May require root privileges or appropriate user permissions to access kernel-level encryption information.


title: UNDERSTANDING OUTPUT
content:
The output of <i><b>ecryptfs-stat</b></i> typically includes details like the master key signature (MKSIG) associated with the file or directory, the type of key utilized (e.g., passphrase, PKCS#11), whether filename encryption is active, and if the necessary keys are currently loaded into the kernel's keyrings. This information is crucial for debugging and verifying that encryption is functioning as expected for specific paths, helping administrators confirm encryption policies are correctly applied.


title: HISTORY
content:
<i>eCryptfs</i> (Enterprise Cryptographic Filesystem) was developed primarily by Michael Halcrow at IBM and later at Canonical, designed to provide a layered cryptographic filesystem within the Linux kernel, offering per-file encryption capabilities. <i><b>ecryptfs-stat</b></i> is part of the <i>ecryptfs-utils</i> userspace package, which provides various tools for managing <i>eCryptfs</i> mounts. Its development is closely tied to the evolution of <i>eCryptfs</i> itself, particularly gaining prominence with its use for home directory encryption in Ubuntu, where tools like <i><b>ecryptfs-stat</b></i> became essential for diagnostics and verification.


title: PARAMETERS
content:
<b><I>wrapped_passphrase_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>Optional.</b> <br>Specifies the path to the file containing the encrypted (wrapped) passphrase. If omitted, the command typically defaults to reading the wrapped passphrase from <i>~/.ecryptfs/wrapped-passphrase</i>.<br><br>


title: DESCRIPTION
content:
<i><b>The ecryptfs-unwrap-passphrase command</b></i> is a crucial utility within the <b>eCryptfs</b> ecosystem, primarily used for decrypting passphrases that have been "wrapped" (encrypted) by <b>eCryptfs</b>. <br><br>When a user's home directory (or other data) is encrypted with <b>eCryptfs</b>, the actual mount passphrase is often not stored in plaintext for security reasons. Instead, it's encrypted using another key, typically derived from the user's login passphrase, and stored in a file like <i>~/.ecryptfs/wrapped-passphrase</i>. <br><br>This command's purpose is to retrieve the original, plaintext passphrase from this wrapped file. It achieves this by prompting the user for the necessary decryption key (usually the login passphrase) and then performing the decryption. The decrypted passphrase is then printed to standard output. <br><br>While it can be invoked directly, <b>ecryptfs-unwrap-passphrase</b> is more commonly called internally by other <b>eCryptfs</b> scripts and tools, such as <b>ecryptfs-mount-private</b> or <b>ecryptfs-recover-private</b>, which need to access the plaintext passphrase to mount the encrypted directories. It's an essential component for automated and secure handling of <b>eCryptfs</b> encrypted data.


title: CAVEATS
content:
<i><b>Key Requirement:</b></i> The command requires the correct decryption key (typically the user's login passphrase) to successfully unwrap the passphrase. If the wrong key is provided, decryption will fail.<br><br><i><b>Security Risk:</b></i> Since the command outputs the plaintext passphrase to standard output, care must be taken to prevent it from being logged or exposed. It should not be used in environments where its output could be compromised.<br><br><i><b>User Permissions:</b></i> This command should generally be run by the user whose passphrase is being unwrapped, as it operates on user-specific encrypted data and interacts with the user's kernel keyring.


title: <B>TYPICAL USAGE CONTEXT</B>
content:
While <b>ecryptfs-unwrap-passphrase</b> can be executed directly, its primary role is as an internal helper for other <b>eCryptfs</b> commands and scripts. For instance, <b>ecryptfs-mount-private</b> often invokes it to retrieve the passphrase needed to mount a user's encrypted private directory after a login.


title: <B>OUTPUT BEHAVIOR</B>
content:
Upon successful decryption, the command prints the plaintext passphrase to <i>stdout</i>. It is typically piped to another command or variable that consumes it immediately, rather than being displayed on the terminal for general user interaction.


title: HISTORY
content:
The <b>ecryptfs-unwrap-passphrase</b> command is an integral part of the <b>eCryptfs</b> utilities (<i>ecryptfs-utils</i> package), which were primarily developed by <i>Dustin Kirkland</i> at <i>Canonical</i>. <b>eCryptfs</b> itself was introduced as a robust solution for filesystem-level encryption, particularly for home directories, within <b>Ubuntu</b> and other Linux distributions. <br><br>This specific command has been a stable component since the early days of <b>eCryptfs</b>'s widespread adoption, enabling the secure and automated handling of user passphrases required for mounting encrypted data without exposing them directly to the user or to persistent storage in plaintext.


title: SEE ALSO
content:
<b>ecryptfs-mount-private</b>(1), <b>ecryptfs-recover-private</b>(1), <b>ecryptfsd</b>(8), <b>mount.ecryptfs</b>(8), <b>ecryptfs</b>(7)


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message, providing information on command usage and available options.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of the <I>ecryptfs-utils</I> package that this command is part of.<br><br>


title: DESCRIPTION
content:
<b>ecryptfs-verify</b> is a utility from the <I>ecryptfs-utils</I> package designed to confirm the user's passphrase for <I>eCryptfs</I> encrypted directories or filesystems. When executed, it prompts the user to enter their passphrase. This entered passphrase is then verified against the currently active <I>eCryptfs</I> mounts. The primary purpose of this command is to ensure that a user possesses the correct authentication credentials before attempting sensitive operations, such as unmounting an encrypted filesystem or performing other administrative tasks requiring passphrase validation. It is crucial to understand that <b>ecryptfs-verify</b> <B>only</B> validates the correctness of the passphrase itself and <B>does not</B> perform any checks on the integrity or correctness of the encrypted data within the filesystem. The command provides a clear indication of success or failure through its output and exit status.


title: CAVEATS
content:
This command strictly verifies the passphrase; it <B>does not</B> check the integrity or validity of the encrypted data on the filesystem. Verification is performed against currently mounted <I>eCryptfs</I> filesystems. If no <I>eCryptfs</I> filesystems are actively mounted, the command may not have a context to verify against and might report an error or simply indicate no action can be taken.


title: HISTORY
content:
<I>eCryptfs</I> is a stacked cryptographic filesystem integrated into the Linux kernel, developed primarily by Michael Halcrow. The <I>ecryptfs-utils</I> package, which includes <b>ecryptfs-verify</b>, provides essential user-space tools for managing <I>eCryptfs</I> encrypted directories and filesystems. It gained significant adoption, notably being the default method for home directory encryption in Ubuntu for several years. While its prominence has somewhat shifted with the advent of alternatives like <I>fscrypt</I> and full-disk encryption solutions, <b>ecryptfs-verify</b> has remained a stable and critical component within the <I>eCryptfs</I> ecosystem for authenticating access to encrypted data.


title: SEE ALSO
content:
ecryptfs(7), ecryptfs-migrate-home(8), ecryptfs-rewrap-passphrase(8), ecryptfs-unwrap-passphrase(8), mount.ecryptfs_private(8), ecryptfs-mount-private(1), ecryptfs-umount-private(1)


title: SYNOPSIS
content:
<b>ecryptfs-wrap-passphrase</b> [<i>OPTION...</i>]<br><br>Common usage for wrapping a passphrase:<br><b>ecryptfs-wrap-passphrase --wrap-passphrase-file</b>=<i>FILE</i> [<b>--keyring</b>=<i>KEYRING_DESCRIPTION</i>]<br><br>Common usage for unwrapping a passphrase (less frequent directly by user):<br><b>ecryptfs-wrap-passphrase --unwrap-passphrase-file</b>=<i>FILE</i> [<b>--keyring</b>=<i>KEYRING_DESCRIPTION</i>]


title: PARAMETERS
content:
<b><b>-w</b>, <b>--wrap-passphrase-file</b>=<i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the file where the encrypted passphrase will be written.<br><br><b><b>-u</b>, <b>--unwrap-passphrase-file</b>=<i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the file containing a wrapped passphrase that should be unwrapped. (Typically handled by mount helpers).<br><br><b><b>-k</b>, <b>--keyring</b>=<i>KEYRING_DESCRIPTION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the kernel keyring to use for encrypting/decrypting the passphrase. Common values include 'login' (default) or a specific key description.<br><br><b><b>-d</b>, <b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a simulated run without actually modifying files or keyrings, printing what would happen.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of output, providing more detailed information about 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>


title: DESCRIPTION
content:
The <b>ecryptfs-wrap-passphrase</b> command is a utility within the eCryptfs filesystem suite designed to automate the process of mounting encrypted directories. It functions by taking an eCryptfs mount passphrase, encrypting it, and then storing the wrapped (encrypted) passphrase into a specified file on disk. This encryption is typically performed using a key stored in the Linux kernel's keyring service, most commonly the user's Login Keyring.<br><br>The primary use case for <b>ecryptfs-wrap-passphrase</b> is to enable seamless, automatic decryption and mounting of eCryptfs volumes without requiring the user to manually input the passphrase each time. This is particularly useful for scenarios like encrypted home directories in Linux distributions, where the system needs to access the encrypted data upon user login without prompting for an additional passphrase. By utilizing the keyring, the passphrase remains protected while allowing the eCryptfs mount helper to retrieve and unwrap it when needed, provided the relevant key is present in the keyring.


title: CAVEATS
content:
While <b>ecryptfs-wrap-passphrase</b> enhances convenience, it introduces security considerations. The wrapped passphrase file, though encrypted, still resides on disk. Its security depends entirely on the strength of the keyring used to encrypt it. If the keyring itself is compromised or if an attacker gains access to the system while the keyring is unlocked (e.g., after user login), they might be able to unwrap the passphrase. It is crucial to ensure strict file permissions (e.g., 0600) on the wrapped passphrase file to prevent unauthorized reading. This command does not provide full disk encryption; it only encrypts the eCryptfs specific mount point.


title: KEYRING INTERACTION
content:
The command relies heavily on the Linux kernel's keyring service. When wrapping a passphrase, <b>ecryptfs-wrap-passphrase</b> retrieves a key from the specified keyring (or the default Login Keyring). This key is then used to encrypt the eCryptfs mount passphrase. Conversely, for unwrapping, the same key from the keyring is used to decrypt the stored passphrase. This mechanism ensures that the passphrase itself is never stored in plain text on disk and is protected by the security of the kernel keyring, which is typically managed by the system's authentication process (e.g., PAM).


title: AUTOMATIC MOUNTING WORKFLOW
content:
For automatic mounting of eCryptfs directories, such as <i>/home/$USER</i>, the <b>ecryptfs-wrap-passphrase</b> utility is run once by the user to create the wrapped passphrase file (often <i>~/.ecryptfs/wrapped-passphrase</i>). During subsequent logins or system boots, the <b>mount.ecryptfs_private</b> helper script (or similar eCryptfs mount helpers) reads this wrapped file. It then queries the kernel's Login Keyring for the necessary key to unwrap the passphrase. Once unwrapped, the passphrase is used by the mount helper to decrypt and mount the eCryptfs filesystem, allowing the user to seamlessly access their encrypted data without manual intervention.


title: HISTORY
content:
The <b>ecryptfs-wrap-passphrase</b> utility is an integral part of the eCryptfs project, which originated primarily from IBM Linux Technology Center efforts. eCryptfs was designed as a robust stacked cryptographic filesystem for Linux, aiming for enterprise-level security and features. The concept of wrapping passphrases using kernel keyrings was a significant development to streamline the user experience, especially for scenarios like encrypted home directories, which became a popular feature in distributions like Ubuntu, where eCryptfs was used extensively for this purpose for many years.


title: DESCRIPTION
content:
The command '<b>ect</b>' is <I>not a standard</I> or commonly recognized utility found in most mainstream Linux distributions. Unlike common commands such as 'ls', 'cat', 'grep', or 'find', 'ect' does not have an official 'man' page, nor is it listed in standard utility packages. Its absence from official documentation and common system paths indicates that it is <I>not a core component</I> of the GNU/Linux operating system or widely adopted open-source projects.<br>Therefore, if you encounter 'ect' in a script or documentation, it is highly probable that it is either a <I>typo</I> for a similar-sounding command (e.g., 'cat', 'cut', 'echo'), a custom alias or shell function defined within a specific user's or system's environment, or a highly specialized application-specific executable that is not globally distributed. Users attempting to execute 'ect' on a typical Linux system will almost certainly receive a 'command not found' error, as the shell will not be able to locate an executable with that name in the directories specified by the PATH environment variable.


title: CAVEATS
content:
As '<b>ect</b>' is not a standard Linux command, attempting to execute it will almost certainly result in a 'command not found' error.<br>Users encountering 'ect' in documentation or scripts should consider checking for typos or inquiring about custom environment setups specific to their system or application.


title: VERIFYING STANDARD COMMANDS
content:
To verify if a command is standard on your Linux system, you can use `man <command_name>` to check for a manual page, or `which <command_name>` to see its executable path. If both fail, it's likely not a standard utility.


title: PARAMETERS
content:
<b><i>file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The pathname of a file to be edited. If <i>file</i> does not exist, it is created if modified buffers are written.<br><br><b><i>-p</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enters a <b>prompt mode</b>. <i>ed</i> will display an asterisk ('*') after each command for user interaction.<br><br><b><i>-s</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enters <b>silent mode</b>. <i>ed</i> will suppress the display of character counts by 'w', 'q', and '!' commands, and informational messages.<br><br><b><i>-x</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enters <b>encryption mode</b>. This option is typically used with older, less secure encryption methods and is generally not recommended for sensitive data today.<br><br>


title: DESCRIPTION
content:
<i>ed</i> is the <b>standard line-oriented text editor</b> for Unix-like operating systems. Conceived by <b>Ken Thompson</b> in 1971, it stands as one of the <b>oldest and most influential</b> editors, fundamentally shaping subsequent tools like <i>sed</i> and <i>vi</i>. Unlike modern screen-oriented editors, <i>ed</i> operates in a command-line interface without a visual representation of the text. Users interact by specifying line numbers or text patterns, then applying commands to those specific lines. This makes it particularly powerful for non-interactive scripting and batch editing. Its minimalistic design, coupled with robust regular expression support, allows for complex text manipulation. Though challenging for beginners due to its lack of visual feedback and cryptic commands, <i>ed</i> remains invaluable in minimalistic environments, recovery scenarios, and as a core utility for shell scripting. It is the POSIX standard editor, ensuring its availability and consistent behavior across diverse Unix systems.


title: CAVEATS
content:
<i>ed</i> is <b>not user-friendly</b> for interactive editing compared to screen editors like <i>vi</i> or <i>emacs</i> due to its lack of visual feedback. It requires a strong understanding of <b>line numbers and regular expressions</b>. A significant limitation is the <b>absence of a standard undo/redo mechanism</b>, making mistakes potentially permanent without careful saving. Its cryptic, terse commands can be a steep learning curve for newcomers.


title: BASIC COMMAND STRUCTURE
content:
<i>ed</i> commands typically follow the pattern: <br><code>[<i>address</i>][<i>,address</i>]<i>command</i>[<i>arguments</i>]</code><br>An <i>address</i> specifies which line(s) the command should operate on. If no address is given, commands usually operate on the current line or the entire buffer.


title: COMMON COMMANDS
content:
<ul><li><b>a</b>: <i>append</i> text after the specified line.</li><li><b>i</b>: <i>insert</i> text before the specified line.</li><li><b>c</b>: <i>change</i> specified lines to new text.</li><li><b>d</b>: <i>delete</i> specified lines.</li><li><b>p</b>: <i>print</i> specified lines.</li><li><b>s</b>: <i>substitute</i> text (often with regular expressions).</li><li><b>w</b>: <i>write</i> buffer to a file.</li><li><b>q</b>: <i>quit</i> the editor.</li><li><b>/pattern/</b>: Search for a pattern.</li></ul>


title: ADDRESSING MODES
content:
<ul><li><b>.</b>: The <i>current line</i>.</li><li><b>$</b>: The <i>last line</i> of the buffer.</li><li><b>N</b>: A specific <i>line number N</i>.</li><li><b>+/-N</b>: A line <i>relative</i> to the current line.</li><li><b>/pattern/</b>: The next line containing <i>pattern</i>.</li><li><b>?pattern?</b>: The previous line containing <i>pattern</i>.</li><li><b>;</b>: A range from the current line to the end.</li><li><b>,</b>: A range from the first line to the last line (the entire buffer).</li></ul>


title: HISTORY
content:
<i>ed</i> was originally written by <b>Ken Thompson</b> in 1971 for the first versions of the Unix operating system. It was one of the earliest text editors available and quickly became a fundamental utility. Its command structure and line-oriented paradigm profoundly influenced the design of subsequent text processing tools. Most notably, <i>ed</i> served as the inspiration for the <i>ex</i> editor (extended <i>ed</i>), which in turn became the command-line mode for <i>vi</i>. The stream editor <i>sed</i> also derives its command language directly from <i>ed</i>. Despite the rise of more visually interactive editors, <i>ed</i>'s efficiency and small footprint ensured its continued relevance. It was adopted as a <b>POSIX standard utility</b>, cementing its place as a cornerstone of Unix-like systems, particularly useful in environments where resources are constrained or for non-interactive scripting.


title: SYNOPSIS
content:
<b>N/A</b> <br><br> As <i>edgepaint</i> is not a standard command, a universal synopsis cannot be provided.


title: DESCRIPTION
content:
<i>edgepaint</i> does not appear to be a standard or commonly available command-line utility in typical Linux distributions. It is not listed in common `man` pages, `coreutils` packages, or major distribution repositories (e.g., Debian, Ubuntu, Fedora, Arch Linux). <br><br> This suggests that <b>edgepaint</b> is either: <br> 1. A typo for another command. <br> 2. A custom-developed script specific to a particular environment or project. <br> 3. A very niche or deprecated tool not widely adopted. <br><br> Without further context, it is not possible to provide detailed information about its functionality, syntax, or parameters as a universally recognized Linux command.


title: CAVEATS
content:
Users attempting to execute <b>edgepaint</b> on a standard Linux system will almost certainly encounter a "<b>command not found</b>" error. <br><br> If you have encountered this command in a specific context, it is crucial to consult the documentation or source code provided within that context for accurate usage information. <br><br> It is not a part of common Linux utility sets like GNU <i>coreutils</i> or standard system administration toolkits.


title: VERIFYING COMMAND EXISTENCE
content:
Before attempting to use <b>edgepaint</b>, it is recommended to verify its presence on your system using commands like <b>which edgepaint</b> or <b>type edgepaint</b>. If these commands return no output or an error, it confirms the command is not installed or not in your system's `PATH`. <br><br> If you believe it should exist, consider checking your system's package manager for similar names or consulting specific project documentation where <b>edgepaint</b> might be defined.


title: HISTORY
content:
<b>N/A</b> <br><br> There is no public record or history of development for <i>edgepaint</i> as a standard Linux command-line utility.


title: PARAMETERS
content:
<b>[OPTIONS]...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Any options provided are passed directly to the invoked text editor. These can include editor-specific flags like <b>-R</b> (read-only), <b>+N</b> (jump to line N), or <b>-c <I>command</I></b> for executing editor commands.<br><br><b>[FILE]...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more files to be opened for editing by the invoked text editor.<br><br>


title: DESCRIPTION
content:
The <b><I>edit</I></b> command is a generic utility designed to invoke a user's preferred text editor for file manipulation. Unlike specific editor commands like <b><I>vi</I></b> or <b><I>nano</I></b>, <b><I>edit</I></b> acts as a wrapper or a symbolic link, typically resolving to the editor configured by system-wide defaults, environment variables (such as <b><I>EDITOR</I></b> or <b><I>VISUAL</I></b>), or user preferences. Its primary purpose is to provide a consistent and convenient way to open a file for editing without needing to remember the specific editor command. Historically, <b><I>edit</I></b> might have referred to simpler line editors, often a subset of <b><I>ex</I></b>, but in modern Linux systems, it commonly points to more full-featured editors like <b><I>vim</I></b>, <b><I>nano</I></b>, or <b><I>emacs</I></b>, often via utilities like <b><I>sensible-editor</I></b> or the <b><I>update-alternatives</I></b> system.


title: CAVEATS
content:
The behavior of <b><I>edit</I></b> is highly dependent on the system's configuration and the user's environment variables. Its specific functionality and available options are determined by the underlying editor it invokes, which can vary significantly between systems or even between user sessions. Users should be aware that <b><I>edit</I></b> is not a standalone editor but a convenient abstraction for launching another program.


title: ENVIRONMENT VARIABLES
content:
The behavior of <b><I>edit</I></b> is often influenced by environment variables. The <b><I>EDITOR</I></b> variable (e.g., <b><I>EDITOR=vim</I></b>) specifies the preferred editor for shell commands that invoke an editor. The <b><I>VISUAL</I></b> variable (e.g., <b><I>VISUAL=nano</I></b>) is similar, often preferred for visual, full-screen editors. If both are set, <b><I>VISUAL</I></b> typically takes precedence for interactive use.


title: SYSTEM CONFIGURATION
content:
On many systems, utilities like <b><I>sensible-editor</I></b> (part of the <b><I>debianutils</I></b> package on Debian-based systems) or the <b><I>update-alternatives</I></b> command are used to determine which specific editor <b><I>edit</I></b> should invoke. This provides a system-wide or user-specific default choice, allowing administrators or users to easily change their preferred editor without modifying scripts or aliases.


title: HISTORY
content:
The concept of a generic 'edit' command dates back to early Unix systems, where it often served as a simplified interface to a line editor like <b><I>ex</I></b>. This provided a less intimidating entry point than the full editor. Over time, as more sophisticated screen-oriented editors emerged, the role of <b><I>edit</I></b> evolved. In modern Linux distributions, it typically functions as a wrapper, often implemented as a symlink to <b><I>sensible-editor</I></b> or configured via the <b><I>update-alternatives</I></b> system. This evolution reflects a shift from a basic line editor to a mechanism for invoking a user's preferred, full-featured text editor.


title: SYNOPSIS
content:
<b>editcap</b> [<i>options</i>] &lt;<i>infile</i>&gt; &lt;<i>outfile</i>&gt;<br><br>Common options include:<br><b>editcap</b> [ -a &lt;<i>time</i>&gt; ] [ -b &lt;<i>time</i>&gt; ] [ -A &lt;<i>start_packet</i>&gt; ] [ -B &lt;<i>end_packet</i>&gt; ]<br>             [ -C &lt;<i>chunksize</i>&gt; ] [ -D &lt;<i>duptime</i>&gt; ] [ -E &lt;<i>nevent</i>&gt; ] [ -F &lt;<i>fileformat</i>&gt; ]<br>             [ -i &lt;<i>interval</i>&gt; ] [ -n &lt;<i>num</i>&gt; ] [ -o &lt;<i>offset</i>&gt; ] [ -r ] [ -s &lt;<i>snaplen</i>&gt; ]<br>             [ -S &lt;<i>time_adjust</i>&gt; ] [ -t &lt;<i>time_adjustment</i>&gt; ] [ -T &lt;<i>encaptype</i>&gt; ] [ -v ]<br>             &lt;<i>infile</i>&gt; &lt;<i>outfile</i>&gt;


title: PARAMETERS
content:
<b><b>-A</b> &lt;<i>start_packet</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include packets from and including this packet number.<br><br><b><b>-B</b> &lt;<i>end_packet</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include packets up to and including this packet number.<br><br><b><b>-C</b> &lt;<i>chunksize</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Split the output file into multiple files, each containing &lt;<i>chunksize</i>&gt; packets.<br><br><b><b>-D</b> &lt;<i>duptime</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove duplicate packets within &lt;<i>duptime</i>&gt; seconds tolerance.<br><br><b><b>-E</b> &lt;<i>nevent</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a pseudo-event to the file (e.g., NTP time adjustments).<br><br><b><b>-F</b> &lt;<i>fileformat</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the output file format (e.g., <i>pcap</i>, <i>pcapng</i>). Use <b>-L</b> to list formats.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the help message and exit.<br><br><b><b>-i</b> &lt;<i>interval</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Split the output file into multiple files based on time intervals in seconds.<br><br><b><b>-L</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all available capture file formats supported for output.<br><br><b><b>-n</b> &lt;<i>num</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Process only the first &lt;<i>num</i>&gt; packets from the input file.<br><br><b><b>-o</b> &lt;<i>offset</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Start reading packets from the specified byte offset in the input file.<br><br><b><b>-p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't write packets to the output file; useful with <b>-v</b> for statistics.<br><br><b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reorder packets in the output file by their timestamp.<br><br><b><b>-s</b> &lt;<i>snaplen</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Truncate (slice) each packet to a maximum of &lt;<i>snaplen</i>&gt; bytes.<br><br><b><b>-S</b> &lt;<i>time_adjust</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shift all packet timestamps by &lt;<i>time_adjust</i>&gt; seconds (e.g., <i>+1.5</i> or <i>-2.0</i>).<br><br><b><b>-t</b> &lt;<i>time_adjustment</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adjust packet timestamps relative to the first packet's timestamp. Sets first packet's timestamp to &lt;<i>time_adjustment</i>&gt;.<br><br><b><b>-T</b> &lt;<i>encaptype</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the output encapsulation type (e.g., <i>ETHERNET</i>, <i>NULL</i>). Use <b>-L</b> to list types.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing progress and additional information.<br><br><b><b>-a</b> &lt;<i>time</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects packets whose timestamp is greater than or equal to &lt;<i>time</i>&gt;.<br><br><b><b>-b</b> &lt;<i>time</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects packets whose timestamp is less than or equal to &lt;<i>time</i>&gt;.<br><br>


title: DESCRIPTION
content:
The <b>editcap</b> command is a powerful command-line utility from the Wireshark suite, designed for manipulating and transforming network packet capture files. It enables users to read an existing capture file (e.g., <i>.pcap</i>, <i>.pcapng</i>), apply various modifications, and then write the altered data to a new output file.<br><br>Its primary functions include removing specific packets by number or time range, selecting a subset of packets, truncating packet payloads for privacy or size reduction, reordering packets based on their timestamps, and adjusting timestamps to correct synchronization issues. <b>editcap</b> can also be used to remove duplicate packets, split large files into smaller chunks, or limit the number of packets processed.<br><br>This tool is invaluable for tasks such as data anonymization, preparing specific datasets for focused analysis, reducing file sizes for easier sharing, or rectifying common issues found in raw capture files. It complements other Wireshark tools like <b>tshark</b> and <b>dumpcap</b> by focusing specifically on offline capture file post-processing.


title: CAVEATS
content:
<b>editcap</b> operates exclusively on existing capture files, making it unsuitable for live capture manipulation. All specified modifications are applied sequentially, and it's crucial to note that this tool performs 'destructive' editing; always work on copies of your original files to prevent data loss.<br><br>While powerful for structural changes, it's not designed for complex packet filtering based on protocol fields or content; for such tasks, <b>tshark</b> or <b>tcpdump</b> with appropriate display or capture filters are more suitable. Be cautious when using timestamp adjustment options (<b>-S</b>, <b>-t</b>) as improper use can lead to non-monotonic timestamps, which might affect analysis in other tools.


title: COMMON USE CASES
content:
Some of the most frequent applications for <b>editcap</b> include:<br><b>•</b> Splitting excessively large capture files into manageable smaller segments for easier analysis or sharing.<br><b>•</b> Anonymizing sensitive data by stripping packet payloads (using <b>-s 0</b>) before sharing captures.<br><b>•</b> Extracting specific time ranges or packet number ranges from a large capture for focused investigation.<br><b>•</b> Correcting timestamp discrepancies or adjusting all timestamps relative to a common baseline.<br><b>•</b> Removing duplicate packets to clean up captures, especially useful in mirrored port scenarios.


title: INPUT/OUTPUT FORMATS
content:
<b>editcap</b> supports a wide array of input and output capture file formats, inheriting most capabilities from the underlying Wireshark libraries. Users can specify the desired output format using the <b>-F</b> option, and list available formats with <b>-L</b>.


title: HISTORY
content:
<b>editcap</b> is an integral component of the Wireshark network protocol analyzer suite, which originated as Ethereal. Its development has paralleled the evolution of Wireshark itself, providing essential command-line capabilities for offline capture file manipulation. It emerged as a dedicated utility to handle common post-processing tasks, complementing <b>dumpcap</b> for live capture and <b>tshark</b> for command-line analysis. Its features have grown to support various capture file formats and address user needs for anonymization, file splitting, and timestamp correction, reflecting its role in the broader ecosystem of network analysis tools.


title: PARAMETERS
content:
<b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces a context diff format output, showing several lines of context around changed lines.<br><br><b><b>-e</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates an <i>ed(1)</i> script. This is the default output format.<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces a 'full context' diff, which includes context lines for all changes, even if they are not directly adjacent.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates an <i>rcs</i>-style normal diff. This format is similar to the output of <i>diff -n</i>, indicating line numbers for changes.<br><br><b><b>-u</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces a unified diff format output, a compact representation of changes with context.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version number of <i>editdiff</i> and exits.<br><br><b><b>-x</b><i>regexp</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignores chunks of lines that match the extended regular expression <i>regexp</i>. This is useful for ignoring whitespace changes or specific patterns.<br><br>


title: DESCRIPTION
content:
<i>editdiff</i> is a Linux command that compares two files, <i>file1</i> and <i>file2</i>, and generates a script or a diff output that, when applied to <i>file1</i>, transforms it into <i>file2</i>. Its primary and default function is to produce an <i>ed(1)</i> script, which is a series of commands for the <i>ed</i> line editor. This script can then be executed against <i>file1</i> to achieve the content of <i>file2</i>.<br><br>While other diff utilities like <i>diff(1)</i> typically show the differences between files for human readability, <i>editdiff</i> focuses on creating an executable transformation. It is often bundled with the <i>RCS (Revision Control System)</i> suite, where such scripts are useful for maintaining versions and applying changes between them programmatically, though <i>patch(1)</i> has largely superseded <i>ed</i> scripts for general-purpose patching.


title: CAVEATS
content:
<i>editdiff</i> is a niche tool primarily for generating <i>ed(1)</i> scripts. For general-purpose file comparison and patching, <i>diff(1)</i> and <i>patch(1)</i> are far more commonly used and flexible. Its utility is most pronounced in environments or scripts specifically designed to work with <i>ed</i> commands, or within the context of older revision control systems like RCS.


title: USE CASES
content:
While less common today, <i>editdiff</i> can be useful in scripting scenarios where a precise, line-by-line transformation script is required. For instance, if you need to apply changes to a file without knowing the original content beforehand, an <i>ed</i> script generated by <i>editdiff</i> might be suitable, as it contains direct line editing commands. However, for most modern version control and patching tasks, <i>diff</i> and <i>patch</i> provide more robust and versatile solutions.


title: HISTORY
content:
<i>editdiff</i> is part of the GNU RCS (Revision Control System) package, which originated in the early 1980s. RCS was one of the earliest and most influential version control systems for single files. <i>editdiff</i>'s focus on generating <i>ed</i> scripts reflects the common practice of the time for applying changes programmatically, before the widespread adoption of the more robust and user-friendly <i>patch</i> utility. It continues to be maintained as part of the RCS suite.


title: PARAMETERS
content:
<b>-display <I>display</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the X server to which <i>editres</i> should connect. If not specified, it uses the value of the <i>DISPLAY</i> environment variable.<br><br><b>-geometry <I>geometry</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial size and position of the <i>editres</i> window on the screen. The format is standard X geometry string (e.g., <i>800x600+100+50</i>).<br><br>


title: DESCRIPTION
content:
<i>editres</i> is a graphical utility designed for inspecting and modifying resources of running <i>Xt</i> (X Toolkit Intrinsics) based X applications. It provides a tree-like view of an application's widget hierarchy, allowing users to select individual widgets and examine their associated resources. This tool is invaluable for developers debugging <i>Xt</i> applications, enabling them to understand the resource inheritance, identify resource conflicts, and dynamically test different resource values without the need to restart the application. Changes made through <i>editres</i> can be applied instantly to the running application, making it a powerful interactive debugging and customization aid for X11 programs built with the X Toolkit.


title: CAVEATS
content:
<b>Caveats:</b><br><i>editres</i> only works with applications built using the <i>X Toolkit Intrinsics (Xt)</i> library that explicitly support the <i>editres</i> protocol.<br>Modern desktop environments largely utilize toolkits like <i>GTK</i> or <i>Qt</i>, making <i>editres</i> less relevant for contemporary applications.<br>The target application must be running and accessible on the specified X display.<br>Modification of resources can potentially cause unexpected behavior or crashes in the target application if values are set incorrectly.


title: HOW IT WORKS (THE EDITRES PROTOCOL)
content:
<i>editres</i> communicates with the target <i>Xt</i> application using a special X protocol involving root window properties (atoms). When <i>editres</i> starts, it looks for the <i>_XEDITRES_COMMAND</i> atom on the root window. An <i>Xt</i> application, if it supports the protocol, listens for messages written to this atom by <i>editres</i>. Commands (e.g., 'get widget tree', 'set resource') are sent via this atom, and the application responds by writing data to the <i>_XEDITRES_REPLY</i> atom. This allows for real-time, bi-directional communication to query and modify the application's internal state.


title: GUI INTERACTION
content:
The <i>editres</i> window typically displays two main panes: A tree view on the left showing the hierarchical structure of the target application's widgets, and a properties pane on the right that displays the resources for the currently selected widget in the tree.<br>Users can navigate the widget tree, select a widget, view its resources, and then modify the values of these resources. After modification, an 'Apply' or 'Send' button typically pushes the changes to the live application, allowing for immediate visual feedback and testing.


title: HISTORY
content:
<i>editres</i> was developed as part of the <i>X Consortium's X11R5</i> release, primarily to assist developers working with the <i>X Toolkit Intrinsics</i> and its various widget sets like <i>Motif</i> and <i>Athena</i>. Its purpose was to provide a dynamic introspection and debugging utility for <i>Xt</i>-based applications, a significant advancement over static resource files. While its prominence has waned with the shift towards newer GUI toolkits, it remains a testament to the powerful introspection capabilities built into the <i>Xt</i> toolkit and is still useful for maintaining or understanding legacy X11 applications.


title: SYNOPSIS
content:
<B>edquota</B> [<I>-u</I>|<I>-g</I>|<I>-r</I>] [<I>-F &lt;fmt&gt;</I>] [<I>-f &lt;filesystem&gt;</I>] [<I>-p &lt;prototype&gt;</I>] <I>names...</I><br><B>edquota</B> [<I>-u</I>|<I>-g</I>|<I>-r</I>] [<I>-F &lt;fmt&gt;</I>] [<I>-f &lt;filesystem&gt;</I>] <I>-t</I>


title: PARAMETERS
content:
<b><I>-u</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Edit user quotas. This is the default behavior if no other type is specified.<br><br><b><I>-g</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Edit group quotas instead of user quotas.<br><br><b><I>-r</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Edit project quotas. This option is available in newer quota implementations.<br><br><b><I>-F &lt;fmt&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the quota format to use. Common formats include <I>vfsv0</I> and <I>vfsv1</I>.<br><br><b><I>-f &lt;filesystem&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the filesystem(s) on which to edit quotas. If omitted, quotas are edited on all filesystems with quotas enabled.<br><br><b><I>-p &lt;prototype&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Duplicate the quota settings of a <I>prototype</I> user, group, or project to the specified <I>names</I>. This is useful for quickly applying standard quotas.<br><br><b><I>-t</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Edit the grace periods for soft limits. This option is used without specifying specific users or groups, as grace periods apply globally per filesystem for all users/groups.<br><br><b><I>names...</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more usernames, group names, or project names whose quotas are to be edited. When used with <I>-t</I>, this argument is omitted.<br><br>


title: DESCRIPTION
content:
The <I>edquota</I> command provides a convenient and interactive way for system administrators to manage disk quotas for users and groups on filesystems. <br><br>When invoked, <I>edquota</I> opens a temporary file in a text editor (determined by the <B>EDITOR</B> or <B>VISUAL</B> environment variable, defaulting to <B>vi</B>). This temporary file contains the current disk usage and quota limits (soft and hard limits for disk blocks and inodes) for the specified users or groups. <br><br>Administrators can then modify these limits directly within the editor. Upon saving and exiting the editor, <I>edquota</I> reads the modified file and applies the new quota settings to the filesystem. This interactive approach makes it ideal for one-off adjustments or for setting initial quotas for multiple entities simultaneously. It can also be used to set grace periods, which define how long a user or group can exceed their soft quota limit before it's enforced as a hard limit.


title: CAVEATS
content:
<I>edquota</I> requires root privileges to execute.<br>Quota support must be enabled on the target filesystem(s) prior to using <I>edquota</I>.<br>Changes made in the editor are applied directly to the quota files upon saving and exiting, so care must be taken to avoid errors as incorrect entries can lead to data corruption or prevent quota enforcement.<br>If a new hard limit is set below the current usage, the user will immediately be in violation and unable to write more data until usage is reduced.


title: EDITOR SELECTION
content:
The text editor used by <I>edquota</I> is determined by the <B>EDITOR</B> or <B>VISUAL</B> environment variables. If neither is set, <I>edquota</I> defaults to using <B>vi</B>. Administrators can specify their preferred editor (e.g., <B>export EDITOR=nano</B>) to use a different one.


title: QUOTA FILE CONTENT
content:
When you edit quotas, <I>edquota</I> presents a temporary file with lines similar to this (for users):<br><B>Quotas for user <I>username</I>:</B><br><B>/dev/sda1: blocks in use: <I>current_blocks</I>, limits (soft / hard): <I>soft_block_limit</I> / <I>hard_block_limit</I><br>inodes in use: <I>current_inodes</I>, limits (soft / hard): <I>soft_inode_limit</I> / <I>hard_inode_limit</I></B><br>You only need to modify the numerical values for <I>soft_block_limit</I>, <I>hard_block_limit</I>, <I>soft_inode_limit</I>, and <I>hard_inode_limit</I>.


title: GRACE PERIODS
content:
Grace periods define a temporary window during which users or groups can exceed their <I>soft quota</I> limit without immediate enforcement. Once this period expires, the soft limit effectively becomes a hard limit, preventing further writes until usage falls below the soft limit. When using <I>-t</I>, you'll edit values in units like 'days', 'hours', 'minutes', or 'seconds'.


title: HISTORY
content:
The <I>edquota</I> command is a long-standing component of the Linux quota utilities, providing a human-friendly interface to manage disk quotas. It has been part of the standard Linux distribution for many years, evolving alongside filesystem quota capabilities such as the introduction of different quota formats (e.g., <I>vfsv0</I>, <I>vfsv1</I>) and support for project quotas. Its core design, which leverages a text editor for interactive configuration, has remained consistent, making it a reliable tool for administrators across various Linux versions.


title: PARAMETERS
content:
<b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays verbose output, showing more detailed information about EFI variables and operations.<br><br><b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new boot entry. This option requires additional parameters like <b>-L</b>, <b>-l</b>, <b>-d</b>, and <b>-p</b> to define the entry's properties.<br><br><b>-b <i>&lt;bootnum&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a specific boot entry by its hexadecimal number (e.g., 0001) for modification or deletion.<br><br><b>-B</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes the specified boot entry. Must be used in conjunction with <b>-b</b>.<br><br><b>-D</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes the specified boot entry and also removes any duplicate entries found.<br><br><b>-L <i>&lt;label&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the label (human-readable description) for a new or existing boot entry.<br><br><b>-l <i>&lt;path_to_bootloader&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the bootloader executable on the EFI System Partition (e.g., \EFI\debian\shimx64.efi).<br><br><b>-d <i>&lt;disk&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Identifies the disk device (e.g., /dev/sda) containing the EFI System Partition (ESP).<br><br><b>-p <i>&lt;part_num&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the partition number of the EFI System Partition on the given disk (e.g., 1).<br><br><b>-u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Updates an existing boot entry with new information provided by other options.<br><br><b>-o <i>&lt;order_list&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the boot order as a comma-separated list of hexadecimal boot entry numbers (e.g., 0001,0003,0000).<br><br><b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the specified boot entry as active (bootable).<br><br><b>-A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the specified boot entry as inactive (not bootable).<br><br><b>-q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables quiet output, suppressing most informational messages.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes duplicate boot entries, retaining only the first instance.<br><br><b>-N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Non-volatile mode. Reads or writes information without making permanent changes to NVRAM. Useful for testing.<br><br><b>-E</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the contents of the EFIVARS (EFI variables) to standard output.<br><br><b>-S</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists available boot entries and their details without attempting to write any changes.<br><br>


title: DESCRIPTION
content:
The command <i>efibootbgr</i> is not a standard Linux command and likely a typo. It is highly probable that the intended command was <i><b>efibootmgr</b></i>, a widely used utility for managing UEFI (Unified Extensible Firmware Interface) Boot Manager entries.<br><br><i>efibootmgr</i> provides a command-line interface to interact with the UEFI firmware's NVRAM (Non-Volatile RAM) to view, create, delete, and reorder boot entries. These entries are pointers to bootloaders (such as GRUB) located on the EFI System Partition (ESP). This functionality is essential for modern systems that utilize UEFI instead of traditional BIOS, facilitating tasks like dual-booting multiple operating systems, repairing boot issues, or setting up custom boot environments.<br><br>By directly manipulating the UEFI boot variables, <i>efibootmgr</i> gives users precise control over how their system boots, making it an indispensable tool for advanced boot management and troubleshooting on UEFI-based Linux installations.


title: CAVEATS
content:
The command <i>efibootbgr</i> does not exist as a standard Linux utility. The analysis above pertains to <i><b>efibootmgr</b></i>. <br><br>When using <i>efibootmgr</i>, ensure your system uses UEFI firmware and has an EFI System Partition (ESP). <br>Incorrect usage of <i>efibootmgr</i> can lead to an unbootable system; always proceed with caution and consider backing up your configuration. <br>This command typically requires superuser privileges (e.g., using <b>sudo</b>) to operate on UEFI variables. <br><i>efibootmgr</i> manages the pointers to bootloaders in UEFI, not the bootloaders themselves. Ensure your bootloader (like GRUB) is correctly installed on the ESP.


title: EFI SYSTEM PARTITION (ESP)
content:
The EFI System Partition (ESP) is a crucial, FAT-formatted partition (typically FAT16 or FAT32) on GPT-partitioned disks used by UEFI systems. It stores UEFI applications, bootloaders (e.g., GRUB's EFI executables), and driver files. <i>efibootmgr</i>'s primary function is to create and manage UEFI boot entries that point to these executables within the ESP.


title: UEFI VS. BIOS
content:
UEFI (Unified Extensible Firmware Interface) is the modern firmware standard designed to replace the legacy BIOS (Basic Input/Output System). UEFI offers numerous advantages including support for larger disks (GPT), faster boot times, secure boot, and a more flexible boot process. <i>efibootmgr</i> is specifically designed to interact with UEFI systems and has no functionality on older BIOS-only machines.


title: HISTORY
content:
The <i>efibootmgr</i> utility was developed as an essential component for Linux systems to fully support UEFI, which succeeded traditional BIOS as the standard firmware interface. As UEFI systems became prevalent, a user-space tool was needed to interact with the UEFI Boot Manager's entries stored in NVRAM.<br><br>Part of the broader <b>efibootmgr</b> package, its development enabled Linux distributions to properly manage boot options on modern hardware, facilitating tasks like secure boot configuration and complex multi-boot setups. It provides a direct interface to manipulate EFI variables, which was a significant advancement over BIOS-centric boot management tools.


title: SYNOPSIS
content:
<b>eget</b> [<i>OPTIONS</i>] <i>&lt;repository&gt;</i> [<i>&lt;tag_or_version&gt;</i>]<br><b>eget</b> [<i>OPTIONS</i>] <i>&lt;repository_owner&gt;/&lt;repository_name&gt;</i> [<i>&lt;tag_or_version&gt;</i>]


title: PARAMETERS
content:
<b><b>-o</b>, <b>--output</b> <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output file or directory where the downloaded asset will be saved.<br><br><b><b>-a</b>, <b>--asset</b> <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Download a specific asset by name. Useful when a release has multiple assets and automatic selection is not desired.<br><br><b><b>-t</b>, <b>--tag</b> <i>&lt;tag&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Download a specific release version identified by its Git tag (e.g., 'v1.2.3'). If omitted, the latest release is downloaded.<br><br><b><b>-x</b>, <b>--extract</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically extract the downloaded archive (e.g., .zip, .tar.gz) after download.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force overwrite existing files at the destination path without prompting.<br><br><b><b>-p</b>, <b>--prerelease</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include pre-release versions when searching for the latest release.<br><br><b><b>-k</b>, <b>--token</b> <i>&lt;token&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provide a GitHub Personal Access Token for accessing private repositories or to avoid API rate limits.<br><br><b><b>-s</b>, <b>--source</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Download the source code archive (.zip or .tar.gz) instead of a release asset.<br><br><b><b>-u</b>, <b>--upgrade</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Upgrade <b>eget</b> itself to the latest version.<br><br><b><b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Download all assets associated with a release.<br><br><b><b>--file</b> <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read a list of repositories (one per line) from a specified file and download assets for each.<br><br><b><b>--clone</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clone the repository using Git instead of downloading release assets.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of <b>eget</b>.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the help message and exit.<br><br>


title: DESCRIPTION
content:
<b>eget</b> is a powerful and flexible command-line utility designed for easily downloading files from GitHub releases. It streamlines the process of acquiring pre-built binaries, archives, and other assets directly from specified GitHub repositories. Unlike generic downloaders, <b>eget</b> intelligently identifies the correct asset for your operating system and architecture, making it ideal for fetching developer tools and applications distributed via GitHub.<br><br>It supports downloading the latest release, a specific version by tag, or a particular asset by name. <b>eget</b> can also handle private repositories using a GitHub Personal Access Token, and it offers features like automatic extraction of archives and overwriting existing files, significantly simplifying automation and script development involving GitHub-hosted artifacts.


title: CAVEATS
content:
<b>eget</b> is a third-party utility and not part of standard Linux distributions' core toolsets, meaning it needs to be installed separately. It relies on the GitHub API, and frequent usage without a Personal Access Token (PAT) may lead to GitHub API rate limiting, which can temporarily prevent further downloads. Asset naming conventions by repository maintainers can sometimes lead to unexpected selections if the <b>--asset</b> option is not used, as <b>eget</b> tries to guess the correct binary for your system.


title: INSTALLATION
content:
<b>eget</b> can often be installed by downloading its single binary from its own GitHub releases page using <b>eget</b> itself, or via a simple <b>curl</b> command. For Go users, it can also be installed using <b>go install github.com/zyedidia/eget@latest</b>, which builds it from source. The binary is typically self-contained, requiring no external dependencies beyond common system libraries.


title: ENVIRONMENT VARIABLES
content:
<b>eget</b> checks for the <b>EGET_TOKEN</b> environment variable (or <b>GITHUB_TOKEN</b>) to automatically use a GitHub Personal Access Token. Setting this variable is recommended for frequent use or when downloading from private repositories, as it helps avoid GitHub API rate limits.


title: HISTORY
content:
<b>eget</b> was created by Zac Bergquist (GitHub user <i>zyedidia</i>) with initial development activity observed around late 2018 / early 2019. Its primary motivation was to simplify and automate the process of downloading specific binaries or artifacts from GitHub releases, addressing a common need for developers and users who frequently acquire tools distributed in this manner, without the overhead of cloning entire Git repositories or manually browsing release pages.


title: SYNOPSIS
content:
<i>egrep</i> [OPTIONS] PATTERN [FILE...]<br><br><i>Note:</i> <i>egrep</i> is functionally identical to <i>grep -E</i>.


title: PARAMETERS
content:
<b>-i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore case distinctions in both the PATTERN and input data.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Invert the sense of matching, to select non-matching lines.<br><br><b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress normal output; instead print a count of matching lines for each input file.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress normal output; instead print the name of each input file from which output would normally have been printed.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prefix each line of output with the 1-based line number within its input file.<br><br><b>-r, -R</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recursively search subdirectories listed.<br><br><b>-w</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Select only those lines containing matches that form whole words.<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Select only those matches that match the whole line.<br><br><b>-f FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Obtain PATTERNs from FILE, one per line.<br><br><b>-o</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.<br><br><b>--color[=WHEN]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Highlight matches. WHEN can be 'always', 'never', or 'auto'.<br><br>


title: DESCRIPTION
content:
<i>egrep</i> is a command-line utility used for searching plain-text data for lines that match a regular expression. It stands for "<i><b>E</b>xtended <b>G</b>re<b>P</b></i>" and is functionally equivalent to the `grep -E` command. Its primary distinction from basic `grep` is its inherent support for <i>Extended Regular Expressions (EREs)</i>, which offer more powerful pattern matching features like `+` (one or more occurrences), `?` (zero or one occurrence), `|` (alternation), and `()` (grouping). While still widely available, `egrep` is often implemented as a symlink or hardlink to `grep -E` in modern Linux distributions, making `grep -E` the preferred and more portable syntax for using EREs. It's an indispensable tool for system administrators and developers alike, enabling complex text pattern searches across files and standard input.


title: CAVEATS
content:
<i>egrep</i> is considered deprecated in most modern <i>grep</i> implementations. It is strongly recommended to use <i>grep -E</i> instead, as <i>egrep</i> often exists merely as a symbolic link to <i>grep -E</i> for backward compatibility. This ensures better portability and consistency across systems. Differences in <i>grep</i> versions (e.g., GNU <i>grep</i> vs. BSD <i>grep</i>) can lead to slight variations in regular expression syntax or behavior, though EREs are largely standardized.


title: EXTENDED REGULAR EXPRESSIONS (ERES)
content:
<i>Extended Regular Expressions</i> (EREs) offer more powerful and readable syntax compared to Basic Regular Expressions (BREs). Key ERE features supported by <i>egrep</i> (and <i>grep -E</i>) include:<br> - <b>+</b>: Matches one or more occurrences of the preceding character/group.<br> - <b>?</b>: Matches zero or one occurrence of the preceding character/group.<br> - <b>|</b>: Acts as an OR operator, matching patterns on either side.<br> - <b>()</b>: Groups expressions, allowing operators to apply to the entire group or for backreferencing (though <i>egrep</i> typically doesn't support backreferences like <i>grep</i> does with BREs).


title: HISTORY
content:
The original <i>grep</i> command was written by Ken Thompson in 1974. <i>egrep</i> (for Extended Regular Expressions) and <i>fgrep</i> (for Fixed-string Regular Expressions) were later added to the <i>grep</i> family to handle different types of pattern matching more efficiently. In older systems, these were distinct executables, often optimized for their specific tasks. Modern <i>grep</i> implementations, particularly GNU <i>grep</i>, have consolidated these functionalities. <i>egrep</i> and <i>fgrep</i> are now typically hard links or symbolic links to the <i>grep</i> executable, with the <i>-E</i> and <i>-F</i> options providing the same specialized behavior, respectively. This consolidation simplifies maintenance and ensures consistent behavior across the <i>grep</i> suite.


title: DESCRIPTION
content:
<b>einfo</b> is a utility predominantly found in Gentoo Linux environments, an integral part of the Portage build system's scripting functions. It serves as a crucial component for providing standardized, colored output messages during the execution of ebuilds and other system scripts. Unlike typical standalone commands, <b>einfo</b> is often implemented as a shell function (alongside <i>ewarn</i>, <i>eerror</i>, <i>elog</i>, <i>ebegin</i>, <i>eend</i>) to ensure consistent visual feedback. Its primary purpose is to display informational messages to the user, typically prefixed with a distinctive indicator (e.g., a blue <b>*</b>), making script output more readable and actionable.<br><br>This standardization helps developers and users quickly distinguish between informational notes, warnings, errors, and process beginnings/endings during complex operations like software compilation or package installation. It does not accept traditional command-line options, but rather takes a string argument as the message to be displayed.


title: CAVEATS
content:
<b>einfo</b> is highly specific to Gentoo Linux and its Portage system. It is generally not available or functional on other Linux distributions out-of-the-box. Its implementation is typically as a shell function, meaning it's primarily designed for scripting within Gentoo's build environment rather than direct interactive command-line use with complex options. Its output relies on terminal capabilities for color, which might not render correctly in all environments.


title: PURPOSE IN SCRIPTING
content:
<b>einfo</b> is primarily used within shell scripts, particularly Gentoo ebuilds, to communicate progress, status, or general information to the user. It helps maintain a consistent user interface across various build and installation routines, crucial for complex, automated tasks.


title: COLOR-CODING
content:
The core utility of <b>einfo</b> and related functions is their ability to automatically apply specific ANSI color codes to the output. <b>einfo</b> typically prints messages in a standard informational color (often blue or green) with a distinctive prefix (e.g., an asterisk). This immediate visual cue enhances readability and helps users quickly parse script output, distinguishing different types of messages at a glance.


title: HISTORY
content:
<b>einfo</b> emerged as part of the Gentoo Linux project's efforts to standardize output during the complex build process of packages using Portage. As a source-based distribution, Gentoo heavily relies on scripts (ebuilds) to compile and install software. To make these often long and complex processes user-friendly, consistent and clear visual feedback was essential. The <b>einfo</b> function, along with its counterparts <i>ewarn</i>, <i>eerror</i>, <i>ebegin</i>, and <i>eend</i>, were developed as shell functions to provide this structured output, ensuring all messages conform to a predefined color and prefix scheme. This approach contrasts with ad-hoc <i>echo</i> commands, significantly improving the overall user experience and script readability across the entire Gentoo ecosystem.


title: PARAMETERS
content:
<b><b>-S</b>, <b>--search</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for packages by name (default behavior).<br><br><b><b>-D</b>, <b>--description</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for packages by description.<br><br><b><b>-I</b>, <b>--installed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only shows installed packages matching the search string.<br><br><b><b>-u</b>, <b>--update</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists packages that can be upgraded. Often used with `eix-sync`.<br><br><b><b>-U</b>, <b>--universe</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows all versions of packages, including those not currently matching your USE flags or otherwise masked.<br><br><b><b>-e</b>, <b>--exact</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs an exact string match for the search. Overrides globbing.<br><br><b><b>-g</b>, <b>--glob</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a glob-style match for the search (default behavior).<br><br><b><b>-r</b>, <b>--regex</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interprets the search string as a regular expression.<br><br><b><b>-s</b>, <b>--show-installed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays only installed versions of a package (useful when combined with a search string).<br><br><b><b>-a</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows all versions of a package, including masked ones, even if not matched by search.<br><br><b><b>-c</b>, <b>--compact</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a more compact output, ideal for scripting or quick overview.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses headers and other extraneous output, showing only the search results.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases verbosity, providing more details about packages, such as dependencies and use flags.<br><br><b><b>--sync</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Updates the <i>eix</i> cache from the current Portage tree. This is crucial for up-to-date results.<br><br><b><b>--rebuild</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces a complete rebuild of the <i>eix</i> cache. Use this if the cache seems corrupted or out of sync.<br><br>


title: DESCRIPTION
content:
<i>eix</i> is a highly optimized and incredibly fast command-line utility designed for searching packages within the Gentoo Linux Portage tree. Unlike `emerge --search`, which scans the Portage tree on every invocation, <i>eix</i> maintains a pre-indexed cache of all available packages, their descriptions, versions, use flags, and other metadata.<br><br>This caching mechanism allows <i>eix</i> to perform searches almost instantaneously, making it an indispensable tool for Gentoo users. It can search for packages by name, description, installed status, and supports various matching types including glob, exact, and regular expressions.<br><br>The output of <i>eix</i> is comprehensive, displaying information such as available versions (including masked ones), architecture, use flags, slots, and dependencies, often color-coded for readability. It's not just a search tool; it can also list installed packages, show packages needing updates, and provide detailed insights into specific packages.


title: CAVEATS
content:
<i>eix</i> relies on a cached database of the Portage tree. For search results to be up-to-date, the cache must be regularly synchronized with the Portage tree using `eix --sync` or `eix-sync`. It is exclusively designed for Gentoo Linux and systems using the Portage package manager.


title: CACHE MANAGEMENT
content:
For <i>eix</i> to provide accurate and current information, its cache needs to be updated regularly. This is typically done with `eix --sync` or by using the `eix-sync` wrapper script (which also runs `emerge --sync`). If the cache ever becomes corrupted or inconsistent, `eix --rebuild` can be used to perform a full re-indexation of the Portage tree, which can take some time.


title: CONFIGURATION
content:
<i>eix</i>'s behavior and output can be extensively customized via configuration files, primarily `/etc/eixrc` and `~/.eixrc`. These files allow users to define default search options, output formatting, color schemes, and more, tailoring <i>eix</i> to individual preferences and workflows.


title: HISTORY
content:
<i>eix</i> was developed as a direct response to the performance limitations of `emerge --search`, which would often take a significant amount of time to scan the entire Portage tree. By introducing a persistent, indexed cache, <i>eix</i> dramatically sped up package searches, quickly becoming a de-facto standard and an indispensable utility for Gentoo users. Its development aimed to provide a fast, flexible, and feature-rich search interface that integrates seamlessly with the Portage ecosystem.


title: PARAMETERS
content:
<b><b><I>-h</I></b>, <b><I>--help</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b><b><I>-v</I></b>, <b><I>--verbose</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details about the operation.<br><br><b><b><I>-d</I></b>, <b><I>--default</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ejects the default device if no device is specified on the command line.<br><br><b><b><I>-r</I></b>, <b><I>--cdrom</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treats the specified device as a CD-ROM device, using CD-ROM specific commands.<br><br><b><b><I>-t</I></b>, <b><I>--trayclose</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Closes the CD/DVD tray on an optical drive.<br><br><b><b><I>-x &lt;speed&gt;</I></b>, <b><I>--speed &lt;speed&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the CD-ROM speed to the specified value. The speed is in X units (e.g., 2 for 2x speed).<br><br><b><b><I>-s</I></b>, <b><I>--scsi</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ejects a SCSI device, which can include Jaz, Zip, or other SCSI-connected removable drives.<br><br><b><b><I>-p</I></b>, <b><I>--floppy</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ejects a floppy disk from the specified floppy drive.<br><br><b><b><I>-a</I></b>, <b><I>--tape</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ejects a tape from a tape changer device.<br><br><b><b><I>-c &lt;slot&gt;</I></b>, <b><I>--changerslot &lt;slot&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a specific slot in a CD-ROM changer device for ejection or loading.<br><br><b><b><I>-i &lt;slot&gt;</I></b>, <b><I>--changerslot-info &lt;slot&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows information about a specific slot in a CD-ROM changer.<br><br><b><b><I>-F</I></b>, <b><I>--force</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces ejection even if the device is busy. <b><I>Use with caution</I></b>, as this can lead to data loss or corruption if the device is not properly unmounted first.<br><br><b><b><I>-N</I></b>, <b><I>--nodevnodes</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <b><I>eject</I></b> from using <b><I>/dev/disk/by-id</I></b> paths, which can be useful in certain environments.<br><br><b><b><I>-T</I></b>, <b><I>--trayopen</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the CD/DVD tray. For many optical drives, this is the default action when no other option is specified.<br><br><b><b><I>-q</I></b>, <b><I>--quit</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exits immediately after attempting the operation, without waiting for the device status.<br><br><b><b><I>-V</I></b>, <b><I>--version</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information for the <b><I>eject</I></b> command and exits.<br><br><b><b><I>&lt;device | mount_point&gt;</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The target device to eject, specified either as a device file (e.g., <b><I>/dev/sr0</I></b>, <b><I>/dev/sdb</I></b>) or its mount point (e.g., <b><I>/mnt/cdrom</I></b>).<br><br>


title: DESCRIPTION
content:
The <b><I>eject</I></b> command in Linux is a utility used to control the ejection mechanism of various removable media devices. It provides a software interface to eject media such as CD-ROMs, DVDs, floppy disks, tape cartridges, and even some SCSI devices like Jaz or Zip drives. When invoked on a mounted device, <b><I>eject</I></b> intelligently attempts to unmount the filesystem before physically ejecting the media, ensuring data integrity and preventing potential corruption. This makes it a safer alternative to simply pulling out media from a drive. <br><br> Beyond basic ejection, <b><I>eject</I></b> offers functionalities like closing the drive tray (for optical drives), setting CD-ROM read speeds, and managing multi-disc CD changers by selecting specific slots. It is a crucial tool for systems interacting with physical media, allowing for graceful removal. While optical drives are less common in modern computers, <b><I>eject</I></b> remains relevant for unmounting and "ejecting" external USB drives or other removable storage devices in a controlled manner, even if a physical ejection mechanism isn't present in the same way as an optical drive. The command typically requires root privileges to operate, or it can be executed using <b><I>sudo</I></b>.


title: CAVEATS
content:
The <b><I>eject</I></b> command typically requires root privileges or <b><I>sudo</I></b> to operate on device files. Not all hardware devices support all options (e.g., some older drives may not support tray close or speed setting). Using the <b><I>--force</I></b> option is risky and should be avoided unless absolutely necessary, as it bypasses safety checks and can lead to data loss or filesystem corruption if the device is still in use.


title: PERMISSIONS
content:
To execute <b><I>eject</I></b> on most system devices, you typically need root privileges. This is because direct manipulation of hardware requires elevated permissions to prevent unauthorized access or system instability. Users can usually achieve this by prefixing the command with <b><I>sudo</I></b> (e.g., <b><I>sudo eject /dev/sr0</I></b>).


title: AUTOMATIC UNMOUNTING
content:
One of <b><I>eject</I></b>'s key safety features is its attempt to automatically unmount the filesystem from the device before initiating the physical ejection. This prevents data corruption that could occur if the media is removed while the operating system is still performing read/write operations or if the filesystem is not cleanly unmounted.


title: HISTORY
content:
The <b><I>eject</I></b> command has been a fundamental utility in Unix-like operating systems for decades, providing software control over removable media drives. Its development is closely tied to the evolution of physical media, from floppy disks to CD-ROMs, DVDs, and various SCSI-based removable storage solutions. Historically, it was crucial for systems to gracefully handle physical media interaction. Although optical drives are less prevalent in modern computing, <b><I>eject</I></b> remains part of the widely used <b><I>util-linux</I></b> package on many Linux distributions, maintaining its relevance for general device unmounting and safe removal procedures for any block device that supports a 'power off' or 'eject' command through the kernel's device drivers.


title: SYNOPSIS
content:
<br><b><code>eksctl</code></b> <<i><code>command</code></i>> [<i><code>options</code></i>]<br><br>Examples:<br><br><b><code>eksctl create cluster --name=my-cluster --region=us-east-1</code></b><br><b><code>eksctl get cluster --name=my-cluster --region=us-east-1</code></b><br><b><code>eksctl delete cluster --name=my-cluster --region=us-east-1</code></b>


title: PARAMETERS
content:
<b>--name</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <i>name</i> of the EKS cluster.<br><br><b>--region</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the AWS <i>region</i> where the cluster will be created or managed.<br><br><b>--cluster, -c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Alias for <i>--name</i>, specifying the cluster name.<br><br><b>--config-file, -f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to a <i>YAML configuration file</i> for detailed cluster definitions.<br><br><b>--verbose, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables <i>verbose logging</i> for more detailed output.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows what operations would be performed <i>without actually executing them</i>.<br><br><b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays <i>help information</i> for the command or subcommand.<br><br>


title: DESCRIPTION
content:
<b><code>eksctl</code></b> is a powerful command-line interface (CLI) tool for Amazon Elastic Kubernetes Service (EKS). Developed by <i>Weaveworks</i> and widely adopted by the AWS community, it aims to simplify the entire lifecycle of an EKS cluster. Users can create, configure, update, and delete EKS clusters and all associated resources (like EC2 instances, VPC, subnets, IAM roles) with a single command or a declarative configuration file. It automates much of the boilerplate infrastructure setup, making it significantly easier to get started with Kubernetes on AWS, manage node groups, and integrate with other AWS services. <b><code>eksctl</code></b> supports various configurations, including managed node groups, Fargate, and custom networking, streamlining complex deployments and promoting best practices for EKS.


title: CAVEATS
content:
<b><code>eksctl</code></b> requires appropriate AWS IAM permissions to create and manage resources. It can be resource-intensive, provisioning many AWS services like EC2 instances, VPCs, IAM roles, and more. Misconfigurations or insufficient permissions can lead to failed operations or orphaned resources. Users should be familiar with underlying AWS concepts and Kubernetes to effectively troubleshoot issues. Network connectivity to AWS APIs is also essential for <b><code>eksctl</code></b> to function correctly.


title: YAML CONFIGURATION FILES
content:
While <b><code>eksctl</code></b> supports command-line flags for basic cluster creation, its true power lies in using comprehensive <i>YAML configuration files</i>. These files allow for highly detailed and reproducible cluster definitions, including custom VPCs, multiple node groups, Fargate profiles, add-ons, and IAM roles, promoting infrastructure-as-code principles.


title: ADD-ONS MANAGEMENT
content:
<b><code>eksctl</code></b> can manage certain EKS add-ons, like VPC CNI, CoreDNS, and Kube-proxy, ensuring they are properly configured and updated within the cluster. This streamlines the setup of essential Kubernetes components that run on EKS.


title: HISTORY
content:
<b><code>eksctl</code></b> was initially developed by <i>Weaveworks</i> as an open-source project to simplify the deployment of Kubernetes clusters on AWS EKS. It quickly gained traction within the Kubernetes and AWS communities due to its user-friendly approach and comprehensive automation. Its development continues with strong community contributions and support, making it the de-facto standard CLI for EKS cluster management for many users.


title: SYNOPSIS
content:
<i>electron-packager</i> <<i>source_directory</i>> <<i>app_name</i>> [<i>options</i>]<br>Example: <i>electron-packager</i> . my-app --platform=win32 --arch=x64 --out=release-builds


title: PARAMETERS
content:
<b>source_directory</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the Electron app's source code.<br><br><b>app_name</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Name of the application.<br><br><b>--platform=<platform></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Target OS platform (e.g., <i>win32</i>, <i>darwin</i>, <i>linux</i>).<br><br><b>--arch=<arch></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Target CPU architecture (e.g., <i>x64</i>, <i>ia32</i>, <i>arm64</i>).<br><br><b>--out=<dir></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directory to place the packaged application.<br><br><b>--overwrite</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overwrite existing output directory if it exists.<br><br><b>--icon=<path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the application icon file.<br><br><b>--prune</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prune extraneous <i>node_modules</i> files.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display <i>electron-packager</i> version.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help information.<br><br><b>--electron-version=<version></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the Electron runtime version to use.<br><br><b>--asar</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Package application code into an ASAR archive.<br><br><b>--ignore=<patterns></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Patterns of files/directories to exclude from packaging.<br><br><b>--executable-name=<name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the name of the main executable file.<br><br>


title: DESCRIPTION
content:
<i>electron-packager</i> is a command-line tool and Node.js library that allows you to easily bundle your Electron application into OS-specific executables (e.g., <b>.app</b> for macOS, <b>.exe</b> for Windows, Linux binaries). It takes your Electron app's source directory, downloads the necessary Electron prebuilt binaries for the specified platform and architecture, and then packages your application's code into a distributable format. This automates the complex process of preparing an Electron app for release, including handling dependencies, creating an application bundle structure, and optionally setting icons. It is widely used for its simplicity and direct approach to packaging Electron applications across different operating systems, making it a foundational tool for Electron developers.


title: CAVEATS
content:
Requires Node.js and npm to be installed. Downloads Electron binaries for each specified platform/architecture, which can be large. The output directory can be quite substantial in size. <i>electron-packager</i> handles packaging the application but does not create installers (like MSI for Windows or DMG for macOS); additional tools are needed for this. Cross-compilation from one OS to another can sometimes require specific dependencies or configurations for native modules.


title: TYPICAL WORKFLOW
content:
Users typically run <i>electron-packager</i> after developing their Electron application and ensuring all dependencies are installed. The command will then generate a platform-specific directory containing the Electron runtime, the application's source code, and its <i>node_modules</i>. This output is then ready for direct distribution or for further processing by installer-creation tools.


title: CONFIGURATION
content:
While primarily a command-line tool, <i>electron-packager</i> options can also be specified programmatically when used as a Node.js library, or conveniently defined within a <i>package.json</i> script for consistent builds.


title: HISTORY
content:
<i>electron-packager</i> emerged as one of the earliest and most straightforward tools for packaging Electron applications shortly after the framework (originally Atom Shell) gained widespread popularity. It provides a direct, programmatic approach to bundling Electron apps, contrasting with more opinionated and feature-rich alternatives like <i>electron-builder</i> which often came later. Its development has focused on reliability and cross-platform compatibility for basic packaging needs, making it a foundational tool for early Electron developers.


title: SYNOPSIS
content:
<i>elfedit</i> <i>[options]</i> <i>elf-file...</i><br><i>elfedit</i> <i>[-e|--elf-header] [field=value...]</i> <i>elf-file...</i><br><i>elfedit</i> <i>[-p|--program-header] [field=value...]</i> <i>elf-file...</i><br><i>elfedit</i> <i>[-s|--section-header] [field=value...]</i> <i>elf-file...</i><br><i>elfedit</i> <i>[-d|--dynamic-section] [-a|--add-dyn-tag TAG=VALUE] [-x|--remove-dyn-tag TAG] [-r|--replace-dyn-tag TAG=OLD=NEW]</i> <i>elf-file...</i>


title: PARAMETERS
content:
<b>-e, --elf-header</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects the ELF header for editing. Field assignments (e.g., <i>e_entry=0x8000</i>) follow this option.<br><br><b>-p, --program-header</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects program headers for editing. Field assignments (e.g., <i>p_flags=0x7</i>) follow this option.<br><br><b>-s, --section-header</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects section headers for editing. Field assignments (e.g., <i>sh_flags=ALLOC|EXECINSTR</i>) follow this option.<br><br><b>-d, --dynamic-section</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects the dynamic section for editing. This option must be followed by dynamic tag specific options.<br><br><b>-a TAG=VALUE, --add-dyn-tag TAG=VALUE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a new dynamic tag with a specified name and value to the dynamic section.<br><br><b>-x TAG, --remove-dyn-tag TAG</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes an existing dynamic tag by its name from the dynamic section.<br><br><b>-r TAG=OLD=NEW, --replace-dyn-tag TAG=OLD=NEW</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replaces the value of an existing dynamic tag from <i>OLD</i> to <i>NEW</i>.<br><br><b>--output FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the modified ELF file to a new <i>FILE</i> instead of modifying the input file(s) in place.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays usage information and exits.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version of <i>elfedit</i> and exits.<br><br>


title: DESCRIPTION
content:
<i>elfedit</i> is a powerful command-line utility from the GNU Binutils suite designed for direct manipulation of ELF (Executable and Linkable Format) files. It provides granular control over various components of an ELF binary, including the ELF header, program headers, section headers, and the dynamic section. Unlike tools like <i>objcopy</i> that perform higher-level transformations, <i>elfedit</i> allows for precise modifications of specific ELF fields and flags. <br><br>This utility is invaluable for tasks requiring deep insight into or alteration of executable and object file structures. Common use cases include adjusting entry points, modifying program segment permissions (e.g., read, write, execute flags), changing section attributes, or manipulating dynamic linker tags (such as <i>DT_NEEDED</i> or <i>DT_RPATH</i>). While immensely flexible, <i>elfedit</i> requires a solid understanding of the ELF specification to be used safely and effectively, as incorrect modifications can easily corrupt a binary.


title: CAVEATS
content:
<i>elfedit</i> directly modifies ELF binaries. Incorrect usage can lead to irreversible file corruption, making the executable or object file unusable. Users must have a thorough understanding of the ELF file format and the specific fields they intend to alter. It is highly recommended to work on copies of files or use the <i>--output</i> option to prevent data loss.


title: FIELD ASSIGNMENT SYNTAX
content:
For editing ELF, program, or section headers, fields are assigned using the <i>name=value</i> syntax. Values can be numeric (decimal or hexadecimal, e.g., <i>0x8000</i>) or symbolic for flags (e.g., <i>ALLOC|EXECINSTR</i>), depending on the field type. Refer to the ELF specification or <i>readelf</i> output for valid field names.


title: IN-PLACE MODIFICATION
content:
By default, <i>elfedit</i> modifies the input ELF file(s) in place. To preserve the original file, always use the <i>--output</i> option or make a backup before running the command.


title: HISTORY
content:
<i>elfedit</i> is part of the GNU Binutils package, a collection of programming tools for creating and managing binary programs, libraries, and assembly code. Binutils has been a cornerstone of the GNU toolchain since the late 1980s, providing essential utilities for software development on Unix-like systems. <i>elfedit</i> was developed to offer fine-grained, low-level control over ELF file structures, addressing needs not fully covered by other tools like <i>objcopy</i> for highly specific modifications required in debugging, security analysis, or advanced linker scenarios. Its evolution aligns with the ongoing development of the ELF standard and the increasing complexity of modern binaries.


title: SYNOPSIS
content:
<i><br></i><b>if</b> <i>condition1</i><b>; then</b><br>&nbsp;&nbsp;<i>commands_if_true</i><br><b>elif</b> <i>condition2</i><b>; then</b><br>&nbsp;&nbsp;<i>commands_elif_true</i><br><b>elif</b> <i>condition3</i><b>; then</b><br>&nbsp;&nbsp;<i>commands_elif_true_2</i><br>[ <b>else</b><br>&nbsp;&nbsp;<i>commands_else_true</i> ]<br><b>fi</b><br><i><br></i>


title: PARAMETERS
content:
<b>condition</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A shell command or expression that returns an exit status. An exit status of 0 (success) is considered true, and any non-zero exit status (failure) is considered false. Common conditions involve <b>test</b> (or <b>[ ]</b>), <b>[[ ]]</b>, or any command whose exit status needs to be evaluated.<br><br>


title: DESCRIPTION
content:
<i><br></i><br>The <b>elif</b> construct, short for "else if," is not a standalone Linux command but a fundamental keyword used within conditional statements in shell scripting (e.g., Bash, sh, ksh). It allows for chaining multiple conditions, providing an alternative path of execution if the preceding <b>if</b> or <b>elif</b> conditions evaluate to false. When an <b>if</b> statement is encountered, its condition is tested. If true, the commands following its <b>then</b> keyword are executed, and the entire <b>if</b> block is exited. If the <b>if</b> condition is false, the shell then checks the first <b>elif</b> condition. This process continues: if an <b>elif</b> condition is true, its associated commands are executed, and the block terminates. If all <b>if</b> and <b>elif</b> conditions are false, the commands within the optional <b>else</b> block are executed, if present. The entire conditional structure must be terminated by <b>fi</b>. This mechanism is crucial for creating scripts that can make decisions based on multiple, sequential tests.<br><i><br></i>


title: CAVEATS
content:
<i><br></i><b>elif</b> is a keyword, not a standalone executable command. It must be used within an <b>if</b>...<b>fi</b> block.<br>Each <b>elif</b> block requires a preceding <b>if</b> or another <b>elif</b> and must be followed by <b>then</b> and the condition to be tested.<br>Conditions are evaluated sequentially; only the first true condition's associated commands are executed.<br><i><br></i>


title: EXAMPLE USAGE
content:
<i><br></i>A practical example demonstrating the use of <b>elif</b>:<br><br><b>#!/bin/bash</b><br><b>read -p &quot;Enter a number: &quot; num</b><br><br><b>if (( num > 10 )); then</b><br>&nbsp;&nbsp;<b>echo &quot;Number is greater than 10.&quot;</b><br><b>elif (( num == 10 )); then</b><br>&nbsp;&nbsp;<b>echo &quot;Number is exactly 10.&quot;</b><br><b>else</b><br>&nbsp;&nbsp;<b>echo &quot;Number is less than 10.&quot;</b><br><b>fi</b><br><i><br></i>In this example, if 'num' is not greater than 10, the <b>elif</b> condition checks if it's equal to 10. Only if both previous conditions are false, the <b>else</b> block is executed.<i><br></i>


title: COMPARISON WITH 'CASE' STATEMENT
content:
<i><br></i>While <b>elif</b> is suitable for sequential tests of various conditions, the <b>case</b> statement (e.g., <b>case <i>variable</i> in <i>pattern</i>)</b> is often preferred for multiple conditional branches based on the value of a single variable matching different patterns. For complex pattern matching or a long list of specific values for one variable, <b>case</b> can be more readable and efficient than a long chain of <b>elif</b> statements. However, <b>elif</b> offers greater flexibility for evaluating completely independent or complex conditions sequentially.<i><br></i>


title: HISTORY
content:
<i><br></i>The concept of chained conditional statements, including <b>elif</b> (or similar constructs), has been a fundamental part of Unix shell programming since the early days of the Bourne shell (<b>sh</b>) in the late 1970s. It provides a standard and widely adopted method for implementing complex decision-making logic in scripts, and its syntax has been consistently carried over into modern shells like Bash (<b>bash</b>), Ksh (<b>ksh</b>), and Zsh (<b>zsh</b>), making it a cornerstone of shell scripting.<br><i><br></i>


title: PARAMETERS
content:
<b><b>-dump</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps formatted HTML content to standard output as plain text. This is often the default behavior when invoking <b>elink</b>.<br><br><b><b>-no-references</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the display of document references (e.g., URLs for links and images).<br><br><b><b>-no-title</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the document title from being displayed in the output.<br><br><b><b>-source</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the raw source code of the document (HTML, XML, etc.) instead of rendered text.<br><br><b><b>-dump-width</b> <i><width></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the preferred output width in columns for text dumping.<br><br><b><b>-dump-charset</b> <i><charset></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the character set to use for dumped output (e.g., UTF-8).<br><br><b><b>-user-agent</b> <i><string></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the User-Agent string sent in HTTP requests.<br><br><b><b>-header</b> <i><string></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds an arbitrary HTTP header to the request (e.g., 'Accept: application/json').<br><br><b><b>-eval</b> <i><string></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes ELinks commands (e.g., 'set document.codepage.assume_cp852 = 1').<br><br><b><b>-config-file</b> <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses an alternative configuration file instead of the default.<br><br><b><b>-no-home</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents loading anything from the user's home directory (e.g., history, bookmarks, or personal configuration).<br><br><b><b>-help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a summary of command-line options and exits.<br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the version information of ELinks and exits.<br><br>


title: DESCRIPTION
content:
<b>elink</b> is commonly a symbolic link or wrapper script for the <b>elinks</b> text-mode web browser, specifically configured for non-interactive use. Its primary function is to fetch the content of web pages or other network resources and dump them to standard output in a readable text format. Unlike the full <b>elinks</b> browser, <b>elink</b> is typically used in scripts or pipelines for tasks such as web scraping, extracting plain text from HTML documents, or quickly viewing a webpage's content without launching an interactive browser session. It processes HTML, renders it to plain text, and can be controlled with various command-line options to fine-tune output and behavior.


title: CAVEATS
content:
The functionality of <b>elink</b> is entirely dependent on the underlying <b>elinks</b> program. It is often a symbolic link or a simple wrapper script that invokes <b>elinks</b>, typically with the <b>-dump</b> option by default. <br>As a text-mode browser, it cannot process or render complex JavaScript, Flash, or other rich multimedia content. Its primary utility is for static HTML and plain text retrieval. <br>Network connectivity and firewall rules can affect its ability to fetch content. User-specific <b>elinks</b> configuration files can also influence <b>elink</b>'s behavior.


title: COMMON USAGE PATTERN
content:
While <b>elinks</b> is an interactive browser, <b>elink</b> is predominantly used for non-interactive tasks. Its most common use is fetching a URL and printing its text-rendered content to standard output, making it ideal for piping into other commands or for simple web scraping within shell scripts.


title: OUTPUT FORMATTING
content:
The <b>-dump</b> option attempts to format the HTML content for readability on a terminal, including handling line wrapping, headings, and lists. However, complex layouts or CSS styling are largely ignored. Options like <b>-dump-width</b> and <b>-dump-charset</b> provide some control over the final text output.


title: HISTORY
content:
<b>elink</b> itself doesn't have an independent history; its development is tied directly to the <b>elinks</b> project. <b>elinks</b> originated as a fork of the <b>Links</b> text-mode web browser in 2000, aiming to add features like tabbed browsing, support for tables, and more robust handling of modern web content while remaining lightweight. The <b>elink</b> command emerged as a convenient alias or wrapper for `elinks -dump`, facilitating its use in scripting and non-interactive contexts where only the rendered text content of a URL was needed.


title: PARAMETERS
content:
<b><b>-dump</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the content of the specified URL(s) to standard output. Useful for programmatic retrieval.<br><br><b><b>-force-html</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the given document to be interpreted as HTML, overriding its declared content type.<br><br><b><b>-no-frames</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the rendering of HTML frames, displaying content sequentially instead.<br><br><b><b>-no-images</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the display of images. This is the default in text mode, but can prevent ASCII art images from loading.<br><br><b><b>-anonymous</b> <i><URL></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts browsing in an anonymous mode for the specified URL, disabling history, cookies, caches, and other persistent data for privacy.<br><br><b><b>-config</b> <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative configuration file to load instead of the default one.<br><br><b><b>-session</b> <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads or saves the browser session (e.g., open tabs, visited history) from/to the specified file.<br><br><b><b>-eval</b> <i><code></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Evaluates a piece of ELinks Scripting Language (ELS) code before starting the browser, allowing for advanced customization or automation.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of <i>elinks</i> and exits.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with common options and exits.<br><br>


title: DESCRIPTION
content:
<i>elinks</i> is a free, open-source, text-mode web browser designed for Unix-like operating systems. It enables users to browse the web directly from a terminal or console, making it an excellent choice for headless servers, embedded systems, or simply for users who prefer a keyboard-driven interface. <br><br>While not a graphical browser, <i>elinks</i> offers robust capabilities for a text-mode environment. It supports various internet protocols including HTTP, HTTPS, FTP, and more. It features advanced rendering for text browsers, including support for tables, frames, and basic CSS styling, which helps in presenting a more structured and readable view of web pages. Its lightweight nature, speed, and extensibility through its built-in ELinks Scripting Language (ELS) make it a powerful and highly customizable tool for console-based web browsing.


title: CAVEATS
content:
Being a text-mode browser, <i>elinks</i> has significant limitations with modern web content. It typically does not execute JavaScript, cannot render complex CSS layouts, and struggles with dynamic web applications. It also cannot display graphical elements (images, videos) directly, though it can show their textual representations or download them. While generally secure for its purpose, it lacks the advanced security features of modern graphical browsers.


title: SCRIPTING CAPABILITIES
content:
<i>elinks</i> incorporates a powerful internal scripting language, ELS (ELinks Scripting Language), which allows users to automate tasks, extend browser functionality, and extensively customize its behavior.


title: PROTOCOL SUPPORT
content:
Beyond common web protocols like HTTP and HTTPS, <i>elinks</i> supports a variety of other protocols including FTP, IPv4, IPv6, and more, making it versatile for diverse network operations.


title: CUSTOMIZATION
content:
Nearly every aspect of <i>elinks</i>, from keybindings and color schemes to rendering preferences, is highly configurable through its comprehensive configuration files and scripting language, allowing users to tailor it precisely to their needs.


title: HISTORY
content:
<i>elinks</i> originated as a fork of the <i>Links</i> web browser project in the early 2000s. Its creation was driven by a desire to introduce more advanced features and maintain a more active development cycle compared to the original <i>Links</i>. Over the years, <i>elinks</i> has evolved to include features like tabbed browsing, improved rendering capabilities, and a powerful internal scripting language, establishing itself as a robust and highly customizable console-based web browser.


title: SYNOPSIS
content:
<b>elixir</b> [<i>options</i>] [<i>file</i>] [<i>arguments...</i>]<br><b>elixir</b> <b>-S</b> <i>script</i> [<i>options</i>] [<i>arguments...</i>]<br><b>elixir</b> <b>-v</b> | <b>--version</b><br><b>elixir</b> <b>--help</b>


title: PARAMETERS
content:
<b>--eval, -e <i>"EXPRESSION"</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Evaluates the given Elixir expression string.<br><br><b>--require, -r <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requires and loads the given Elixir file before execution.<br><br><b>--compile, -c <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compiles the given Elixir file without running it.<br><br><b>--no-compile</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips compilation of Elixir files during execution.<br><br><b>--no-halt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Does not halt the Erlang VM after running an Elixir script, keeping the shell open.<br><br><b>--detached</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts a detached Erlang VM process, allowing the shell to exit while the VM continues running.<br><br><b>--remsh <i>NODE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connects to a remote Erlang/Elixir node to open a remote shell.<br><br><b>--erl <i>"OPTIONS"</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes additional options directly to the underlying Erlang VM.<br><br><b>--iex</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the interactive Elixir shell (IEx).<br><br><b>--sname <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the Erlang VM with a short node name for distributed communication (e.g., <i>node@hostname</i>).<br><br><b>--name <i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the Erlang VM with a long node name for distributed communication (e.g., <i>node@full.hostname</i>).<br><br><b>--cookie <i>COOKIE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Erlang VM cookie for node authentication in distributed systems.<br><br><b>--version, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the Elixir version and exits.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints help information about <b>elixir</b> options and exits.<br><br>


title: DESCRIPTION
content:
The <b>elixir</b> command is the primary command-line interface for the Elixir programming language. It serves multiple purposes: running Elixir scripts, compiling Elixir source files, and providing an interactive Elixir shell (IEx). It leverages the Erlang virtual machine (BEAM) for concurrent, fault-tolerant, and distributed applications. Developers use <b>elixir</b> to execute standalone Elixir files, experiment with code in the interactive shell, and sometimes to compile parts of projects. While project management and common tasks are typically handled by the <b>mix</b> build tool, <b>elixir</b> remains the fundamental executable for interacting directly with the Elixir runtime.


title: CAVEATS
content:
While <b>elixir</b> can compile and run Elixir files, for managing Elixir projects (e.g., creating new projects, managing dependencies, running tests, compiling an entire application), the <b>mix</b> build tool is the standard and recommended approach. <b>elixir</b> is best suited for executing single scripts, short code snippets, or for direct interaction via the IEx shell, especially when not within a <b>mix</b> project context.


title: RUNNING SCRIPTS VS. INTERACTIVE SHELL
content:
When invoked with a file argument (e.g., <b>elixir my_script.exs</b>), <b>elixir</b> compiles and executes the script. If no file is provided and no specific action like <b>--eval</b> is given, <b>elixir</b> typically starts the interactive shell (IEx) if <b>--iex</b> is implicit or explicitly provided. This provides a convenient environment for trying out Elixir code.


title: ERLANG VM OPTIONS
content:
Because Elixir runs on the Erlang VM, many Erlang runtime options can be passed to <b>elixir</b> via the <b>--erl "OPTIONS"</b> flag or directly if they are common and recognized by both. This allows fine-grained control over the VM's behavior, such as memory management, process limits, and distributed networking.


title: HISTORY
content:
Elixir was created by José Valim in 2011, leveraging the Erlang VM to build a modern, productive language with a syntax inspired by Ruby, while inheriting Erlang's capabilities for concurrency, fault tolerance, and distributed systems. The <b>elixir</b> command-line tool has been central to the language's development and usage from its inception, providing the core interface for developers to compile, run, and interact with Elixir code. Its evolution has mirrored the language's growth, with continuous improvements to compilation speed, runtime performance, and the interactive experience.


title: SEE ALSO
content:
<b>iex</b>(1): The interactive Elixir shell, often started directly or via <b>elixir --iex</b>., <b>mix</b>(1): The build tool for Elixir, used for project management, compilation, testing, and more., <b>erl</b>(1): The Erlang runtime system command, which <b>elixir</b> uses internally to run on the BEAM.


title: SYNOPSIS
content:
<b>elm</b> [<i>-a</i>] [<i>-d</i>] [<i>-f mailbox</i>] [<i>-h</i>] [<i>-i</i>] [<i>-k</i>] [<i>-m</i>] [<i>-s subject</i>] [<i>-v</i>] [<i>-z</i>] [<i>user</i>]


title: PARAMETERS
content:
<b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts <i>elm</i> directly into the alias menu, allowing management of email aliases.<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debugging mode, logging detailed information about <i>elm</i>'s operations.<br><br><b>-f mailbox</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative mailbox file to read instead of the default system mail spool or user's inbox.<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with command-line options and exits.<br><br><b>-i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignores the user's <i>~/.elm/elmrc</i> configuration file, causing <i>elm</i> to use system defaults.<br><br><b>-k</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to use function keys for navigation and commands, if compiled with support for them.<br><br><b>-m</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <i>elm</i> from 'touching' (modifying the access time) of the system mail spool file.<br><br><b>-s subject</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the subject line for a new message directly upon launching <i>elm</i> for composing mail.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of <i>elm</i> and exits.<br><br><b>-z</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exits immediately if there is no new mail in the inbox, instead of entering the interactive session.<br><br><b>user</b><br>&nbsp;&nbsp;&nbsp;&nbsp;If a username is provided, <i>elm</i> attempts to send a new mail message to that specified user immediately.<br><br>


title: DESCRIPTION
content:
<i>elm</i> (ELM is short for "ELectronic Mail") is an old but historically significant terminal-based email client for Unix-like operating systems. It provides a full-screen, menu-driven interface for reading, composing, sending, and managing electronic mail.<br><br>Designed for character-based terminals, <i>elm</i> allows users to navigate their inbox, view messages, reply to senders, forward mail, save messages, and organize their mailbox using a series of single-key commands. While less prevalent in modern computing environments, <i>elm</i> was a widely used and popular choice in the 1980s and 1990s, predating the widespread adoption of graphical user interfaces and webmail. It offered a robust set of features for its time, including alias management, spell checking, and customizable options through its <i>elmrc</i> configuration file. Its intuitive (for the era) full-screen interface was a significant improvement over previous line-oriented mail tools.


title: CAVEATS
content:
<i>elm</i> is largely considered obsolete and is not actively developed. It lacks native support for modern email protocols like IMAP or SMTP with SSL/TLS, requiring external tools (like <i>fetchmail</i> and <i>sendmail</i>/<i>postfix</i>) for retrieving and sending mail in contemporary setups.<br><br>Its availability on modern Linux distributions is limited, often requiring manual compilation or installation from older repositories. Security vulnerabilities, while less critical for a local client, might exist due to its age and lack of maintenance. Users accustomed to modern graphical or feature-rich text-based clients like <i>mutt</i> may find its interface and capabilities rudimentary.


title: INTERACTIVE INTERFACE
content:
<i>elm</i> operates with a main index screen listing messages, from which users can select messages to read, compose new ones, or perform actions using single-character commands (e.g., 'r' for reply, 'd' for delete, 's' for save). It emphasizes a simple, direct interaction model suitable for low-bandwidth connections and character-based terminals.


title: CONFIGURATION
content:
User-specific preferences and customizations are managed in the <i>~/.elm/elmrc</i> file. This file allows customization of various aspects, including display options, editor paths, and default mailboxes, providing flexibility to adapt the client to individual workflows.


title: HISTORY
content:
<i>elm</i> was originally created by Dave Taylor in 1986 at the University of Illinois at Urbana-Champaign (UIUC). It quickly gained popularity as one of the first full-screen, menu-driven mail user agents for Unix systems, offering a significant usability improvement over previous line-oriented mail programs.<br><br>Its development continued through the late 1980s and 1990s, becoming a staple in many academic and corporate Unix environments. While its usage declined with the advent of graphical email clients and the rise of more advanced text-based alternatives like <i>mutt</i> and <i>alpine</i>, <i>elm</i> remains a historically important piece of software that influenced the design of many subsequent terminal-based email clients.


title: SYNOPSIS
content:
The <I>else</I> keyword's 'synopsis' is best understood in the context of the conditional constructs it is part of, as it does not take standalone options or arguments.<br><br><b><I>Commonly in 'if' statements:</I></b><br><I>if condition;<br>then<br>&nbsp;&nbsp;&nbsp;&nbsp;commands_if_true<br>else<br>&nbsp;&nbsp;&nbsp;&nbsp;commands_if_false<br>fi</I><br><br>In this structure, <I>else</I> marks the beginning of the command block that runs when <I>condition</I> evaluates to false.


title: DESCRIPTION
content:
The <I>else</I> keyword in Linux is not a standalone executable command but a fundamental control flow construct used within shell scripting languages like Bash, Zsh, and others. It forms an integral part of conditional statements, most notably the <I>if...then...else...fi</I> structure. Its primary purpose is to define an alternative block of commands to be executed only when the condition specified in the preceding <I>if</I> statement evaluates to false (non-zero exit status). If the <I>if</I> condition is true, the commands following <I>then</I> are executed, and the <I>else</I> block is skipped. While less common, <I>else</I> can also conceptually represent the default or fallback path in <I>case</I> statements, though typically the <I>*</I> pattern is used for this purpose to catch all non-matching cases.


title: CAVEATS
content:
The <I>else</I> keyword is <b>not</b> an executable Linux command found in the file system (e.g., <I>/bin/else</I>). Instead, it is a built-in keyword of various Unix-like shells (e.g., Bash, Zsh, Ksh). This means it does not have its own manual page (<I>man else</I>) nor does it accept command-line options or arguments. Its functionality is entirely dependent on its use within specific shell scripting control structures, primarily <I>if...then...fi</I> blocks. Misplacing <I>else</I> or using it outside of a valid conditional context will result in a shell syntax error.


title: USAGE IN `IF` STATEMENTS
content:
The most common application of <I>else</I> is within the <I>if...then...else...fi</I> construct. It provides an alternative execution path when the <I>if</I> condition evaluates to false. If the <I>if</I> condition is true, the <I>else</I> block is entirely skipped. An <I>if</I> statement can exist without an <I>else</I> branch, in which case nothing happens if the condition is false.<br><br><b><I>Example:</I></b><br><I>if [ -f "myfile.txt" ]; then<br>&nbsp;&nbsp;&nbsp;&nbsp;echo "myfile.txt exists."<br>else<br>&nbsp;&nbsp;&nbsp;&nbsp;echo "myfile.txt does not exist."<br>fi</I>


title: DISTINCTION FROM `CASE` STATEMENT DEFAULTS
content:
While <I>else</I> conceptually provides a 'default' path, it is rarely used directly within <I>case</I> statements in the same way as <I>if</I> statements. In <I>case</I> statements, the common practice for defining a default or fallback action (when none of the specified patterns match) is to use the wildcard pattern <I>*</I>. This pattern matches any string, effectively serving the role of an 'else' block for <I>case</I> statements.<br><br><b><I>Example using wildcard for default:</I></b><br><I>case "$fruit" in<br>&nbsp;&nbsp;&nbsp;&nbsp;apple) echo "It's an apple." ;; <br>&nbsp;&nbsp;&nbsp;&nbsp;banana) echo "It's a banana." ;; <br>&nbsp;&nbsp;&nbsp;&nbsp;*) echo "Unknown fruit." ;; <br>esac</I>


title: SHELL KEYWORD VS. COMMAND
content:
It's crucial to understand that <I>else</I> is a reserved keyword for the shell's parser, not an external command. This means it doesn't have a separate executable file, nor can it be invoked directly like <I>/bin/ls</I>. Its interpretation and function are handled internally by the shell itself as part of its control flow syntax.


title: HISTORY
content:
The concept of an <I>else</I> branch in conditional logic is fundamental to programming paradigms and has been present since the early days of computing. In the context of Unix-like operating systems, the <I>else</I> keyword was an integral part of the original Bourne shell (<I>sh</I>), developed by Stephen Bourne at Bell Labs in the late 1970s. Its inclusion provided essential conditional control flow capabilities for scripting, allowing for more complex and robust automation. Subsequent shells, such as the Korn shell (<I>ksh</I>), Bash (<I>bash</I>), and Zsh (<I>zsh</I>), inherited and maintained this core functionality, making <I>else</I> a universal and indispensable keyword in Unix shell scripting environments.


title: SYNOPSIS
content:
<B>elvish</B> [<I>options</I>] [<I>script-file</I> [<I>arg</I> ...]]<br><br>When invoked without arguments, Elvish starts an interactive shell session. If <I>script-file</I> is provided, Elvish executes the commands from the file and then exits.


title: PARAMETERS
content:
<b>-c <I>command</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the specified <I>command</I> string and then exits. This is useful for running Elvish scripts or commands non-interactively.<br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts Elvish as a <I>login shell</I>. This typically involves reading specific startup files (e.g., <I>~/.elvish/rc.elv</I>) in a particular order.<br><br><b>-D <I>dir</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the initial working directory to <I>dir</I> before starting the shell or executing a script.<br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <B>Elvish version</B> information to standard output and then exits.<br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a concise <B>help message</B> detailing command-line options and then exits.<br><br><b><I>script-file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an Elvish script file to execute. The shell will run the commands in this file sequentially.<br><br><b><I>arg</I> ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Additional arguments passed to the <I>script-file</I>, accessible within the script.<br><br>


title: DESCRIPTION
content:
Elvish is an <i>open-source</i> cross-platform shell and scripting language, aiming to be a modern and powerful alternative to traditional UNIX shells like Bash or Zsh. Unlike POSIX-compliant shells, Elvish introduces a unique syntax and a more <i>programmatic</i> approach, blending aspects of functional programming and traditional shell features. Its core design focuses on consistency, expressiveness, and a rich interactive experience. <br><br> Key features include a <i>powerful and programmable completion system</i>, structured data handling (lists and maps), a robust module system, and support for concurrent operations. Elvish provides intuitive error messages and aims to make shell scripting more approachable and less error-prone. While it can be used for general system automation, its strengths particularly shine in interactive use, offering a highly customizable and efficient command-line environment for developers and power users. Written in Go, it compiles into a single static binary.


title: CAVEATS
content:
Elvish is <B>not POSIX compliant</B>, meaning its syntax and built-in commands differ significantly from traditional shells like Bash. This can lead to a learning curve for users accustomed to older shells and may require rewriting existing shell scripts. While powerful, its community and ecosystem are smaller compared to established shells, potentially affecting the availability of pre-built integrations or extensive third-party resources. It is also under <I>active development</I>, so some features or behaviors might evolve over time.


title: INTERACTIVE MODE
content:
Elvish excels in its interactive mode, providing advanced features such as context-aware tab completion, a highly configurable prompt, and an integrated command history browser. It aims to make the command line a more efficient and pleasant environment for daily tasks.


title: SCRIPTING LANGUAGE PARADIGM
content:
Unlike traditional shells that primarily string together external commands, Elvish introduces a more structured, <I>list-oriented</I> programming language. It treats everything as data, allowing for powerful manipulation of lists, maps, and channels, enabling more complex and less error-prone scripts than traditional text-processing pipelines.


title: HISTORY
content:
Elvish was conceived and primarily developed by <I>Xiang-Fu Liu</I> (xiaq) starting around <B>2013-2014</B>. The motivation behind its creation was to address perceived limitations and inconsistencies in traditional UNIX shells, aiming to build a more <I>powerful and intuitive</I> command-line environment and scripting language. It was designed from the ground up to be a <B>hybrid</B> tool – both an interactive shell and a full-fledged programming language. Written entirely in <I>Go</I>, Elvish leverages Go's concurrency primitives and strong type system to offer a robust and performant user experience. Its development continues with a focus on refining its unique language features and enhancing its interactive capabilities.


title: SYNOPSIS
content:
<b><code>emacs</code></b> [<i>OPTIONS</i>] [<i>FILES...</i>]<br><b><code>emacsclient</code></b> [<i>OPTIONS</i>] [<i>FILES...</i>] (for server mode)<br><b><code>emacs -nw</code></b> [<i>OPTIONS</i>] [<i>FILES...</i>] (text terminal)<br><b><code>emacs --daemon</code></b> (start Emacs server)


title: PARAMETERS
content:
<b><b><code>-nw</code></b> or <b><code>--no-window-system</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts Emacs in a text-only terminal, without a graphical window system.<br><br><b><b><code>-q</code></b> or <b><code>--no-init-file</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not load the user's personal initialization file (<code>~/.emacs</code> or <code>~/.emacs.d/init.el</code>). Useful for debugging.<br><br><b><b><code>-Q</code></b> or <b><code>--no-site-file --no-init-file --no-splash</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts Emacs in a 'pure' state: skips site-wide files, user init file, and the splash screen. Ideal for testing or debugging.<br><br><b><b><code>--daemon</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts Emacs as a background server process. Subsequent editing sessions can connect to this server using <code>emacsclient</code> for instant startup.<br><br><b><b><code>--debug-init</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debugging during the Emacs initialization process, useful for troubleshooting issues in <code>init.el</code>.<br><br><b><b><code>-f <i>FUNCTION</i></code></b> or <b><code>--funcall=<i>FUNCTION</i></code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the specified Emacs Lisp <i>FUNCTION</i> upon startup.<br><br><b><b><code>-l <i>FILE</i></code></b> or <b><code>--load=<i>FILE</i></code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads the Emacs Lisp code from <i>FILE</i> upon startup.<br><br><b><b><code>--version</code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints Emacs version information and exits.<br><br><b><b><code><i>FILE</i></code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens <i>FILE</i> for editing. Multiple files can be specified.<br><br><b><b><code>+<i>LINE</i>:<i>FILE</i></code></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens <i>FILE</i> and moves the cursor to the specified <i>LINE</i> number.<br><br>


title: DESCRIPTION
content:
Emacs is a powerful, highly extensible, and customizable text editor and integrated development environment (IDE). It is known for its extensive features, including content-aware editing modes, a built-in Lisp interpreter (Emacs Lisp or Elisp), and a vast ecosystem of packages.<br><br>Users can configure nearly every aspect of Emacs, from key bindings to advanced functionalities, often extending it beyond simple text editing into a full-fledged work environment. It supports hundreds of programming languages and markup formats, offers project management, version control integration, mail client, web browser, and much more, all within the editor. Its flexibility makes it popular among programmers, writers, and anyone needing a highly personalized computing environment.


title: CAVEATS
content:
Emacs has a <i>steep learning curve</i> due to its unique and extensive keybindings (often involving complex combinations of <b>Ctrl</b> and <b>Meta/Alt</b> keys) and its reliance on Emacs Lisp for deep customization. It can also be <i>resource-intensive</i>, especially when numerous packages are loaded or very large files are being edited.


title: <B>EMACS LISP (ELISP)</B>
content:
The core of Emacs's extensibility is its built-in Lisp interpreter. Users can write, load, and execute Emacs Lisp code to customize nearly every aspect of the editor, defining new commands, modes, and behaviors. This makes Emacs an incredibly powerful and adaptable environment.


title: <B>PACKAGE ECOSYSTEM</B>
content:
Emacs boasts a vast and active community that develops thousands of third-party packages. These packages, easily installable via repositories like MELPA, extend Emacs's functionality significantly, adding support for new programming languages, development tools, file formats, and even unique applications like games or email clients.


title: <B>SERVER MODE AND <CODE>EMACSCLIENT</CODE></B>
content:
Emacs can be run as a persistent daemon (server) in the background. The <code>emacsclient</code> command then connects to this running Emacs instance, allowing for instant startup times when opening new files or creating new frames, avoiding the overhead of loading Emacs from scratch each time.


title: HISTORY
content:
Emacs originated in 1976 as a set of 'Editor MACroS' for the TECO editor at MIT, developed by <b>Richard Stallman</b> and <b>Guy L. Steele Jr.</b><br><br>The version commonly used today, <b>GNU Emacs</b>, was initiated by Richard Stallman in 1984 as a free software replacement for Gosling Emacs. It has been under continuous active development since then, evolving into one of the most powerful and flexible text editors available.


title: SEE ALSO
content:
<b><code>vi(1)</code></b> / <b><code>vim(1)</code></b>: Another powerful and widely used text editor, often contrasted with Emacs., <b><code>nano(1)</code></b>: A simpler, more user-friendly text editor for basic tasks., <b><code>less(1)</code></b>: A pager program for viewing file contents, often used for quick file inspection., <b><code>grep(1)</code></b>: A command-line utility for searching plain-text data sets for lines matching a regular expression, often used in conjunction with editors.


title: SYNOPSIS
content:
<b>emacsclient</b> [<i>OPTION</i>]... [<i>FILE</i>]... <br><b>emacsclient</b> [<i>OPTION</i>]... <b>--eval</b> <i>EXPRESSION</i>


title: PARAMETERS
content:
<b>-a, --alternate-editor=<i>EDITOR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternate editor to run if the Emacs daemon is not running. For example, `emacsclient -a nano file.txt`.<br><br><b>-c, --create-frame</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a new graphical (X) frame for opening files or evaluating expressions.<br><br><b>-t, --tty</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a new terminal frame for opening files. Requires Emacs to be built with terminal frame support.<br><br><b>-n, --no-wait</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Return immediately; do not wait for the Emacs server to finish processing the file. This is useful for opening multiple files quickly.<br><br><b>-w, --wait</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Wait for the Emacs server to finish processing the file (e.g., when you save and close the buffer). This is the default behavior when opening files if `-n` is not specified.<br><br><b>-s, --socket-name=<i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connect to the Emacs server via the specified socket file or directory. Useful when running multiple Emacs daemon instances.<br><br><b>-e, --eval=<i>EXPRESSION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Evaluate an Emacs Lisp <i>EXPRESSION</i> in the running Emacs daemon. The result is printed to standard output.<br><br><b>-d, --display=<i>DISPLAY</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the X display on which to open a new frame. Only applicable when creating graphical frames.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the version information of `emacsclient`.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message with available options.<br><br>


title: DESCRIPTION
content:
<i>emacsclient</i> is a command-line utility that connects to an already running Emacs daemon (server) to open files or evaluate Emacs Lisp code. The Emacs daemon is started using the `emacs --daemon` command, which runs Emacs in the background without a visible frame. When you invoke `emacsclient`, it sends a request to this background Emacs process to open a file in a new or existing Emacs frame, or to execute a specified Lisp expression. <br><br>The primary benefit of using `emacsclient` is speed. Instead of launching a new Emacs instance for every file you want to open (which can be slow due to initialization time), `emacsclient` allows you to reuse an existing, already loaded Emacs process. This significantly reduces the startup time for opening files, making Emacs feel more responsive and behave like a lightweight editor while retaining all its powerful features in the background server. It's particularly useful for integrating Emacs into desktop environments as the default text editor, or for opening files quickly from the terminal.


title: CAVEATS
content:
The primary limitation of `emacsclient` is its dependency on a running Emacs daemon. If `emacs --daemon` is not active, `emacsclient` will fail unless an alternate editor is specified using `-a`. Users must ensure the socket file used by `emacsclient` matches the one created by the Emacs daemon, especially in environments with multiple Emacs instances or differing user permissions.


title: CLIENT-SERVER WORKFLOW
content:
To use `emacsclient`, you must first start an Emacs daemon. This is typically done by running `emacs --daemon` in your terminal or by adding it to your shell's startup script. <br><br><b>Example workflow:</b><br><br>1. <b>Start the Emacs daemon:</b><br>   `$ emacs --daemon`<br><br>2. <b>Open a file using emacsclient:</b><br>   `$ emacsclient file.txt`<br>   (This will open `file.txt` in a new or existing Emacs frame.)<br><br>3. <b>Open a file in a new graphical frame:</b><br>   `$ emacsclient -c another_file.org`<br><br>4. <b>Evaluate Emacs Lisp:</b><br>   `$ emacsclient -e '(message "Hello from emacsclient!")'`<br>   (The message will appear in the Emacs *Messages* buffer.)<br><br>5. <b>Stop the Emacs daemon (optional):</b><br>   `$ emacsclient --eval '(kill-emacs)'`<br>   (This gracefully shuts down the Emacs server process.)


title: HISTORY
content:
`emacsclient` has been an integral part of GNU Emacs for many years, evolving alongside Emacs's server capabilities. Its introduction and refinement were driven by the desire to make Emacs more performant and integrated into modern desktop environments, allowing users to keep a single, persistent Emacs instance running in the background for quick file access, thereby overcoming the perceived 'slow startup' of Emacs.


title: PARAMETERS
content:
<b><b>new</b> <i>&lt;app-name&gt;</i> [<i>&lt;options&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Creates a new Ember.js application in the specified directory.<br><br><b><b>serve</b> [<i>&lt;options&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Serves the application in development mode, typically with live reloading enabled.<br><br><b><b>generate</b> <i>&lt;blueprint&gt; &lt;name&gt;</i> [<i>&lt;options&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates files based on blueprints (e.g., components, routes, services, models).<br><br><b><b>build</b> [<i>&lt;options&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds the application for production or development, compiling assets into a distributable format.<br><br><b><b>test</b> [<i>&lt;options&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the application's test suite.<br><br><b><b>install</b> <i>&lt;addon-name&gt;</i> [<i>&lt;options&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs an Ember CLI add-on, integrating its functionality into the project.<br><br><b><b>destroy</b> <i>&lt;blueprint&gt; &lt;name&gt;</i> [<i>&lt;options&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes files generated by a blueprint.<br><br><b><b>help</b> [<i>&lt;command&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the <i>ember</i> command or a specific sub-command.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the Ember CLI version.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides more detailed output during command execution.<br><br>


title: DESCRIPTION
content:
<i>ember</i> is the command-line interface (CLI) for the Ember.js JavaScript framework. It provides a structured and efficient way to create, develop, and manage Ember.js applications. The CLI automates common development tasks such as project generation, scaffolding components, running tests, serving the application in development mode, and building optimized versions for production deployment. It also facilitates the integration of Ember CLI add-ons, which extend its functionality and streamline workflows. <i>ember</i> is a pivotal tool for developers working with Ember.js, enforcing conventions, managing dependencies, and abstracting away complex build processes, thus enabling focus on application logic.


title: CAVEATS
content:
The <i>ember</i> command is not a native Linux utility. It is a JavaScript-based tool that requires <b>Node.js</b> and a package manager like <b>npm</b> or <b>yarn</b> to be installed on the system. Its primary use is within the context of web application development using the Ember.js framework.


title: INSTALLATION
content:
The <i>ember</i> command is typically installed globally via <i>npm</i> or <i>yarn</i> after Node.js is set up:<br><code>npm install -g ember-cli</code><br>or<br><code>yarn global add ember-cli</code><br>This makes the <i>ember</i> executable available in your system's PATH.


title: ADD-ONS
content:
Ember CLI boasts a rich add-on ecosystem. Add-ons are Ember.js libraries that extend the functionality of the CLI and the framework itself, providing blueprints, build transforms, or even entire libraries. They are easily installed using <i>ember install &lt;addon-name&gt;</i> and seamlessly integrate into the application's build process.


title: HISTORY
content:
Ember CLI was developed to standardize the development workflow for Ember.js applications. Prior to its introduction, Ember.js developers often relied on custom build scripts and less integrated tooling. The CLI, launched around 2013-2014, brought convention-over-configuration, a consistent project structure, and robust tooling based on Broccoli.js for asset compilation. Its continuous evolution has been crucial in maintaining Ember.js's productivity and keeping pace with the rapidly changing JavaScript ecosystem.


title: SYNOPSIS
content:
<i><b>emerge</b> [<i>options</i>] [<i>action</i>] [<i>package(s)</i>...]<br>Common actions include:<br>&nbsp;&nbsp;<b>emerge</b> <i>package-name</i> (install/update)<br>&nbsp;&nbsp;<b>emerge --sync</b> (update Portage tree)<br>&nbsp;&nbsp;<b>emerge --update --deep --newuse @world</b> (full system update)<br>&nbsp;&nbsp;<b>emerge --unmerge</b> <i>package-name</i> (remove package)<br>&nbsp;&nbsp;<b>emerge --search</b> <i>keyword</i> (search packages)</i>


title: PARAMETERS
content:
<b><b>--sync</b>, <b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Updates the local Portage tree, fetching new ebuilds and changes.</i><br><br><b><b>--update</b>, <b>-u</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Updates installed packages to their latest available versions.</i><br><br><b><b>--deep</b>, <b>-D</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>When used with <b>--update</b>, also checks dependencies of dependencies for updates.</i><br><br><b><b>--newuse</b>, <b>-N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Forces a rebuild of packages where <b>USE flags</b> have changed.</i><br><br><b><b>--pretend</b>, <b>-p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Performs a dry run, showing what actions <b>emerge</b> would take without actual changes.</i><br><br><b><b>--ask</b>, <b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prompts for confirmation before proceeding with any changes.</i><br><br><b><b>--unmerge</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Removes specified installed packages from the system.</i><br><br><b><b>--depclean</b>, <b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Removes orphaned packages (dependencies no longer required by any installed software).</i><br><br><b><b>--search</b>, <b>-S</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Searches the Portage tree for packages matching a keyword.</i><br><br><b><b>--info</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays detailed information about specified packages.</i><br><br><b><b>--noreplace</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Skips installing a package if it is already installed.</i><br><br><b><b>--oneshot</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Installs a package without adding it to the world file (for temporary dependencies).</i><br><br><b><b>--verbose</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Increases the verbosity of the output, showing more details.</i><br><br><b><b>--quiet</b>, <b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Suppresses most output, showing only critical messages.</i><br><br><b><b>--autounmask-write</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Attempts to automatically write entries to necessary configuration files (e.g., <b>package.use</b>, <b>package.accept_keywords</b>) to satisfy dependencies.</i><br><br><b><b>--jobs</b>, <b>-j</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies the number of parallel compilation jobs.</i><br><br>


title: DESCRIPTION
content:
<i><b>emerge</b> is the primary command-line interface to the <b>Portage</b> package management system on Gentoo Linux.<br>Unlike binary-based package managers, <b>emerge</b> typically compiles packages from source code, offering unparalleled flexibility and optimization for specific hardware. It handles dependency resolution, downloads source code, applies patches, compiles, and installs software.<br>Users can customize builds extensively using <b>USE flags</b>, which enable or disable specific features within packages. <b>emerge</b> also manages system updates, package removal, and synchronization with the official Gentoo Portage tree, ensuring the system stays current and optimized. Its design allows for a highly customized and performant system tailored to individual needs.</i>


title: CAVEATS
content:
<i>Due to source compilation, <b>emerge</b> operations can be time-consuming, especially for large packages or on slower hardware. It also requires significant disk space for source code and build artifacts.<br>Managing <b>USE flags</b> and masks can initially be complex for new users, requiring a steeper learning curve compared to binary package managers.</i>


title: <I>USE FLAGS</I>
content:
<i><b>USE flags</b> are keywords that control conditional features of packages during compilation. They allow users to customize software by enabling or disabling specific functionalities (e.g., GUI support, specific database drivers, optional libraries), leading to a leaner and more optimized system tailored to individual needs.</i>


title: <I>THE @WORLD SET</I>
content:
<i>The <b>@world</b> set is a special package set that represents all packages explicitly installed by the user. Running <b>emerge --update --deep --newuse @world</b> ensures that all user-selected applications and their dependencies are updated, rebuilt if necessary due to <b>USE flag</b> changes, and maintained.</i>


title: HISTORY
content:
<i><b>emerge</b> emerged as the primary frontend for the <b>Portage</b> package management system, which was originally created by Daniel Robbins, the founder of Gentoo Linux, around 1999-2000. It was heavily inspired by the FreeBSD Ports system, adapting its source-based approach to a Linux environment.<br>Since its inception, <b>emerge</b> has been central to Gentoo's philosophy of offering ultimate flexibility and control over the software stack, evolving with the project to manage increasingly complex dependency trees and build options. Its stability and powerful features have made it a cornerstone of the Gentoo experience.</i>


title: PARAMETERS
content:
<b>-avd <avd_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the Android Virtual Device (AVD) to launch. This is the primary way to select which virtual device to run. For example, <i>-avd Pixel_3a_API_30</i>.<br><br><b>-port <port></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the console port for the emulator instance. Useful when running multiple emulator instances simultaneously. Defaults to 5554 for the first instance.<br><br><b>-gpu <mode></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Configures the graphics emulation mode. Common values include <i>auto</i> (default), <i>host</i> (uses host GPU directly), or <i>swiftshader</i> (software rendering via SwiftShader).<br><br><b>-wipe-data</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Erases user data and cache for the specified AVD, performing a factory reset. The AVD will start as if it were a brand new device.<br><br><b>-no-snapshot-load</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the emulator from loading the last saved snapshot state on startup, ensuring a clean boot from the AVD's initial state.<br><br><b>-no-snapshot-save</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables saving the current state as a snapshot when the emulator is closed. The emulator will always boot from its initial state or the last explicitly saved snapshot.<br><br><b>-writable-system</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Makes the system partition writable, which is useful for advanced debugging, modifying system files, or making persistent changes to the system image during development.<br><br><b>-verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, printing detailed log messages to the console during the emulator's startup and operation, helpful for troubleshooting.<br><br><b>-help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a comprehensive list of all available command-line options and their descriptions, then exits.<br><br>


title: DESCRIPTION
content:
The <b><I>emulator</I></b> command launches the Android Emulator, a powerful tool provided by Google as a core component of the Android SDK. It allows developers and users to run Android Virtual Devices (AVDs) directly on their desktop, simulating various Android phones, tablets, Wear OS devices, and more. This is an indispensable tool for Android app development, enabling comprehensive testing and debugging across diverse Android versions, screen sizes, hardware configurations, and API levels without needing physical devices.<br><br>The emulator supports virtualized hardware components such as GPS location, camera, network connectivity, sensors, and battery levels, providing a realistic environment for testing applications. It leverages underlying virtualization technologies to deliver a faithful Android experience, accelerating development cycles and ensuring app compatibility.


title: CAVEATS
content:
The <b><I>emulator</I></b> command is specific to the Android development environment. It requires the Android SDK to be installed and properly configured, including an Android Virtual Device (AVD) created via Android Studio or the <b><I>avdmanager</I></b>. It is a resource-intensive application, demanding significant RAM and CPU, particularly for modern Android versions and complex apps. Users should ensure their system has adequate resources and hardware acceleration (like Intel HAXM or KVM) configured for optimal performance. It is designed exclusively for Android emulation and is not a general-purpose operating system emulator like QEMU or VirtualBox.


title: ANDROID VIRTUAL DEVICES (AVDS)
content:
Before you can launch the <b><I>emulator</I></b>, you must create an AVD. An AVD is a configuration that defines the characteristics of the Android device you want to simulate, including its hardware profile (e.g., screen size, RAM), system image (the specific Android version and API level), and storage settings. AVDs are managed via Android Studio's AVD Manager or the command-line tool <b><I>avdmanager</I></b>.


title: HARDWARE ACCELERATION FOR PERFORMANCE
content:
For optimal performance, the Android Emulator heavily relies on hardware acceleration. On Intel CPUs, this is typically provided by Intel HAXM (Hardware Accelerated Execution Manager) on Windows and macOS. On Linux, KVM (Kernel-based Virtual Machine) is used. Ensuring these virtualization technologies are correctly installed and enabled in your system's BIOS/UEFI settings and operating system is crucial for a smooth and responsive emulation experience, otherwise, the emulator can be very slow.


title: HISTORY
content:
The <b><I>emulator</I></b> command has been a fundamental component of the Android SDK since its nascent stages, evolving significantly alongside the Android operating system itself. Initially built upon a heavily modified version of QEMU, it has undergone continuous improvements focused on performance, graphics rendering accuracy (e.g., through hardware acceleration via HAXM on Intel CPUs or KVM on Linux), and deeper integration with Android Studio and other development tools. Its development trajectory mirrors the increasing complexity and demands of modern Android app development, striving to provide a fast, accurate, and feature-rich testing environment for the diverse Android ecosystem.


title: DESCRIPTION
content:
The command <i><b>'emuto'</b></i> is not a recognized standard utility in common Linux distributions. It does not appear in official documentation, standard system paths (like <code>/bin</code> or <code>/usr/bin</code>), or major package repositories. It is highly probable that <i><b>'emuto'</b></i> is either a typographical error, a custom script specific to a particular environment, or a highly specialized, non-publicly distributed tool. Without specific context from its origin, providing a functional description or usage guidelines for <i><b>'emuto'</b></i> is not possible based on standard Linux resources. Users encountering this command should verify its source and purpose within their specific system configuration.


title: CAVEATS
content:
<b>'emuto' is not a standard Linux command.</b><br>Executing <i><b>'emuto'</b></i> on a typical Linux system will almost certainly result in a 'command not found' error. There are no official options, parameters, or documented behaviors associated with this name in the standard Linux ecosystem. Any existing 'emuto' command would be specific to a custom installation, script, or alias on a particular system.


title: POSSIBLE EXPLANATIONS
content:
If you encountered <i><b>'emuto'</b></i>, it could be a typo for another command (e.g., 'mount', 'umount', 'tmux', 'mutt').<br>Alternatively, it might be a custom script or alias defined in your shell's configuration files (e.g., <code>.bashrc</code>, <code>.zshrc</code>, <code>.profile</code>) or a part of a specialized application or project within a specific organization.


title: PARAMETERS
content:
<b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List all built-in commands, including those currently enabled and disabled.<br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;If <i>name</i>(s) are provided, disable the specified built-in command(s). If no <i>name</i> is given, list all currently disabled built-in commands.<br><br><b><i>name</i> ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more names of built-in commands to enable or disable. If no option is specified, the command(s) will be enabled.<br><br>


title: DESCRIPTION
content:
The <b>enable</b> command is a shell built-in, primarily found in shells like <i>bash</i> and <i>zsh</i>. Its fundamental purpose is to manage the availability of other shell built-in commands. Built-in commands are executed directly by the shell, offering performance benefits over external executables. By default, most built-ins are enabled. <br><br>Users can leverage <b>enable</b> to temporarily disable a specific built-in, preventing its execution and potentially allowing an external command or a shell function with the same name to take precedence. Conversely, it can re-enable a built-in that was previously disabled. This capability is invaluable for debugging, overriding default shell behavior with custom scripts, or handling scenarios where a specific external utility needs to be prioritized over a built-in. The command can also be used to list currently enabled or disabled built-ins, providing insight into the shell's command processing environment.


title: CAVEATS
content:
<b>enable</b> is a shell built-in, not an external executable. Its behavior can vary slightly between different shells (e.g., <i>bash</i> vs. <i>zsh</i>). Changes made with <b>enable</b> are typically session-specific and will revert upon shell exit unless explicitly saved in a shell configuration file (e.g., <i>.bashrc</i>). Disabling critical built-ins might impact fundamental shell functionality. It affects only built-ins; it does not disable external commands or shell functions.


title: SHELL BUILT-IN DISTINCTION
content:
It's crucial to understand that <b>enable</b> is a shell built-in. This means it is an integral part of the shell itself, not a separate program located in directories like <i>/bin</i> or <i>/usr/bin</i>. Therefore, you won't find a dedicated manual page for <b>enable</b> by running <i>man enable</i>; instead, its documentation is typically included within the manual page of the shell it belongs to (e.g., <i>man bash</i> for <i>bash</i> users).


title: COMMAND PRECEDENCE
content:
When you enter a command, the shell resolves it based on a specific order of precedence: aliases are checked first, followed by shell functions, then built-in commands, and finally external executables found in the <i>PATH</i>. Disabling a built-in with <b>enable -n</b> effectively removes it from the built-in step, causing the shell to proceed to search for an external command or function if one exists with the same name.


title: HISTORY
content:
The concept of built-in commands has been integral to Unix shells since their inception, providing efficiency by executing commands directly within the shell process. The specific <b>enable</b> command, allowing dynamic control over these built-ins, emerged as shells evolved into more sophisticated and programmable environments like <i>bash</i> and <i>zsh</i>. Its development reflects a desire for greater flexibility and fine-grained control over shell behavior, enabling advanced scripting and customization that was not feasible in earlier, simpler shell designs.


title: SYNOPSIS
content:
<B>openssl enc</B> [<I>-&lt;cipher&gt;</I>] [<I>-in &lt;file&gt;</I>] [<I>-out &lt;file&gt;</I>] [<I>-pass &lt;arg&gt;</I>] [<I>-e|-d</I>] [<I>-p</I>] [<I>-P</I>] [<I>-a|-base64</I>] [<I>-nosalt</I>] [<I>-K &lt;key&gt;</I>] [<I>-iv &lt;IV&gt;</I>] [<I>-bufsize &lt;num&gt;</I>] [<I>-md &lt;digest&gt;</I>] [<I>-iter &lt;count&gt;</I>] [<I>-pbkdf2</I>]


title: PARAMETERS
content:
<b>-e</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Encrypt the input data (this is the default operation).<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Decrypt the input data.<br><br><b>-in &lt;file&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the input file. If omitted, input is read from standard input.<br><br><b>-out &lt;file&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output file. If omitted, output is written to standard output.<br><br><b>-pass &lt;arg&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the password source. Examples: <I>pass:password</I>, <I>env:VAR</I>, <I>file:path</I>.<br><br><b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the salt, key, and IV used during encryption/decryption.<br><br><b>-P</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the salt, key, and IV used, then exit.<br><br><b>-a | -base64</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Base64 encode/decode the output/input, useful for text-based storage or transmission.<br><br><b>-nosalt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not use a salt when deriving key from password. <B>Highly insecure and not recommended for password-based encryption.</B><br><br><b>-K &lt;key&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The encryption key in hexadecimal format. Used for raw key encryption (not password-based).<br><br><b>-iv &lt;IV&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The Initialization Vector (IV) in hexadecimal format. Used for raw key encryption (not password-based).<br><br><b>-&lt;cipher&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the cipher algorithm to use (e.g., <I>-aes-256-cbc</I>, <I>-des3</I>, <I>-chacha20</I>). It is highly recommended to specify a modern, strong cipher.<br><br><b>-md &lt;digest&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the message digest algorithm for key derivation from a password (e.g., <I>sha256</I>, <I>md5</I>).<br><br><b>-iter &lt;count&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the iteration count for PBKDF2 key derivation.<br><br><b>-pbkdf2</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use PBKDF2 for password-based key derivation. <B>Recommended for improved security over older default methods.</B><br><br>


title: DESCRIPTION
content:
The <I>openssl enc</I> command is a versatile utility within the <I>OpenSSL</I> toolkit, designed for symmetric encryption and decryption of data. It supports a wide array of cryptographic ciphers (such as AES, DES, Triple DES, and Blowfish) and various operational modes (like CBC, ECB, GCM).<br><br>Users can specify input and output files, or use standard input and output. A key feature is its ability to derive encryption keys and Initialization Vectors (IVs) from a passphrase, employing mechanisms like PKCS#5 (PBKDF1 or PBKDF2) or accepting raw hexadecimal keys and IVs directly.<br><br>This command is invaluable for protecting sensitive files, creating encrypted archives, or processing data streams for secure transmission. While it offers default behaviors (e.g., encryption by default, often defaulting to an older cipher if not specified), it is strongly recommended to explicitly choose modern, robust ciphers and key derivation methods for optimal security. It also supports base64 encoding/decoding of the output for text-based transmission.


title: CAVEATS
content:
<ul><li>Using <I>-nosalt</I> with a password makes the encryption vulnerable to dictionary attacks and should be avoided.</li><li>Default key derivation methods (if <I>-pbkdf2</I> is not specified) may be weaker and less resistant to brute-force attacks. Always prefer <I>-pbkdf2</I> and a high iteration count.</li><li>Hardcoding passwords directly on the command line is insecure as they might be visible in process listings (<I>ps</I> command history). Use <I>-pass env:VAR</I> or prompt-based input.</li><li>Always choose strong, modern cipher algorithms and modes (e.g., AES-256-GCM, AES-256-CBC with a strong digest like SHA256). Older ciphers or modes like DES-ECB are insecure.</li></ul>


title: KEY AND IV DERIVATION
content:
When encrypting with a password (without specifying <I>-K</I> and <I>-iv</I>), <I>openssl enc</I> derives the encryption key and Initialization Vector (IV) from the password, a generated salt, and a digest algorithm. By default, it uses a simple concatenation method. However, for stronger security, it is highly recommended to use the <I>-pbkdf2</I> option, which employs a modern Password-Based Key Derivation Function 2, providing better resistance against brute-force attacks, especially when combined with a sufficient iteration count (<I>-iter</I>).


title: CIPHER SELECTION BEST PRACTICES
content:
The choice of cipher greatly impacts the security of your encrypted data. Avoid outdated or weak ciphers like DES or RC4. Modern and highly recommended choices include AES (Advanced Encryption Standard) with a sufficient key size (e.g., 256-bit) and a secure mode of operation. For example, <I>aes-256-cbc</I> for confidentiality, or for authenticated encryption, <I>aes-256-gcm</I> is preferred. Always pair with a strong digest algorithm like SHA-256 or SHA-512 for key derivation.


title: HISTORY
content:
The <I>openssl enc</I> command is an integral part of the <I>OpenSSL</I> cryptographic software library, which originated from the SSLeay project developed by Eric Young and Tim Hudson in the mid-1990s. Since its inception, <I>openssl enc</I> has served as a fundamental utility for symmetric encryption and decryption operations on Unix-like systems. Its capabilities have steadily evolved over time to incorporate newer, more secure cryptographic algorithms, modes of operation, and robust key derivation functions like PBKDF2, adapting to the changing landscape of cryptographic best practices and threats. It remains a widely used tool in shell scripting and various applications requiring file-level or stream-level data protection.


title: PARAMETERS
content:
<b><b>-o</b> <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output C file name where the generated source code will be written.<br><br><b><b>-p</b> <I>prefix</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a prefix for generated C symbols to avoid name clashes in the compiled module.<br><br><b><b>-C</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A convenience option that generates both the XS (eXtension Subsystem) and PM (Perl Module) files directly, facilitating module creation.<br><br><b><b>-Q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Quiet mode; suppresses most informational messages during execution.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verbose mode; displays more detailed information and progress messages.<br><br><b><b>-H</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><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of <b>enc2xs</b> and exits.<br><br><b><b>-A</b> <I>alias_file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an additional alias file to include for encoding name lookups.<br><br><b><b>-M</b> <I>module_name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Perl module name for which the code is being generated (e.g., Encode::MyEncoding).<br><br><b><b>-g</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates a <I>gperf</I> lookup table for the encoding names, which can improve lookup performance.<br><br><b><b>-D</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not embed the encoding table data directly into the C code; instead, reference it externally.<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force overwrite of existing output files without prompting for confirmation.<br><br><b><b>-m</b> <I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates code for a specific mapping table by its internal name.<br><br><b><b>-S</b> <I>dir</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory containing the encoding data source files.<br><br><b><b>-U</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserves the original table layout in the generated C code, rather than optimizing it for size or speed.<br><br><b><b>-X</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates only the XS (eXtension Subsystem) code, without the full C implementation.<br><br>


title: DESCRIPTION
content:
<b>enc2xs</b> is a utility included with Perl's core <I>Encode</I> module. Its primary function is to convert character encoding mapping tables (often found in <I>*.pl</I> or <I>*.dat</I> files within the <I>Encode</I> distribution) into optimized C source code. This C code, once compiled into a shared library, can be dynamically loaded by Perl to provide highly efficient character encoding and decoding operations.<br><br>It is particularly useful for module developers who need to create custom <I>Encode</I> modules or for optimizing the performance of existing ones by compiling their character mapping data into native C code rather than relying on Perl-level data structures, which can be slower. It plays a crucial role in Perl's internationalization and localization capabilities, enabling fast and robust handling of various character sets.


title: CAVEATS
content:
<b>enc2xs</b> is primarily a development tool for Perl module authors and is not intended for general user-level character encoding conversion.<br><br>Its output is C source code, which requires a C compiler and the Perl development headers to be compiled into a loadable module. Directly interacting with <b>enc2xs</b> is typically only necessary when creating or customizing <I>Encode</I> modules, or when troubleshooting <I>Encode</I> performance issues.


title: PERFORMANCE OPTIMIZATION
content:
<b>enc2xs</b> is a key component for optimizing the performance of Perl's <I>Encode</I> module. By converting encoding maps into compiled C code, it drastically reduces the overhead associated with character conversions, making it suitable for high-volume or performance-critical applications.


title: MODULE DEVELOPMENT
content:
It is an essential tool for developers creating custom <I>Encode</I> modules, allowing them to integrate new or proprietary character encodings efficiently into the Perl ecosystem.


title: DISTINCTION FROM ICONV
content:
Unlike <I>iconv</I>, which is a standalone utility for character set conversion, <b>enc2xs</b> is a development tool that generates C source code for use within Perl's <I>Encode</I> module, primarily for internal optimization and extension, rather than direct user-facing conversion.


title: HISTORY
content:
The <b>enc2xs</b> utility emerged as part of Perl's ongoing efforts to enhance its internationalization (i18n) and localization (L10n) capabilities, specifically with the development and maturation of the <I>Encode</I> module in Perl 5. It was introduced to provide a robust and performant mechanism for handling a wide array of character encodings by leveraging compiled C code for encoding/decoding tables, which significantly outperforms purely Perl-based implementations. Its development closely parallels the evolution of the <I>Encode</I> module itself, aiming to make Perl a first-class language for multi-byte character string processing.


title: SYNOPSIS
content:
<b>enca</b> [<i>OPTIONS</i>] [<i>FILE...</i>]<br><b>enca</b> <i>-L language</i> [<i>OPTIONS</i>] [<i>FILE...</i>]<br><b>enca</b> <i>-x encoding</i> [<i>OPTIONS</i>] [<i>FILE...</i>]


title: PARAMETERS
content:
<b><i>-L language</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the language of the input file. This helps <i>enca</i> with more accurate detection. Examples include <i>en</i> (English), <i>cs</i> (Czech), <i>sk</i> (Slovak), <i>ru</i> (Russian), <i>pl</i> (Polish), <i>uk</i> (Ukrainian).<br><br><b><i>-x encoding</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Convert to the specified encoding. Common examples are <i>utf-8</i>, <i>iso-8859-2</i>, <i>windows-1250</i>. This option implicitly converts the file.<br><br><b><i>-c</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Check and report encoding without converting. This is often the default behavior if no conversion option like <i>-x</i> is used.<br><br><b><i>-d</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display detailed information about the detection process, including statistical data.<br><br><b><i>-m</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Modify files in place. This option requires the <i>-x</i> (conversion) option and should be used with caution, as it overwrites the original file.<br><br><b><i>-t</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Convert to Unicode (UTF-8 by default). This is a shortcut for <i>-x utf-8</i>.<br><br><b><i>-g</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Guess encoding only. Output only the guessed encoding name, without any other information or conversion.<br><br><b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message with available options and exit.<br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information about <i>enca</i> and exit.<br><br>


title: DESCRIPTION
content:
<i>enca</i> is a command-line tool designed for guessing and converting character encodings of text files. It attempts to determine the encoding of a given text file using statistical analysis and various heuristics, including checking byte patterns, character frequencies, and common language constructs. Once detected, <i>enca</i> can report the encoding or convert the file to a different specified encoding (e.g., UTF-8). It is known for its strong performance in detecting many encodings, including a wide range of East European and Cyrillic encodings, as well as common ones like UTF-8, UTF-16, ISO-8859 variants, and Windows code pages. It's a useful tool for managing text files from various sources or legacy systems, especially when dealing with multilingual content.


title: CAVEATS
content:
Due to its heuristic nature, <i>enca</i>'s detection is not always 100% accurate, especially for short files or files with ambiguous character sets. It can sometimes misidentify encodings; using the <i>-L</i> option for specific languages can significantly improve accuracy. When using the <i>-m</i> (modify in place) option, it's highly recommended to back up important files beforehand, as incorrect detection or conversion can lead to data corruption.


title: LANGUAGE-SPECIFIC DETECTION
content:
<i>enca</i> performs significantly better when it knows the language of the text. Using the <i>-L language</i> option (e.g., <i>-L cs</i> for Czech) can drastically improve detection accuracy, as it allows <i>enca</i> to apply language-specific patterns and statistics. This is particularly useful for East European and Cyrillic languages where character set variations are common.


title: IN-PLACE MODIFICATION CAUTION
content:
While <i>enca</i> offers the convenience of modifying files in place with the <i>-m</i> option, users should exercise extreme caution. Incorrect detection followed by in-place conversion can permanently corrupt the original file. It is a best practice to always test conversions on copies of files or to ensure you have a backup before performing in-place modifications.


title: HISTORY
content:
<i>enca</i> was developed by David Necas (Yeti) to address the need for robust character set detection and conversion, particularly for a broad range of encodings beyond just the common ones. Its development focused on implementing a strong heuristic approach that allows it to infer encodings even when explicit byte order marks (BOMs) or other metadata are missing. It fills a critical niche for users dealing with diverse text files originating from various systems, especially those with non-Western European or legacy character sets, by providing a powerful tool for charset interoperability.


title: SYNOPSIS
content:
<i>encfs</i> [<i>options</i>] <i>&lt;encrypted_directory&gt;</i> <i>&lt;mount_point&gt;</i><br><i>encfs</i> --unmount <i>&lt;mount_point&gt;</i><br><i>encfs</i> --check <i>&lt;encrypted_directory&gt;</i><br><i>encfs</i> --change-password <i>&lt;encrypted_directory&gt;</i><br><i>encfs</i> --init [<i>options</i>] <i>&lt;encrypted_directory&gt;</i> <i>&lt;mount_point&gt;</i>


title: PARAMETERS
content:
<b><b>&lt;encrypted_directory&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The directory containing the encrypted files and the <i>encfs</i> configuration file.<br><br><b><b>&lt;mount_point&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The directory where the decrypted files will be accessible.<br><br><b><b>-s</b>, <b>--standard</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use standard (recommended) encryption configuration during initialization.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output for debugging purposes.<br><br><b><b>-f</b>, <b>--foreground</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the <i>encfs</i> process in the foreground instead of daemonizing.<br><br><b><b>-D</b>, <b>--extpass</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read the password from an external program instead of the console.<br><br><b><b>--idle=MINUTES</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unmount the filesystem automatically after the specified minutes of inactivity.<br><br><b><b>--reverse</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run <i>encfs</i> in reverse mode, decrypting files from the mount point into the encrypted directory (useful for encrypting on the fly).<br><br><b><b>-o <i>FUSE_OPT</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pass additional FUSE options directly to the underlying FUSE library (e.g., 'ro' for read-only).<br><br><b><b>--unmount</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unmount the specified <i>mount_point</i>.<br><br><b><b>--check</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Check the integrity of the encrypted filesystem in <i>encrypted_directory</i>.<br><br><b><b>--change-password</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Change the password for the specified <i>encrypted_directory</i> volume.<br><br><b><b>--init</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly initialize a new encrypted filesystem. This is often implied if no configuration exists in the <i>encrypted_directory</i>.<br><br>


title: DESCRIPTION
content:
<i>encfs</i> is a user-space filesystem that encrypts files and directories. It leverages FUSE (Filesystem in Userspace) to provide a virtual view of encrypted data. When you access files through the <i>encfs</i> mount point, they are transparently decrypted; when you write files, they are transparently encrypted and stored on the underlying filesystem. <i>encfs</i> encrypts both file contents and filenames, providing a layer of privacy for your data.<br><br>It's often used for cloud storage synchronization, where data is stored on untrusted servers, or for protecting local sensitive information. It operates on a file-by-file basis, meaning each file is individually encrypted, allowing for partial synchronization and less overhead than full disk encryption. It offers various encryption algorithms and configuration options, allowing users to balance security and performance.


title: CAVEATS
content:
<i>encfs</i> provides good security against passive observers but has known limitations. It is vulnerable to certain types of attacks, particularly if an attacker can observe changes to the ciphertext over time (e.g., chosen-plaintext attacks, as detailed by security researchers). Metadata like file sizes, directory structure, and modification times are often exposed. It's generally not recommended for scenarios requiring the highest level of security against active, sophisticated adversaries. Performance can also be an issue for very large numbers of small files or intensive I/O operations due to the per-file encryption overhead.


title: SECURITY CONSIDERATIONS
content:
While <i>encfs</i> encrypts file contents and filenames, it does not hide metadata such as the number of files, directory structure, approximate file sizes, or access/modification timestamps. In certain scenarios, particularly with active attackers who can observe changes to the encrypted filesystem, this metadata leakage can be exploited to deduce information about the plaintext. Users are advised to be aware of these limitations and consider alternatives like <i>cryptsetup</i> (LUKS) or <i>ecryptfs</i> for higher security requirements, especially for full partition or system encryption. <i>encfs</i> is generally suitable for protecting data from passive observation (e.g., lost drives, untrusted cloud storage).


title: CONFIGURATION FILE
content:
Each <i>encfs</i> volume has a configuration file (typically <i>.encfs6.xml</i> by default) located within the <i>encrypted_directory</i>. This XML file stores details about the encryption algorithms, key derivation parameters, and other settings used for the volume. It is critical to keep this file secure and intact, as its corruption or loss will render the encrypted data irrecoverable. Do not modify this file manually unless you fully understand the implications.


title: HISTORY
content:
<i>encfs</i> was created by Louis Bettens and first released in 2005. Its primary motivation was to provide a user-space, cross-platform solution for encrypting filesystems, particularly useful for cloud storage synchronization where data needs to be secured before being uploaded to untrusted services. It gained significant popularity due to its ease of use and file-granularity encryption. While initial versions used less robust encryption configurations, later updates introduced more secure defaults and options. Despite its utility, security audits and research in the 2010s highlighted potential vulnerabilities, leading to recommendations for more robust alternatives in high-security contexts. Development has continued, albeit with a slower pace, focusing on maintenance and minor improvements.


title: SYNOPSIS
content:
<b>enchant</b> [<i>OPTIONS</i>] [<i>FILE...</i>]<br><b>enchant</b> -l<br><b>enchant</b> -d <<i>DICTIONARY</i>> <<i>WORD</i>><br><b>enchant</b> -a <<i>DICTIONARY</i>> <<i>WORD</i>>


title: PARAMETERS
content:
<b>--add-to-personal=<WORD></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds <i>WORD</i> to the user's persistent personal dictionary.<br><br><b>--add-to-session=<WORD></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds <i>WORD</i> to the current session's temporary dictionary.<br><br><b>--brief</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only prints misspelled words, suppressing other output like suggestions or statistics.<br><br><b>-d <DICTIONARY>, --dictionary=<DICTIONARY></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the specified <i>DICTIONARY</i> for spell checking (e.g., 'en_US', 'fr').<br><br><b>-L <LANGUAGE>, --language=<LANGUAGE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a dictionary for the specified <i>LANGUAGE</i>, auto-detecting the best match.<br><br><b>-l, --list-dictionaries</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available dictionaries that <i>enchant</i> can utilize.<br><br><b>-a, --suggest</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides alternative spelling suggestions for misspelled words.<br><br><b>--no-pdict</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the use of the personal dictionary during spell checking.<br><br><b>--personal-dict-dir=<DIR></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative directory for personal dictionaries.<br><br><b>--show-errors</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly displays only misspelled words found in the input (often default when checking files).<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more details about the spell checking process.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <i>enchant</i> version information and exits.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with command-line options and exits.<br><br>


title: DESCRIPTION
content:
<i>enchant</i> is a powerful and flexible spell checking library and command-line tool. It acts as a generic front-end for various underlying spelling checker backends, such as Hunspell, Aspell, and Ispell. This architecture allows <i>enchant</i> to provide a consistent API for applications, regardless of which specific spelling engine is installed or preferred by the user.<br><br>It supports multiple languages and can handle different dictionary formats. Users can check the spelling of words or entire files, receive suggestions for misspelled words, and manage personal dictionaries. <i>enchant</i> is widely used in text editors, word processors, and other applications that require robust spell checking capabilities, offering a unified and extensible solution.


title: CAVEATS
content:
<i>enchant</i> relies on underlying spelling backends (like Hunspell or Aspell) and their respective dictionaries to be installed on the system. If no suitable backend or dictionary is found for a requested language, spell checking might fail or be unavailable.<br><br>Dictionary quality and coverage can vary depending on the backend and language pack used. Users should ensure they have appropriate dictionaries installed for their specific needs.


title: BACKENDS AND DICTIONARIES
content:
<i>enchant</i> works by loading 'backends,' which are modules that wrap specific spell checking libraries. To use <i>enchant</i> effectively for a particular language, the corresponding backend (e.g., libenchant-2-hunspell.so for Hunspell) and its associated language dictionaries (e.g., hunspell-en-us) must be installed on your system. You can list available backends using <i>--list-brokers</i> and dictionaries using <i>-l</i>.


title: PERSONAL DICTIONARIES
content:
Users can maintain personal dictionaries to store words not found in the main dictionaries but which are correctly spelled (e.g., proper nouns, jargon, technical terms). These can be added via the command line (<i>--add-to-personal</i>) or configured through application settings that use <i>enchant</i>. Their persistence and location might depend on <i>enchant</i> configuration and backend choices.


title: HISTORY
content:
<i>enchant</i> was created to provide a consistent, unified API for spell checking, abstracting away the differences between various existing spell checking libraries like Ispell, Aspell, and Hunspell. This approach aimed to simplify the development of applications requiring spell checking by allowing them to use a single interface, rather than needing to integrate with multiple distinct libraries. It gained traction as a flexible solution in the open-source ecosystem, particularly for desktop environments and applications that needed robust multi-language spell checking capabilities without being tied to a specific backend technology.


title: DESCRIPTION
content:
Enchant is a generic spell-checking library designed to provide a consistent API for various spell-checking backends, often referred to as modules. The <b>enchant-lsmod</b> command is a utility provided by the Enchant library that lists all available spell-checking modules (backends) on your system that Enchant can potentially utilize. It's an invaluable tool for system administrators and developers to inspect which spell-checking engines are installed, properly configured, and loaded by Enchant. The output typically displays the module name, its loading status (loaded or not loaded), and if not loaded, a diagnostic message explaining the reason (e.g., missing dictionary files, incompatible library versions). This command is crucial for debugging Enchant-related issues, verifying the spell-checking environment, or understanding the capabilities of your Enchant installation.


title: CAVEATS
content:
The output format of <b>enchant-lsmod</b> is primarily designed for human readability and diagnostic purposes, not for programmatic parsing. It does not offer options for specifying alternative output formats (e.g., JSON, XML). The availability and loading status of modules are highly dependent on the system's installed dictionary files, specific library versions, and the overall configuration of the Enchant library.


title: MODULE STATUS INTERPRETATION
content:
The command's output clearly indicates whether a module is 'loaded' or 'not loaded'. If a module fails to load, <b>enchant-lsmod</b> often provides a specific reason, such as 'could not find any dictionaries' or 'missing shared library'. This detailed information is vital for troubleshooting and resolving spell-checking configuration problems.


title: COMMON MODULES
content:
Users commonly encounter modules like <i>hunspell</i> (widely used by applications such as LibreOffice and Firefox), <i>aspell</i>, and <i>ispell</i>. Depending on the system's installed packages and specific configurations, other modules like <i>voikko</i> or <i>zimbra</i> might also appear in the output.


title: HISTORY
content:
The Enchant library was developed to address the fragmentation of spell-checking solutions across Unix-like operating systems by offering a unified interface to diverse spell-checking engines. <b>enchant-lsmod</b> has been an integral utility within the Enchant project since its early stages, providing essential introspection into the library's backend capabilities. Its development is intrinsically linked to the evolution of the Enchant project itself, with a consistent focus on broad compatibility and ease of configuration for spell-checking services.


title: PARAMETERS
content:
<b>-n, --new</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create a new archive.<br><br><b>-a, --add=FILES</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add files to an existing archive. FILES should be a comma-separated list of paths.<br><br><b>-e, --extract</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extract an archive to the current directory or a default location.<br><br><b>-x, --extract-to=DIRECTORY</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Extract an archive to the specified DIRECTORY.<br><br><b>-d, --delete=FILES</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete files from an archive. FILES should be a comma-separated list of paths within the archive.<br><br><b>-t, --test</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Test the integrity of an archive.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of <i>engrampa</i>.<br><br><b>-?, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show command-line help options.<br><br>


title: DESCRIPTION
content:
<i>engrampa</i> is the default graphical archive manager for the <b>MATE</b> desktop environment. It provides a user-friendly interface for creating, viewing, modifying, and extracting various archive formats, including popular ones like <b>.zip</b>, <b>.tar</b>, <b>.gz</b>, <b>.bz2</b>, <b>.7z</b>, and <b>.rar</b>. Users can easily open archives, browse their contents, add or remove files, and extract them to desired locations using a simple drag-and-drop or menu-driven approach.<br><br>While primarily a graphical application, <i>engrampa</i> can also be invoked from the command line to open specific archive files or perform basic actions like extraction or creation. Its integration with the <b>MATE</b> desktop ensures a consistent and efficient experience for managing compressed files.


title: CAVEATS
content:
While <i>engrampa</i> offers basic command-line options for automation, its primary strength lies in its graphical user interface. It is not designed as a robust command-line archiving tool like <b>tar</b> or <b>zip</b> and relies on external utilities (such as <b>p7zip</b>, <b>unrar</b>, etc.) for the actual compression/decompression operations. Its availability and optimal functionality are tied to the <b>MATE</b> desktop environment.


title: SUPPORTED FORMATS
content:
<i>engrampa</i> supports a wide array of archive formats, leveraging various backend utilities installed on the system. Common formats include <b>.zip</b>, <b>.tar</b> (and its compressed variants like <b>.tar.gz</b>, <b>.tar.bz2</b>, <b>.tar.xz</b>, <b>.tar.zst</b>), <b>.7z</b>, <b>.rar</b> (read-only without <b>unrar</b> installed), <b>.iso</b>, <b>.arj</b>, <b>.lzh</b>, <b>.rpm</b>, <b>.deb</b>, and many others, providing comprehensive support for most common archive types.


title: HISTORY
content:
<i>engrampa</i> originated as a fork of <b>File Roller</b>, the default archive manager for the <b>GNOME</b> desktop environment. When <b>GNOME</b> transitioned from version 2 to 3, the <b>MATE</b> desktop was created to continue the traditional <b>GNOME 2</b> user experience.<br><br>As part of this effort, many <b>GNOME 2</b> applications, including <b>File Roller</b>, were forked and renamed to fit into the <b>MATE</b> ecosystem, thus <i>engrampa</i> was born to serve as <b>MATE</b>'s native archive management tool. It maintains a similar look, feel, and feature set to its <b>GNOME 2</b> predecessor.


title: PARAMETERS
content:
<b><b>-b</b>, <b>--header=</b><i>TEXT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the header text for pages. Supports special escape sequences for dynamic content like file name, date, or page number.<br><br><b><b>-f</b>, <b>--font=</b><i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the font to use for the body text, e.g., <i>Courier10</i>. Can include font size.<br><br><b><b>-l</b>, <b>--lines=</b><i>NUM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum number of lines to print on each page.<br><br><b><b>-M</b>, <b>--media=</b><i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the page media size (e.g., <i>A4</i>, <i>Letter</i>).<br><br><b><b>-p</b>, <b>--output=</b><i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directs the PostScript output to the specified <i>FILE</i>.<br><br><b><b>-2</b>, <b>--columns=</b><i>NUM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Arranges the output in <i>NUM</i> columns per page.<br><br><b><b>-E</b>, <b>--highlight</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables syntax highlighting for various programming languages based on file extension.<br><br><b><b>-G</b>, <b>--fancy-header</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a more elaborate header format with file name, date, and page numbers.<br><br><b><b>-r</b>, <b>--rotate-pages</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Rotates the pages by 90 degrees, suitable for landscape printing.<br><br><b><b>-X</b>, <b>--encoding=</b><i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the input character encoding (e.g., <i>UTF-8</i>, <i>latin1</i>).<br><br><b><b>-#</b>, <b>--copies=</b><i>NUM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates <i>NUM</i> copies of the output. Often handled by the printer spooler.<br><br><b><b>-o</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends the output to standard output (<i>stdout</i>).<br><br><b><b>-P</b>, <b>--printer=</b><i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends the output directly to the specified printer <i>NAME</i>.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses informational messages and warnings.<br><br>


title: DESCRIPTION
content:
The <b>enscript</b> command converts plain text files into PostScript (PS) format, primarily for high-quality printing. It offers extensive formatting capabilities, allowing users to control almost every aspect of the output, such as fonts, font sizes, line numbering, headers, footers, page layout (e.g., multiple columns), and syntax highlighting.<br><br>It's widely used by programmers to print source code, by system administrators to print log or configuration files, and by anyone needing a well-formatted printed version of a text document. <b>enscript</b> can output the generated PostScript to a file, to standard output, or directly to a printer via the system's printing spooler, making it a versatile tool for document preparation.


title: CAVEATS
content:
<b>enscript</b> generates PostScript, which requires a PostScript-compatible printer or a PostScript viewer/converter (like Ghostscript) to render. In modern printing workflows, direct PostScript generation is sometimes bypassed for more universal formats like PDF, which can reduce <b>enscript</b>'s direct-to-printer usage. Its extensive options, while powerful, can make it complex to master, and subtle configuration issues might lead to unexpected formatting.


title: CONFIGURATION FILES
content:
<b>enscript</b> can be extensively configured using system-wide (e.g., <i>/etc/enscript.cfg</i>) and user-specific (e.g., <i>~/.enscriptrc</i>) configuration files. These files allow setting default options, defining custom highlight rules, and managing print queues, making it easier to achieve consistent formatting without specifying all options on the command line each time.


title: ENVIRONMENT VARIABLES
content:
Several environment variables can influence <b>enscript</b>'s behavior, such as <i>ENSC_DEBUG</i> for debugging, <i>PRINTER</i> to specify the default printer, or <i>ENscript</i> which can contain default options to be prepended to the command line arguments, providing another layer of customization.


title: HISTORY
content:
<b>enscript</b> originated in the Unix environment, developed primarily by Markku Savolainen in Finland. It quickly became a staple utility for converting plain text to PostScript for printing, especially in environments where robust formatting and direct printer communication were essential. It has been a fundamental part of many GNU/Linux distributions for decades, maintaining its relevance for specific text processing and printing tasks despite the evolution of document formats and printing technologies.


title: SYNOPSIS
content:
<b>entr</b> [<i>options</i>] <i>command ...</i><br><br><i>Example:</i><br><b>find . -name "*.go" | entr -r go run .<br></b><br><i>This command finds all .go files and pipes them to entr. entr then reloads itself (-r) and runs 'go run .' whenever any of these .go files change.</i>


title: PARAMETERS
content:
<b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clear the screen before executing the command.<br><br><b><b>-d</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Watch directories for new files. By default, <i>entr</i> only monitors existing files for changes.<br><br><b><b>-p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Build a fresh list of files before each execution. Useful when files are frequently added or removed from the monitored set.<br><br><b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reload <i>entr</i> itself when a watched file changes, effectively re-reading its standard input. This is crucial when the list of monitored files can change, e.g., if a <b>Makefile</b> is modified.<br><br><b><b>-s</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress <i>entr</i>'s own output messages, only showing the executed command's output. Useful for cleaner terminal output.<br><br><b><b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Start the command immediately upon launch, then re-run it on subsequent file changes. The default behavior (without <b>-n</b>) is to wait for the first change before execution.<br><br><b><b>-a</b> <i>utility</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instead of reading the file list from standard input, execute the specified <i>utility</i> to generate the list of files to monitor. For example: <b>entr -a 'git ls-files' go test ./...</b><br><br><b><b>-t</b> <i>timeout</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Terminate the running command if it does not complete within <i>timeout</i> seconds.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produce verbose output from <i>entr</i> itself, showing more details about internal operations.<br><br>


title: DESCRIPTION
content:
<i>entr</i> is a command-line utility that automatically executes a specified command whenever monitored files are modified. It's an invaluable tool for developers, enabling automated tasks like recompiling code, running tests, or refreshing a server immediately after source files are saved. It reads the list of files to monitor from standard input, making it highly flexible and often used in conjunction with other commands like <b>find</b> or <b>git ls-files</b>. This allows users to precisely define which files or directories trigger command execution, streamlining development workflows by eliminating the need for manual re-execution of tasks.


title: CAVEATS
content:
<i>entr</i> typically relies on kernel-level file system event notification mechanisms (like <i>inotify</i> on Linux), which have limits on the total number of files or directories that can be watched. Exceeding these limits can lead to errors or missed events.<br><br>Monitoring a very large number of files or deeply nested directories can consume significant system resources.<br><br>The command executed by <i>entr</i> is run in a new shell environment.<br><br>Changes are detected based on file modification times (mtime) and size, not content hashes, which is efficient but might miss some rare, specific types of 'changes' that don't alter these attributes.


title: TYPICAL USAGE PATTERN
content:
The most common way to use <i>entr</i> is by piping a list of files to its standard input.<br><br><i>Example for monitoring all .js files and running a linter:</i><br><b>find . -name "*.js" | entr eslint .</b><br><br><i>Example for recompiling Go code when any .go file changes:</i><br><b>ls *.go | entr -r go build -v .</b><br><br>The <b>-r</b> option is particularly important when the list of files to be monitored can change, as it causes <i>entr</i> to re-read its input.


title: SIGNAL HANDLING
content:
<i>entr</i> gracefully forwards signals (like <b>SIGINT</b> when you press <b>Ctrl+C</b>) to the currently running command. This allows you to stop the executed command and then <i>entr</i> itself with a single <b>Ctrl+C</b> press. If the command takes a long time to shut down, you might need to press <b>Ctrl+C</b> multiple times.


title: HISTORY
content:
<i>entr</i> was created by Erik Kastner as a lightweight, efficient, and simple tool for running commands on file changes. Its development was driven by the need for a focused utility that could seamlessly integrate into Unix-like command-line pipelines. Being written in C, it offers high performance and minimal overhead, which contributed to its growing popularity in development and automation workflows as a more robust alternative to simple command loops or more complex build systems.


title: PARAMETERS
content:
<b><b>-U</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enumerate user list from the target.</i><br><br><b><b>-M</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enumerate machine list from the target.</i><br><br><b><b>-P</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enumerate password policy details for the target.</i><br><br><b><b>-G</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enumerate local group and member lists from the target.</i><br><br><b><b>-S</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enumerate shared resources (shares) on the target.</i><br><br><b><b>-i</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Perform all simple enumerations (users, groups, shares, password policy).</i><br><br><b><b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Perform all enumerations, including more aggressive RPC client brute-forcing.</i><br><br><b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enumerate RID (Relative Identifier) cycling for users and groups.</i><br><br><b><b>-N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Do not query for names; useful for faster enumeration.</i><br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Enable verbose output, showing more details during enumeration.</i><br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display the help message and exit.</i><br><br><b><b><target_ip_address></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>The IP address or hostname of the target Windows/Samba machine.</i><br><br>


title: DESCRIPTION
content:
<i><b>enum4linux</b> is a powerful tool for gathering information from Windows and Samba hosts. It leverages the NetBIOS/SMB/RPC protocols to enumerate various details, including user accounts, group memberships, shared resources, password policies, and machine information. This makes it an invaluable utility for penetration testers, security auditors, and system administrators looking to identify potential vulnerabilities or understand the configuration of network hosts. It often acts as a wrapper for underlying Samba suite tools like <b>smbclient</b>, <b>rpcclient</b>, <b>net</b>, and <b>nmblookup</b>, automating the enumeration process to streamline information gathering.</i>


title: CAVEATS
content:
<i><b>enum4linux</b> can be quite noisy on the network, generating a significant amount of traffic which may trigger Intrusion Detection Systems (IDS) or Intrusion Prevention Systems (IPS). Its effectiveness depends on the target's security configuration; modern, well-patched, and hardened Windows systems or Samba servers may limit the amount of information it can successfully enumerate. It requires the target to have SMB services accessible (typically TCP ports 139 and 445 open).</i>


title: <B>USAGE IN PENETRATION TESTING</B>
content:
<i><b>enum4linux</b> is widely used in the initial reconnaissance phase of penetration tests. The information it gathers, such as valid usernames, share names, and password policies, can be crucial for subsequent attacks like brute-forcing credentials, exploiting misconfigured shares, or identifying weak password practices within an organization.</i>


title: <B>PREREQUISITES</B>
content:
<i>To run <b>enum4linux</b> successfully, you typically need the Samba client utilities installed on your Linux system. These tools provide the underlying functionality that <b>enum4linux</b> orchestrates to communicate with Windows/Samba hosts.</i>


title: HISTORY
content:
<i><b>enum4linux</b> was primarily developed by Mark Baggett (mrb) and has been a staple in the penetration testing community for many years. It was designed to consolidate and automate various manual enumeration steps that would typically be performed using a combination of standalone Samba client tools. Its inclusion in popular security distributions like BackTrack and Kali Linux solidified its role as a go-to tool for Windows/Samba enumeration during security assessments.</i>


title: PARAMETERS
content:
<b>-i, --ignore-environment</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the command with an empty environment. No variables are inherited from the calling shell, except those explicitly set by <i>NAME</i>=<i>VALUE</i> arguments.<br><br><b>-u NAME, --unset=NAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the variable <i>NAME</i> from the environment before executing the command. This takes precedence over any <i>NAME</i>=<i>VALUE</i> arguments that would otherwise set <i>NAME</i>.<br><br><b>-0, --null</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ends each output line with a 0 (null) byte instead of a newline. This is particularly useful when piping <b>env</b>'s output to commands like <b>xargs -0</b>.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs version information and exits.<br><br>


title: DESCRIPTION
content:
The <b>env</b> command is a versatile utility used to manipulate the environment variables for a subsequent command execution or to display the current environment. It can list all current environment variables, set new variables, modify existing ones, or even clear the entire environment before executing another program. This functionality is crucial for ensuring that a script or application runs with a specific set of environment settings, isolating it from the calling shell's environment, or for debugging issues related to environment variable configuration. It provides precise control over the environment variables passed to child processes.


title: CAVEATS
content:
<b>env</b> only affects the environment of the command it executes or displays the current environment; it does not modify the environment of the current shell session. Using <b>-i</b> (ignore-environment) can be powerful but may cause unexpected behavior for commands that rely on standard environment variables like <b>PATH</b>, <b>HOME</b>, or <b>LANG</b>.


title: ENVIRONMENT VARIABLES
content:
Environment variables are key-value pairs that influence the behavior of running processes. They are inherited by child processes. <b>env</b> allows direct manipulation of these variables for a specific process invocation, enabling fine-grained control over execution contexts.


title: DIFFERENCE WITH 'EXPORT'
content:
While both <b>env</b> and the shell builtin <b>export</b> deal with environment variables, their scope differs.<br><br><b>env</b> modifies or sets variables only for the specific command it executes, or displays them. It does not alter the calling shell's environment.<br><br>In contrast, <b>export</b> modifies the environment of the <i>current shell</i> and for any child processes subsequently started from that shell.


title: HISTORY
content:
The <b>env</b> command is a fundamental utility in Unix-like operating systems, tracing its roots back to early versions of Unix. It is part of the GNU Core Utilities, indicating its long-standing and essential role in system administration and scripting. Its core functionality has remained consistent, adapting to modern usage patterns while retaining its original purpose of environment manipulation.


title: SYNOPSIS
content:
envycontrol [-s | --switch <mode>] [-q | --query] [-v | --version] [-h | --help] [--force] [--no-grub-update] [--reboot]<br><br><i>Where <b>&lt;mode&gt;</b> can be one of: <b>integrated</b>, <b>nvidia</b>, <b>hybrid</b>, <b>compute</b>.</i>


title: PARAMETERS
content:
<b>-s, --switch <mode></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Switches the GPU operating mode to the specified <i>&lt;mode&gt;</i>. Requires a system reboot to apply changes.<br><br><b>-q, --query</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current active GPU operating mode and configuration status.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version information of <i>envycontrol</i>.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available commands and options.<br><br><b>--force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces a mode switch even if <i>envycontrol</i> believes it's unnecessary or already in effect. Use with caution.<br><br><b>--no-grub-update</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <i>envycontrol</i> from updating the GRUB bootloader configuration after a mode switch. Use if GRUB is managed externally.<br><br><b>--reboot</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Immediately reboots the system after a successful mode switch to apply changes. Often a required step.<br><br><b><mode></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The target GPU mode: 'integrated', 'nvidia', 'hybrid', or 'compute'. Used with <i>--switch</i>.<br><br>


title: DESCRIPTION
content:
<i>envycontrol</i> is a command-line utility designed to simplify the management of NVIDIA GPUs, particularly on Linux laptops equipped with NVIDIA Optimus or hybrid graphics technology.<br><br>These laptops typically feature both an <b>integrated graphics processor (iGPU)</b>, usually from Intel or AMD, and a <b>dedicated NVIDIA discrete graphics processor (dGPU)</b>.<br><br>The primary purpose of <i>envycontrol</i> is to facilitate easy switching between different GPU operating modes, which can significantly impact power consumption and performance. It abstracts away the complexities of manually configuring Xorg and display managers.<br><br>Common modes supported include:<br><b>• Integrated:</b> Only the iGPU is active, providing maximum power efficiency but lower graphics performance. The dGPU is powered off.<br><b>• NVIDIA:</b> Only the dGPU is active, offering full graphics performance but consuming more power.<br><b>• Hybrid:</b> Both GPUs are active. The iGPU typically drives the display, and the dGPU can render applications via technologies like NVIDIA Prime Render Offload.<br><b>• Compute:</b> Similar to NVIDIA mode, but optimized for compute workloads (e.g., CUDA, OpenCL) where display output is not the primary concern.<br><br>After switching modes, <i>envycontrol</i> typically requires a system reboot for the changes to take full effect, as it modifies fundamental display server configurations. It is a community-driven tool often used as a front-end for more complex underlying systems like <i>optimus-manager</i>.


title: CAVEATS
content:
<i>• <b>Reboot Required:</b> Most mode switches necessitate a system reboot to apply changes, affecting workflow.<br>• <b>Laptop Specific:</b> Primarily designed for laptops with NVIDIA Optimus/hybrid graphics. Its utility is limited on desktop systems or laptops with only a single GPU.<br>• <b>Dependency on Drivers & Xorg:</b> Proper functioning depends on correct NVIDIA driver installation, Xorg server configuration, and display manager setup.<br>• <b>Third-Party Tool:</b> <i>envycontrol</i> is a community-developed tool, not officially supported by NVIDIA or major Linux distributions. It might interact with underlying system components (like <i>optimus-manager</i>) which also need to be correctly set up.<br>• <b>Potential Conflicts:</b> Using <i>envycontrol</i> alongside other GPU management utilities (e.g., <i>prime-select</i> or manual Xorg edits) can lead to conflicts or unpredictable behavior.</i>


title: UNDERLYING MECHANISM
content:
<i><i>envycontrol</i> primarily works by modifying system configuration files, most notably those related to the Xorg display server. Depending on the specific setup and underlying tools (like <i>optimus-manager</i>), it might: <br><br>• Create or modify files in <b>/etc/X11/xorg.conf.d/</b> to dictate which GPU the X server should use or how Prime Render Offload should be configured.<br>• Adjust kernel parameters or GRUB boot options to ensure the correct GPU is initialized early in the boot process.<br>• Interact with <i>bbswitch</i> or <i>acpi_call</i> to manage power to the discrete GPU.<br>• Configure display managers like GDM, LightDM, or SDDM to properly load the chosen GPU setup.</i>


title: SUPPORTED MODES EXPLAINED
content:
<i><i>envycontrol</i> supports several distinct GPU modes, each with specific implications for performance and power consumption:<br><br>• <b>`integrated` (iGPU-only):</b> The NVIDIA dGPU is completely powered off, and all display output is handled by the integrated graphics (e.g., Intel UHD, AMD Radeon Vega). This mode offers the best battery life and produces the least heat, ideal for general productivity tasks.<br><br>• <b>`nvidia` (dGPU-only):</b> The NVIDIA dGPU is fully active and directly drives the display. This mode provides maximum graphics performance, essential for gaming or demanding applications. However, it consumes significantly more power and generates more heat.<br><br>• <b>`hybrid` (Prime Render Offload):</b> Both GPUs are active. The integrated GPU drives the primary display, while the NVIDIA dGPU can be selectively used to render specific applications (e.g., games, 3D software) and offload their output to the iGPU for display. This is achieved via NVIDIA Prime Render Offload and offers a balance between performance and power, allowing the dGPU to be powered down when not in use.<br><br>• <b>`compute` (dGPU for CUDA/OpenCL):</b> Similar to <i>nvidia</i> mode in terms of the dGPU being active, but often configured specifically for compute workloads where display output is not the primary concern. It might involve disabling Xorg for the dGPU to free up resources or enable specialized drivers for compute tasks like CUDA or OpenCL development.</i>


title: HISTORY
content:
<i><i>envycontrol</i> emerged as a solution to simplify the complex process of switching GPU modes on Linux laptops with NVIDIA Optimus technology. Before such tools, users often had to manually edit Xorg configuration files, which was error-prone and tedious.<br><br>While <i>optimus-manager</i> was a significant step forward, <i>envycontrol</i> aims to provide an even more streamlined, user-friendly command-line interface, sometimes acting as a wrapper or complementary tool to <i>optimus-manager</i> or similar underlying mechanisms. Its development has been driven by the Linux community's need for robust and easy-to-use hybrid graphics management, particularly prevalent in distributions favored by power users like Arch Linux. It is not part of the official NVIDIA driver suite but a testament to community-driven solutions for specific hardware challenges on Linux.</i>


title: PARAMETERS
content:
<b>-f, --fullscreen</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts <i>eog</i> in fullscreen mode, displaying the image without window borders or toolbars.<br><br><b>-s, --slideshow</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts <i>eog</i> in slideshow mode, automatically cycling through images in the current directory.<br><br><b>--disable-image-collection</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the image collection viewing feature, showing only the specified image(s).<br><br><b>--display=DISPLAY</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the X display to use for graphical output.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows <i>eog</i>'s help message with a list of command-line options.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information for <i>eog</i>.<br><br>


title: DESCRIPTION
content:
<i>Eye of GNOME</i> (eog) is the official image viewer for the <b>GNOME</b> desktop environment.<br>It provides a simple and user-friendly interface for viewing a wide variety of image formats, including common ones like <b>JPEG</b>, <b>PNG</b>, <b>GIF</b>, <b>BMP</b>, and <b>TIFF</b>, as well as many others. Beyond basic viewing, <i>eog</i> offers essential image manipulation capabilities such as rotating, flipping, resizing, and cropping. Users can also organize image collections, play slideshows, and set images as desktop wallpaper directly from the application. Its deep integration with the <b>GNOME</b> desktop ensures a seamless experience for quick image inspection and light editing tasks, making it a staple utility for GNOME users.


title: CAVEATS
content:
<i>eog</i> is designed as a basic image viewer and light editor. For advanced photo manipulation, a more powerful application like <b>GIMP</b> would be required.<br>While functional on other desktop environments, its optimal integration and experience are typically found within the <b>GNOME</b> desktop.


title: DESKTOP INTEGRATION
content:
<i>eog</i> integrates deeply with the <b>GNOME</b> desktop, supporting features like drag-and-drop, context menu actions (e.g., 'Open With'), and automatic association with common image file types. It also allows setting images as desktop background directly from the application.


title: PLUGIN SUPPORT
content:
Historically, <i>eog</i> supported various plugins to extend its functionality, such as image effects or external editing integrations. While plugin support varies between versions, its core design emphasizes extensibility.


title: HISTORY
content:
<i>eog</i> has been a core component of the <b>GNOME</b> desktop environment since its early days, designed to be the default image viewer. It has evolved alongside the <b>GTK+</b> toolkit and the <b>GNOME</b> project, consistently focusing on providing a simple, fast, and integrated solution for image viewing and basic management. Its development tracks the general progress of the <b>GNOME</b> desktop, ensuring compatibility and leveraging new features of the environment.


title: SYNOPSIS
content:
<b>Not Applicable.</b> <b>eol</b> is a fundamental concept in text encoding and processing, <b>not an executable Linux command</b>. Therefore, it does not have a command synopsis, options, or arguments in the traditional sense. Its behavior is manifested through how different operating systems and text processing tools interpret and handle line endings.


title: DESCRIPTION
content:
<b>EOL</b> (End Of Line) refers to special characters that mark the end of a line of text in a file. In Linux and Unix-like systems, the standard EOL character is the <b>Line Feed</b> (LF), represented as <i>\n</i> (ASCII 10). Windows systems typically use a <b>Carriage Return</b> followed by a <b>Line Feed</b> (CRLF), represented as <i>\r\n</i> (ASCII 13 + ASCII 10). While <b>eol</b> is <b>not a standalone Linux command</b>, understanding EOL character conventions is crucial for text file compatibility across different operating systems and for proper functioning of various text processing utilities. Misinterpreting or mishandling EOL characters can lead to display issues, parsing errors, or script failures, particularly when moving files between Windows and Linux environments. Many standard Linux commands implicitly or explicitly handle or are affected by EOL conventions when processing text streams or files.


title: CAVEATS
content:
The primary caveat regarding EOL is the fundamental difference in line ending conventions between operating systems, primarily between Linux/Unix (LF) and Windows (CRLF). Shell scripts or text files originating from Windows environments often contain CRLF line endings. When these files are executed or processed on a Linux system, the <i>\r</i> (Carriage Return) character is interpreted as part of the command or data, leading to "command not found" errors or unexpected behavior. Tools like <b>dos2unix</b> are essential to convert CRLF to LF for proper Linux compatibility. Conversely, <b>unix2dos</b> is used for conversion in the opposite direction.


title: <B>COMMON EOL CHARACTER REPRESENTATIONS</B>
content:
The specific byte sequence for an EOL varies by operating system:<br>- <i>Linux/Unix/macOS (since OS X)</i>: <b>Line Feed</b> (LF), represented as ASCII 10 or <i>\n</i>.<br>- <i>Windows</i>: <b>Carriage Return + Line Feed</b> (CRLF), represented as ASCII 13 followed by ASCII 10, or <i>\r\n</i>.<br>- <i>Classic Mac OS (pre-OS X)</i>: <b>Carriage Return</b> (CR), represented as ASCII 13 or <i>\r</i>.


title: <B>IMPACT ON SHELL SCRIPTING</B>
content:
A common pitfall for users new to Linux or cross-platform development is running shell scripts authored on Windows. If a script created on Windows (with CRLF EOLs) is transferred to a Linux system and executed directly, the shell interpreter will encounter the <i>\r</i> character at the end of each line. This can cause the shell to interpret command names or arguments incorrectly, often leading to errors such as "command not found" or unexpected syntax errors. Using utilities like <i>dos2unix</i> to convert the script's line endings to LF before execution is a standard practice to avoid such issues.


title: HISTORY
content:
The concept of End-Of-Line characters dates back to the mechanical operations of typewriters and early teletypewriters. A new line required two distinct actions: moving the carriage to the beginning of the line (<b>Carriage Return</b>, <i>\r</i>) and advancing the paper one line (<b>Line Feed</b>, <i>\n</i>). Early computer systems inherited these conventions. Unix-like systems, developed at Bell Labs, adopted the simpler approach of using only the <b>Line Feed</b> (<i>\n</i>) to signify a new line, primarily for efficiency and simplicity. Microsoft DOS and later Windows systems, however, maintained the <b>Carriage Return</b> followed by <b>Line Feed</b> (<i>\r\n</i>) convention, inheriting it from CP/M and earlier systems. This historical divergence continues to be a common source of interoperability issues in cross-platform text processing and development.


title: SEE ALSO
content:
<i>dos2unix(1)</i>: Converts Windows (CRLF) line endings to Unix (LF) line endings., <i>unix2dos(1)</i>: Converts Unix (LF) line endings to Windows (CRLF) line endings., <i>cat(1)</i>: Can display non-printing characters, including EOLs, using options like <i>-v</i> or <i>-A</i> (<i>--show-all</i>)., <i>sed(1)</i>: A stream editor often used for find-and-replace operations, including manipulation of EOL characters., <i>awk(1)</i>: A powerful text processing tool that can parse and manipulate data based on record (line) and field delimiters, including EOLs., <i>file(1)</i>: Can sometimes identify the EOL format (e.g., "with CRLF line terminators") of a text file.


title: PARAMETERS
content:
<b>install <package(s)></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs one or more specified packages.<br><br><b>remove <package(s)></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes one or more specified packages from the system.<br><br><b>update</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Synchronizes the package lists from all configured repositories.<br><br><b>upgrade</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Upgrades all installed packages to their latest available versions.<br><br><b>search <query></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for packages by name or description in repositories.<br><br><b>info <package></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed information about a specified package.<br><br><b>list-installed</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all packages currently installed on the system.<br><br><b>list-available</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all packages available in the configured repositories.<br><br><b>history</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the package transaction history, useful for debugging.<br><br><b>rollback <transaction_ID></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reverts the system to a previous package transaction state.<br><br><b>check</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks for broken packages or inconsistencies in the system.<br><br><b>repolist</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all currently configured package repositories.<br><br><b>autoremove</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes orphaned dependencies that are no longer required.<br><br>


title: DESCRIPTION
content:
<i>eopkg</i> (Evolve OS Package Manager) is the official package manager for Solus, an independently developed Linux distribution. It is a fork of the <i>pisi</i> package manager, originally used by the Pardus Linux distribution. <i>eopkg</i> provides a command-line interface for managing software packages, repositories, and dependencies within the Solus ecosystem. It enables users to perform operations such as installing, removing, updating, upgrading, searching for, and querying information about packages.<br><br>Known for its speed and reliability, <i>eopkg</i> utilizes a transactional approach to package management, ensuring system integrity during updates and installations. It supports a comprehensive set of features, including automatic dependency resolution, rollback capabilities for system changes, and management of multiple repositories. <i>eopkg</i> integrates closely with the Solus philosophy of providing a curated and stable user experience.


title: CAVEATS
content:
<i>eopkg</i> is specific to the Solus operating system and its derivatives. It is not compatible with package formats or repositories from other distributions like Debian (.deb), Fedora (.rpm), or Arch Linux (.tar.zst). Users migrating from other distributions might find its subcommand-based syntax slightly different from more common package managers like <i>apt</i>, <i>dnf</i>, or <i>pacman</i>, though the core functionalities are similar.


title: TRANSACTIONAL UPDATES
content:
<i>eopkg</i> employs a transactional update model. This means that package installations, removals, or upgrades are treated as atomic operations. If an update fails midway, <i>eopkg</i> can revert the system to its previous stable state, significantly reducing the risk of a broken system due to interrupted or failed package management operations. This capability is crucial for maintaining system integrity.


title: DELTA UPDATES
content:
<i>eopkg</i> supports delta updates, which means it only downloads the changes between package versions rather than the entire new package. This significantly reduces bandwidth usage and download times, making updates faster and more efficient, especially for users with slower internet connections.


title: HISTORY
content:
<i>eopkg</i> originated as a fork of the <i>pisi</i> package manager, which was developed for the Pardus Linux distribution. When Solus (initially called Evolve OS) was created, its developers chose to fork and adapt <i>pisi</i> to meet their specific needs and design goals, resulting in <i>eopkg</i>. This lineage provides <i>eopkg</i> with a robust and well-tested foundation, which has since been further refined and optimized by the Solus development team to integrate seamlessly with the Solus operating system's unique architecture and rapid release cycle. Its development continues as part of the Solus project.


title: PARAMETERS
content:
<b>--new-window</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens a new, empty browser window.<br><br><b>--private-window</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens a new private browsing window, which does not save history, cookies, or site data.<br><br><b>--new-tab</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens a new tab in an existing window, if available, otherwise creates a new window with a new tab.<br><br><b><i>URL</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more URLs to open upon launch. These can be web addresses (e.g., http://example.com) or local HTML files (e.g., file:///home/user/document.html).<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of Epiphany and exits.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a list of all available command-line options for Epiphany and exits.<br><br><b>--profile=<i>DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative profile directory to use instead of the default. This is useful for testing or maintaining separate browsing environments.<br><br>


title: DESCRIPTION
content:
<i>Epiphany</i>, officially known as <b>GNOME Web</b>, is the default web browser of the GNOME desktop environment. It aims to be a simple, clean, and standards-compliant browser, tightly integrated with the GNOME ecosystem.<br><br>Built on the <b>WebKitGTK</b> rendering engine (the same engine used by Apple's Safari and many others), Epiphany focuses on usability and accessibility, providing a streamlined browsing experience without excessive features. It supports modern web technologies, offers private browsing, bookmark management, and integrates with GNOME's search and notification systems. While not as feature-rich as browsers like Firefox or Chrome, its lightweight nature and adherence to GNOME design principles make it a suitable choice for users seeking a minimalist and integrated browsing experience within the GNOME desktop. Its development emphasizes stability and performance, making it a reliable choice for daily browsing.


title: CAVEATS
content:
As a graphical application, <i>epiphany</i> is primarily designed for interactive use within a desktop environment. Its command-line options are mainly for launching the application with specific initial states or content, rather than for scripting or extensive headless operation. It might not be as feature-rich or extensible as browsers like Chrome or Firefox, prioritizing simplicity and deep GNOME integration over extensive customization and large plugin ecosystems.


title: RENDERING ENGINE
content:
<i>Epiphany</i> utilizes the <b>WebKitGTK</b> rendering engine. This is the GTK port of the WebKit engine, renowned for its compliance with modern web standards and performance, particularly in web applications. It forms the core technology responsible for rendering web pages.


title: GNOME INTEGRATION
content:
A fundamental design principle of <i>Epiphany</i> is its deep integration with the GNOME desktop. This includes respecting GNOME's theme settings, utilizing GNOME Online Accounts for web service integration, leveraging GNOME's search provider, and adhering to the GNOME Human Interface Guidelines for a cohesive and intuitive user experience within the desktop environment.


title: HISTORY
content:
<i>Epiphany</i> originated as a fork of the <b>Galeon</b> browser in 2002, driven by a desire to create a simpler web browser tightly integrated with the GNOME desktop environment. It initially used the <b>Gecko</b> rendering engine (from Mozilla, also used by Firefox) but later switched to <b>WebKitGTK</b> in 2007 to align better with GNOME's architectural preferences and to improve performance and maintainability. Around 2012-2013, it was officially rebranded as <b>GNOME Web</b>, although the executable name 'epiphany' persists. Its development has consistently focused on adhering to GNOME's Human Interface Guidelines (HIG) and providing a secure, stable, and user-friendly browsing experience within the GNOME ecosystem.


title: PARAMETERS
content:
<b><b>-d</b><I>XY</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set delimiters for inline equations. <I>X</I> is the left delimiter and <I>Y</I> is the right. Equations within these delimiters will be processed. The default delimiters are '<b>.EQ</b>' and '<b>.EN</b>' on separate lines.<br><br><b><b>-f</b><I>font</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the default font for mathematical expressions. This overrides the default font used by <b>eqn</b>.<br><br><b><b>-p</b><I>size</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the default point size for text within equations. This applies to normal text elements, not subscripts or superscripts.<br><br><b><b>-s</b><I>size</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the default point size for subscripts and superscripts. This size is typically smaller than the main text size.<br><br><b><b>-T</b><I>device</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output device for which the <b>troff</b> commands should be generated (e.g., <I>ps</I> for PostScript, <I>dvi</I> for DVI, <I>latin1</I>). This ensures correct formatting for the target display or printer.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message with usage information and exit.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information about <b>eqn</b> and exit.<br><br>


title: DESCRIPTION
content:
<b>eqn</b> is a preprocessor for the <b>troff</b> (or <b>groff</b>) typesetting system, specifically designed for formatting mathematical equations.<br><br>It translates a specialized, human-readable equation language into <b>troff</b> commands. Users define equations using intuitive keywords (e.g., <I>"a over b"</I>, <I>"sum from i=1 to n"</I>, <I>"x sub i sup 2"</I>). <b>eqn</b> then handles the intricate details of positioning, sizing, and styling mathematical components like fractions, integrals, subscripts, superscripts, and special symbols.<br><br>Typically, <b>eqn</b> processes an input file containing a mix of text and equation definitions, sending its output (which is then valid <b>troff</b> input) to the <b>troff</b> or <b>groff</b> formatter for final rendering. It's a fundamental component of the classic Unix document preparation toolchain.


title: CAVEATS
content:
<b>eqn</b> is a preprocessor; its output must be fed to a <b>troff</b> or <b>groff</b> formatter to produce viewable documents. While powerful for its time, modern document preparation often favors systems like <b>LaTeX</b> for complex mathematical typesetting, which offer more advanced features and easier workflow for many users. The equation syntax can be strict and requires attention to detail.


title: EQUATION SYNTAX OVERVIEW
content:
<b>eqn</b> uses a highly intuitive, almost natural-language-like syntax for describing equations. Key elements include:<br><i>Fractions:</i> <b>a over b</b><br><i>Sums/Integrals:</i> <b>sum from i=1 to n X sub i</b>, <b>integral from 0 to infinity x dx</b><br><i>Subscripts/Superscripts:</i> <b>x sub i sup 2</b><br><i>Square Roots:</i> <b>sqrt{x}</b><br><i>Auto-sizing Parentheses:</i> <b>left( x over y right)</b><br>Support for Greek letters (<b>alpha</b>, <b>beta</b>), special symbols (<b>approx</b>, <b>!=</b>), and matrices (<b>matrix { col { a } { c } } { col { b } { d } }</b>).<br>Equations are typically enclosed within <b>.EQ</b> and <b>.EN</b> macros, or custom delimiters defined with the <b>-d</b> option.


title: INTEGRATION WITH GROFF
content:
While <b>eqn</b> can be run as a standalone filter, it's most commonly used as a preprocessor within the <b>groff</b> suite. This is typically achieved by passing the <b>-e</b> option to <b>groff</b> (e.g., <B>groff -e -t -mp <I>filename</I></B>). This tells <b>groff</b> to automatically pipe the document through <b>eqn</b> (and potentially other preprocessors like <b>tbl</b> for tables) before processing it with <b>troff</b>, simplifying the workflow for complex documents.


title: HISTORY
content:
<b>eqn</b> was originally developed by Brian Kernighan and Lorinda Cherry at Bell Labs in 1974, as an integral part of the <b>troff</b> typesetting system. It was groundbreaking for its ability to easily typeset complex mathematical equations within documents at a time when such capabilities were rare. The GNU implementation, part of the <b>groff</b> suite, aims for compatibility with the original while also incorporating modern enhancements and bug fixes. It remains a classic example of declarative programming for document formatting.


title: PARAMETERS
content:
<b><i>-format name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format. '<b>pic</b>' is the default and most common, generating commands for the <b>pic</b> preprocessor. '<b>plot</b>' is another supported format.<br><br><b><i>-density num</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the density for bitmap output. A higher number increases resolution but also file size. The default value is 100.<br><br>


title: DESCRIPTION
content:
<b>eqn2graph</b> is a utility within the <b>groff</b> typesetting system that plays a crucial role in rendering mathematical equations. It takes the output generated by <b>eqn</b>, the equation preprocessor for <b>troff</b>/<b>groff</b>, and transforms it into graphical commands. Specifically, it converts the textual representation of equations produced by <b>eqn</b> into <b>pic</b> (picture) commands by default, or optionally into <b>plot</b> commands. These graphical commands can then be embedded into <b>groff</b> documents, allowing <b>groff</b> to render complex mathematical expressions as scalable vector graphics. This enables seamless integration of equations within technical documentation and publications, ensuring high-quality output regardless of the output device or resolution. <b>eqn2graph</b> typically reads from standard input and writes to standard output, making it suitable for pipe-based workflows.


title: CAVEATS
content:
<b>eqn2graph</b> is primarily designed to work as part of the <b>groff</b> ecosystem, specifically with <b>eqn</b> input and <b>pic</b>/<b>plot</b> output for <b>groff</b>. It does not directly convert LaTeX equations or other equation formats. Its output is generally not intended for standalone image files (like PNG or SVG) but rather for embedding within <b>groff</b> documents processed by <b>groff -G</b>. Using it outside this intended workflow might require additional processing steps.


title: USAGE WORKFLOW
content:
Typically, <b>eqn2graph</b> is used in a pipeline where <b>eqn</b> processes equations and pipes its output to <b>eqn2graph</b>, which then pipes its output to <b>groff</b>. For example: <br><i>echo '.EQ\na+b=c\n.EN' | eqn | eqn2graph | groff -G -pic</i> <br>This command chain would process a simple equation and render it graphically.


title: INTEGRATION WITH GROFF -G
content:
The '<b>-G</b>' option for <b>groff</b> is specifically designed to work with <b>eqn2graph</b>'s output. When <b>groff -G</b> encounters <b>pic</b> commands generated by <b>eqn2graph</b>, it understands how to embed and render these graphical representations of equations directly into the document.


title: HISTORY
content:
<b>eqn2graph</b> is a component of the GNU <b>groff</b> (GNU troff) project, which provides a free software implementation of the <b>troff</b> text formatting system. Its development is tied to the evolution of <b>groff</b> as a comprehensive typesetting suite capable of handling complex documents, including those with mathematical equations. It facilitates the graphical rendering of <b>eqn</b> output, a capability crucial for high-quality scientific and technical document preparation within the <b>groff</b> framework.


title: SYNOPSIS
content:
The <b>equery</b> command operates primarily through subcommands. The general syntax is:<br><br><b>equery</b> [<i>global_options</i>] <i>subcommand</i> [<i>subcommand_options</i>] [<i>package_atom(s)</i>]<br><br>Or, for some simple queries:<br><br><b>equery</b> [<i>global_options</i>] <i>subcommand</i> [<i>pattern</i>]<br><br>A <i>package_atom</i> typically refers to a package in the format <i>category/package-name</i>, optionally including version, slot, or USE flags.


title: PARAMETERS
content:
<b><i>--explain</i>, <i>-e</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides an explanation of the command's internal logic or output, offering more verbose details on certain operations.<br><br><b><i>--no-color</i>, <i>--nocolor</i>, <i>-C</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables colored output, useful for scripting or terminals that don't support ANSI escape codes.<br><br><b><i>--force-color</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces colored output, even if standard output is not a terminal, useful for piping to `less -R`.<br><br><b><i>--quiet</i>, <i>-q</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses informational messages, showing only the direct results of the query.<br><br><b><i>--version</i>, <i>-V</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version number of the <b>equery</b> utility.<br><br><b><i>--help</i>, <i>-h</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a general help message or specific help for a given subcommand when used as `equery help <subcommand>`.<br><br>


title: DESCRIPTION
content:
<b>equery</b> is a vital command-line utility for users of <I>Gentoo Linux</I>, providing a comprehensive interface to query information about packages managed by the <I>Portage</I> system. As a core component of Gentoo's powerful package management framework, <b>equery</b> allows users to delve deeply into the metadata, dependencies, installed files, and other crucial details of both installed and available software packages. It acts as an essential diagnostic and informational tool, simplifying tasks such as troubleshooting package issues, understanding complex dependency trees, identifying which packages own specific files, and assessing disk space usage. Whether you need to see what files an application installed, determine its reverse dependencies, or inspect its <I>USE</I> flags, <b>equery</b> offers quick and precise answers, empowering users with greater control and insight over their Gentoo system's software landscape.


title: CAVEATS
content:
<b>equery</b> is intrinsically tied to the <I>Gentoo Linux</I> ecosystem and its <I>Portage</I> package manager. It cannot be used on other Linux distributions that do not utilize Portage (e.g., Debian, Ubuntu, Fedora, Arch Linux). Its functionality relies on a properly configured Portage installation and a synchronized Portage tree. While most queries are read-only and do not require elevated privileges, accessing certain system-wide or protected information might implicitly rely on the permissions of the Portage environment. Performance for complex queries or very large Portage installations can sometimes be noticeable, though typically <b>equery</b> is designed for efficiency.


title: <I>KEY SUBCOMMANDS</I>
content:
The power of <b>equery</b> comes from its diverse set of subcommands, each designed for a specific query type:<br><ul><li><b><i>depends</i></b> <i>&lt;package_atom&gt;</i>: Shows the direct dependencies of a specified package.</li><li><b><i>hdepends</i></b> <i>&lt;package_atom&gt;</i>: Displays the full, hierarchical dependency tree for a package.</li><li><b><i>rdepends</i></b> <i>&lt;package_atom&gt;</i>: Lists packages that depend on the specified package (reverse dependencies).</li><li><b><i>files</i></b> <i>&lt;package_atom&gt;</i>: Lists all files installed by a specified package.</li><li><b><i>list</i></b> <i>&lt;pattern&gt;</i>: Lists installed packages matching a given pattern. This can also list available packages with options.</li><li><b><i>uses</i></b> <i>&lt;package_atom&gt;</i>: Shows the USE flags enabled or available for a package.</li><li><b><i>size</i></b> <i>&lt;package_atom&gt;</i>: Displays the disk space consumed by an installed package.</li><li><b><i>belongs</i></b> <i>&lt;filepath&gt;</i>: Identifies which installed package a specific file belongs to.</li><li><b><i>check</i></b> <i>&lt;package_atom&gt;</i>: Verifies the integrity of files installed by a package against the Portage database.</li><li><b><i>s/search</i></b> <i>&lt;pattern&gt;</i>: Searches for packages in the Portage tree by name or description.</li></ul>


title: <I>PACKAGE ATOM CONCEPT</I>
content:
In Gentoo, a 'package atom' is a precise way to refer to a package. It typically follows the format <I>category/package-name</I> (e.g., <I>sys-apps/baselayout</I>). It can also include version numbers (<I>=net-misc/curl-8.7.1</I>), slots (<I>dev-lang/python:3.10</I>), or even USE flags (<I>net-libs/gnutls[ssl]</I>). <b>equery</b> leverages package atoms to target queries accurately, allowing users to specify exactly which package instance they are interested in.


title: HISTORY
content:
<I>equery</I> emerged as an indispensable tool within the <I>Gentoo Linux</I> project, evolving alongside the <I>Portage</I> package management system itself. As Gentoo gained popularity for its source-based approach and granular control, the need for comprehensive querying capabilities became apparent. Initially, users might have relied on a combination of lower-level Portage commands or direct inspection of the file system to gather package information. <I>equery</I> was developed to centralize and standardize these querying functionalities, providing a robust, user-friendly interface. Its development has been driven by the community's demand for deeper insights into package dependencies, installed files, <I>USE</I> flag configurations, and more. This consolidation greatly streamlined package management for Gentoo users, making complex system analysis more accessible and efficient.


title: SYNOPSIS
content:
<b>erl</b> [<i>-flag value</i> ...] [<i>-s Module Function</i> [<i>Args ...</i>]]<br><b>erl</b> [<i>-noshell</i>] [<i>-boot BootFile</i>] [<i>-config ConfigFile</i>] [<i>-eval "Exprs."</i>]<br><b>erl</b> [<i>-name NodeName</i> | <i>-sname NodeName</i>] [<i>-setcookie Cookie</i>]


title: PARAMETERS
content:
<b><b>-s</b> <i>Module Function</i> [<i>Args ...</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Calls the specified <i>Function</i> in <i>Module</i> when the system has booted. Optional <i>Args</i> are passed as a list.<br><br><b><b>-noshell</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the Erlang runtime without an interactive shell. Useful for running batch processes or daemon applications.<br><br><b><b>-pa</b> <i>Dir</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds <i>Dir</i> to the head of the code path. Used to specify directories where Erlang code (<code>.beam</code> files) can be found.<br><br><b><b>-pz</b> <i>Dir</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds <i>Dir</i> to the end of the code path.<br><br><b><b>-name</b> <i>NodeName</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts an Erlang node with a <i>long name</i> (fully qualified domain name). Required for distributed Erlang communication across different hosts.<br><br><b><b>-sname</b> <i>NodeName</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts an Erlang node with a <i>short name</i>. Used for distributed Erlang communication where nodes are on the same host or can resolve names via <code>/etc/hosts</code>.<br><br><b><b>-setcookie</b> <i>Cookie</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the magic cookie for the node. Nodes must have the same cookie to communicate in a distributed Erlang system.<br><br><b><b>-boot</b> <i>BootFile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative boot script. The boot script defines which applications and modules are loaded at startup.<br><br><b><b>-config</b> <i>ConfigFile</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a system configuration file (a <code>.config</code> file). This file contains application environment parameters.<br><br><b><b>-detached</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the Erlang emulator in detached mode, running as a daemon process in the background. Standard I/O is redirected to <code>/dev/null</code>.<br><br><b><b>-eval</b> <i>"Exprs."</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Evaluates Erlang expressions before starting the shell or applications. Multiple <b>-eval</b> options are evaluated sequentially.<br><br><b><b>-extra</b> <i>Args ...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes extra arguments to the Erlang program. These arguments are accessible via <code>init:get_plain_arguments/0</code>.<br><br><b><b>-run</b> <i>Module Function</i> [<i>Args ...</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Similar to <b>-s</b>, but it is executed before any initial module specified by the boot script. It also causes the system to terminate if the function returns.<br><br><b><b>-emu_args</b> <i>Args ...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes arguments directly to the Erlang emulator (VM). These are low-level options affecting VM behavior.<br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the Erlang/OTP version string and exits.<br><br><b><b>-help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message with common command-line options.<br><br>


title: DESCRIPTION
content:
The <b>erl</b> command is the primary executable for starting the <I>Erlang/OTP runtime system</I>. It provides an interactive shell for development and debugging, or can be used to execute Erlang code and start Erlang applications in a production environment.<br><br>Erlang/OTP is a programming language and platform designed for building scalable, soft real-time, distributed, fault-tolerant systems. The <b>erl</b> command is central to this, managing processes, memory, and inter-node communication, forming the backbone for applications requiring high availability and concurrency.<br><br>It supports a wide array of command-line options to configure the runtime behavior, code loading paths, network distribution, and system initialization, making it highly flexible for various deployment scenarios.


title: CAVEATS
content:
The <b>erl</b> command has an <I>exceptionally extensive list of command-line options</I>, many of which are highly specific to internal system behavior, memory management, or debugging. This analysis lists only the most commonly used and important options. For a comprehensive and exhaustive list, users should consult the official <I>Erlang/OTP Reference Manual</I> for <b>erl(1)</b>.<br><br>Understanding the Erlang/OTP boot process and release handling is crucial for advanced usage of <b>erl</b> in production environments.


title: INTERACTIVE SHELL
content:
When run without specific instructions to execute code (e.g., without <b>-s</b> or <b>-noshell</b>), <b>erl</b> starts an interactive Erlang shell. This shell provides a powerful environment for <I>experimentation, debugging, and administrative tasks</I> on a running Erlang node. Users can evaluate Erlang expressions, inspect processes, and interact with applications directly.


title: DISTRIBUTED ERLANG
content:
A key feature of Erlang/OTP is its built-in support for <I>distributed computing</I>. The <b>erl</b> command, with options like <b>-name</b> or <b>-sname</b> and <b>-setcookie</b>, allows Erlang nodes to communicate seamlessly over a network. This enables building applications composed of multiple interconnected nodes, facilitating fault tolerance and scalability by allowing processes to reside on different machines and migrate if necessary.


title: OTP APPLICATIONS AND RELEASES
content:
While <b>erl</b> can start simple Erlang scripts, its full power is realized when starting <I>OTP Applications</I> or <I>Releases</I>. An OTP application is a standard component structure in Erlang, and a Release is a self-contained deployable unit of one or more OTP applications. The <b>erl</b> command is used by release boot scripts to initialize complex Erlang systems, ensuring all necessary applications are started in the correct order and configuration.


title: HISTORY
content:
Erlang was developed by Ericsson in the mid-1980s, with its first version released in 1986. It was specifically designed for building highly concurrent, distributed, fault-tolerant, and soft real-time applications, initially for the telecommunications industry. The Erlang runtime system (<b>erl</b>) was a core component from its inception.<br><br>The Erlang/OTP (Open Telecom Platform) framework, which bundles the Erlang language with a rich set of libraries and design principles, was open-sourced in 1998, making <b>erl</b> and the entire platform accessible to a wider audience. Since then, Erlang has found widespread use in various industries beyond telecom, including messaging, gaming, and financial services, leveraging its unique properties for scalable backend systems.


title: DESCRIPTION
content:
The command <i>ern</i> does not correspond to a commonly recognized or documented utility within standard Linux distributions. It is highly probable that its appearance is due to a typo, a custom-defined shell alias or function, a specific utility installed only on a very particular system, or a very obscure and rarely used tool not part of core utilities. Standard Linux systems do not ship with an <i>ern</i> command as part of their default installations or common packages. Users encountering <i>ern</i> are advised to double-check the spelling of the command they intended to use or to verify if <i>ern</i> is a custom script or alias defined within their environment.


title: CAVEATS
content:
As <i>ern</i> is not a standard command, its behavior, if it exists as a custom script or alias, would be entirely dependent on its specific implementation on the system where it is found. It would not be universally available or documented via standard <i>man</i> pages, nor would its functionality be consistent across different Linux environments.


title: VERIFYING CUSTOM COMMANDS
content:
If you encountered <i>ern</i> on a specific system and believe it has a function, it is recommended to investigate locally.<br>You can use commands like <i>type ern</i>, <i>alias ern</i>, or <i>which ern</i> to see if it's a shell built-in, alias, or an executable in your PATH.<br>If it's an executable, checking its content (e.g., <i>cat $(which ern)</i> if it's a script) might reveal its purpose.


title: SYNOPSIS
content:
<b>errno</b> [<i>OPTIONS</i>] [<i>NUMBER</i>|<i>NAME</i>...] <br><br><i>Examples:</i><br><b>errno</b><br><b>errno</b> 13<br><b>errno</b> EPERM<br><b>errno</b> 2 ENOENT


title: PARAMETERS
content:
<b><b>-l</b>, <b>--list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all known error codes, their symbolic names, and descriptions.<br><br><b><b>-s</b>, <b>--string</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays only the descriptive error string for the given input(s).<br><br><b><b>-n</b>, <b>--name</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays only the symbolic error name (e.g., ENOENT) for the given input(s).<br><br><b><b>-v</b>, <b>--value</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays only the numeric value of the error code for the given input(s).<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows a help message and exits.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br>


title: DESCRIPTION
content:
The `<b>errno</b>` command is a utility designed to help programmers and system administrators understand system error codes. <br><br>When a C program's system call fails, the global variable `<b>errno</b>` (defined in `<errno.h>`) is set to a specific integer value indicating the reason for the failure. However, these numeric values are often not immediately intuitive. The `<b>errno</b>` command allows users to translate these numeric error codes into their human-readable symbolic names (e.g., `1` to `EPERM`) and descriptive strings (e.g., "Operation not permitted"). <br><br>Conversely, it can also translate symbolic error names (like `<b>ENOENT</b>`) back into their numeric equivalents. This functionality is invaluable for debugging C/C++ applications, interpreting logs that contain raw error numbers, and generally gaining a clearer understanding of why certain system operations might fail. It acts as a convenient lookup tool for the error codes defined by the operating system.


title: CAVEATS
content:
The specific set of error codes and their exact descriptions can vary slightly between different Unix-like operating systems (e.g., Linux, FreeBSD, macOS). This utility relies on the system's `strerror(3)` implementation and definitions in `<errno.h>`. It is primarily a convenience tool and may not be installed by default on all Linux distributions, often being part of developer tools or specific packages like `error.h` or `libbsd`.


title: <I>THE C STANDARD LIBRARY AND ERRNO.H</I>
content:
The primary context for `<b>errno</b>` is within C/C++ programming. The `<errno.h>` header file defines macros for various error codes (e.g., `<b>EACCES</b>`, `<b>ENOENT</b>`, `<b>EAGAIN</b>`). When a system call fails, it typically returns `<b>-1</b>` and sets the global integer variable `<b>errno</b>` to indicate the specific error. The `<b>errno</b>` command-line tool provides a user-friendly way to query these definitions without consulting C headers or man pages directly.


title: HISTORY
content:
While the concept of `<b>errno</b>` (the global variable and `<errno.h>` definitions) has been fundamental to Unix-like systems since their inception, the `<b>errno</b>` <i>command-line utility</i> is a more recent development. It emerged as a helpful debugging aid, often provided by specific packages (like `error.h` on Debian/Ubuntu-based systems or `libbsd` on others) rather than being part of core GNU utilities. Its purpose is to provide an easily accessible lookup for information traditionally found in programming manual pages, streamlining the development and debugging workflow for C/C++ programmers.


title: PARAMETERS
content:
<b><i>NUMBER</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>The numeric error code to translate. For example, `1` typically corresponds to 'Operation not permitted', `2` to 'No such file or directory', etc.</i><br><br><b><i>-h</i>, <i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display help information and exit.</i><br><br><b><i>-V</i>, <i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Output version information and exit.</i><br><br><b><i>-a</i>, <i>--all</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>List all known error numbers and their corresponding messages. (A common hypothetical option for such a utility).</i><br><br>


title: DESCRIPTION
content:
<i>The `errstr` command, if it were a standard Linux utility, would serve to translate system error numbers (often `errno` values) into human-readable error messages. This functionality is primarily provided by the `strerror(3)` C library function, which is fundamental for programs to report errors to users. A hypothetical `errstr` command would allow users to directly query these error messages from the command line, given an error number as an argument. This would be particularly useful for debugging shell scripts, interpreting error codes returned by other commands, or understanding system call failures. It would effectively provide a command-line interface to the system's error message database, similar to how `perror` is used in C programs to print error descriptions.</i>


title: CAVEATS
content:
<i><br>The command `errstr` with a manual section of `.1s` is <b>not a standard Linux command</b>. The functionality described here is typically provided by the C library function `strerror(3)`. Most Linux distributions do not include a standalone `errstr` executable in section 1 of the man pages. The `.1s` suffix for a man page section 1 is also highly unusual; section `1` is for general commands, and `s` is sometimes used for sub-sections in library functions (e.g., `printf.3s`), but not commonly for section 1 executables. It is possible that `errstr` refers to a custom, deprecated, or highly specific utility found only on certain systems. This analysis assumes its hypothetical functionality based on common error handling paradigms.</i>


title: <I>USAGE IN SCRIPTING</I>
content:
<i>A `errstr` command would be invaluable in shell scripts for converting numeric exit statuses or other error codes into human-readable messages, thereby aiding in robust error handling and user feedback. For example, `command_that_fails; echo "Error: $(errstr $?) "` could be used to print a descriptive error message based on the last command's exit status.</i>


title: <I>ERROR NUMBER RANGES</I>
content:
<i>Error numbers are typically positive integers, with common values being defined as macros in the `<errno.h>` header file (e.g., `EPERM` for 1, `ENOENT` for 2). The specific set of error numbers and their corresponding messages can vary slightly between different Unix-like systems, though a core set is largely consistent.</i>


title: HISTORY
content:
<i>While no standard `errstr` command exists in mainstream Linux distributions, the underlying concept of translating error numbers to strings is fundamental in Unix-like operating systems. The `strerror()` function was introduced in standard C libraries to provide a portable and standardized way to retrieve error messages, succeeding earlier, less standardized methods. A command-line utility for this purpose would likely emerge from similar needs in scripting environments, possibly as a simple wrapper around `strerror()` or similar system calls, to make error message retrieval accessible directly from the shell.</i>


title: PARAMETERS
content:
<b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays a brief help message about the command's usage and available options.</i><br><br><b><b>--version</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prints the version information of the SNAP application.</i><br><br><b><b>--nosplash</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Launches the SNAP GUI without displaying the initial splash screen.</i><br><br><b><b>--diag</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Starts the SNAP application in a diagnostic mode, useful for troubleshooting.</i><br><br><b><b>--console</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Attempts to run SNAP in a console-only mode, typically for debugging or specific headless operations (less commonly used than 'gpt' for batch processing).</i><br><br>


title: DESCRIPTION
content:
<i>ESA SNAP</i> (<b>S</b>entinel <b>A</b>pplication <b>P</b>latform) is a free and open-source desktop application developed by the European Space Agency (ESA).<br>It provides a common architecture for all Sentinel Toolboxes, facilitating the processing and analysis of satellite Earth observation data, including Sentinel-1 (radar), Sentinel-2 (optical), and Sentinel-3 (optical, oceanography).<br><i>SNAP</i> offers a rich set of functionalities for data visualization, exploration, and processing, including various algorithms for radiometric calibration, atmospheric correction, terrain correction, and more.<br>While <i>esa-snap</i> primarily launches the graphical user interface, it's part of a larger ecosystem that includes powerful command-line tools for automated processing.


title: CAVEATS
content:
<i>esa-snap</i> is a Java-based application and can be resource-intensive, consuming significant CPU and RAM, especially when processing large datasets.<br>This command primarily launches the Graphical User Interface (GUI). For batch processing or automation, the <i>gpt</i> (Graph Processing Tool) command-line utility, which is part of the <i>SNAP</i> distribution, is typically used instead.


title: <B>BATCH PROCESSING WITH GPT</B>
content:
While <i>esa-snap</i> launches the graphical user interface, the <i>SNAP</i> software suite includes a powerful command-line tool called <i>gpt</i> (<b>G</b>raph <b>P</b>rocessing <b>T</b>ool).<br><i>gpt</i> allows users to execute processing graphs, which are sequences of operators, directly from the command line.<br>This is crucial for automating complex processing workflows and integrating <i>SNAP</i> into larger scripting environments.<br>Users can define graphs within the <i>SNAP</i> GUI and then export them for use with <i>gpt</i>.


title: HISTORY
content:
<i>ESA SNAP</i> (<b>S</b>entinel <b>A</b>pplication <b>P</b>latform) was developed by the European Space Agency (ESA) to provide a common open-source architecture for processing and analyzing data from its Sentinel missions and other Earth observation satellites.<br>Its development started around 2012-2013, aiming to replace various legacy toolboxes (like NEST, BEAM, SMOS) with a unified platform.


title: SYNOPSIS
content:
Since <b>esac</b> is a keyword and not a standalone command, its synopsis illustrates its usage within the <b>case</b> statement context.<br><br><I><b>case</b> <I>word</I> <b>in</b></I><br><I>  <I>pattern1</I><b>)</b> <I>commands1</I> <b>;;</b></I><br><I>  <I>pattern2</I><b>)</b> <I>commands2</I> <b>;;</b></I><br><I>  <I>...</I></I><br><I><b>esac</b></I>


title: DESCRIPTION
content:
<b>esac</b> is a reserved word in shell scripting, serving as the required closing keyword for the <b>case</b> statement. It marks the termination of a multi-way branching construct, allowing a script to execute different blocks of commands based on pattern matching against a given word or variable. Unlike external commands or shell built-ins, <b>esac</b> does not perform an action itself but defines the structural boundary of the <b>case</b> block. Its name, "esac," is "case" spelled backward, a common convention for closing keywords in the Bourne shell and its derivatives (e.g., <b>if</b>/<b>fi</b>). The <b>case</b> statement provides a clean and efficient way to handle multiple possible outcomes, offering an alternative to deeply nested <b>if</b>/<b>elif</b> structures when dealing with string or variable comparisons. Each block within a <b>case</b> statement typically ends with <b>;;</b> to terminate the pattern's command list and prevent fall-through to the next pattern.


title: CAVEATS
content:
<b>esac</b> is not an executable command. It must be paired with an opening <b>case</b> statement; otherwise, it will result in a syntax error. It cannot be used outside of a <b>case</b> block.


title: TYPE
content:
<b>esac</b> is a <i>shell reserved word</i>, not an external command or a built-in function. It is interpreted directly by the shell's parser.


title: FUNCTIONALITY
content:
It provides a clear and concise way to implement multi-way branching logic based on pattern matching, often leading to more readable scripts compared to complex nested <b>if</b>-<b>elif</b>-<b>else</b> structures for similar purposes.


title: HISTORY
content:
The <b>case</b>/<b>esac</b> construct was introduced with the original Bourne Shell (<b>sh</b>) in Unix. Its design provided a structured way to handle multi-choice selections based on pattern matching, an improvement over deeply nested <b>if</b>/<b>elif</b> statements for such scenarios. The backward-spelled keyword <b>esac</b> (and <b>fi</b> for <b>if</b>) became a characteristic syntax feature of Bourne-style shells. It has been consistently adopted and standardized across all POSIX-compliant shells, including Bash, Zsh, Ksh, and Dash, ensuring its widespread and portable usage in shell scripting.


title: SYNOPSIS
content:
<b>esbuild</b> [<i>options</i>] [<i>entry_points...</i>]<br><br>Examples:<br><i>esbuild</i> app.ts --bundle --outfile=bundle.js<br><i>esbuild</i> src/index.jsx --bundle --outfile=dist/output.js --minify --target=es2017<br><i>esbuild</i> main.ts --watch --servedir=./public --log-level=info


title: PARAMETERS
content:
<b>--bundle</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Bundles all input files and their dependencies into a single or multiple output files.<br><br><b>--outfile=<path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path for the primary output file. Required for single-file output.<br><br><b>--minify</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables minification of the output code, reducing its size by removing whitespace, shortening identifiers, and applying various optimizations.<br><br><b>--watch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates watch mode, causing <i>esbuild</i> to rebuild the output files whenever input files change on disk.<br><br><b>--target=<version></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the JavaScript language target for transpilation (e.g., <b>es2017</b>, <b>chrome58</b>, <b>node12</b>). This ensures compatibility with older environments.<br><br><b>--format=<format></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the output bundle format (e.g., <b>iife</b> for immediately invoked function expressions, <b>cjs</b> for CommonJS, <b>esm</b> for ECMAScript Modules).<br><br><b>--sourcemap</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates source maps, which map the minified/bundled code back to its original source for easier debugging.<br><br><b>--splitting</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables automatic code splitting for ECMAScript Modules, allowing dynamic imports to be split into separate chunks. Requires <b>--format=esm</b>.<br><br><b>--platform=<platform></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the platform for the output code (e.g., <b>browser</b>, <b>node</b>). Affects resolution logic and polyfills.<br><br><b>--external:<module></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Marks a specified module as external, preventing it from being bundled into the output. It will be loaded at runtime.<br><br><b>--loader:<ext>:<loader></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom loader for a given file extension (e.g., <b>--loader:.png:dataurl</b> to embed images as data URLs).<br><br><b>--define:<key>=<value></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Substitutes global identifiers with specific values during the build process, often used for environment variables.<br><br><b>--servedir=<path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches a development server that serves the output directory over HTTP, useful for rapid iteration and testing.<br><br>


title: DESCRIPTION
content:
<i>esbuild</i> is a powerful and exceptionally fast JavaScript/TypeScript bundler, minifier, and transpiler written in Go. Its primary design goal is speed, often outperforming older bundlers like Webpack or Rollup by 10-100x, especially for large projects.<br><br>It's engineered for rapid development cycles, significantly reducing build times and enabling quick rebuilds. <i>esbuild</i> supports a wide range of modern web technologies, including JSX, CSS, image assets, and more. It can be used both as a command-line interface (CLI) tool for direct invocation and through its JavaScript/Go API for integration into build systems. Key features include tree-shaking, source map generation, various output formats (IIFE, CommonJS, ESM), and basic hot module replacement capabilities.


title: CAVEATS
content:
While immensely fast, <i>esbuild</i>'s plugin ecosystem is less mature and extensive compared to older, more established bundlers like Webpack, which might limit some highly specialized transformations or integrations out-of-the-box.<br><br>It aims for speed and simplicity, so some advanced, highly configurable features found in other bundlers might require custom scripting or post-processing with <i>esbuild</i>.


title: ARCHITECTURE AND PERFORMANCE
content:
<i>esbuild</i>'s core is written in Go, a compiled language known for its performance and concurrency capabilities. This allows <i>esbuild</i> to parse, transform, and bundle JavaScript/TypeScript code significantly faster than tools written in interpreted languages or those that rely heavily on a JavaScript runtime, by utilizing multiple CPU cores efficiently.<br>


title: IDEAL USE CASES
content:
<i>esbuild</i> is particularly well-suited for:<br>1. Large-scale applications where build time is a significant bottleneck.<br>2. Rapid development and testing cycles in frontend projects.<br>3. As a foundational component in build pipelines for frameworks and libraries that prioritize performance (e.g., Vite, Next.js).<br>4. Projects that require a fast, low-overhead bundling solution without extensive custom configurations.<br>


title: HISTORY
content:
<i>esbuild</i> was created by Evan Wallace (formerly of Figma, now at Vercel) and first publicly announced in 2020. It rapidly gained prominence due to its groundbreaking speed, largely attributed to being written in Go, which allows it to leverage parallelism and low-level optimizations.<br><br>Its development has significantly influenced the broader web development toolchain, pushing other projects to prioritize build performance and encouraging innovation in the bundler space.


title: SYNOPSIS
content:
<b>escp2topbm</b> [<i>-xresolution=pixels_per_inch</i>] [<i>-yresolution=pixels_per_inch</i>] [<i>-width=pixels</i>] [<i>-height=pixels</i>] [<i>-r</i>|<i>-g</i>|<i>-b</i>] [<i>-gray</i>] [<i>-maxrow=N</i>] [<i>printer_data_file</i>]


title: PARAMETERS
content:
<b>-xresolution=pixels_per_inch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the horizontal resolution in pixels per inch for the output image. The default is 360.<br><br><b>-yresolution=pixels_per_inch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the vertical resolution in pixels per inch for the output image. The default is 360.<br><br><b>-width=pixels</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output image width in pixels. If not specified, the width is inferred from the ESC/P2 data.<br><br><b>-height=pixels</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output image height in pixels. If not specified, the height is inferred from the ESC/P2 data.<br><br><b>-r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects and outputs only the red component of a color image as a grayscale PBM.<br><br><b>-g</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects and outputs only the green component of a color image as a grayscale PBM.<br><br><b>-b</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects and outputs only the blue component of a color image as a grayscale PBM.<br><br><b>-gray</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the output to be grayscale. If the input contains color information, the RGB components are averaged.<br><br><b>-maxrow=N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a maximum row size for printer commands. This can be useful for handling potentially malformed or broken ESC/P2 streams. The default is 2000.<br><br>


title: DESCRIPTION
content:
The <b>escp2topbm</b> command is a utility within the <i>Netpbm</i> suite, designed to convert data streams formatted for Epson ESC/P2 printers into a Portable Bitmap (PBM) image. Epson ESC/P2 is a common printer command language used by many dot matrix and inkjet printers to describe raster graphics. This command reads the binary ESC/P2 data, typically from standard input or a specified file, and translates the embedded graphic commands into a PBM image, which is then written to standard output.<br><br>It's particularly useful for extracting and viewing graphical content that would otherwise only be rendered on a printer. The output PBM image can then be further processed, converted to other formats, or displayed using other <i>Netpbm</i> tools or image viewers.


title: CAVEATS
content:
This command is specific to the Epson ESC/P2 printer language and will not work with data from other printer command languages (e.g., PostScript, PCL).<br>It primarily focuses on the raster graphics portions of the ESC/P2 stream; text commands may not be rendered or may appear inconsistently.<br>The quality and completeness of the output depend heavily on the accuracy of the resolution and dimension parameters, especially if not explicitly provided in the input stream.<br>Input streams with errors or non-standard ESC/P2 sequences may lead to malformed or incomplete PBM output.


title: HISTORY
content:
<b>escp2topbm</b> is part of the <i>Netpbm</i> project, a widely used suite of graphics conversion tools for Unix-like systems. <i>Netpbm</i> originated from the <i>pbmplus</i> package, developed by Jef Poskanzer in the late 1980s. The suite provides a common set of tools for manipulating various image formats, primarily using the "portable anymap" (PBM, PGM, PPM, PAM) formats as an interchange medium. Converters like <b>escp2topbm</b> were developed to integrate specific niche formats, such as printer command languages, into this versatile framework, allowing users to extract and process graphical data from diverse sources.


title: PARAMETERS
content:
<b><b>-N</b>, <b>--name</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search only package names.<br><br><b><b>-D</b>, <b>--description</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search only package descriptions (aka summaries).<br><br><b><b>-F</b>, <b>--full</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search names, descriptions, homepages, maintainers, keywords, licenses, and slots. This is the default search scope.<br><br><b><b>-C</b>, <b>--category</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search only package categories.<br><br><b><b>-K</b>, <b>--keyword</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search package keywords (e.g., '~amd64', 'stable').<br><br><b><b>-L</b>, <b>--license</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search package licenses (e.g., 'GPL-2').<br><br><b><b>-H</b>, <b>--homepage</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Search package homepages.<br><br><b><b>-i</b>, <b>--installed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show only packages currently installed on the system.<br><br><b><b>-a</b>, <b>--available</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show only packages available in the repository but not installed.<br><br><b><b>-A</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show both installed and available packages (default if no other status filter is specified).<br><br><b><b>-u</b>, <b>--unmask</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show packages that are currently unmasked.<br><br><b><b>-m</b>, <b>--masked</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show packages that are currently masked.<br><br><b><b>-t</b>, <b>--stable</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show packages marked as stable for the current architecture.<br><br><b><b>-T</b>, <b>--unstable</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show packages marked as unstable (testing) for the current architecture.<br><br><b><b>-e</b>, <b>--exact</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform an exact match search. Disables globbing and regular expressions.<br><br><b><b>-r</b>, <b>--regexp</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret the search term as a regular expression.<br><br><b><b>-g</b>, <b>--glob</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret the search term using globbing (wildcards like '*' and '?'). This is the default behavior if no other match type is specified.<br><br><b><b>-c</b>, <b>--compact</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display output in a more compact format.<br><br><b><b>--color</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force colored output (default is automatic).<br><br><b><b>--no-color</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable colored output.<br><br>


title: DESCRIPTION
content:
<i>esearch</i> is a powerful command-line utility for quickly searching packages and their metadata within the Gentoo Linux Portage system. It's a fundamental tool for Gentoo users to discover, identify, and manage software.<br><br>Unlike <i>emerge --search</i>, <i>esearch</i> is designed for speed and flexibility, offering a wide array of options to narrow down searches by package name, description, homepage, maintainer, keywords, licenses, and more. It queries the local ebuild tree, providing instant results without requiring network access for basic searches (though the ebuild tree itself needs to be updated periodically via <i>emerge --sync</i> or <i>eix-sync</i>).<br><br><i>esearch</i> is part of the <b>portage-utils</b> collection, which provides several supplementary tools to enhance the Portage experience. It's an indispensable command for navigating the vast Gentoo repository.


title: CAVEATS
content:
<i>esearch</i> is specific to <B>Gentoo Linux</B> and relies on the local Portage ebuild tree. Its functionality is tied to the existence and up-to-dateness of this tree. If the ebuild tree is not synchronized regularly (e.g., via <i>emerge --sync</i> or <i>eix-sync</i>), <i>esearch</i> results might be outdated or incomplete. It does not perform live network queries.


title: SEARCH SCOPE AND MATCHING
content:
By default, <i>esearch</i> performs a 'full' search, looking for the search term across package names, descriptions, homepages, maintainers, keywords, and licenses. Users can refine this by using options like <b>-N</b> (name only) or <b>-D</b> (description only). Matching can be controlled via <b>-g</b> (glob, default), <b>-r</b> (regexp), or <b>-e</b> (exact match).


title: OUTPUT FORMATTING
content:
<i>esearch</i> provides options to control the output format. The <b>-c</b> or <b>--compact</b> option presents results in a more condensed line format, which is useful for scripting or when a brief overview is needed. Colored output can be explicitly enabled or disabled using <b>--color</b> and <b>--no-color</b>, respectively.


title: HISTORY
content:
<i>esearch</i> was developed as part of the <B>portage-utils</B> project, aiming to provide faster and more versatile package search capabilities than the built-in <i>emerge --search</i> command. It emerged to address performance limitations and offer more granular control over search criteria, becoming a staple utility for Gentoo users to efficiently browse their package repository.


title: SYNOPSIS
content:
<b>eselect</b> [<i>global_options</i>] <i>module</i> [<i>module_options</i>] <i>command</i> [<i>command_options</i>] [<i>arguments...</i>]<br><b>eselect</b> <i>module</i> <b>list</b><br><b>eselect</b> <i>module</i> <b>set</b> <i>#item_number</i>|<I>item_name</I><br><b>eselect</b> <b>help</b>


title: PARAMETERS
content:
<b><i>--help</i>, <i>-h</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the global help message and usage information for <b>eselect</b>.<br><br><b><i>--version</i>, <i>-v</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the version of the <b>eselect</b> utility.<br><br><b><i>--brief</i>, <i>-b</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs information in a brief, less verbose format, suitable for scripting.<br><br>


title: DESCRIPTION
content:
<b>eselect</b> is a powerful command-line utility used in Gentoo Linux to manage system-wide selections or "alternatives" for various software components. It provides a standardized interface for users to switch between different installed versions or configurations of critical system components like Python interpreters, Java Virtual Machines (JVMs), GCC profiles, kernel symlinks, and more. <br><br> Unlike some other Linux distributions that use tools like `update-alternatives`, <b>eselect</b> operates through a modular system. Each <b>eselect</b> module (e.g., <i>eselect python</i>, <i>eselect java</i>) is designed to handle a specific selection type, providing a consistent `list`, `set`, and `show` interface for managing options. <br><br> This allows Gentoo users significant flexibility to tailor their environment. For instance, a developer might use <i>eselect python</i> to switch between Python 3.8 and 3.9, or <i>eselect kernel</i> to point to a newly compiled kernel. It is a cornerstone of Gentoo's highly configurable and flexible system design, empowering users to make deliberate choices about their software stack. Most <b>eselect</b> operations affecting global system settings require root privileges.


title: CAVEATS
content:
<b>eselect</b> is a Gentoo Linux-specific utility and is not found on other distributions. Most operations that modify system-wide settings require root privileges (e.g., using <b>sudo</b> or running as <b>root</b>). Incorrect usage, especially with critical modules like <i>kernel</i> or <i>python</i>, can lead to system instability or render certain applications unusable by breaking expected paths or dependencies. Users should exercise caution and understand the implications of their selections. Furthermore, each <b>eselect</b> module has its own set of commands and behaviors, which need to be understood independently.


title: MODULES
content:
The core functionality of <b>eselect</b> is provided through its modular architecture. Each module handles a specific type of selection. Common modules include:<br><i><b>python</b></i>: Manages default Python interpreter (e.g., Python 3.8 vs 3.9).<br><i><b>java</b></i>: Selects the default Java Virtual Machine (JVM).<br><i><b>kernel</b></i>: Manages kernel symlinks for the currently booted kernel.<br><i><b>gcc</b></i>: Switches between different installed GCC versions.<br><i><b>perl</b></i>: Manages default Perl interpreter.<br><i><b>news</b></i>: Manages Gentoo News items.


title: COMMON MODULE COMMANDS
content:
While specific module commands may vary, most <b>eselect</b> modules support a common set of operations:<br><i><b>list</b></i>: Displays all available options for the selected module, often with their corresponding selection numbers.<br><i><b>set</b></i>: Sets the active option for the module, usually by providing an item number or name from the list.<br><i><b>show</b></i>: Shows the currently active option for the module.<br><i><b>status</b></i>: (Similar to show, provides current status or configuration).


title: HISTORY
content:
<b>eselect</b>'s history is deeply intertwined with that of Gentoo Linux itself. As Gentoo evolved and offered users increasing flexibility in choosing different versions of critical software (like multiple Python interpreters, GCC versions, or Java environments), a centralized tool was needed to manage these alternatives. It was developed to provide a consistent interface for managing these 'slots' of different software versions, aligning with Gentoo's philosophy of 'choices, not policies'. Over time, its modular architecture allowed for easy expansion to manage new types of system selections, becoming an indispensable part of a Gentoo system administrator's toolkit for fine-grained environmental control.


title: SEE ALSO
content:
emerge(1), env-update(1), dispatch-conf(1), update-alternatives(8) (Debian/Ubuntu similar functionality)


title: SYNOPSIS
content:
<b>eselect kernel</b> <i>command</i> [<i>argument</i>]<br>or (less common, but direct executable)<br><b>eselect-kernel</b> <i>command</i> [<i>argument</i>]


title: PARAMETERS
content:
<b>list (or ls)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a numbered list of all available kernel source directories found under <b>/usr/src/</b>.<br><br><b>set <i>number</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the active kernel source by creating or updating the <b>/usr/src/linux</b> symlink to point to the kernel source corresponding to the specified <i>number</i> from the 'list' output.<br><br><b>show</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the currently active kernel source directory that <b>/usr/src/linux</b> points to.<br><br><b>unset</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the <b>/usr/src/linux</b> symlink. Use with caution as this can break module compilation processes.<br><br><b>help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message for the command and its available options.<br><br>


title: DESCRIPTION
content:
eselect-kernel is a specialized module of the <i>eselect</i> utility, a cornerstone tool within the Gentoo Linux distribution. Its primary function is to manage the symbolic link <b>/usr/src/linux</b>, which is a crucial pointer to the currently active kernel source directory. This symlink is essential for various system operations, particularly when building out-of-tree kernel modules (like proprietary graphics drivers, virtual machine guest additions, or ZFS), as these processes rely on <b>/usr/src/linux</b> to locate the correct kernel headers and build environment. It simplifies switching between different kernel versions or configurations (e.g., <i>gentoo-sources</i>, <i>vanilla-sources</i>, <i>hardened-sources</i>) installed on the system, providing a user-friendly interface instead of manual symlink manipulation.


title: CAVEATS
content:
<b>Caveats and Limitations:</b><br><b>1. Gentoo-Specific:</b> This command is almost exclusively found and used on Gentoo Linux and its derivatives. It is not part of standard Linux distributions like Debian, Ubuntu, Fedora, or Arch Linux.<br><b>2. Kernel Sources Required:</b> For <b>eselect-kernel</b> to be useful, kernel source packages (e.g., <i>sys-kernel/gentoo-sources</i>) must be installed on your system via <i>emerge</i>.<br><b>3. No Automatic Recompilation:</b> Changing the active kernel symlink does <b>not</b> automatically recompile your kernel or any kernel modules. You must manually recompile any out-of-tree modules that depend on the kernel source after changing it, or re-run kernel build processes.<br><b>4. Impact on Module Builds:</b> It primarily affects <i>future</i> compilation of kernel modules or tools that look for kernel headers at <b>/usr/src/linux</b>, not the currently running kernel itself.


title: THE IMPORTANCE OF <B>/USR/SRC/LINUX</B>
content:
The symbolic link <b>/usr/src/linux</b> is a conventional location for tools and scripts (such as those used by <i>dkms</i>, proprietary graphics drivers, or virtual machine guest additions) to find the currently active kernel source tree. This symlink provides a stable, predictable path regardless of the specific kernel version or configuration installed. <b>eselect-kernel</b> simplifies the management of this crucial symlink, ensuring that such tools can always locate the correct headers and build environment for the kernel you intend to build modules against.


title: INTEGRATION WITH GENTOO'S PORTAGE
content:
Kernel source packages (e.g., <i>sys-kernel/gentoo-sources</i>, <i>sys-kernel/vanilla-sources</i>) are installed via Gentoo's package manager, <i>Portage</i> (using the <b>emerge</b> command). Each kernel source package typically installs its files into a version-specific directory, such as <b>/usr/src/linux-5.15.76-gentoo</b>. <b>eselect-kernel</b> then allows you to choose which of these installed directories <b>/usr/src/linux</b> should point to, making it easy to manage multiple kernel installations.


title: HISTORY
content:
<b>eselect-kernel</b> is an integral part of the broader <i>eselect</i> framework, which has been a fundamental utility in Gentoo Linux since its early development. The <i>eselect</i> system was designed to provide a consistent and user-friendly interface for managing system-wide configuration choices, such as default Java environments, Python interpreters, news readers, and critically, kernel sources. This design reflects Gentoo's philosophy of providing users with granular control over their system, allowing easy switching between different installed versions of components without manual symlink or configuration file editing. Its role in managing <b>/usr/src/linux</b> has remained consistent as a core function for system maintenance and out-of-tree module compilation.


title: SYNOPSIS
content:
<b>eselect locale</b> <i>&lt;command&gt;</i> [<i>&lt;arguments&gt;</i>]<br><br>Common commands:<br><b>eselect locale list</b><br><b>eselect locale set</b> <i>&lt;number or locale_name&gt;</i><br><b>eselect locale show</b>


title: PARAMETERS
content:
<b>list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available locales recognized by the system, along with their corresponding selection numbers.<br><br><b>set <i>&lt;number or locale_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the active system-wide locale. You can specify either the numerical index from the <b>list</b> command or the full locale name (e.g., <i>en_US.UTF-8</i>).<br><br><b>show</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the currently configured system locale settings.<br><br><b>help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows usage information and available subcommands for <b>eselect locale</b>.<br><br>


title: DESCRIPTION
content:
<i>eselect-locale</i> is a utility primarily used in <b>Gentoo Linux</b> systems to manage the system's locale settings.<br><br>It provides a user-friendly interface to select and configure the desired locale for the entire system. Locales define language, country, and character encoding preferences, influencing how programs display dates, times, currencies, and text.<br><br><i>eselect-locale</i> works by presenting a list of available locales (which must first be generated, typically via <b>locale-gen</b>) and allowing the user to choose one as the default. This selection is then persistently configured, usually by updating environment files like <i>/etc/env.d/02locale</i> or <i>/etc/locale.conf</i>, ensuring that the chosen locale is loaded upon system boot or login. It simplifies what could otherwise be a manual configuration of <b>LANG</b> and <b>LC_*</b> environment variables. It interacts with the <b>eselect</b> framework, which is designed to manage various system-wide "selections" or "alternatives."


title: CAVEATS
content:
<b>Limitations and Considerations:</b><br><i>eselect-locale</i> is primarily available and useful on <b>Gentoo Linux</b> and other Portage-based distributions.<br>Locales must first be generated using the <b>locale-gen</b> command after uncommenting desired locales in <i>/etc/locale.gen</i>.<br>Changes made by <b>eselect locale</b> typically require a re-login or system reboot for all applications and processes to fully adopt the new locale.<br>Incorrect locale settings can lead to display issues (e.g., 'mojibake' for non-ASCII characters) or incorrect date/time/currency formatting in applications.


title: LOCALE GENERATION PREREQUISITE
content:
Before <b>eselect locale</b> can be effectively used, the desired locales must be uncommented in the <i>/etc/locale.gen</i> configuration file. Subsequently, the <b>locale-gen</b> command must be executed to generate the necessary locale data files. Without this step, <b>eselect locale list</b> will show limited options, and setting a non-generated locale will not work correctly.


title: IMPACT ON ENVIRONMENT VARIABLES
content:
The locale chosen with <b>eselect locale set</b> is typically persisted by writing to files within <i>/etc/env.d/</i> (e.g., <i>/etc/env.d/02locale</i>) or similar system-wide configuration directories. These files are sourced during the system's initialization or user login process, setting crucial environment variables like <b>LANG</b>, <b>LC_ALL</b>, <b>LC_CTYPE</b>, <b>LC_TIME</b>, etc., which dictate the system's linguistic and regional behavior for all applications.


title: HISTORY
content:
The <b>eselect</b> framework, including its <i>locale</i> subcommand, is an integral part of the <b>Gentoo Linux</b> distribution's system configuration toolkit. Developed to provide a standardized, user-friendly way to manage various system-wide "alternatives" or "selections," <i>eselect-locale</i> specifically emerged to streamline locale management. It integrates deeply with Gentoo's philosophy of user configurability and system transparency, evolving alongside the distribution to remain a core utility for managing linguistic and regional settings.


title: PARAMETERS
content:
<b><I>list</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available news items. Use with <i>--unread</i> to display only unread items.<br><br><b><I>list --unread</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays only news items that have not yet been marked as read.<br><br><b><I>read</I> {<I>ID</I>|<I>all</I>|<I>latest</I>}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads the content of a specific news item identified by its <i>ID</i>, all news items, or only the <i>latest</i> unread news item. Reading an item marks it as read.<br><br><b><I>show</I> {<I>ID</I>|<I>all</I>|<I>latest</I>}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for the <i>read</i> command, behaving identically.<br><br><b><I>purge</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes news items that have been read and are no longer considered current or relevant by the system. Use with <i>--force</i> to skip confirmation.<br><br><b><I>purge --force</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs the purge operation without prompting for user confirmation.<br><br><b><I>status</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a summary of the current news status, including the total number of news items and how many are unread.<br><br><b><I>unread</I> {<I>ID</I>|<I>all</I>}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Marks a specific news item by its <i>ID</i>, or all news items, as unread. This can be useful if an item needs to be reviewed again.<br><br><b><I>help</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and usage information for the <b>eselect news</b> module.<br><br>


title: DESCRIPTION
content:
The <b>eselect news</b> command is a specialized utility within the Gentoo Linux distribution's <b>eselect</b> framework. Its primary purpose is to manage and display news items published by the Gentoo project. These news entries contain crucial information for users, ranging from security advisories, important package updates, necessary configuration changes, deprecations, or general announcements regarding the distribution.<br><br>News items are typically synchronized to the local system as part of the Portage tree update (e.g., via <i>emerge --sync</i>) and are stored in specific directories like <i>/usr/portage/metadata/news</i>. <b>eselect news</b> allows users to conveniently list available news, read individual entries, mark them as read or unread, and prune old, irrelevant news.<br><br>Regularly checking and acting upon <b>eselect news</b> entries is fundamental for maintaining a stable, secure, and up-to-date Gentoo system. Failing to do so can lead to system misconfigurations, broken software, or missed security patches.


title: CAVEATS
content:
<b>eselect news</b> is exclusive to Gentoo Linux and distributions derived from it (e.g., Funtoo, Calculate Linux). It relies on the Portage tree being regularly synced (via <i>emerge --sync</i> or <i>emerge-webrsync</i>) for news items to be available. Failure to read and act upon critical news announcements can lead to system instability, security vulnerabilities, or difficulties during system upgrades.


title: NEWS ITEM STORAGE LOCATION
content:
News items processed by <b>eselect news</b> are typically stored in the Portage tree, commonly found at <i>/usr/portage/metadata/news</i>. This directory contains subdirectories for different news groups or categories.


title: READ STATUS TRACKING
content:
The read/unread status of news items is managed by <b>eselect news</b>, usually by tracking read items in a user-specific configuration file, such as <i>~/.config/eselect/news.conf</i> or a similar location, within the user's home directory. This ensures that the status persists across sessions.


title: IMPORTANCE OF READING NEWS
content:
For Gentoo users, reading <b>eselect news</b> is not optional but a critical maintenance task. News items often contain instructions for migrating configurations, dealing with breaking changes in packages, security vulnerabilities requiring immediate action, or deprecation notices for features. Ignoring these can lead to a broken system or security exposures.


title: HISTORY
content:
The <b>eselect</b> framework, including modules like <b>eselect-news</b>, has been a foundational component of Gentoo Linux for many years. It was developed to standardize and simplify common configuration tasks that previously might have required manual file editing or complex commands. <b>eselect-news</b> specifically streamlines the process of communicating important system changes, security updates, and configuration guidance directly to users. Prior to dedicated tools, users might have manually browsed news files or relied solely on mailing list announcements. The `eselect` utility provides a unified and interactive interface, making it easier for users to manage various system selections and stay informed about the distribution's evolution.


title: PARAMETERS
content:
<b>list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a numbered list of all available system profiles, marking the currently active profile with an asterisk.<br><br><b>set <I>profile_id</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Switches the active system profile to the one identified by the numeric <I>profile_id</I> from the <I>list</I> output. This is the most common and recommended method for setting a profile.<br><br><b>set <I>profile_name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Changes the active system profile using its full path or descriptive name (e.g., <I>default/linux/amd64/17.0/desktop</I>). While possible, using the numeric ID is generally more robust.<br><br>


title: DESCRIPTION
content:
The <I>eselect-profile</I> command is a module of the broader <I>eselect</I> utility in Gentoo Linux, specifically designed for managing system profiles. System profiles are foundational to Gentoo's highly customizable nature, defining the base architecture, default <I>USE</I> flags, and package sets for a given installation (e.g., desktop, server, hardened). This command provides an interactive and user-friendly interface to list all available profiles and to switch the active system profile. Changing the profile dictates how Portage, Gentoo's package manager, resolves dependencies and compiles software, profoundly impacting the system's functionality, performance, and security. It is a critical tool for maintaining and adapting a Gentoo system to specific needs.


title: CAVEATS
content:
Only applicable to Gentoo Linux distributions.<br>Incorrectly switching profiles can lead to system instability or breakages due to changes in USE flags and package requirements.<br>Always review potential impacts before changing the profile, especially on production systems. After changing a profile, it's often necessary to run <I>emerge -uDNa world</I> to reconcile package dependencies with the new profile's settings.


title: WHAT ARE GENTOO SYSTEM PROFILES?
content:
Gentoo system profiles are directories located under <I>/usr/portage/profiles</I> that define the base set of <I>USE</I> flags, <I>ARCH</I>, and other Portage variables for a specific system configuration. They are fundamental to Gentoo's flexibility, allowing users to tailor their system from the ground up (e.g., server, desktop, hardened, musl). The active profile is symlinked from <I>/etc/portage/make.profile</I> and is crucial for Portage to correctly resolve dependencies and compile packages according to the chosen system type.


title: CHECKING THE CURRENT PROFILE
content:
You can always check your currently active profile by examining the target of the symlink at <I>/etc/portage/make.profile</I>. Alternatively, running <I>eselect profile list</I> will display all available profiles, with the currently active one marked by an asterisk (*).


title: HISTORY
content:
Part of the broader '<I>eselect</I>' utility, which has been a core component of Gentoo Linux since its early days, providing a centralized way to manage system-wide settings like kernel symlinks, OpenRC services, and Python interpreters. The '<I>profile</I>' module specifically addresses the critical need to manage system profiles, which dictate the fundamental characteristics of a Gentoo installation and are vital for maintaining system consistency and optimization.


title: PARAMETERS
content:
<b>-c, --config <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a configuration file to use instead of the default <b>.eslintrc.*</b> files.<br><br><b>--ext <extension></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify additional file extensions (e.g., <b>.ts</b>, <b>.vue</b>) to lint.<br><br><b>--fix</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically fix problems reported by <i>ESLint</i> where possible. Not all issues are auto-fixable.<br><br><b>-f, --format <formatter></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output formatter (e.g., <b>stylish</b>, <b>json</b>, <b>compact</b>).<br><br><b>-i, --ignore-path <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a file to use as an <b>.eslintignore</b> equivalent, defining patterns for files to ignore.<br><br><b>--ignore-pattern <pattern></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify additional patterns of files or directories to ignore from the command line.<br><br><b>--init</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the configuration initializer wizard, which helps set up a new <b>.eslintrc.*</b> file interactively.<br><br><b>--max-warnings <number></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of warnings allowed before <i>ESLint</i> exits with a non-zero status code.<br><br><b>--no-eslintrc</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevent <i>ESLint</i> from loading any <b>.eslintrc.*</b> configuration files.<br><br><b>--no-inline-config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevent the use of inline comments like <b>/* eslint-disable */</b> to disable rules within files.<br><br><b>--output-file <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the linting results to a specified file instead of standard output.<br><br><b>--parser <parser></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative parser to use (e.g., <b>@typescript-eslint/parser</b> for TypeScript files).<br><br><b>--print-config <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the effective configuration that <i>ESLint</i> would use for a given file after resolution.<br><br><b>-r, --rule <rule></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify individual rules to apply or override directly from the command line (e.g., <b>'no-console: off'</b>).<br><br><b>--rulesdir <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load additional rules from a specified directory, useful for custom rule development.<br><br><b>--stdin</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lint code provided via standard input (e.g., piped from another command).<br><br><b>--stdin-filename <filename></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a filename for the code provided via <b>--stdin</b>, which helps with resolving configuration.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the <i>ESLint</i> version number currently installed.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help information for the command, listing available options and usage.<br><br>


title: DESCRIPTION
content:
<i>ESLint</i> is a powerful and highly configurable static code analysis tool designed for identifying problematic patterns in JavaScript and JSX code.<br><br>Its primary goal is to enforce coding standards and best practices, leading to more consistent, readable, and error-free codebases. Unlike older linters, <i>ESLint</i> operates by parsing your code into an <b>Abstract Syntax Tree (AST)</b>, allowing rules to operate on specific code structures rather than just regular expressions. This architecture makes it incredibly flexible and extensible. Developers can define custom rules, use pre-built rule sets from popular style guides (e.g., Airbnb, Google), and extend its functionality with plugins for various frameworks (like React or Vue) or languages (like TypeScript).<br><br><i>ESLint</i> can detect potential errors, enforce stylistic conventions, and even automatically fix many common issues using its <b>--fix</b> option. It integrates seamlessly into development workflows, often run as a pre-commit hook or part of CI/CD pipelines, ensuring code quality from the earliest stages of development.


title: CAVEATS
content:
<i>ESLint</i> requires a Node.js environment to execute. Its extensive configuration options, while powerful, can introduce a learning curve, especially for newcomers or for tailoring complex project setups. Performance can be a consideration on very large codebases without proper caching or incremental linting strategies. Conflicts with code formatters like Prettier can arise if not configured carefully to avoid overlapping responsibilities.


title: CONFIGURATION FILES
content:
<i>ESLint</i>'s behavior is primarily controlled by configuration files, typically named <b>.eslintrc.js</b>, <b>.eslintrc.json</b>, <b>.eslintrc.yml</b>, or defined in <b>package.json</b> under the <b>eslintConfig</b> key.<br><br>These files specify rules, environments, parsers, plugins, and extendable configurations, allowing for highly customized linting setups for different project needs and directory structures. <i>ESLint</i> resolves configurations hierarchically, inheriting settings from parent directories.


title: PLUGINS AND EXTENSIBILITY
content:
A core strength of <i>ESLint</i> is its extensibility through plugins. Plugins can provide new rules (e.g., for specific frameworks), custom parsers (e.g., for TypeScript or flow), or environments (e.g., for Node.js globals). This modular design allows <i>ESLint</i> to support linting for a wide array of JavaScript frameworks (like React, Vue, Angular), libraries, or even define rules specific to an organization's codebase. Popular examples include <b>@typescript-eslint/eslint-plugin</b> and <b>eslint-plugin-react</b>.


title: HISTORY
content:
<i>ESLint</i> was created by Nicholas C. Zakas in 2013. The primary motivation was to provide a more extensible and pluggable linting tool for JavaScript compared to its predecessors like JSHint and JSLint, which were harder to customize. Zakas envisioned a linter where every rule was a plugin, allowing developers to create custom rules and share configurations easily. This AST-based approach, rather than relying on regular expressions, allowed for more precise and powerful static analysis. Over time, <i>ESLint</i> gained widespread adoption in the JavaScript community, becoming the de-facto standard for code quality and style enforcement due to its flexibility, robust feature set, and strong community support.


title: PARAMETERS
content:
<b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints help information for the main command or a specific subcommand.<br><br><b><b>--version</b>, <b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the espanso version information.<br><br><b><b>--verbose</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output for more detailed logs.<br><br><b><b>--config-dir</b> &lt;PATH&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative configuration directory for espanso.<br><br><b><b>--log-level</b> &lt;LEVEL&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the logging verbosity level (e.g., <i>info</i>, <i>warn</i>, <i>error</i>, <i>debug</i>, <i>trace</i>).<br><br><b><b>start</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the espanso service. Use <i>--unmanaged</i> to start without managing the system service (e.g., systemd).<br><br><b><b>stop</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stops the currently running espanso service.<br><br><b><b>restart</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restarts the espanso service.<br><br><b><b>status</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks and prints the current status of the espanso service.<br><br><b><b>edit</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the main espanso configuration file (<i>default.yml</i>) in your default text editor. Use <i>--config &lt;FILE&gt;</i> to open a specific configuration file.<br><br><b><b>log</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the espanso service logs. Use <i>--follow</i> or <i>-f</i> to continuously output new log entries.<br><br><b><b>doctor</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs a diagnostic check to identify common installation or configuration issues and suggests fixes.<br><br><b><b>install</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs the espanso service to start automatically on boot (e.g., using systemd on Linux). On Wayland, consider using <i>--no-hook</i> to skip X11 hooks.<br><br><b><b>uninstall</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the espanso service from automatic startup.<br><br>


title: DESCRIPTION
content:
Espanso is a powerful, cross-platform text expander written in Rust. It allows users to define custom "triggers" (short character sequences) that, when typed, are automatically replaced with predefined "snippets" of text. This significantly boosts productivity by automating repetitive typing tasks, correcting common typos, or inserting frequently used phrases, code blocks, or even dynamic content.<br><br>Espanso operates as a background service, monitoring keyboard input across nearly all applications. Its configuration is managed through simple YAML files, making it highly customizable and easy to share. Beyond static text replacement, espanso supports advanced features like shell command execution, scripting, date/time insertion, and form filling, enabling complex automation workflows directly from your keyboard. It's a versatile tool for developers, writers, and anyone looking to streamline their typing experience on Linux, macOS, and Windows.


title: CAVEATS
content:
While espanso offers powerful text expansion, some caveats exist:<br><i>Wayland Support:</i> Native Wayland support is evolving. On Wayland compositions, it often relies on XWayland or requires additional hooks/setups, and full functionality might vary. The <i>--no-hook</i> option during installation can be relevant here.<br><i>Security:</i> As espanso can execute shell commands and scripts, users should exercise caution when importing configurations from untrusted sources, as malicious snippets could pose a security risk.<br><i>Application Compatibility:</i> Although generally robust, some applications (especially those with custom input methods or strict security policies) might exhibit minor compatibility issues with text injection.


title: CONFIGURATION FILES
content:
Espanso's behavior is defined through YAML configuration files. The main configuration is typically located at <i>~/.config/espanso/default.yml</i> (or <i>%APPDATA%\espanso</i> on Windows). Snippets, referred to as 'matches', can be organized across multiple YAML files within the <i>match/</i> subdirectory, allowing for modular and shared configurations.


title: DYNAMIC CONTENT AND ADVANCED FEATURES
content:
Beyond simple text replacement, espanso supports a rich set of advanced features:<br><i>Forms:</i> Create interactive prompts to gather user input directly within the snippet.<br><i>Shell Commands:</i> Execute arbitrary shell commands and insert their output into the text.<br><i>Date/Time:</i> Insert current dates and times with extensive formatting options.<br><i>Scripts:</i> Integrate with scripting languages (e.g., Python, Javascript) for complex logic and dynamic content generation.<br><i>Extensions:</i> Community-driven extensions provide specialized functionalities and integrations with other tools.


title: HISTORY
content:
Espanso was created by Riccardo Padovani and first publicly released around 2019. Written in Rust, it quickly gained traction as a robust, cross-platform text expander, distinguishing itself from older, platform-specific alternatives. Its development has focused on reliability, security, and extensibility, introducing features like shell commands, forms, and custom extensions, evolving into a versatile automation tool beyond simple text replacement.


title: PARAMETERS
content:
<b><I>OLD_SPD_FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the file containing the existing or old IPsec Security Policy Database (SPD) rules.<br><br><b><I>NEW_SPD_FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the file containing the desired or new IPsec Security Policy Database (SPD) rules.<br><br>


title: DESCRIPTION
content:
<b>espdiff</b> is a utility designed to compare two IPsec Security Policy Database (SPD) files. These files typically contain <b>setkey(8)</b> policy specifications. The primary function of <b>espdiff</b> is to output a sequence of <b>setkey(8)</b> commands (specifically <b>spdadd</b> and <b>spddelete</b> rules) that, when executed, will transform the state of the first policy file (<I>OLD_SPD_FILE</I>) into the state described by the second policy file (<I>NEW_SPD_FILE</I>).<br><br>It intelligently identifies additions, deletions, and modifications between the two policy sets. Policies present in the <I>OLD_SPD_FILE</I> but missing in the <I>NEW_SPD_FILE</I> result in <b>spddelete</b> commands. Conversely, policies found only in the <I>NEW_SPD_FILE</I> generate <b>spdadd</b> commands. For policies that have been altered, <b>espdiff</b> outputs a <b>spddelete</b> for the old version followed by an <b>spdadd</b> for the new version. This makes <b>espdiff</b> an invaluable tool for managing and updating IPsec policies in a live system, ensuring smooth transitions without requiring a full policy flush and reload. It helps in maintaining precise control over IPsec policy deployment.


title: CAVEATS
content:
<b>espdiff</b> only compares SPD entries (<b>spdadd</b>, <b>spddelete</b>). It does not handle SAD (Security Association Database) entries or other <b>setkey</b> commands.<br>The output must be piped to <b>setkey -f -</b> or redirected to a file and then executed.<br>Requires <b>setkey(8)</b> to be available on the system to apply the generated policy changes.


title: USAGE EXAMPLE
content:
To apply the changes generated by <b>espdiff</b>, you typically pipe its output directly to the <b>setkey</b> command. For instance:<br><br><I>espdiff old_policies.conf new_policies.conf | sudo setkey -f -</I><br><br>This command will read the old and new policy definitions from the respective files, compute the differences, and then apply those differences to the live IPsec Security Policy Database via <b>setkey</b>.


title: HISTORY
content:
<b>espdiff</b> is typically distributed as part of the <I>ipsec-tools</I> suite or bundled with IPsec implementations like <I>Openswan</I> and <I>Libreswan</I>. Its development arose from the need for a precise and non-disruptive way to update IPsec security policies on live systems. Instead of flushing all existing policies and reloading them (which can cause momentary service interruption), <b>espdiff</b> provides an incremental update mechanism by generating only the necessary <b>setkey</b> commands to transition between two policy states. This significantly improved the manageability of IPsec deployments, especially in environments requiring high availability.


title: SYNOPSIS
content:
<b>espeak</b> [<i>options</i>] [<i>text</i>]<br><b>espeak</b> -f <i>&lt;file&gt;</i> [<i>options</i>]


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information and exits.<br><br><b>-v <voice>, --voice=<voice></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a specific voice to use for speech synthesis. Examples: 'en', 'en-us', 'en/f3'.<br><br><b>-s <speed>, --speed=<words/minute></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the speaking speed in words per minute. Range: 80 to 450.<br><br><b>-p <pitch>, --pitch=<0-99></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adjusts the base pitch of the voice. Range: 0 (low) to 99 (high).<br><br><b>-a <amplitude>, --amplitude=<0-200></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the amplitude (volume) of the voice. Range: 0 (silent) to 200 (loudest).<br><br><b>-g <gap>, --gap=<10ms units></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Inserts a pause between words, specified in units of 10 milliseconds.<br><br><b>-k <flags>, --capitals=<flags></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls how capital letters are spoken. 1=speak capital words, 2=speak individual capital letters.<br><br><b>-l <language>, --language=<language></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the language to use for text processing.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses audio output. Useful when only phonetic output is desired.<br><br><b>-w <file>, --wav=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the synthesized speech directly to a WAV audio file instead of playing it.<br><br><b>-z, --stdout</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the synthesized speech to standard output (stdout), typically for piping.<br><br><b>--stdin</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads input text from standard input (stdin) until EOF.<br><br><b>-f <file>, --file=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads input text from the specified text file.<br><br><b>--ipa</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the phonetic transcription of the text in IPA (International Phonetic Alphabet) format.<br><br><b>--pho</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the phonetic transcription of the text using eSpeak's internal phoneme alphabet.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information about eSpeak.<br><br><b>--voices[=<language>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available voices, optionally filtered by a specific language. Use '--voices=mb' for MBROLA voices.<br><br><b>-m</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interprets input text as SSML (Speech Synthesis Markup Language).<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes phoneme translations to stdout, showing the phonemes for each word.<br><br><b>-X</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes phoneme translations to stdout, including word identities.<br><br><b>-b <break_level></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the level for sentence breaks. Higher values indicate more breaks.<br><br><b>-d <device></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a specific audio output device.<br><br><b>-L</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables adding a space between words.<br><br>


title: DESCRIPTION
content:
<i>espeak</i> is a software speech synthesizer for Linux and other operating systems. It converts text into spoken audio, making it a valuable tool for accessibility, scripting, and embedded applications.<br><br>It utilizes a <i>formant synthesis</i> method, which is highly efficient and results in a small footprint, suitable for systems with limited resources. While this method can sometimes sound less natural than modern concatenative or neural network-based synthesizers, it provides clear and intelligible speech.<br><br><i>espeak</i> supports a wide array of languages, typically over 100, and allows users to control various aspects of the speech, including speed, pitch, volume, and the specific voice used. It can output speech directly to an audio device or save it as a WAV file. Additionally, it has capabilities for interpreting SSML (Speech Synthesis Markup Language) and can output phonetic transcriptions.


title: CAVEATS
content:
Due to its use of <i>formant synthesis</i>, <i>espeak</i>'s voices can sometimes sound robotic or less natural compared to more advanced text-to-speech systems that use concatenative or deep learning methods. Voice quality and naturalness can vary significantly between different languages.<br>It also requires an audio output device or explicit redirection to a WAV file for audible output.


title: SSML SUPPORT
content:
<i>espeak</i> supports a subset of the W3C's SSML (Speech Synthesis Markup Language). This allows for greater control over speech output, including adding pauses, emphasis, changes in pitch, and other speech characteristics within the input text itself.


title: PHONETIC OUTPUT
content:
Beyond generating audio, <i>espeak</i> can output the phonetic transcription of text using either the International Phonetic Alphabet (IPA) or its own internal phoneme representation. This feature is valuable for linguistic analysis, debugging pronunciation issues, or for applications that require programmatic access to phoneme data.


title: CUSTOMIZATION
content:
Users can extend <i>espeak</i>'s capabilities by creating or modifying pronunciation dictionaries and voice definitions. This allows for tailoring the speech output to specific vocabulary or regional accents, enhancing its flexibility for specialized applications.


title: HISTORY
content:
<i>espeak</i> was developed by Jonathan Duddington and first released around 2006. Its design prioritized compactness and efficiency, making it highly suitable for resource-constrained environments, such as embedded systems, and for integration into assistive technologies like screen readers (e.g., Orca). The project's focus on a highly efficient formant synthesis engine distinguished it. While <i>espeak</i> is still widely used, development has largely continued under the <i>espeak-ng</i> (Next Generation) fork, which offers ongoing updates, bug fixes, and additional features.


title: SYNOPSIS
content:
<b>esptool.py</b> [<I>GLOBAL_OPTIONS</I>] <I>COMMAND</I> [<I>COMMAND_OPTIONS</I>] [<I>COMMAND_ARGUMENTS</I>]


title: PARAMETERS
content:
<b><b>-p</b> <I>PORT</I>, <b>--port</b> <I>PORT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the serial port connected to the ESP chip. Common values include <I>/dev/ttyUSB0</I> or <I>/dev/ttyACM0</I> on Linux, or <I>COM1</I> on Windows.<br><br><b><b>-b</b> <I>BAUD</I>, <b>--baud</b> <I>BAUD</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the serial baud rate for communication. Typical values are 115200, 230400, 460800, 921600, or 1152000. Higher rates generally mean faster operations.<br><br><b><b>--chip</b> <I>CHIP</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the target chip type explicitly (e.g., <I>esp32</I>, <I>esp8266</I>, <I>esp32c3</I>). If omitted, <I>esptool.py</I> attempts to autodetect the chip.<br><br><b><b>--before</b> <I>ACTION</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Action to perform before executing the command. Common values are <I>default_reset</I> (default), <I>no_reset</I>, or <I>usb_reset</I> (for ESP32-S2/S3/C3 USB-OTG port).<br><br><b><b>--after</b> <I>ACTION</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Action to perform after executing the command. Common values are <I>hard_reset</I> (default), <I>soft_reset</I>, or <I>no_reset</I>.<br><br><b><b>--no-stub</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not upload the stub bootloader. Use the ROM bootloader directly. Can be faster but less reliable for some operations.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, providing more detailed information about the operation progress and debug messages.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the help message and exit. Can be used globally or with specific commands (e.g., <I>esptool.py write_flash -h</I>).<br><br>


title: DESCRIPTION
content:
<I>esptool.py</I> is an open-source command-line utility for flashing firmware onto Espressif Systems' ESP32, ESP8266, ESP32-C3, ESP32-S2, ESP32-S3, and other microcontroller chips. Written in Python, it serves as the primary tool for communicating with the ROM bootloader on these chips via a serial port. <br><br>Its core functionality includes writing firmware images to flash memory, reading flash content, erasing flash, reading chip ID, reading MAC addresses, and retrieving various chip information. It's an indispensable tool for developers working with the ESP ecosystem, enabling them to upload compiled applications, bootloaders, and partitions to their development boards. <br><br>The command is highly configurable, allowing users to specify serial port, baud rate, flash mode, and various actions to perform before and after flashing. It automates much of the process of putting the chip into bootloader mode and ensuring reliable data transfer, simplifying the firmware development and deployment workflow for Espressif hardware.


title: CAVEATS
content:
Using <I>esptool.py</I> often requires specific setup and understanding:<br>1.  <b>Permissions:</b> On Linux, users typically need to be part of the <I>dialout</I> or <I>uucp</I> group to access serial ports (<I>sudo usermod -a -G dialout $USER</I>).<br>2.  <b>Bootloader Mode:</b> Most ESP chips require specific GPIO pins (e.g., GPIO0 held low, EN/RST toggled) to be in 'download' or 'bootloader' mode for flashing. <I>esptool.py</I> can often automate this reset, but manual intervention might be needed.<br>3.  <b>Drivers:</b> Ensure proper serial drivers (e.g., CP210x, CH340, FTDI) are installed for your board's USB-to-serial converter.<br>4.  <b>Baud Rate:</b> While higher baud rates are faster, they can be less stable, especially with long or low-quality USB cables or older hardware. Start with 115200 if facing issues.<br>5.  <b>Python Environment:</b> <I>esptool.py</I> is a Python script and requires a compatible Python installation (Python 3.x is recommended).


title: COMMON COMMANDS
content:
<I>esptool.py</I> operates by executing specific commands after global options. Here are some of the most frequently used commands:<br><ul><li><b>write_flash</b> <I>[FLASH_MODE] [OFFSET] [FILE]</I>: Writes one or more binary files to flash memory at specified offsets. E.g., <I>esptool.py --chip esp32 write_flash 0x1000 bootloader.bin 0x8000 partitions.bin 0x10000 firmware.bin</I>.<br><li><b>erase_flash</b>: Erases the entire flash chip content.<br><li><b>read_flash</b> <I>OFFSET SIZE FILENAME</I>: Reads a specified size of data from flash at an offset and saves it to a file. E.g., <I>esptool.py read_flash 0x0 0x10000 flash_dump.bin</I>.<br><li><b>chip_id</b>: Reads and displays the unique chip ID.<br><li><b>flash_id</b>: Reads and displays the manufacturer and device ID of the attached flash chip.<br><li><b>read_mac</b>: Reads and displays the device's MAC address.<br><li><b>get_chip_info</b>: Retrieves detailed information about the connected chip, including model, revision, features, and capabilities.


title: INSTALLATION
content:
<I>esptool.py</I> can be installed via pip: <I>pip install esptool</I>. It will typically be added to your system's PATH, allowing you to run it directly from the terminal. Alternatively, you can clone the GitHub repository and run it as a Python script: <I>python esptool.py ...</I>


title: HISTORY
content:
<I>esptool.py</I> originated from Espressif Systems as the official tool for interacting with their ESP8266 chips. It has since undergone continuous development, expanding its support to all subsequent ESP series chips (ESP32, ESP32-S2/S3, ESP32-C3/C6, etc.) and adding numerous features for advanced chip interaction. Its open-source nature has fostered a large community, contributing to its robustness and widespread adoption as the de facto standard flashing utility for ESP-based projects.


title: PARAMETERS
content:
<b><b>-a</b>, <b>--append</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Appends new tags to an existing <i>TAGS</i> file instead of overwriting it.<br><br><b><b>-f</b> <i>TAGSFILE</i>, <b>--output=</b><i>TAGSFILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the output tags file. The default is <i>TAGS</i>.<br><br><b><b>-r</b> <i>REGEXP</i>, <b>--regex=</b><i>REGEXP</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the specified regular expression to find additional tags. This allows customizing tag generation for specific patterns or languages.<br><br><b><b>-L</b> <i>FILE</i>, <b>--file-list=</b><i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads filenames from <i>FILE</i>, one per line. Useful when dealing with a large number of files generated by other commands like <i>find</i>.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the names of files being processed and other progress information to standard error.<br><br><b><b>-u</b>, <b>--update</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Updates tags for modified files in the <i>TAGS</i> file. If a file is not listed, it's ignored; if a file is deleted, its entries are removed.<br><br><b><b>-C</b> <i>LANGUAGE</i>, <b>--language=</b><i>LANGUAGE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <i>etags</i> to use the specified <i>LANGUAGE</i> mode for all input files, overriding its automatic language detection.<br><br><b><b>--exclude=</b><i>PATTERN</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes files whose names match the shell <i>PATTERN</i> from being processed.<br><br>


title: DESCRIPTION
content:
<i>etags</i> is a powerful utility used to generate a <b>TAGS</b> file for <i>GNU Emacs</i>. This file contains a list of definitions found in source code files, such as functions, variables, classes, and macros, along with their locations. When used within <i>Emacs</i>, the <b>TAGS</b> file allows developers to quickly navigate through large codebases using commands like <i>M-.</i> (<i>find-tag</i>) to jump directly to the definition of a symbol, or <i>M-*</i> to return to the previous location.<br><br><i>etags</i> supports a wide array of programming languages, including C, C++, Java, Python, Lisp, and many more, by employing language-specific parsers or regular expressions. It is an indispensable tool for enhancing productivity in code exploration and development, enabling seamless jumps between relevant parts of a project without manual searching.


title: CAVEATS
content:
While incredibly useful, <i>etags</i> has a few considerations:<br><i>1.</i> For very large projects, the generated <b>TAGS</b> file can become quite big, potentially impacting performance slightly within <i>Emacs</i> or requiring significant disk space.<br><i>2.</i> The tag file needs to be regenerated (or updated with <b>-u</b>) whenever the source code structure changes significantly (e.g., new functions added, functions renamed).<br><i>3.</i> <i>etags</i> uses heuristic parsing for many languages, which means it might occasionally miss definitions or generate incorrect tags, especially for complex or unconventional code constructs.<br><i>4.</i> It is primarily designed for <i>Emacs</i>. Users of other editors might prefer <i>ctags</i>, which produces a more general format.


title: COMMON USAGE WITH <I>FIND</I>
content:
A very common pattern for generating tags for an entire project is to combine <i>etags</i> with the <i>find</i> command. For example, to tag all C and C++ source files in the current directory and its subdirectories: <br><b>find . -name "*.c" -o -name "*.h" -o -name "*.cpp" | etags -L -</b><br>The <b>-L -</b> option tells <i>etags</i> to read the list of files from standard input.<br><br>To append to an existing <i>TAGS</i> file: <br><b>find . -name "*.js" | etags -a -L -</b>


title: INTEGRATING WITH <I>EMACS</I>
content:
Once a <b>TAGS</b> file is generated, you need to tell <i>Emacs</i> about it. Use <b>M-x visit-tags-table RET TAGS RET</b> to load the tags file. After loading, you can use:<br><i>- M-.</i> (<i>find-tag</i>): Jump to the definition of a symbol at point.<br><i>- M-*</i> (<i>pop-tag-mark</i>): Return to the previous location in the tag stack.<br><i>- M-x tags-search</i>: Search for a regular expression in all tagged files.<br><i>- M-x tags-query-replace</i>: Perform query-replace across all tagged files.<br>This deep integration makes <i>etags</i> an indispensable tool for <i>Emacs</i> users working on large software projects.


title: HISTORY
content:
<i>etags</i> has been an integral part of the <i>GNU Emacs</i> ecosystem for decades. Its development has closely tracked that of <i>Emacs</i> itself, evolving to support an ever-growing list of programming languages and advanced features for code navigation. It emerged as a dedicated tags generator for <i>Emacs</i>, building upon the concept of "tags" files common in Unix development environments. Its continuous integration and reliance within the <i>Emacs</i> community underscore its role as a stable and essential utility for source code management and exploration.


title: SYNOPSIS
content:
<b>etcd</b> [<i>options</i>]<br><br><i>Example for bootstrapping a new 3-node etcd cluster:</i><br><b>etcd</b> \<br>  --name <i><node-name></i> \<br>  --data-dir <i>/var/lib/etcd</i> \<br>  --initial-advertise-peer-urls <i>http://<node-ip>:2380</i> \<br>  --listen-peer-urls <i>http://0.0.0.0:2380</i> \<br>  --listen-client-urls <i>http://0.0.0.0:2379</i> \<br>  --advertise-client-urls <i>http://<node-ip>:2379</i> \<br>  --initial-cluster-token <i>etcd-cluster-1</i> \<br>  --initial-cluster <i>node1=http://<node1-ip>:2380,node2=http://<node2-ip>:2380,node3=http://<node3-ip>:2380</i> \<br>  --initial-cluster-state <i>new</i>


title: PARAMETERS
content:
<b>--name <i><string></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Human-readable name for this <i>etcd</i> member. Must be unique within the cluster.<br><br><b>--data-dir <i><path></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the data directory where <i>etcd</i> stores its persistent data (WAL, snapshots).<br><br><b>--wal-dir <i><path></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a dedicated WAL (Write Ahead Log) directory. Recommended for performance and durability.<br><br><b>--listen-peer-urls <i><urls></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List of URLs <i>etcd</i> listens on for peer (member-to-member) communication. For example: <i>http://0.0.0.0:2380</i>.<br><br><b>--listen-client-urls <i><urls></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List of URLs <i>etcd</i> listens on for client communication (e.g., from <i>etcdctl</i> or applications). For example: <i>http://0.0.0.0:2379</i>.<br><br><b>--advertise-client-urls <i><urls></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List of URLs to advertise to clients so they can connect to this <i>etcd</i> member. Should be publicly accessible.<br><br><b>--initial-advertise-peer-urls <i><urls></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List of URLs to advertise to the other members of the cluster. Used during cluster bootstrapping.<br><br><b>--initial-cluster-token <i><string></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unique token for the new cluster. Helps prevent accidental cluster formation or misconfiguration.<br><br><b>--initial-cluster <i><string></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initial cluster configuration for a new cluster or when joining an existing one. Format: <i><name1>=<peer-url1>,<name2>=<peer-url2></i>...<br><br><b>--initial-cluster-state <i><new|existing></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initial cluster state. Use <i>new</i> for bootstrapping a new cluster, <i>existing</i> for joining an existing one.<br><br><b>--client-cert-auth</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable client certificate authentication for client connections, enhancing security.<br><br><b>--peer-client-cert-auth</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable peer client certificate authentication for peer connections, ensuring secure member-to-member communication.<br><br><b>--trusted-ca-file <i><path></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the client CA file used for verifying client certificates.<br><br><b>--peer-trusted-ca-file <i><path></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the peer CA file used for verifying peer certificates.<br><br>


title: DESCRIPTION
content:
<i>etcd</i> is a <b>distributed, reliable, and consistent key-value store</b> designed for shared configuration, service discovery, and coordinating distributed systems. It acts as a highly available backing store for applications that need to maintain state or synchronize access across a cluster of machines. <br><br>It employs the <b>Raft consensus algorithm</b> to ensure data consistency and fault tolerance across its members, making it resilient to node failures. <i>etcd</i> is widely used in cloud-native environments, most notably as the <b>primary datastore for Kubernetes</b> clusters, storing all cluster state and configuration. It provides a simple HTTP/gRPC API for programmatic interaction.


title: CAVEATS
content:
<i>etcd</i> requires a <b>quorum</b> (majority of members) to be available for writes and many reads. Losing quorum renders the cluster unavailable for writes until a quorum is restored. <br><br>Its performance is highly dependent on <b>fast disk I/O</b> (especially for the WAL) and low network latency between members. <br><br><b>Backup and restore procedures</b> are critical for disaster recovery. It's recommended to run an odd number of members (e.g., 3, 5, or 7) for fault tolerance and to simplify quorum management.


title: DATA MODEL
content:
<i>etcd</i> organizes data as a <b>hierarchical key-value store</b>, where keys are paths (e.g., <i>/config/service/setting</i>). It supports basic CRUD (Create, Read, Update, Delete) operations and advanced features like <b>watches</b>, allowing clients to subscribe to changes on specific keys or prefixes, enabling real-time updates.


title: CONSISTENCY MODEL
content:
<i>etcd</i> enforces <b>strong consistency (linearizability)</b> across all members of a cluster using the Raft consensus algorithm. This guarantees that all operations appear to occur atomically and in a single, well-defined global order, providing a predictable and reliable foundation for building distributed applications.


title: HISTORY
content:
<i>etcd</i> was originally developed by <b>CoreOS</b> (later acquired by Red Hat/IBM) and first released in <b>2013</b>. It was created to provide a more robust and simpler distributed key-value store compared to existing solutions like ZooKeeper, focusing on modern distributed systems challenges. Its adoption significantly grew with the rise of <b>Kubernetes</b>, for which it serves as the foundational data store, managing all cluster state and configuration.


title: SYNOPSIS
content:
<b>etcdctl</b> [<I>global-flags</I>] <I>command</I> [<I>subcommand</I>] [<I>command-flags</I>] [<I>arguments</I>]<br><br>Common commands:<br>&nbsp;&nbsp;&nbsp;&nbsp;<b>get</b> <I>key</I> [<I>options</I>]<br>&nbsp;&nbsp;&nbsp;&nbsp;<b>put</b> <I>key</I> <I>value</I> [<I>options</I>]<br>&nbsp;&nbsp;&nbsp;&nbsp;<b>del</b> <I>key</I> [<I>options</I>]<br>&nbsp;&nbsp;&nbsp;&nbsp;<b>member</b> <I>subcommand</I> [<I>options</I>]<br>&nbsp;&nbsp;&nbsp;&nbsp;<b>watch</b> <I>key</I> [<I>options</I>]<br>&nbsp;&nbsp;&nbsp;&nbsp;<b>lease</b> <I>subcommand</I> [<I>options</I>]


title: PARAMETERS
content:
<b><b>--endpoints</b>=<I>urls</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of etcd endpoints (e.g., '127.0.0.1:2379').<br><br><b><b>--user</b>=<I>username</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Username for etcd authentication.<br><br><b><b>--password</b>=<I>password</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Password for etcd authentication. Can also be set via ETCDCTL_PASSWORD environment variable.<br><br><b><b>--password-file</b>=<I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to file containing password for etcd authentication.<br><br><b><b>--cert</b>=<I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to client certificate file for TLS authentication.<br><br><b><b>--key</b>=<I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to client key file for TLS authentication.<br><br><b><b>--cacert</b>=<I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to CA certificate file for etcd server verification.<br><br><b><b>--dial-timeout</b>=<I>duration</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dial timeout for client connections (e.g., '5s').<br><br><b><b>--command-timeout</b>=<I>duration</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Timeout for the entire command (e.g., '10s').<br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable client-side debugging information.<br><br><b><b>--cluster</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deprecated for v3 API, use <b>--endpoints</b> instead for specifying cluster members.<br><br>


title: DESCRIPTION
content:
<b>etcdctl</b> is the command-line client for <I>etcd</I>, a strongly consistent, distributed key-value store that provides a reliable way to store data that needs to be accessed by a distributed system or a cluster of machines. It is notably used by applications like Kubernetes to store cluster state and configuration.<br><br>The <I>etcdctl</I> utility allows users to interact with an <I>etcd</I> cluster from the command line, performing a wide range of operations. These operations include basic key-value manipulations (<b>get</b>, <b>put</b>, <b>delete</b>, <b>watch</b>), managing <I>etcd</I> cluster members (<b>member add</b>, <b>remove</b>, <b>list</b>), handling leases for ephemeral keys, managing user authentication and roles, and performing maintenance tasks like defragmentation and snapshotting.<br><br>It primarily supports the <I>etcd</I> API v3, which is the recommended and actively developed API version for modern deployments. <I>etcdctl</I> is an essential tool for administrators and developers working with <I>etcd</I>-powered distributed systems, providing a direct interface to manage and troubleshoot the cluster's state.


title: CAVEATS
content:
Working with <I>etcdctl</I> requires careful consideration, especially in production environments.<br><br>1. <b>Network Connectivity and Latency:</b> <I>etcdctl</I> depends on stable network connectivity to the <I>etcd</I> cluster. High latency or packet loss can lead to command timeouts or inconsistent state views.<br>2. <b>Security:</b> Always use TLS (SSL/certificates) for secure communication between <I>etcdctl</I> and the <I>etcd</I> cluster, and consider enabling authentication and authorization to prevent unauthorized access.<br>3. <b>API Version Compatibility:</b> Be aware that <I>etcdctl</I> primarily targets the v3 API. Using commands specific to v2 or targeting a v2 cluster without proper API version specification can lead to errors.<br>4. <b>Idempotency:</b> Not all <I>etcdctl</I> commands are idempotent. Running the same command multiple times might have different effects, especially for operations like 'member add'.<br>5. <b>Cluster State Awareness:</b> When performing critical operations like 'member remove' or database defragmentation, ensure you understand the current state of the <I>etcd</I> cluster and its impact on dependent services (e.g., Kubernetes).


title: API VERSIONS (V2 VS. V3)
content:
etcdctl primarily operates against the etcd v3 API, which is the recommended and actively developed version. While some legacy commands for the v2 API exist (e.g., <b>etcdctl --api-version=2</b>), new development and best practices strongly encourage using v3. The v3 API offers improved performance, stronger consistency guarantees, and a richer set of features, including leases, watch streaming, and multi-version concurrency control (MVCC).


title: ENVIRONMENT VARIABLES
content:
Many etcdctl global flags can also be set via environment variables, prefixing the flag name with <I>ETCDCTL_</I> and converting hyphens to underscores (e.g., <I>ETCDCTL_ENDPOINTS</I> for <b>--endpoints</b>, <I>ETCDCTL_USER</I> for <b>--user</b>). This is often useful for scripting or persistent configuration.


title: HISTORY
content:
<b>etcd</b> was originally developed by <I>CoreOS</I> (later acquired by Red Hat) as a crucial component for distributed systems, particularly for their container orchestration platform, Kubernetes. <I>etcdctl</I> emerged as the primary command-line interface to interact with this key-value store. Its development has closely tracked the evolution of the <I>etcd</I> project itself, including the transition from API v2 to API v3, which brought significant improvements in performance, scalability, and consistency. As <I>etcd</I> became an industry standard for distributed consensus and state management, especially with its adoption as the backbone for Kubernetes, <I>etcdctl</I> cemented its role as an indispensable tool for cluster operators and developers. Its continuous development focuses on robustness, security, and usability for managing highly available, distributed applications.


title: PARAMETERS
content:
<b>init</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initializes the <b>/etc</b> directory for <i>etckeeper</i>. This sets up the chosen VCS (e.g., Git repository) and performs the initial commit of all existing files in <b>/etc</b>.<br><br><b>commit</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manually commits all uncommitted changes in <b>/etc</b> to the VCS. An optional message can be provided for the commit.<br><br><b>status</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the current status of the <b>/etc</b> repository, similar to <i>git status</i>, indicating modified, added, or deleted files.<br><br><b>log</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the commit history of the <b>/etc</b> repository, showing past changes and their messages.<br><br><b>vcs</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows direct execution of VCS commands within the <b>/etc</b> repository. For example, '<i>etckeeper vcs git diff</i>' will run <i>git diff</i> in the <b>/etc</b> directory.<br><br><b>uninit</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes <i>etckeeper</i>'s setup from the <b>/etc</b> directory, reverting it to a state without VCS tracking.<br><br><b>pre-install</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A hook executed by package managers (e.g., APT, DNF) before installing or upgrading packages. It commits the current state of <b>/etc</b>.<br><br><b>post-install</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A hook executed by package managers after installing, upgrading, or removing packages. It commits the new state of <b>/etc</b>.<br><br>


title: DESCRIPTION
content:
<i>etckeeper</i> is a collection of tools that allows the <b>/etc</b> directory to be stored in a version control system (VCS) such as Git, Mercurial, Bazaar, or Darcs.<br><br>Its primary purpose is to help system administrators track changes to configuration files, making it easy to review modifications, revert to previous states, and audit system configurations. <i>etckeeper</i> achieves this by automatically committing changes to the chosen VCS, especially when triggered by package manager operations (like installing, upgrading, or removing packages). It also includes a daily cron job to commit any uncommitted changes.<br><br>Beyond simple file tracking, <i>etckeeper</i> handles crucial aspects of <b>/etc</b>, including preserving file permissions, managing symlinks, and ensuring that empty directories are also tracked by the VCS. This robust approach makes it an invaluable tool for maintaining the integrity and traceability of system configurations.


title: CAVEATS
content:
<b>VCS Dependency</b>: <i>etckeeper</i> requires a supported Version Control System (like Git) to be installed and available on the system.<br><b>Initial Setup</b>: It must be initialized with '<i>etckeeper init</i>' before it starts tracking changes.<br><b>Not a Full Backup</b>: While it tracks configuration files, it is not a substitute for a comprehensive system backup solution. It focuses solely on the <b>/etc</b> directory.<br><b>Permission Handling</b>: Although it attempts to preserve file permissions, some VCS systems might require specific configurations or manual intervention for complex permission setups.


title: INTEGRATION WITH PACKAGE MANAGERS
content:
<i>etckeeper</i> integrates seamlessly with common Linux package managers such as APT (Debian/Ubuntu), DNF/YUM (Fedora/RHEL), and Pacman (Arch Linux). It does this by installing hooks (scripts) that automatically trigger a commit of the <b>/etc</b> directory state both before and after package operations. This ensures that every configuration change related to software installation or removal is captured in the VCS history.


title: SUPPORTED VCS SYSTEMS
content:
<i>etckeeper</i> supports several popular Version Control Systems, including:<br><b>Git</b> (recommended and default)<br><b>Mercurial (Hg)</b><br><b>Bazaar (Bzr)</b><br><b>Darcs</b><br>The choice of VCS is typically made during the initial '<i>etckeeper init</i>' command, or configured in <b>/etc/etckeeper/etckeeper.conf</b>.


title: HISTORY
content:
<i>etckeeper</i> was initially developed by Joey Hess, with its first stable release appearing around 2007. The project aimed to address a common pain point for system administrators: tracking changes to the crucial <b>/etc</b> directory, especially in environments where frequent package installations and updates could lead to configuration drift. Its innovative approach of integrating with package manager hooks and leveraging existing VCS tools quickly made it a popular solution for robust configuration management.


title: SYNOPSIS
content:
<b>ethtool</b> [ <i>-h</i> | <i>--help</i> | <i>-v</i> | <i>--version</i> ]<br><b>ethtool</b> <i>&lt;device_name&gt;</i><br><b>ethtool</b> [ <i>-a</i> | <i>-c</i> | <i>-g</i> | <i>-i</i> | <i>-k</i> | <i>-p</i> | <i>-S</i> | <i>-t</i> | <i>-r</i> ] <i>&lt;device_name&gt;</i><br><b>ethtool</b> <i>-s</i> <i>&lt;device_name&gt;</i> [ <i>speed N</i> ] [ <i>duplex D</i> ] [ <i>autoneg A</i> ] [ ... ]<br><b>ethtool</b> <i>--show-priv-flags</i> <i>&lt;device_name&gt;</i><br><b>ethtool</b> <i>--set-priv-flags</i> <i>&lt;device_name&gt;</i> <i>&lt;flag&gt;</i> <i>on</i>|<i>off</i>


title: PARAMETERS
content:
<b><device_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the network interface (e.g., <b>eth0</b>, <b>enp0s3</b>) to query or modify.<br><br><b>-a, --show-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays auto-negotiation information and currently advertised/link modes.<br><br><b>-c, --show-coalesce</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the coalesce parameters, which control interrupt moderation.<br><br><b>-g, --show-ring</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the sizes of the receive (RX) and transmit (TX) ring buffers.<br><br><b>-i, --driver</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides information about the network device driver, firmware version, and bus info.<br><br><b>-k, --show-offload</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the current offload settings for features like checksum, TSO, GSO, and LRO.<br><br><b>-p, --identify</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates port identification by making the network adapter's LED blink for a specified duration (default 2 seconds).<br><br><b>-r, --reset</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resets the device, typically flushing internal state and potentially reinitializing the hardware.<br><br><b>-S, --statistics</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reports network device statistics (e.g., packet counts, error rates) as provided by the driver.<br><br><b>-s, --change</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Modifies specific parameters of the network device. Common sub-options include:<br><i>speed N</i>: Sets the network speed (e.g., <b>10</b>, <b>100</b>, <b>1000</b>).<br><i>duplex half|full</i>: Sets the duplex mode (<b>half</b> or <b>full</b>).<br><i>autoneg on|off</i>: Enables or disables auto-negotiation.<br><i>advertise N</i>: Specifies the speeds and modes to advertise during auto-negotiation.<br><br><b>-t, --test</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a set of self-tests on the network adapter, useful for diagnosing hardware issues.<br><br><b>--show-priv-flags</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays private flags, which are specific to the network device driver and hardware.<br><br><b>--set-priv-flags <flag> on|off</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a specific private flag to <b>on</b> or <b>off</b>, controlling driver-specific behaviors.<br><br>


title: DESCRIPTION
content:
<b>ethtool</b> is a powerful Linux command-line utility used for querying and controlling parameters of network interface cards (NICs) and their associated device drivers. It provides a standardized interface to inspect and modify various low-level settings that are often specific to the hardware and its kernel driver. With <b>ethtool</b>, administrators can view crucial information such as link speed, duplex mode, auto-negotiation status, and link state. Beyond mere inspection, it enables modification of these parameters, as well as configuration of advanced features like checksum offloading, TCP segmentation offloading (TSO), generic segmentation offloading (GSO), and ring buffer sizes. It can also be used to query driver and firmware versions, run self-tests on the hardware, or even make the NIC's LEDs blink for physical identification. By interacting with the kernel's network device subsystem primarily through <i>ioctl</i> system calls, <b>ethtool</b> is an indispensable tool for network troubleshooting, performance tuning, and optimizing network configurations in Linux environments.


title: CAVEATS
content:
Most operations that modify network device settings with <b>ethtool</b> require <i>root privileges</i>. Without appropriate permissions, many commands will fail or only show limited information.<br><br>Changes made using <b>ethtool -s</b> are typically <i>not persistent</i> across system reboots or network service restarts. For permanent configuration, settings should be integrated into network configuration files (e.g., <b>/etc/network/interfaces</b>, NetworkManager profiles, <b>systemd-networkd</b> configurations) or executed via startup scripts.


title: DRIVER AND HARDWARE DEPENDENCY
content:
The functionality and available options within <b>ethtool</b> are highly dependent on the specific network interface card (NIC) hardware and its corresponding Linux kernel driver. Not all drivers support all <b>ethtool</b> features, and certain options may not be available or may behave differently across various hardware platforms.


title: NETWORKING DAEMONS INTEGRATION
content:
When using network management daemons like <b>NetworkManager</b> or <b>systemd-networkd</b>, it's generally recommended to configure network settings through their respective mechanisms rather than direct <b>ethtool</b> commands to ensure consistency and persistence. <b>ethtool</b> is best suited for real-time diagnostics and temporary adjustments.


title: HISTORY
content:
<b>ethtool</b> emerged as a modern and standardized utility for controlling Ethernet devices, largely superseding older, more limited tools like <b>mii-tool</b>. Its development was driven by the increasing sophistication of network interface cards and the need for a unified interface to manage diverse hardware features, including advanced offloading capabilities and power management. While some parts of the kernel's network stack moved to Netlink, <b>ethtool</b> historically and predominantly communicates with network device drivers using the <i>ioctl</i> system call interface, allowing direct interaction with driver-specific functions. It has been a standard and essential component of Linux distributions for many years, evolving alongside kernel network subsystem changes to provide comprehensive network configuration and diagnostic capabilities.


title: SYNOPSIS
content:
<b>ettercap</b> [<i>OPTIONS</i>] [<i>TARGET1</i>] [<i>TARGET2</i>]<br><br>Common usage examples:<br><b>ettercap -G</b> <i>(Starts the GUI mode)</i><br><b>ettercap -T -M arp:remote // //</b> <i>(Starts text mode, ARP poisons all hosts on the LAN)</i><br><b>ettercap -T -M arp:remote /192.168.1.10/ /192.168.1.1/</b> <i>(ARP poisons a specific target and gateway)</i><br><b>ettercap -T -i eth0 -P dns_spoof</b> <i>(Starts text mode on eth0 and loads the dns_spoof plugin)</i>


title: PARAMETERS
content:
<b><b>-G</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts ettercap in graphical (GTK+) mode.<br><br><b><b>-T</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts ettercap in text-only mode (console mode).<br><br><b><b>-C</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts ettercap in curses-based GUI mode (legacy terminal GUI).<br><br><b><b>-Q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Quiet mode. Suppresses informational messages.<br><br><b><b>-i</b> <i><interface></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the network interface to use. If not specified, ettercap tries to find the default interface.<br><br><b><b>-f</b> <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sniffs packets from a PCAP file instead of a live interface.<br><br><b><b>-r</b> <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads a previously saved PCAP file to re-dissect data.<br><br><b><b>-w</b> <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes all captured packets to a PCAP file.<br><br><b><b>-p</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables promiscuous mode. Only packets destined for the host will be captured.<br><br><b><b>-M</b> <i><method>:<options></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the MITM attack method. Common methods include <b>arp:remote</b> (ARP poisoning), <b>dhcp:discover</b>, <b>icmp6:router</b>, etc.<br><br><b><b>-P</b> <i><plugin></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads a plugin. Multiple plugins can be loaded (e.g., <b>dns_spoof</b>, <b>fraggle</b>, <b>strip_ssl</b>).<br><br><b><b>-L</b> <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Logs all captured packets to the specified file, similar to Wireshark/tcpdump.<br><br><b><b>-D</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Daemonizes ettercap, running it in the background.<br><br><b><b>-u</b> <i><user></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Drops privileges to the specified user after initialization (usually after binding to ports).<br><br><b><b>-z</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Does not flush data to disk. Useful for debugging.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases verbosity level for debugging.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information and exits.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message and exits.<br><br>


title: DESCRIPTION
content:
ettercap is a powerful suite for Man-in-the-Middle (MITM) attacks on LANs. It features live connections sniffing, content filtering on the fly, and many other interesting active and passive network audit capabilities. It supports active and passive dissection of many protocols and includes features for network host analysis.<br><br>The tool offers two main user interfaces: a graphical user interface (GUI) and a text-based console interface, allowing flexibility in usage. It's widely used by network security professionals and penetration testers to simulate real-world attacks, identify vulnerabilities, and audit network configurations. Its capabilities include ARP poisoning, DNS spoofing, passive OS fingerprinting, sniffing passwords, and injecting custom data into network connections.


title: CAVEATS
content:
Using <b>ettercap</b> often requires root privileges for network interface manipulation and raw socket operations. Improper use can lead to network disruptions, performance degradation, or even complete network outages. It is a powerful tool capable of intercepting sensitive data, and its use should always be ethical, legal, and with explicit permission from network owners. Many Intrusion Detection/Prevention Systems (IDS/IPS) can detect common MITM attacks like ARP poisoning, potentially alerting administrators.


title: MITM METHODS
content:
ettercap supports various MITM methods. The most common is <b>ARP poisoning</b> (e.g., <b>-M arp:remote</b>), which manipulates the ARP tables of target hosts to redirect traffic through the attacker's machine. Other methods include <b>DNS spoofing</b> (often with the <b>dns_spoof</b> plugin), <b>DHCP spoofing</b>, and <b>ICMP redirection</b>, allowing attackers to control or intercept different types of network traffic.


title: PLUGINS
content:
One of ettercap's key strengths is its extensibility via plugins. These are small modules that extend ettercap's functionality, allowing for specialized tasks like filtering SSL connections (<b>strip_ssl</b>), injecting content (<b>inject</b>), performing Denial of Service (DoS) attacks (<b>fraggle</b>), or even actively fingerprinting operating systems and open ports. Plugins significantly enhance the tool's versatility for both offensive and defensive network security tasks.


title: HISTORY
content:
ettercap was originally developed by Alberto Ornaghi (ALoR) and Marco Valleri (NaGA), with initial releases around 2001. It quickly gained popularity as one of the first comprehensive and user-friendly tools for Man-in-the-Middle attacks and network sniffing. Written primarily in C, its modular design, particularly through its plugin system, allowed for extensibility and adaptation to various network attack scenarios. Over the years, it has been maintained and updated by the community, remaining a staple in network security auditing toolkits.


title: PARAMETERS
content:
<b><b>-a</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays all information available in the ELF file.</i><br><br><b><b>-h</b>, <b>--file-header</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the ELF file header information.</i><br><br><b><b>-l</b>, <b>--program-headers</b>, <b>--segments</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the program headers (segments) of the ELF file.</i><br><br><b><b>-S</b>, <b>--section-headers</b>, <b>--sections</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the section headers of the ELF file.</i><br><br><b><b>-s</b>, <b>--symbols</b>, <b>--syms</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the symbol table entries.</i><br><br><b><b>-D</b>, <b>--debug-dump</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Dumps all available debugging information sections. This is a primary feature of <b>eu-readelf</b>.</i><br><br><b><b>-w</b> <i><section></i>, <b>--debug-dump=</b><i><section></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Dumps specific debugging information sections, such as <b>.debug_info</b>, <b>.debug_abbrev</b>, <b>.debug_line</b>, <b>.debug_str</b>, etc.</i><br><br><b><b>-x</b> <i><section></i>, <b>--hex-dump=</b><i><section></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Performs a hexadecimal dump of the specified section's contents.</i><br><br><b><b>-p</b> <i><section></i>, <b>--string-dump=</b><i><section></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prints the contents of the specified section as strings.</i><br><br><b><b>-r</b>, <b>--relocs</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the relocation entries.</i><br><br><b><b>-d</b>, <b>--dynamic</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the dynamic section information.</i><br><br><b><b>-V</b>, <b>--version-info</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays version sections (.gnu.version, .gnu.version_r, .gnu.version_d).</i><br><br><b><b>-i</b>, <b>--interpreter</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the program interpreter path, if present.</i><br><br><b><b>-W</b>, <b>--wide</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Don't break output lines to fit display width.</i><br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Displays the version information for <b>eu-readelf</b>.</i><br><br>


title: DESCRIPTION
content:
<i><br><b>eu-readelf</b> is a command-line utility from the <b>elfutils</b> project used to display information about ELF (Executable and Linkable Format) files. It serves as an alternative to the traditional GNU <b>readelf</b>, offering enhanced capabilities, particularly in handling modern DWARF (Debugging With Attributed Record Formats) versions, including DWARF5, and complex debug scenarios like split debuginfo.<br><br>The tool parses various sections of an ELF file, presenting their contents in a human-readable format. This includes file headers, program headers, section headers, symbol tables, relocation entries, and, most notably, detailed debugging information. Its robust support for debuginfo makes it an invaluable tool for developers, reverse engineers, and system administrators needing to analyze executables, libraries, and core dumps with rich debugging data.</i>


title: CAVEATS
content:
<i><br><b>eu-readelf</b> is part of the <b>elfutils</b> project, which is often distributed separately from GNU <b>binutils</b>. Therefore, it might not be pre-installed on all Linux distributions by default. Its primary advantage lies in its more advanced and up-to-date support for DWARF debugging information (especially DWARF5) and its robust handling of <b>split debuginfo</b> files, which can differ in output format or completeness compared to GNU <b>readelf</b>.</i>


title: <I>SPLIT DEBUGINFO SUPPORT</I>
content:
<i><b>eu-readelf</b> is highly proficient in analyzing ELF files that utilize <b>split debuginfo</b>, where debugging information is stored in separate files (e.g., <b>.debug</b> files). This is crucial for reducing the size of deployed binaries without losing debuggability.</i>


title: <I>DWARF5 COMPATIBILITY</I>
content:
<i>One of its key strengths is comprehensive support for <b>DWARF5</b>, the latest version of the DWARF debugging information format. This ensures accurate and complete parsing of debug data from modern compilers and toolchains.</i>


title: HISTORY
content:
<i><br><b>eu-readelf</b> emerged as part of the <b>elfutils</b> project, initiated primarily by Red Hat engineers. The project's goal was to provide a set of robust, efficient, and well-maintained tools for handling ELF files, with a particular focus on debugging information. Its development has been driven by the need for better support for modern DWARF standards and the growing complexity of debug scenarios, including separate debug files and compressed debug sections, offering a more capable alternative to existing ELF utilities.</i>


title: SYNOPSIS
content:
<i>euse</i> [<i>options</i>] [<b><i>USE_FLAG</i></b>...]<br><i>euse</i> -s | --show [<b><i>USE_FLAG</i></b>...]<br><i>euse</i> -a | --all<br><i>euse</i> -e | --enable [<i>package</i>:]<b><i>USE_FLAG</i></b>...<br><i>euse</i> -d | --disable [<i>package</i>:]<b><i>USE_FLAG</i></b>...<br><i>euse</i> -u | --unset [<i>package</i>:]<b><i>USE_FLAG</i></b>...<br><i>euse</i> -E | --global-enable <b><i>USE_FLAG</i></b>...<br><i>euse</i> -D | --global-disable <b><i>USE_FLAG</i></b>...<br><i>euse</i> -i | --info <b><i>USE_FLAG</i></b>...


title: PARAMETERS
content:
<b>-a, --all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays all known <b><i>USE</i></b> flags and their current state (enabled/disabled).<br><br><b>-s, --show</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the state of specified <b><i>USE</i></b> flags. If no flags are given, it shows all active flags.<br><br><b>-e, --enable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables one or more <b><i>USE</i></b> flags for a specific package or globally. Use <i>package:USE_FLAG</i> for package-specific, or just <b><i>USE_FLAG</i></b> for global (when not in -E mode).<br><br><b>-d, --disable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables one or more <b><i>USE</i></b> flags for a specific package or globally. Similar to <i>-e</i> regarding scope.<br><br><b>-u, --unset</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unsets (removes from configuration) one or more <b><i>USE</i></b> flags for a specific package or globally.<br><br><b>-E, --global-enable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables one or more <b><i>USE</i></b> flags globally by adding them to <i>/etc/portage/make.conf</i>. Requires root.<br><br><b>-D, --global-disable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables one or more <b><i>USE</i></b> flags globally by adding them to <i>/etc/portage/make.conf</i> with a leading '<i>-</i>'. Requires root.<br><br><b>-p, --package</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <i>-e</i>, <i>-d</i>, or <i>-u</i>, forces the operation to apply only to the specified <i>package</i> (e.g., <i>euse -p dev-libs/glib -e introspection</i>).<br><br><b>-g, --global</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <i>-e</i>, <i>-d</i>, or <i>-u</i>, forces the operation to apply globally (e.g., <i>euse -g -e systemd</i>).<br><br><b>-c, --clean</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Cleans up invalid or obsolete <b><i>USE</i></b> flags from configuration files.<br><br><b>-i, --info</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed information about specified <b><i>USE</i></b> flags, including their descriptions and typical usage.<br><br><b>-N, --no-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables colored output.<br><br><b>-f, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces an action that might otherwise be prevented (e.g., ignoring warnings).<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br>


