# CommandSection

title: TLDR
content:
<b>Run all default GitHub security checks</b>`prowler github`<br><b>Authenticate using a GitHub Personal Access Token</b>`prowler github --personal-access-token [pat]`<br><b>Authenticate using a GitHub OAuth App Token</b>`prowler github --oauth-app-token [oauth_token]`<br><b>Authenticate using a GitHub App ID and private key</b>`prowler github --github-app-id [app_id] --github-app-key [app_key]`


title: PARAMETERS
content:
<b>-d, --decompress</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces decompression. This is the default operation for <b>bunzip2</b>, so it's often implied.<br><br><b>-f, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces overwrite of existing output files. Without this, <b>bunzip2</b> will prompt before overwriting.<br><br><b>-k, --keep</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keeps (does not delete) the original input files during decompression.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all non-error messages, including progress indicators.<br><br><b>-s, --small</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reduces memory usage for decompression at the cost of speed. Useful on systems with limited RAM.<br><br><b>-t, --test</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Tests the integrity of the compressed file without decompressing it.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be more verbose, displaying a list of files processed and other information.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version number and exits.<br><br>


title: DESCRIPTION
content:
<b>bunzip2</b> is a command-line utility in Linux systems specifically designed to decompress files that have been compressed using the <i>bzip2</i> algorithm. It functions as a decompressor for files typically ending with the <i>.bz2</i> extension.<br><br>Essentially, <b>bunzip2</b> is a symbolic link or hard link to the <b>bzip2</b> command itself, internally invoking <I>bzip2 -d</I> to perform the decompression. This command is part of the <b>bzip2</b> compression suite, which is known for its high compression ratios, often outperforming <b>gzip</b> for certain types of data, though it typically uses more memory and is slower during both compression and decompression.<br><br>By default, <b>bunzip2</b> will replace the compressed input file with its decompressed version, similar to <b>gunzip</b> for <b>gzip</b> files. Users can override this behavior using specific options to keep the original file or to force overwriting of existing uncompressed files. It supports processing multiple files, reading from standard input, and writing to standard output, making it versatile for scripting and pipeline operations.


title: CAVEATS
content:
<ul><li><b>Memory Usage</b>: <b>bunzip2</b> can use a significant amount of memory for decompression, especially for large files. The <I>--small</I> option can mitigate this but at the cost of slower performance.</li><li><b>File Extension</b>: It only recognizes and decompresses files with the <I>.bz2</I> (or <I>.bzip2</I>, <I>.bz</I>, etc.) extension by default. Files without the correct extension may need to be explicitly specified or renamed.</li><li><b>Single File Decompression</b>: Unlike archiving tools, <b>bunzip2</b> decompresses a single stream/file at a time. For archives containing multiple files (like <I>.tar.bz2</I>), <b>tar</b> is used in conjunction with <b>bunzip2</b> (e.g., <I>tar xjf file.tar.bz2</I>).</li></ul>


title: STANDARD I/O USAGE
content:
If no <I>files</I> are specified, <b>bunzip2</b> will read compressed data from standard input (<I>stdin</I>) and write the decompressed data to standard output (<I>stdout</I>). This makes it ideal for use in shell pipelines, e.g., <I>cat file.bz2 | bunzip2 > decompressed_file</I>.


title: ERROR HANDLING
content:
<b>bunzip2</b> provides error messages if a file is not in <b>bzip2</b> format, is corrupted, or if an output file cannot be written due to permissions or existing files (unless <I>--force</I> is used).


title: HISTORY
content:
The <b>bzip2</b> compression algorithm, on which <b>bunzip2</b> is based, was developed by Julian Seward. The first public release was in 1996, and version 1.0 was released in 2000. It quickly gained popularity for its superior compression ratios compared to <b>gzip</b> for many data types, especially text and executable files, at the cost of increased computational resources. <b>bunzip2</b> was introduced as a convenience alias to simplify the decompression process, mirroring the <b>gzip</b>/<b>gunzip</b> distinction.


title: SYNOPSIS
content:
<i><br>Not applicable. The command '<b>mtm</b>' is not a standard or universally recognized Linux utility, and therefore does not have a predefined, common syntax.</i>


title: DESCRIPTION
content:
The command <b>mtm</b> is not a standard or widely recognized utility found in mainstream Linux distributions. Unlike commands like <i>ls</i>, <i>grep</i>, or <i>cd</i>, <b>mtm</b> does not appear in common system installations or official documentation (man pages) for a general purpose.<br><br>It is possible that 'mtm' refers to a highly specialized, niche, or custom-developed tool; a specific alias or function defined in a user's shell configuration; or it could be a typo for another command. Without additional context regarding its origin or the specific software package it belongs to, a detailed analysis of its functionalities, typical usage, or available options cannot be provided.<br><br>Users encountering 'mtm' should investigate its source within their specific environment, for instance, by checking shell history, aliases, or package managers for custom installations.


title: CAVEATS
content:
The primary caveat is the non-standard nature of <b>mtm</b>. Its presence and functionality are entirely dependent on a specific environment or custom installation.<br><br>Users should not expect <b>mtm</b> to be available on all Linux systems, nor should they assume consistent behavior if it is found. Its use requires prior knowledge of its specific implementation.


title: HISTORY
content:
<i><br>There is no documented widespread history or development for a standard '<b>mtm</b>' command within the official Linux ecosystem. If such a command exists, its history is likely tied to a very specific project, organization, or personal development rather than a general-purpose utility.</i>


title: TLDR
content:
<b>Start the program with default command chord (<Ctrl g>)</b>`mtm`<br><b>Use <Ctrl q> as the command chord</b>`mtm -c [q]`<br><b>Split and stack horizontally</b>`<Ctrl g><h>`<br><b>Split and stack vertically</b>`<Ctrl g><v>`<br><b>View scrollback buffer</b>`<Ctrl g><PageUp>`<br><b>Switch terminals</b>`<Ctrl g><ArrowKeys>`<br><b>Close current terminal</b>`<Ctrl g><w>`


title: SYNOPSIS
content:
<b>prowler</b> <I>cloud_provider</I> [ <I>options</I> ]<br><br><b>cloud_provider:</b> <I>aws</I> | <I>azure</I> | <I>gcp</I> | <I>k8s</I>


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b>-p <profile>, --profile <profile></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the AWS profile to use for authentication (e.g., from ~/.aws/credentials).<br><br><b>-r <region>, --region <region></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scans only resources within a specific cloud region (e.g., us-east-1 for AWS, eastus for Azure).<br><br><b>-c <check_id>, --checks <check_id></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs only the specified comma-separated check IDs (e.g., 'iam_policy_no_sso,s3_bucket_public_access').<br><br><b>-g <group_id>, --groups <group_id></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs all checks belonging to the specified comma-separated group IDs (e.g., 'iam,s3').<br><br><b>-s <service_id>, --services <service_id></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs all checks for the specified comma-separated service IDs (e.g., 'ec2,s3').<br><br><b>--compliance <framework></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs checks associated with a specific compliance framework (e.g., 'cis_v1.2_aws', 'hipaa', 'gdpr').<br><br><b>-o <format>, --output-formats <format></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the desired output format(s). Multiple formats can be comma-separated (e.g., 'csv,html,json'). Supported formats include 'csv', 'json', 'json-asff', 'sarif', 'html', 'pdf', 'json-ocsf'.<br><br><b>-M <mode>, --output-modes <mode></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output mode for the terminal. Options include 'plain' (default), 'quiet' (minimal output), 'json', 'html'.<br><br><b>--list-checks</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available checks with their IDs and descriptions.<br><br><b>--list-groups</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available check groups with their IDs and descriptions.<br><br><b>--list-services</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available cloud services that Prowler can audit.<br><br><b>-F, --fix</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to automatically remediate identified misconfigurations. Use with extreme caution and proper backups.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with '--fix', shows what remediations would be applied without actually making changes.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases verbosity of output messages.<br><br><b>--no-colors</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables colored output in the terminal.<br><br>


title: DESCRIPTION
content:
Prowler is an open-source command-line tool designed for comprehensive cloud security best practices assessment, auditing, hardening, and incident response. It helps organizations evaluate their cloud environments (AWS, Azure, Google Cloud Platform, and Kubernetes clusters) against a wide array of security standards and frameworks, including CIS Benchmarks, NIST, HIPAA, PCI-DSS, ISO 27001, and GDPR. Prowler automatically identifies misconfigurations, vulnerabilities, and deviations from security best practices by performing a multitude of checks against your cloud resources. Its reports provide actionable insights, enabling security teams to enhance their cloud posture and ensure compliance. Prowler is a vital tool for continuous security monitoring and proactive risk management in multi-cloud environments.


title: CAVEATS
content:
Prowler is not a standard Linux distribution utility; it's a standalone Python-based security auditing tool primarily for cloud environments. It typically needs to be cloned from its GitHub repository and run from that directory. It requires appropriate IAM permissions in your cloud provider accounts (usually read-only for auditing, and write permissions for remediation actions with the '--fix' flag). Running Prowler can generate a significant amount of network traffic and API calls to your cloud provider, which could incur costs or hit API rate limits if not managed properly. Always test remediation actions in a non-production environment first.


title: INSTALLATION AND EXECUTION
content:
Prowler is typically installed by cloning its official GitHub repository: <br><i>git clone https://github.com/prowler-cloud/prowler.git</i><br>Once cloned, navigate into the directory and run it using Python: <br><i>cd prowler</i><br><i>./prowler aws</i><br>It requires Python 3.7+ and 'pip' for dependency management. Ensure your cloud provider CLI (e.g., AWS CLI, Azure CLI, gcloud CLI) is configured and authenticated.


title: OUTPUT REPORTS
content:
Prowler generates detailed reports in various formats, by default saving them into an 'output/' directory within the Prowler installation path. These reports include findings, affected resources, and recommendations for remediation, making them valuable for compliance reporting and security posture improvement. The HTML reports provide an easily digestible, interactive view of the audit results.


title: COMPLIANCE FRAMEWORKS
content:
Prowler supports auditing against numerous industry-recognized compliance frameworks and regulations, including:<br><b>CIS Benchmarks:</b> For AWS, Azure, GCP, Kubernetes.<br><b>NIST CSF:</b> National Institute of Standards and Technology Cybersecurity Framework.<br><b>HIPAA:</b> Health Insurance Portability and Accountability Act.<br><b>PCI-DSS:</b> Payment Card Industry Data Security Standard.<br><b>ISO 27001:</b> Information Security Management System standard.<br><b>GDPR:</b> General Data Protection Regulation.<br>Using the <i>--compliance</i> flag allows users to focus audits on specific regulatory requirements.


title: HISTORY
content:
Prowler originated as a tool focused on auditing Amazon Web Services (AWS) environments against CIS Benchmarks and other security best practices. It quickly gained popularity within the security community due to its ease of use and comprehensive checks. Over time, its scope expanded significantly to include support for other major cloud providers like Microsoft Azure and Google Cloud Platform (GCP), and more recently, Kubernetes. This evolution reflects the growing demand for multi-cloud security posture management and compliance validation, making Prowler a cornerstone tool for cloud security professionals.


title: TLDR
content:
<b>Run an AWS, Azure, GCP, Kubernetes - as provider - audit with default checks</b>`prowler [provider]`<br><b>Show all available checks for a specific provider</b>`prowler [provider] [[-l|--list-checks]]`<br><b>Show all available services for a specific provider</b>`prowler [provider] --list-services`<br><b>Generate output in multiple formats, including JSON-ASFF for AWS Security Hub</b>`prowler [provider] --output-modes [csv,json-asff,html,...]`<br><b>Execute in verbose mode</b>`prowler [provider] --verbose`<br><b>Filter findings by status</b>`prowler [provider] --status [PASS,FAIL,MANUAL]`<br><b>Display help</b>`prowler --help`<br><b>Display version</b>`prowler [[-v|--version]]`


title: TLDR
content:
<b>Start the editor</b>`pico [path/to/file]`<br><b>Start the editor with the cursor located n lines into the file</b>`pico +[n] [path/to/file]`<br><b>Start the editor with the cursor shown before the current selection</b>`pico -g [path/to/file]`<br><b>Define the quote string for files such as email</b>`pico -Q "[quotestring]" [path/to/file]`<br><b>Enable mouse functionality when run within an xterm window</b>`pico -m [path/to/file]`<br><b>Set the operating directory for pico</b>`pico -o [path/to/directory]`<br><b>Enable "view only" mode, which disallows any edits</b>`pico -v [path/to/file]`<br><b>Display all files including those beginning with a period</b>`pico -a`


title: PARAMETERS
content:
<b>PATH</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the source distribution (sdist), wheel distribution (wheel), or a directory containing a <i>pyproject.toml</i> or <i>setup.py</i> file. Defaults to the current directory.<br><br><b>-r, --repository <REPOSITORY></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The repository URL or name (e.g., 'pypi', 'testpypi') to publish to. Can be set via the <i>UV_REPOSITORY</i> environment variable.<br><br><b>-u, --username <USERNAME></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The username for authentication. Can be set via the <i>UV_USERNAME</i> environment variable.<br><br><b>-p, --password <PASSWORD></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The password for authentication. Can be set via the <i>UV_PASSWORD</i> environment variable.<br><br><b>-t, --token <TOKEN></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The API token for authentication. Can be set via the <i>UV_TOKEN</i> environment variable.<br><br><b>--non-interactive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not prompt for any user input during the process.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs all steps (build, validate) except the final upload to the registry, allowing for testing.<br><br><b>--no-build</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <i>uv publish</i> from building the distribution files. Assumes that source distributions and wheels are already present.<br><br><b>--sign</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sign the distribution files with GPG before uploading.<br><br><b>--identity <IDENTITY></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the GPG identity to use for signing.<br><br><b>--config-file <CONFIG_FILE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to an alternative <i>.pypirc</i> configuration file for repository credentials.<br><br><b>--skip-existing</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips uploading a package if a version with the same name and version already exists on the target repository.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output for more detailed logging during the publishing process.<br><br><b>--quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress all non-error output, showing only critical messages.<br><br>


title: DESCRIPTION
content:
<i>uv publish</i> is a command within the <i>uv</i> ecosystem designed for building and uploading Python packages to package indexes like PyPI. It streamlines the process of releasing Python projects by integrating package building (creating source distributions and wheels) and uploading functionalities into a single, fast, and reliable command. <i>uv publish</i> aims to be a modern, high-performance alternative to tools like <i>twine</i>, leveraging <i>uv</i>'s highly optimized core. It supports various authentication methods, including username/password and API tokens, and allows specifying target repositories. The command handles validation of distributions before upload and offers features like dry runs and GPG signing, making it a comprehensive solution for Python package publication.


title: CAVEATS
content:
<i>uv publish</i> is part of the <i>uv</i> tool, which is under active development. While stable, new features or behavioral changes might occur.<br>For security, it's recommended to use environment variables (<i>UV_USERNAME</i>, <i>UV_PASSWORD</i>, <i>UV_TOKEN</i>) or a <i>.pypirc</i> file instead of passing credentials directly on the command line.<br>Ensure GPG is properly configured on your system if using the <i>--sign</i> option.


title: AUTHENTICATION METHODS
content:
<i>uv publish</i> supports multiple ways to authenticate with package indexes. Users can provide a username and password directly, use an API token (recommended for PyPI), or leverage credentials defined in a <i>.pypirc</i> file. Environment variables (<i>UV_USERNAME</i>, <i>UV_PASSWORD</i>, <i>UV_TOKEN</i>, <i>UV_REPOSITORY</i>) are also supported for securely passing sensitive information, preventing credentials from appearing in shell history.


title: BUILD PROCESS
content:
By default, <i>uv publish</i> will attempt to build both a source distribution (<i>.tar.gz</i>) and a wheel distribution (<i>.whl</i>) from the specified <i>PATH</i> (or current directory) if they don't already exist. This ensures that the necessary distribution artifacts are available for upload. The <i>--no-build</i> option can be used to skip this automatic build step if distributions are pre-built, allowing <i>uv publish</i> to simply upload existing files.


title: HISTORY
content:
The <i>uv</i> project, developed by Astral, emerged as a high-performance alternative to existing Python packaging tools like <i>pip</i>, <i>pip-tools</i>, and <i>virtualenv</i>. Initially focused on dependency resolution, installation, and virtual environment management, <i>uv</i> expanded its capabilities to cover more aspects of the Python development workflow. <i>uv publish</i> was introduced as a natural extension, aiming to provide a fast and unified solution for building and publishing Python packages, thereby reducing the reliance on separate tools like <i>twine</i> and <i>build</i>. Its development is driven by a focus on speed, reliability, and a streamlined user experience, leveraging Rust for performance.


title: TLDR
content:
<b>Publish packages from dist/ directory (default behavior)</b>`uv publish`<br><b>Publish to a specific repository URL</b>`uv publish --publish-url [https://upload.pypi.org/legacy/]`<br><b>Publish using a specific username and password</b>`uv publish [[-u|--username]] [username] [[-p|--password]] [password]`<br><b>Publish using an API token</b>`uv publish [[-t|--token]] [your_api_token]`<br><b>Publish specific distribution files</b>`uv publish [path/to/dist/*.whl] [path/to/dist/*.tar.gz]`<br><b>Publish to TestPyPI for testing</b>`uv publish --publish-url https://test.pypi.org/legacy/`


title: SYNOPSIS
content:
qemu-system-riscv64 [<i>options</i>] [<i>disk_image</i>]<br><br><b>Examples:</b><br><i>qemu-system-riscv64 -M virt -cpu rv64gc -smp 4 -m 2G -kernel path/to/Image -initrd path/to/rootfs.cpio.gz -append "root=/dev/ram console=ttyS0" -nographic</i><br><i>qemu-system-riscv64 -M virt -bios path/to/opensbi.bin -kernel path/to/boot/u-boot.bin -hda path/to/disk.qcow2 -nographic</i>


title: PARAMETERS
content:
<b>-M <i><machine></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the emulated machine type (e.g., <i>virt</i> for a generic virtual machine, <i>sifive_u</i> for SiFive Unmatched).<br><br><b>-cpu <i><name></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the emulated CPU type (e.g., <i>rv64gc</i> for a common 64-bit core with general purpose and compressed extensions, <i>rv64imafdc_zicsr_zifencei</i> for a more specific configuration).<br><br><b>-kernel <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads a Linux kernel image or U-Boot binary into the virtual machine's memory.<br><br><b>-initrd <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an initial RAM disk (initrd) image to be loaded by the kernel.<br><br><b>-append <i><cmdline></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes command-line arguments to the guest kernel.<br><br><b>-smp <i><N></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of virtual CPUs to emulate.<br><br><b>-m <i><size></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allocates the specified amount of RAM to the virtual machine (e.g., <i>1G</i>, <i>512M</i>).<br><br><b>-hda <i><file></i>, -hdb <i><file></i>, etc.</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attaches a virtual hard disk image (e.g., raw, qcow2). More general disk attachment is done via <i>-drive</i>.<br><br><b>-drive <i><option=value,...></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Configures a disk drive, allowing more detailed settings for interface, bus, and file format.<br><br><b>-nic <i><type>[,options]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Configures a virtual network interface card. Common types include <i>user</i> (user-mode networking, NAT) and <i>bridge</i> (requires host bridge setup).<br><br><b>-nographic</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables graphical output, redirecting serial console output to the host's standard output/error.<br><br><b>-curses</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the ncurses library to provide a text-based console, allowing interactive use without a graphical display.<br><br><b>-bios <i><file></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a custom BIOS or firmware image to use (e.g., OpenSBI, UEFI firmware for RISC-V).<br><br><b>-serial <i><type>[,options]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirects serial port output. Can be used to connect to a pipe, file, or TCP socket for debugging.<br><br><b>-gdb <i><port></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts a GDB remote debugging server on the specified TCP port, allowing remote debugging of the guest.<br><br><b>-device <i><driver>[,property=value,...]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a specific virtual device to the machine, allowing fine-grained control over hardware components.<br><br>


title: DESCRIPTION
content:
<i><b>qemu-system-riscv64</b></i> is a specific QEMU executable designed to emulate a full RISC-V 64-bit system. QEMU (Quick Emulator) is a generic and open-source machine emulator and virtualizer. When invoked as <i>qemu-system-riscv64</i>, it creates a virtual RISC-V 64-bit machine, including a CPU, memory, and various peripheral devices like network cards, storage controllers, and graphics adapters.<br><br>This command is invaluable for developers working on RISC-V operating systems, firmware, or applications, allowing them to test and debug their code without needing physical RISC-V hardware. It supports booting various operating systems (e.g., Linux, FreeBSD, OpenBSD) or running bare-metal applications. While QEMU can use hardware virtualization (like KVM) for x86 guests on x86 hosts, for RISC-V emulation on non-RISC-V hosts, it performs full software emulation, which is slower but provides full control and portability.


title: CAVEATS
content:
Due to pure software emulation for RISC-V on non-RISC-V hosts, performance can be significantly slower than native execution or hardware-assisted virtualization. Configuring the correct machine type (<i>-M</i>) and CPU (<i>-cpu</i>) is crucial for compatibility with the guest operating system or firmware. Many RISC-V setups require specific firmware (like OpenSBI or U-Boot) to properly boot operating systems, which must be provided via <i>-bios</i> or <i>-kernel</i> depending on the boot chain. Debugging complex boot issues or driver problems within the emulated environment can be challenging.


title: BOOT PROCESS CONSIDERATIONS
content:
When booting an operating system like Linux, you often need to chain-load components. For RISC-V, this typically involves using a small firmware like OpenSBI (Supervisor Binary Interface) provided via <i>-bios</i>, which then loads U-Boot (Universal Bootloader) or a Linux kernel directly. U-Boot itself might then load the Linux kernel and an initrd. The <i>-kernel</i> and <i>-initrd</i> options are convenience wrappers for directly loading a kernel/initrd, bypassing the need for a full bootloader if your kernel is compatible.


title: NETWORKING MODES
content:
The <i>-nic</i> option provides flexible networking. <i><b>user</b></i> mode creates a NAT (Network Address Translation) setup, isolating the guest network from the host's, which is simple but limits direct inbound connections. <i><b>bridge</b></i> mode connects the guest's virtual network card directly to a host bridge, allowing the guest to appear as a peer on the host's network, requiring more advanced host network configuration.


title: DISK IMAGE MANAGEMENT
content:
While <i>qemu-system-riscv64</i> uses disk images, creating and managing these images is typically done with the <i><b>qemu-img</b></i> utility. This separate command can create new images (e.g., <i>qcow2</i> format), convert between formats, resize existing images, and check their integrity. It's an indispensable companion tool for preparing virtual disk environments.


title: HISTORY
content:
QEMU was initially developed by Fabrice Bellard and released in 2003. Support for the RISC-V architecture was integrated into QEMU as the ISA matured and gained prominence, particularly starting around the mid-2010s. This integration involved adding specific machine models, CPU instruction set emulation, and peripheral devices tailored to the RISC-V specification. The continuous development of <i>qemu-system-riscv64</i> reflects the rapid evolution of the RISC-V ecosystem, with ongoing updates to support new ISA extensions and hardware implementations, making it an essential tool for RISC-V software development and research.


title: TLDR
content:
<b>Boot a kernel emulating riscv64 architecture</b>`qemu-system-riscv64 [[-M|-machine]] virt -bios none -kernel [kernel.elf] -nographic`<br><b>List supported machine types</b>`qemu-system-riscv64 [[-M|-machine]] help`<br><b>Exit non-graphical QEMU</b>`<Ctrl a><x>`


title: SYNOPSIS
content:
<b>prowler-gcp</b> <I>[options]</I><br><i>Note: This command is typically an alias or wrapper script for <b>prowler --cloud gcp</b>. The options listed below apply to the underlying Prowler tool when used for GCP.</i>


title: PARAMETERS
content:
<b><I>--cloud gcp</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Required.</i> Specifies Google Cloud Platform as the target cloud provider. Implicit if `prowler-gcp` is used.<br><br><b><I>--projects &lt;project_ids&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of specific GCP project IDs to scan.<br><br><b><I>--excluded-projects &lt;project_ids&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of GCP project IDs to exclude from the scan.<br><br><b><I>--checks &lt;check_ids&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of specific check IDs to execute (e.g., `gcp_iam_enforce_mfa`).<br><br><b><I>--excluded-checks &lt;check_ids&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of check IDs to exclude from the scan.<br><br><b><I>--groups &lt;group_names&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of specific check groups to run (e.g., `cis_v1.2.0_gcp_level1`).<br><br><b><I>--compliance &lt;frameworks&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of compliance frameworks to run (e.g., `cis_v1.2.0_gcp`).<br><br><b><I>--output-modes &lt;modes&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of desired output formats (e.g., `json`, `csv`, `html`).<br><br><b><I>--output-file &lt;filename&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the base name for the generated output files.<br><br><b><I>--list-checks</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays all available checks for GCP and exits.<br><br><b><I>--verbose</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output during the scan, showing more details about the execution.<br><br>


title: DESCRIPTION
content:
<b>prowler-gcp</b> is a command-line utility used for performing comprehensive security assessments, auditing, incident response, and hardening of Google Cloud Platform (GCP) environments. It leverages the open-source Prowler tool, specifically configured for GCP, to evaluate cloud resources against a wide array of security best practices and compliance standards, including CIS Benchmarks, ISO 27001, and PCI DSS. The command works by querying GCP APIs to identify misconfigurations, security vulnerabilities, overly permissive IAM policies, and other deviations from established security baselines. It provides actionable findings, helping organizations enhance their security posture, ensure regulatory compliance, and streamline the auditing process across their GCP projects and organizations. While "prowler-gcp" is often an alias or wrapper script, the core functionality is provided by the Prowler tool itself.


title: CAVEATS
content:
<ul><li><b>Permissions</b>: Prowler requires appropriate GCP IAM permissions (typically `viewer` role, but some checks may require more) to query resources. Insufficient permissions will lead to incomplete or erroneous reports.<br></li><li><b>Installation</b>: `prowler-gcp` is not a standard Linux command. It implies that Prowler has been installed (e.g., via `pip` or source) and potentially an alias or wrapper script named `prowler-gcp` has been created.<br></li><li><b>API Limits & Costs</b>: Extensive scans on large GCP environments might hit API rate limits or incur minor charges due to the volume of API calls.<br></li><li><b>False Positives/Negatives</b>: As an automated tool, it may occasionally produce false positives or miss some issues; manual validation and contextual understanding are often recommended.</li></ul>


title: AUTHENTICATION
content:
<b>Prowler</b> for GCP leverages Google Cloud's Application Default Credentials (ADC) for authentication. This means it can automatically pick up credentials from the environment, such as those configured via `gcloud auth application-default login`, service account keys, or metadata from a Compute Engine instance.


title: EXTENSIBILITY
content:
The Prowler framework is highly extensible. Users can create custom checks by defining them in Python and YAML, allowing organizations to tailor the auditing process to their specific security policies, unique configurations, or internal compliance requirements.


title: HISTORY
content:
Prowler was initially developed by Toni de la Fuente for auditing Amazon Web Services (AWS) environments. Due to its effectiveness and open-source nature, it quickly gained popularity within the cloud security community. Over time, its capabilities were expanded to support other major cloud providers, including Google Cloud Platform (GCP) and Azure. The GCP support was integrated into the main Prowler project, allowing users to leverage a unified tool for multi-cloud security assessments. Continuous development efforts ensure Prowler remains updated with new cloud services, evolving security best practices, and relevant compliance standards.


title: TLDR
content:
<b>Run the default set of checks on all accessible GCP projects using default user credentials</b>`prowler gcp`<br><b>Authenticate using a service account credentials file</b>`prowler gcp --credentials-file [path/to/credentials.json]`<br><b>Scan specific GCP projects by ID</b>`prowler gcp --project-ids [project_id1 project_id2 ...]`<br><b>Run checks for selected GCP services</b>`prowler gcp [[-s|--services]] [iam|compute|...]`<br><b>Run a specific GCP check</b>`prowler gcp [[-c|--checks]] [gcp_storage_bucket_logging_enabled]`<br><b>Exclude specific checks or services</b>`prowler gcp [[-e|--excluded-checks]] [gcp_storage_bucket_logging_enabled] --exclude-services [iam|compute|...]`


title: SYNOPSIS
content:
<b>prowler-kubernetes</b> [--cloud-provider {aws|azure|gcp}] [--kubeconfig &lt;path&gt;] [--checks &lt;check_id_list&gt;] [--output-modes &lt;modes&gt;] [--output-file &lt;file&gt;]


title: PARAMETERS
content:
<b><b>--cloud-provider</b> {aws|azure|gcp}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the cloud provider for managed Kubernetes services (e.g., EKS, AKS, GKE) to be assessed. This directs Prowler to use the respective cloud APIs for relevant checks.<br><br><b><b>--kubeconfig</b> &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides the path to a kubeconfig file, allowing Prowler to directly access and assess a Kubernetes cluster's API server. Essential for non-cloud-managed clusters or direct access.<br><br><b><b>--checks</b> &lt;check_id_list&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes a comma-separated list of specific Kubernetes-related check IDs. This option is useful for running targeted assessments instead of all available checks.<br><br><b><b>--output-modes</b> &lt;modes&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the output format(s) for the report (e.g., <i>json</i>, <i>html</i>, <i>csv</i>, <i>cli</i>). Multiple modes can be specified separated by commas, providing flexibility in report generation.<br><br><b><b>--output-file</b> &lt;file&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the base name for output report files. Reports will be saved with this prefix and appropriate file extensions based on the chosen output modes.<br><br><b><b>--list-checks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a comprehensive list of all available Kubernetes-related security checks that Prowler can perform, including their IDs and descriptions.<br><br><b><b>--only-enabled-checks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs only the checks that are enabled by default for Kubernetes environments, streamlining the assessment and focusing on common security practices.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of the output, showing more details and progress messages during the security assessment, which can be helpful for debugging.<br><br><b><b>--parallel</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs checks in parallel to significantly speed up the assessment process, especially beneficial for large clusters or when running numerous checks.<br><br>


title: DESCRIPTION
content:
Prowler is an open-source cloud security tool designed to perform security assessments, audits, and hardening. When focused on Kubernetes (conceptually represented by <b>prowler-kubernetes</b>), it evaluates the security posture of Kubernetes clusters. This includes checking for compliance with security best practices, identifying misconfigurations in cluster components, network policies, RBAC, and container security. It can integrate with cloud-managed Kubernetes services like Amazon EKS, Azure AKS, and Google GKE, leveraging their APIs for assessment. Prowler generates detailed reports, highlighting findings and suggesting remediation steps, making it an invaluable tool for continuous security monitoring, incident response, and ensuring regulatory compliance within Kubernetes environments.


title: CAVEATS
content:
The <b>prowler-kubernetes</b> command is not a standalone executable provided by the Prowler project. Instead, it conceptually represents running the main <b>prowler</b> tool with configurations and checks specifically tailored for Kubernetes security assessments.<br>Users typically execute <b>prowler</b> and specify cloud providers (like AWS, Azure, GCP) or provide a <i>kubeconfig</i> for direct cluster access, alongside service filters or specific check IDs related to Kubernetes. Effective use requires appropriate IAM permissions for cloud APIs or Kubernetes RBAC permissions for direct cluster access.


title: HOW PROWLER ASSESSES KUBERNETES
content:
Prowler performs Kubernetes security assessments by either interacting with cloud-provider APIs for managed Kubernetes services (e.g., EKS, AKS, GKE) or by directly connecting to a Kubernetes cluster's API server using a provided <i>kubeconfig</i> file. It then executes a series of predefined checks against various Kubernetes resources and configurations, such as RBAC policies, network policies, Pod Security Standards, logging, and secrets management, to identify deviations from security best practices and compliance frameworks like CIS Kubernetes Benchmark. The findings help users harden their clusters and improve overall security posture.


title: HISTORY
content:
Prowler was initially developed by Toni de la Fuente, primarily for AWS security assessments. Over time, its capabilities expanded significantly to cover other major cloud providers (Azure, GCP) and a broader range of services. The inclusion of Kubernetes-related checks reflects the increasing adoption of container orchestration and the critical need for dedicated security auditing within these dynamic environments. While there isn't a specific <b>prowler-kubernetes</b> command history, the evolution of Prowler includes continuous development of Kubernetes-specific checks, integrating with cloud-managed Kubernetes services (EKS, AKS, GKE) and supporting direct Kubernetes API access to enhance its comprehensive security assessment coverage for cloud-native and containerized workloads.


title: TLDR
content:
<b>Run the default checks using the default kubeconfig location</b>`prowler kubernetes`<br><b>Specify a custom kubeconfig file for scanning</b>`prowler kubernetes --kubeconfig-file [path/to/kubeconfig]`<br><b>Specify a specific Kubernetes context to scan</b>`prowler kubernetes --context [my-context]`<br><b>Scan specific namespaces only</b>`prowler kubernetes --namespaces [default] [kube-system]`<br><b>Run checks for selected Kubernetes services</b>`prowler kubernetes [[-s|--services]] [ietcd|apiserver|...]`<br><b>Run a specific Kubernetes check</b>`prowler kubernetes [[-c|--checks]] [etcd_encryption]`<br><b>Exclude specific checks or services</b>`prowler kubernetes [[-e|--excluded-checks]] [etcd_encryption] --exclude-services [ietcd|apiserver|...]`


title: PARAMETERS
content:
<b>PACKAGE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name(s) of the Python package(s) to remove. Multiple packages can be specified.<br><br><b>-y, --yes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not ask for confirmation of uninstall. Proceed directly.<br><br><b>-p <PYTHON_EXECUTABLE>, --python <PYTHON_EXECUTABLE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a specific Python interpreter (e.g., <I>/usr/bin/python3.9</I>) to determine the environment for uninstallation.<br><br><b>--editable <PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat a path as an editable installation to uninstall it.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more details about the uninstallation process.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Perform a trial run with no changes made, showing what would be uninstalled.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print help information and exit.<br><br>


title: DESCRIPTION
content:
The command <I>uv-remove</I> is not a standard, standalone Linux command. It almost certainly refers to the <I>uv pip uninstall</I> subcommand, which is part of the <I>uv</I> toolchain. <I>uv</I> is a modern, high-performance package installer and resolver designed as a faster and more robust alternative to Python's traditional <I>pip</I> and <I>venv</I> tools.<br><br>When invoked as <I>uv pip uninstall</I> (or its assumed alias <I>uv-remove</I>), it efficiently removes specified Python packages from the current Python environment or a designated environment. It handles package removal, ensuring that the environment remains consistent. Its primary advantage lies in its speed, leveraging Rust-based performance, and its enhanced resolver capabilities for dependency management, making it a powerful replacement for <I>pip uninstall</I>.


title: CAVEATS
content:
The command "uv-remove" is not a standard Linux command and almost certainly refers to <I>uv pip uninstall</I>. Users must install the <I>uv</I> tool separately. <I>uv</I> is a relatively new project and, while stable, is under active development. Always ensure you understand its impact on your Python environment, especially in production systems.


title: ENVIRONMENT CONTEXT
content:
<I>uv pip uninstall</I> operates on the active Python environment by default. If you use virtual environments, activate the correct one before running the command, or specify the Python interpreter using the <B>--python</B> option to target a specific environment.


title: DEPENDENCY HANDLING
content:
Similar to <I>pip uninstall</I>, <I>uv pip uninstall</I> primarily removes the specified package. It generally does not automatically remove dependencies of the uninstalled package unless those dependencies were solely installed by and for the package being removed, and no other installed package requires them. Manual removal of orphaned dependencies might occasionally be necessary.


title: HISTORY
content:
The <I>uv</I> project was initiated by Astral, aiming to provide a next-generation toolchain for Python packaging. It emerged as a response to the perceived slowness and complexities of existing tools like <I>pip</I> and <I>venv</I>. Written in Rust, <I>uv</I> quickly gained traction for its unparalleled speed in dependency resolution and package management. It's designed to be a modern, drop-in replacement for many common <I>pip</I> and <I>venv</I> operations.


title: TLDR
content:
<b>Remove a dependency from the project</b>`uv remove [package]`<br><b>Remove multiple dependencies</b>`uv remove [package1 package2 ...]`<br><b>Remove a development dependency</b>`uv remove --dev [package]`<br><b>Remove a dependency from an optional dependency group</b>`uv remove --optional [extra_name] [package]`<br><b>Remove a dependency from a specific dependency group</b>`uv remove --group [group_name] [package]`<br><b>Remove without syncing the virtual environment</b>`uv remove --no-sync [package]`


title: PARAMETERS
content:
<b><i>LOCATION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The directory path where the virtual environment should be created. If omitted, defaults to <i>.venv</i> in the current directory.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><b>-p</b> <i>&lt;PYTHON&gt;</i>, <b>--python</b> <i>&lt;PYTHON&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Python interpreter to use for the new virtual environment. Can be a name (e.g., <i>python3.10</i>) or a path (e.g., <i>/usr/bin/python3.9</i>).<br><br><b><b>--prompt</b> <i>&lt;PROMPT&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a custom prefix for the virtual environment's command prompt when activated.<br><br><b><b>--seed</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs <i>pip</i>, <i>setuptools</i>, and <i>wheel</i> into the newly created virtual environment. This is often desired for compatibility with existing workflows or tools.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the creation of the virtual environment, overwriting any existing directory at the specified location without a prompt.<br><br>


title: DESCRIPTION
content:
<i>uv venv</i> is a sub-command of <i>uv</i>, a high-performance Python package management tool written in Rust. It provides a significantly faster and more reliable way to create isolated Python virtual environments compared to traditional methods like <i>python -m venv</i>. Virtual environments are essential for managing project dependencies, preventing conflicts between different projects by isolating their respective Python interpreters and package installations. <i>uv venv</i> integrates seamlessly with <i>uv</i>'s robust dependency resolution and package installation capabilities, making it a powerful alternative for Python developers seeking speed and efficiency.


title: CAVEATS
content:
<b>Newer Tool</b>: <i>uv</i> is relatively new compared to <i>venv</i> or <i>virtualenv</i>. While stable, its features and behavior might evolve rapidly.<br><b>Rust-based</b>: Being written in Rust, it is generally very fast and memory-efficient.<br><b>Seed Behavior</b>: By default, <i>uv venv</i> creates an environment without <i>pip</i>, <i>setuptools</i>, and <i>wheel</i> (as <i>uv</i> doesn't need them internally). The <b>--seed</b> flag is required to include them, which is different from <i>python -m venv</i>'s default behavior.


title: <B>DEFAULT LOCATION</B>
content:
If no location is provided, <i>uv venv</i> defaults to creating the environment in a directory named <i>.venv</i> in the current working directory.


title: <B>ACTIVATION</B>
content:
Like other virtual environments, a <i>uv venv</i> environment needs to be activated (e.g., <i>source .venv/bin/activate</i> on Linux/macOS, <i>.venv\Scripts\activate</i> on Windows) to use its isolated Python interpreter and installed packages.


title: HISTORY
content:
<i>uv</i> was developed by Astral (now part of the <i>rye</i> project) with the goal of creating a blazing-fast, robust, and reliable Python package management tool. It's written in Rust, leveraging its performance characteristics to significantly outperform traditional Python tools like <i>pip</i> and <i>venv</i> for dependency resolution and environment creation. <i>uv-venv</i> is a direct result of this effort, providing a modern and efficient way to manage Python isolation. It gained significant traction quickly due to its speed and reliability.


title: TLDR
content:
<b>Create a virtual environment in the default location (.venv)</b>`uv venv`<br><b>Create a virtual environment at a specific path</b>`uv venv [path/to/venv]`<br><b>Create using a specific Python version</b>`uv venv --python [3.12]`<br><b>Create with a custom prompt prefix</b>`uv venv --prompt [my_project]`<br><b>Create and allow overwriting existing environment</b>`uv venv --allow-existing [venv_name]`


title: PARAMETERS
content:
<b>[PACKAGE ...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional: Specifies one or more packages to export. If omitted, all resolved dependencies are exported.<br><br><b>--format <FORMAT></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output format for the requirements file. Accepted values are 'pip' (default) for <i>pip</i> compatibility or 'uv' for <i>uv</i>-specific features like hashes.<br><br><b>--output-file <PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the output file. If not provided, the requirements are written to standard output (stdout).<br><br><b>--python <PYTHON></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the Python interpreter to use. Can be a path or a version specifier (e.g., '3.10').<br><br><b>--strict</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Requires all exported dependencies to have a hash, failing if any are missing.<br><br><b>--index-url <URL></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The URL of the primary Python package index to use for resolution.<br><br><b>--extra-index-url <URL></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Additional URLs of Python package indexes to search for packages.<br><br><b>--no-index</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignores all package indexes, relying only on `--find-links`.<br><br><b>--find-links <PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Location(s) of local Python package archives.<br><br><b>--client-auth <PATH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a client certificate and key file (.pem or .p12) for index authentication.<br><br><b>--keyring-provider <PROVIDER></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the keyring provider for authentication (e.g., 'auto', 'system', 'disabled').<br><br><b>--no-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables colored output in the console.<br><br><b>--force-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces colored output, even if not automatically detected.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose logging output.<br><br><b>--quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all logging output.<br><br><b>--exclude-newer <VERSION></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents considering package versions newer than the specified version.<br><br><b>--refresh <REFRESH></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Refreshes specified packages during export, e.g., 'all' or a specific package name.<br><br><b>--refresh-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces a re-resolution and refresh of all packages.<br><br><b>--exclude-platform-specific</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes packages that are specific to certain platforms from the export.<br><br><b>--no-hash</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes package hashes from the exported requirements file.<br><br><b>--legacy-sha1-hashes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows the inclusion of SHA1 hashes in the exported requirements file.<br><br><b>--with-sources</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes source URLs (e.g., Git URLs) in the exported requirements file.<br><br><b>--no-strip-extras</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retains extras (e.g., '[test]') in package names during export.<br><br><b>--no-strip-markers</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retains environment markers (e.g., '; python_version < "3.9"') in package names.<br><br><b>--no-strip-vcs-urls</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retains Version Control System (VCS) URLs (e.g., 'git+https://...') in package names.<br><br><b>--strict-markers</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ensures that all environment markers are strictly compatible with the target environment.<br><br><b>--dependency-mode <MODE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the mode for including dependencies: 'direct', 'direct-plus-primary', or 'transitive' (default).<br><br><b>--resolve-from <FILE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies additional files (e.g., 'pyproject.toml', 'requirements.in') to use as a base for resolution.<br><br><b>--annotation-style <STYLE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the style of annotations: 'full' (default), 'minimal', or 'none'.<br><br><b>--annotation-format <FORMAT></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the format for annotations: 'comments' (default) or 'metadata'.<br><br>


title: DESCRIPTION
content:
<i>uv-export</i> is a subcommand of the <i>uv</i> tool, a fast Python package installer and resolver. This command's primary function is to transform a project's dependency resolution (typically derived from a <i>uv.lock</i> file or an input <i>requirements.txt</i>) into a <i>requirements.txt</i> file that is fully compatible with <i>pip</i>. It is an essential utility for ensuring interoperability between <i>uv</i>-managed Python environments and those that rely on the traditional <i>pip</i> ecosystem. Users can control the output format, include or exclude hashes, filter specific packages, and customize annotations for better readability or machine processing. It streamlines the process of sharing dependency lists or deploying applications where <i>pip</i> is the designated installer.


title: CAVEATS
content:
This command requires <i>uv</i> to be installed and available in your system's PATH. While designed for <i>pip</i> compatibility, minor differences in output might occur compared to a direct <i>pip freeze</i> operation. The '--strict' option may cause exports to fail if the package index does not provide hashes for all dependencies.


title: USAGE EXAMPLES
content:
<b>Export all dependencies to a file:</b><br><b>uv export > requirements.txt</b><br><br><b>Export in 'uv' format to a specific file:</b><br><b>uv export --format uv --output-file uv-requirements.txt</b><br><br><b>Export only specific packages:</b><br><b>uv export numpy pandas --output-file limited-reqs.txt</b><br><br><b>Export without hashes for simpler requirements:</b><br><b>uv export --no-hash</b>


title: HISTORY
content:
<i>uv</i> is a modern, high-performance Python packaging tool developed by Astral, first open-sourced in late 2023. The <i>uv export</i> subcommand was a fundamental component from its initial release, emphasizing interoperability with the established <i>pip</i> ecosystem. It aims to offer a faster and more reliable alternative for generating <i>requirements.txt</i> files compared to traditional methods like <i>pip-tools</i>.


title: TLDR
content:
<b>Export dependencies to a requirements.txt file</b>`uv export --format requirements-txt [[-o|--output-file]] [requirements.txt]`<br><b>Export dependencies to pylock.toml format</b>`uv export --format pylock.toml`<br><b>Export only production dependencies (exclude dev dependencies)</b>`uv export --no-dev`<br><b>Export including a specific optional dependency group</b>`uv export --extra [group_name]`<br><b>Export including all optional dependencies</b>`uv export --all-extras`<br><b>Export including a specific dependency group</b>`uv export --group [group_name]`<br><b>Export without hashes</b>`uv export --no-hashes`<br><b>Export dependencies for a specific package in the workspace</b>`uv export --package [package_name]`


title: PARAMETERS
content:
<b>-N &lt;count&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify the number of passwords to generate. Defaults to 1.</i><br><br><b>-M &lt;length&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Set the minimum length for the generated passwords.</i><br><br><b>-m &lt;classes&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Define the minimum number of character classes (uppercase, lowercase, digits, symbols) that must be present in the password.</i><br><br><b>-r &lt;characters&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify a string of characters that must NOT appear in the generated password.</i><br><br><b>-R &lt;characters&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify a string of characters that MUST appear in the generated password.</i><br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Allow sequential characters (e.g., "abc", "123") in the generated password. By default, sequential characters are avoided.</i><br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Allow double characters (e.g., "aa", "bb") in the generated password. By default, double characters are avoided.</i><br><br><b>-u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Allow uppercase alphabetic characters (A-Z) in the password. This is enabled by default.</i><br><br><b>-l</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Allow lowercase alphabetic characters (a-z) in the password. This is enabled by default.</i><br><br><b>-n</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Allow digit characters (0-9) in the password. This is enabled by default.</i><br><br><b>-y</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Allow symbol characters (e.g., !, @, #, $) in the password. This is enabled by default.</i><br><br><b>-v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Print verbose output, showing details about the generation process or quality checks.</i><br><br><b>-h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Display a help message and exit.</i><br><br>


title: DESCRIPTION
content:
The <b>pwqgen</b> command is a utility provided by the <i>libpwquality</i> library, designed to generate high-quality, random passwords. Unlike simpler password generators, <b>pwqgen</b> focuses on creating passwords that adhere to specific strength criteria, such as minimum length, inclusion of various character classes (uppercase, lowercase, digits, symbols), and avoiding easily guessable patterns like sequential or repetitive characters.<br><br>It leverages the underlying <i>libpwquality</i> library's logic, which is also used by system utilities like <b>passwd</b> to enforce password policies. This makes <b>pwqgen</b> particularly useful in environments where strong password security is paramount, allowing administrators and users to generate robust credentials that meet defined complexity requirements. The command offers extensive options to fine-tune the generated password's characteristics, providing flexibility while maintaining a strong focus on security.


title: CAVEATS
content:
<ul><li><i><b>pwqgen</b> relies on the system's entropy source for true randomness. Ensure your system has a sufficient amount of entropy available.</i></li><li><i>While <b>pwqgen</b> helps generate strong passwords, the ultimate security depends on how these passwords are used, stored, and managed.</i></li><li><i>The default behavior of <b>pwqgen</b> (e.g., avoiding sequential/double characters) is designed for security. Disabling these checks with <b>-s</b> or <b>-d</b> can reduce the password's strength.</i></li></ul>


title: CHARACTER CLASSES
content:
<i><b>pwqgen</b> defines four character classes for assessing password complexity:</i><br><i><br><b>Uppercase:</b> A-Z<br><b>Lowercase:</b> a-z<br><b>Digits:</b> 0-9<br><b>Symbols:</b> Any character that is not uppercase, lowercase, or a digit (e.g., !, @, #, $, %, ^, &, *, etc.).</i><br><i><br>The <b>-m</b> option allows you to enforce a minimum number of these distinct classes in the generated password.</i>


title: ENTROPY SOURCE
content:
<i>For true randomness, <b>pwqgen</b> relies on the operating system's cryptographic random number generator (e.g., <b>/dev/urandom</b> or <b>/dev/random</b>). It's important that your system has sufficient entropy, especially when generating a large number of passwords, to ensure that the generated passwords are unpredictable.</i>


title: HISTORY
content:
<i><b>pwqgen</b> is part of the <b>libpwquality</b> project, which was developed to provide a unified and robust library for password quality checking and generation on Linux systems. It addresses the need for strong password policies in system security, evolving from earlier, less comprehensive password generation and checking mechanisms.<br><br>The library, and consequently <b>pwqgen</b>, provides a standardized way for applications to ensure passwords meet predefined security criteria, making it a crucial component in modern system administration and user management.</i>


title: TLDR
content:
<b>Generate a passphrase</b>`pwqgen`<br><b>Generate a passphrase with a specific bit size between 24 and 136</b>`pwqgen random=[bitsize]`<br><b>Use a config file to control password generation</b>`pwqgen config=[path/to/config_file]`<br><b>Display help</b>`pwqgen [[-h|--help]]`<br><b>Display version</b>`pwqgen --version`


title: TLDR
content:
<b>Install a package</b>`pkgz install [package_name]`<br><b>Remove a package</b>`pkgz remove [package_name]`<br><b>Search for a package</b>`pkgz search [package_name]`<br><b>Update all packages in all sources</b>`pkgz update`<br><b>Display version</b>`pkgz --version`


title: SYNOPSIS
content:
<b>uv-run</b> [<i>OPTIONS</i>] [-- <i>COMMAND</i> [<i>ARGUMENTS</i>...]]<br><br><i>Note:</i> This command is typically invoked as <I>uv run</I>, where <I>uv</I> is the main executable.


title: PARAMETERS
content:
<b>--env <KEY=VALUE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets an environment variable for the executed command. Can be specified multiple times.<br><br><b>--python <VERSION></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Python version to use for the command. E.g., '3.10', '3.11'.<br><br><b>--isolated</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the command in a temporary, isolated environment, useful for testing or one-off tasks.<br><br><b>--with <PACKAGE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs additional packages specifically for the duration of this command's execution. Can be repeated.<br><br><b>--strict</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Aborts the command execution if any required dependencies are missing or unresolved.<br><br><b>--from-stdin</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads the script or commands to execute directly from standard input.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message for the <I>uv run</I> subcommand and exits.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more details about the execution process.<br><br><b>--quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses informational output, showing only errors or critical messages.<br><br>


title: DESCRIPTION
content:
The <b>uv-run</b> command, more commonly invoked as <I>uv run</I>, is a powerful subcommand of the <I>uv</I> package installer and dependency resolver. Its primary purpose is to execute Python scripts or arbitrary shell commands within the context of a <I>uv</I>-managed virtual environment. <br><br>Unlike directly invoking <I>python script.py</I>, <I>uv run</I> ensures that the command is executed with the exact Python interpreter and dependencies configured for the current <I>uv</I> project. This eliminates potential conflicts arising from system-wide Python installations or mismatched library versions. It's particularly useful for development workflows where consistency and reproducibility are paramount, allowing developers to quickly test scripts or run project-specific tools in an isolated, controlled environment. <br><br>The <I>uv</I> tool itself is known for its exceptional speed, being written in Rust, making <I>uv run</I> a very fast option for running Python-based tasks within its ecosystem.


title: CAVEATS
content:
It is crucial to understand that <b>uv-run</b> is not a standalone executable but a subcommand of the <I>uv</I> tool. Users must have <I>uv</I> installed and typically invoke it as <I>uv run</I>. The command relies on an existing or implicitly managed <I>uv</I> environment to resolve dependencies and select the Python interpreter. Misconfiguration of the <I>uv</I> environment or project may lead to unexpected behavior or errors.


title: INTEGRATION WITH THE UV ECOSYSTEM
content:
<b>uv-run</b> (as <I>uv run</I>) is tightly integrated with <I>uv</I>'s broader capabilities, including dependency resolution (<I>uv install</I>, <I>uv sync</I>), virtual environment management (<I>uv venv</I>), and lockfile generation (<I>uv lock</I>). It leverages the performance and reliability of <I>uv</I> to ensure that scripts always run with the correct and consistent set of packages and Python interpreter.


title: GENERAL UV OPTIONS
content:
Many general <I>uv</I> options can also be applied to the <I>run</I> subcommand. These include options related to network proxy settings (<I>--proxy</I>), connection timeouts (<I>--connect-timeout</I>), and output coloring (<I>--color</I>), providing consistent behavior across the <I>uv</I> CLI.


title: HISTORY
content:
<I>uv</I> is a relatively recent entrant into the Python packaging ecosystem, developed by Astral (now known as ruff-dev). Launched with significant fanfare, it aims to provide an extremely fast and reliable alternative to traditional tools like <I>pip</I>, <I>pip-tools</I>, and <I>venv</I>. Its core is written in Rust, which contributes to its remarkable performance gains in dependency resolution and package installation.<br><br>The <I>run</I> subcommand was a natural and essential addition to <I>uv</I>'s functionality, providing a seamless way to execute scripts and applications within the managed virtual environments. This integration makes <I>uv</I> a comprehensive tool for both dependency management and execution workflow, reflecting a modern approach to Python development environments.


title: TLDR
content:
<b>Run a Python script</b>`uv run [path/to/script.py]`<br><b>Run a Python module</b>`uv run [[-m|--module]] [module_name]`<br><b>Run a command with additional packages installed temporarily</b>`uv run [[-w|--with]] [package] [command]`<br><b>Run a script with packages from a requirements file</b>`uv run --with-requirements [path/to/requirements.txt] [path/to/script.py]`<br><b>Run in an isolated environment (no project dependencies)</b>`uv run --isolated [path/to/script.py]`<br><b>Run without syncing the environment first</b>`uv run --no-sync [command]`


title: SYNOPSIS
content:
<b>gvim</b> [<i>options</i>] [<i>file ...</i>]<br>Common options include:<br>&nbsp;&nbsp;&nbsp;<b>-R</b><br>&nbsp;&nbsp;&nbsp;<b>-c</b> <i>{command}</i><br>&nbsp;&nbsp;&nbsp;<b>+</b><i>{command}</i><br>&nbsp;&nbsp;&nbsp;<b>-f</b><br>&nbsp;&nbsp;&nbsp;<b>-geometry</b> <i>{WxH[+X+Y]}</i><br>&nbsp;&nbsp;&nbsp;<b>-display</b> <i>{host:display}</i><br>&nbsp;&nbsp;&nbsp;<b>-fn</b> <i>{fontname}</i><br>&nbsp;&nbsp;&nbsp;<b>-o</b>[<i>N</i>]<br>&nbsp;&nbsp;&nbsp;<b>-O</b>[<i>N</i>]<br>&nbsp;&nbsp;&nbsp;<b>-p</b>[<i>N</i>]


title: PARAMETERS
content:
<b><b>-R</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the file in <i>read-only</i> mode.<br><br><b><b>-c</b> <i>{command}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the specified <i>{command}</i> immediately after opening the first file. Useful for jumping to a specific line or running a setup command.<br><br><b><b>+</b><i>{command}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Similar to <b>-c</b>, executes the specified <i>{command}</i> after opening files. Often used to specify a line number or search pattern (e.g., <b>+100</b>, <b>+/pattern</b>).<br><br><b><b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs <b>gvim</b> in the <i>foreground</i>. Useful when launching from scripts that need to wait for <b>gvim</b> to close.<br><br><b><b>-geometry</b> <i>{WxH[+X+Y]}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial size (<i>Width</i>x<i>Height</i>) and position (<i>+X+Y</i> offset) of the <b>gvim</b> window.<br><br><b><b>-display</b> <i>{host:display}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the X-server to connect to, allowing <b>gvim</b> to run on a remote display.<br><br><b><b>-fn</b> <i>{fontname}</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the <i>font</i> used in the GUI window. The format of <i>{fontname}</i> depends on the display system.<br><br><b><b>-o</b>[<i>N</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens <i>N</i> files in horizontally split windows. If <i>N</i> is omitted, opens one window per file, splitting equally.<br><br><b><b>-O</b>[<i>N</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens <i>N</i> files in vertically split windows. If <i>N</i> is omitted, opens one window per file, splitting equally.<br><br><b><b>-p</b>[<i>N</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens <i>N</i> files in separate <i>tab pages</i>. If <i>N</i> is omitted, opens one tab per file.<br><br><b><i>file ...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more files to be opened for editing. Wildcards can be used to specify multiple files (e.g., <i>*.txt</i>).<br><br>


title: DESCRIPTION
content:
<b>gvim</b> is the graphical user interface (GUI) version of the highly configurable and efficient Vim text editor. It offers all the powerful features of its terminal counterpart but enhances the user experience with visual elements like menus, toolbars, scrollbars, and a full-featured mouse interface.<br><br>Users can easily select fonts, customize colors, and benefit from true-color support for syntax highlighting, making code and text more readable. While retaining Vim's renowned modal editing paradigm (Normal, Insert, Visual, Command-line modes), <b>gvim</b> provides a more accessible entry point for new users through familiar GUI interactions, such as click-to-position cursor and menu-driven command execution.<br><br>It is widely used by programmers, system administrators, and writers for tasks ranging from extensive code development and configuration file editing to prose writing, thanks to its powerful scripting capabilities, vast plugin ecosystem, and cross-platform availability. <b>gvim</b> combines the speed and power of a command-line editor with the convenience and visual appeal of a modern desktop application.


title: CAVEATS
content:
<i>Resource Usage:</i> <b>gvim</b>, being a GUI application, generally consumes more system resources (CPU, RAM) compared to its terminal-based counterpart, <b>vim</b>.<br><i>X-Server Dependency:</i> It requires an X Window System environment to run, making it unsuitable for headless servers or minimal command-line only systems without a graphical desktop.<br><i>Learning Curve:</i> While the GUI makes it more approachable, the core modal editing paradigm of Vim still presents a significant learning curve for users unfamiliar with it.


title: <I>MODES OF OPERATION</I>
content:
Vim, and thus <b>gvim</b>, operates in different modes, each designed for specific tasks. The primary modes include:<br><b>Normal Mode</b>: For navigation, deletion, copying, and pasting.<br><b>Insert Mode</b>: For typing text.<br><b>Visual Mode</b>: For selecting text blocks.<br><b>Command-line Mode</b>: For executing commands, searching, and replacements (prefixed with <i>:</i> or <i>/</i>).


title: <I>EXTENSIBILITY AND CUSTOMIZATION</I>
content:
One of <b>gvim</b>'s greatest strengths is its unparalleled extensibility. Users can customize nearly every aspect of the editor through a personal configuration file (typically <i>~/.vimrc</i> or <i>~/.config/nvim/init.vim</i> for Neovim). This file allows for custom settings, key mappings, and custom functions.<br><br>Furthermore, a vast ecosystem of plugins, written in Vimscript, Python, Ruby, and other languages, extends its functionality for various programming languages, development workflows, and niche tasks, making it highly adaptable to almost any editing need.


title: HISTORY
content:
The lineage of <b>gvim</b> traces back to <b>vi</b>, created by Bill Joy in the late 1970s. The 'Vi IMproved' editor, <b>Vim</b>, was developed by Bram Moolenaar, starting in 1991 for the Amiga computer.<br><br><b>gvim</b> emerged as the graphical frontend to <b>Vim</b>, allowing it to leverage modern GUI toolkits like Motif, GTK+, and Athena. This evolution provided users with familiar desktop features like menus, toolbars, and mouse support, while retaining <b>Vim</b>'s powerful text manipulation capabilities. Its continuous development by a vibrant open-source community has made it a stable and feature-rich editor across various operating systems.


title: SYNOPSIS
content:
<b>`uv self`</b> <i>&lt;COMMAND&gt;</i><br><b>`uv self update`</b> [<i>OPTIONS</i>]<br><b>`uv self install`</b> [<i>OPTIONS</i>]<br><b>`uv self uninstall`</b> [<i>OPTIONS</i>]


title: PARAMETERS
content:
<b><b>--tag</b> <i>&lt;TAG&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(For `update` and `install`)</i> Specifies a particular version tag (e.g., <b>`0.1.0`</b>) to update to or install.<br><br><b><b>--branch</b> <i>&lt;BRANCH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(For `update` and `install`)</i> Specifies a Git branch to update to or install from.<br><br><b><b>--prerelease</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(For `update`)</i> Allows updating to prerelease versions of <i>uv</i>, which may be unstable.<br><br><b><b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(For `install`)</i> Overwrites an existing <i>uv</i> installation at the target path without prompting.<br><br><b><b>--name</b> <i>&lt;NAME&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(For `install` and `uninstall`)</i> Specifies the name of the executable (e.g., <b>`uv`</b>, <b>`uv-nightly`</b>) to install or uninstall.<br><br><b><b>--path</b> <i>&lt;PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(For `install` and `uninstall`)</i> Specifies the exact directory where <i>uv</i> should be installed or uninstalled from. This path must be writable.<br><br><b><b>--prefix</b> <i>&lt;PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(For `install`)</i> Specifies a base directory (e.g., <b>`~/.local`</b>) where <i>uv</i> will be installed, typically into a <b>`bin`</b> subdirectory within the prefix.<br><br>


title: DESCRIPTION
content:
<i>uv-self</i> is a specialized subcommand within the <i>uv</i> command-line tool, a groundbreaking, high-performance Python package installer and resolver developed by Astral. Unlike other <i>uv</i> subcommands that focus on managing Python project environments and their dependencies (such as <b>`uv pip install`</b> or <b>`uv venv`</b>), <i>uv-self</i> is exclusively dedicated to the self-management of the <i>uv</i> executable itself. It offers a suite of functionalities designed to streamline the lifecycle of your <i>uv</i> installation, enabling users to easily update <i>uv</i> to its latest version, install <i>uv</i> into a user's system PATH, and cleanly uninstall it when no longer needed. This self-management capability ensures that users can effortlessly maintain their <i>uv</i> installation without resorting to manual downloads, complex compilation steps, or intricate path manipulations. It guarantees access to the most recent features, performance enhancements, and critical bug fixes, embodying a modern approach to command-line tool maintenance.


title: CAVEATS
content:
<b>`uv self`</b> commands typically require write permissions to the installation directory.<br>Using <b>`--path`</b> or <b>`--prefix`</b> for installation might require manual addition of the directory to your system's <b>`PATH`</b> environment variable if not already included.<br>Updating via <b>`--tag`</b> or <b>`--branch`</b> might lead to less stable versions than the default latest stable release, and could potentially introduce breaking changes.


title: SUBCOMMANDS OVERVIEW
content:
The <b>`uv self`</b> command operates through several dedicated subcommands:<br><br><b>`uv self update`</b>:<br>Updates the installed <i>uv</i> executable to the latest available stable version, or a specific tag/branch if specified via options. This is the primary method for keeping your <i>uv</i> installation current and secure.<br><br><b>`uv self install`</b>:<br>Installs the <i>uv</i> executable to a chosen directory, typically one that is part of your system's <b>`PATH`</b>, making it globally available. It can be used for initial installations or to install specific versions.<br><br><b>`uv self uninstall`</b>:<br>Removes an existing <i>uv</i> executable from your system, cleaning up the installed files. This command helps in safely managing multiple <i>uv</i> installations or removing it entirely.


title: HISTORY
content:
`uv` is a relatively new project, first released by Astral in late 2023. It quickly gained significant attention for its speed and efficiency, attributed to its implementation in Rust. The <b>`self`</b> subcommand was integrated from early versions, reflecting a modern trend in CLI tools (like Rust's <b>`cargo`</b> or Homebrew's <b>`brew`</b>) to provide convenient self-update capabilities directly within the tool. This design choice simplifies maintenance for users, ensuring they can effortlessly keep their <i>uv</i> installation current. Its development is rapid and ongoing, with frequent releases enhancing both core functionality and self-management features.


title: TLDR
content:
<b>Update uv to the latest version</b>`uv self update`<br><b>Update uv to a specific version</b>`uv self update [0.4.0]`<br><b>Check for available uv updates without installing</b>`uv self update --dry-run`<br><b>Update uv with verbose output</b>`uv self update [[-v|--verbose]]`<br><b>Display the current uv version</b>`uv self version`<br><b>Display only the version number</b>`uv self version --short`<br><b>Display version information in JSON format</b>`uv self version --output-format json`


title: PARAMETERS
content:
<b><i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the damaged <b>bzip2</b> compressed file from which to attempt data recovery.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force overwrite of any existing output recovery files (e.g., <code>recNNNNN<i>filename</i>.bz2</code>) without prompting for confirmation.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be quiet; suppress most informational messages and warnings that would normally be displayed during the recovery process.<br><br><b><b>-s</b>, <b>--small</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a less verbose output format for messages generated by <b>bzip2recover</b> itself.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be verbose; print more detailed information about the recovery progress, including blocks found and written to new files.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version number of <b>bzip2recover</b> and then exit immediately.<br><br>


title: DESCRIPTION
content:
<b>bzip2recover</b> is a utility specifically designed to attempt recovery of data from corrupt <b>bzip2</b> compressed files. It operates by scanning the damaged <code>.bz2</code> file for 40-bit <b>bzip2</b> block headers. For each block header it successfully identifies, it extracts that block and writes it to a new, separate <b>bzip2</b> file. The output files are named sequentially, such as <code>rec00001file.bz2</code>, <code>rec00002file.bz2</code>, and so on, where <code>file</code> is the name of the original damaged file. While <b>bzip2recover</b> cannot repair the original file or salvage data from within a corrupted block, it can often retrieve significant portions of a multi-block <b>bzip2</b> archive, allowing you to access data from the uncorrupted segments. This is particularly valuable for large backups or archives where partial corruption should not lead to complete data loss.


title: CAVEATS
content:
<b>bzip2recover</b> cannot magically fix corrupt data within a damaged block; it can only salvage complete, undamaged blocks that it can identify by their valid headers. If a block's header is corrupted, that specific block and potentially subsequent data until the next valid header might be lost. The utility creates multiple output files, each containing a single recovered block, named in the format <code>recNNNNN<i>original_filename</i>.bz2</code>. This means the user must then concatenate and decompress these individual files to reconstruct the recoverable data. It is specifically designed for <b>bzip2</b> files and will not work for other archive types or general file recovery.


title: OUTPUT FILES
content:
When successful, <b>bzip2recover</b> generates one or more new <b>bzip2</b> files in the current directory. These files are named following the pattern <code>rec<i>NNNNNoriginal_filename</i>.bz2</code>, where <code><i>NNNNN</i></code> is a five-digit sequence number (e.g., 00001, 00002). Each of these files contains a single recovered block from the original damaged file. To fully reconstruct the recoverable data, these individual files typically need to be concatenated in the correct order and then decompressed. For example, to recover all possible data from <code>myarchive.bz2</code>, you might use: <br><code>cat rec*.bz2 | bunzip2 > recovered_myarchive_data</code>


title: HISTORY
content:
<b>bzip2recover</b> is an integral part of the <b>bzip2</b> compression suite, which was developed by Julian Seward. It was designed to address the practical need for data recovery in the event of partial file corruption, a common issue with large compressed archives. Its inclusion in the suite highlights the project's emphasis on data integrity and usability, complementing the primary goal of efficient compression.


title: PARAMETERS
content:
<b><B>-h</B>, <B>--help</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b><B>-u</B> <I>USERNAME</I>, <B>--username</B>=<I>USERNAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Microsoft account username (email) for login.<br><br><b><B>-p</B> <I>PASSWORD</I>, <B>--password</B>=<I>PASSWORD</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Microsoft account password for login. (Use with caution or consider cookie-based authentication for security).<br><br><b><B>-c</B> <I>FILE</I>, <B>--config</B>=<I>FILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a configuration file (e.g., JSON or INI) containing login credentials and other settings.<br><br><b><B>-s</B> <I>COUNT</I>, <B>--searches</B>=<I>COUNT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the desired number of desktop searches to perform.<br><br><b><B>-m</B> <I>COUNT</I>, <B>--mobile-searches</B>=<I>COUNT</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the desired number of mobile searches to perform.<br><br><b><B>-d</B> <I>SECONDS</I>, <B>--delay</B>=<I>SECONDS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a delay (in seconds) between searches or actions to mimic human behavior.<br><br><b><B>--browser</B>=<I>BROWSER</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the browser or WebDriver to use (e.g., <I>chrome</I>, <I>firefox</I>, <I>phantomjs</I>, <I>headless</I>). Defaults to a headless browser if available.<br><br><b><B>-v</B>, <B>--verbose</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed logs of the script's activities.<br><br>


title: DESCRIPTION
content:
The command <I>bing-rewards</I> is not a standard, pre-installed Linux utility. Instead, it refers to various user-developed scripts, often written in Python, designed to automate the process of earning points through the Microsoft Bing Rewards program. These scripts typically simulate human interaction, performing web searches (both desktop and mobile), completing daily activities, and sometimes even solving quizzes to accrue points automatically.<br><br>Users employ these scripts to passively accumulate points, which can then be redeemed for gift cards, sweepstakes entries, or other rewards provided by Microsoft. Because these are community-driven tools, their functionality, stability, and command-line options can vary significantly depending on the specific script's implementation and the continuous changes in the Bing Rewards website.


title: CAVEATS
content:
<B>Unofficial Tool:</B> <I>bing-rewards</I> scripts are not officially supported by Microsoft and operate outside their terms of service.<br><br><B>Account Suspension Risk:</B> Using automation can lead to the suspension or termination of your Bing Rewards and Microsoft accounts if detected.<br><br><B>Website Changes:</B> Bing Rewards website structure and API can change without notice, potentially breaking scripts and requiring updates.<br><br><B>Security Concerns:</B> Storing credentials directly in scripts or command-line arguments can pose security risks. Using environment variables or secure configuration files is recommended.<br><br><B>Dependencies:</B> These scripts often require specific programming language runtimes (e.g., Python), web browser drivers (e.g., ChromeDriver), and other libraries to function correctly.


title: INSTALLATION AND SETUP
content:
To use a <I>bing-rewards</I> script, you typically need to:<br>1. Install the required programming language runtime (e.g., Python 3).<br>2. Install necessary libraries and dependencies (e.g., <I>selenium</I>, <I>requests</I>) using a package manager (e.g., <B>pip</B> for Python).<br>3. Download the specific <I>bing-rewards</I> script from a repository (e.g., GitHub).<br>4. Configure the script with your login credentials and other preferences, often in a separate configuration file or environment variables.<br>5. Install a compatible web browser driver (e.g., ChromeDriver for Chrome, geckodriver for Firefox) if the script uses a full browser or headless browser.


title: ETHICAL AND USAGE CONSIDERATIONS
content:
While using automation scripts for Bing Rewards can save time, it's crucial to be aware of the ethical implications and potential consequences. Microsoft's terms of service generally prohibit automated activity. Continuous or aggressive automation might trigger security flags, leading to account review or permanent suspension. It is advisable to use such tools responsibly, if at all, and be prepared for potential adverse actions from Microsoft. Always prioritize the security of your Microsoft account.


title: HISTORY
content:
The concept of automating online rewards programs emerged shortly after these programs gained popularity, as users sought more efficient ways to accumulate points. Early automation attempts were often simple scripts simulating clicks or form submissions. With the rise of dynamic web content and sophisticated anti-bot measures, these scripts evolved, often leveraging advanced web automation frameworks like Selenium to mimic realistic browser behavior. The development of <I>bing-rewards</I> automation scripts reflects a continuous cat-and-mouse game between reward program providers and users attempting to optimize point collection, adapting to changes in website structures and detection mechanisms.


title: SEE ALSO
content:
<B>python</B>(1) - The interpreter for Python scripts., <B>curl</B>(1) - A tool to transfer data from or to a server, often used for simpler web interactions., <B>wget</B>(1) - A non-interactive network downloader, similar to curl., <B>selenium</B> - (External library/framework) A widely used browser automation framework that many <I>bing-rewards</I> scripts leverage., <B>cron</B>(8) - A daemon to execute scheduled commands, often used to run <I>bing-rewards</I> scripts periodically.


title: TLDR
content:
<b>Complete both desktop and mobile searches</b>`bing-rewards`<br><b>Run 10 searches with mobile user-agent</b>`bing-rewards [[-m|--mobile]] [[-c|--count]] 10`<br><b>Complete mobile and desktop searches using specified Chrome profile "Profile 1"</b>`bing-rewards --profile "Profile 1"`<br><b>Run searches sequentially across multiple Chrome profiles</b>`bing-rewards --profile "Default" "Profile 1" "Profile 2"`<br><b>Display help</b>`bing-rewards [[-h|--help]]`


title: PARAMETERS
content:
<b>clean</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clears all contents of the <i><code>uv</code></i> package installer's cache. This action removes all stored packages, build artifacts, and metadata, which can free up disk space and resolve issues caused by corrupted cache entries.<br><br><b>dir</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the absolute path to the directory where <i><code>uv</code></i> stores its cache. This helps users locate the cache for manual inspection or management outside of the <i><code>uv</code></i> command.<br><br>


title: DESCRIPTION
content:
The <i><code>uv-cache</code></i> command is a subcommand of the <i><code>uv</code></i> Python package installer, designed specifically for managing its internal cache. <i><code>uv</code></i> is a modern, fast, and secure tool for Python dependency resolution and package installation, often positioned as an alternative to <i><code>pip</code></i>. The cache stores downloaded packages, build artifacts, and resolved dependency information, significantly speeding up subsequent operations. This command provides functionalities to inspect the cache's location and to clear its contents. Clearing the cache can be useful for freeing up disk space, especially in environments with limited storage, or for troubleshooting issues related to corrupted or stale cache entries, ensuring <i><code>uv</code></i> operates with the most up-to-date components.


title: CAVEATS
content:
This command is part of the <i><code>uv</code></i> Python package installer and is not a standard system-wide Linux utility; it must be installed separately, typically via <i><code>pipx</code></i> or <i><code>pip</code></i>. Clearing the cache can free up disk space, but it will cause <i><code>uv</code></i> to re-download and re-build packages and dependencies, potentially increasing the time for subsequent installation or resolution operations until the cache is repopulated.


title: CACHE LOCATION
content:
The cache for <i><code>uv</code></i> is typically located in a directory specific to your operating system's user cache standards. For Linux, this is commonly found under <code>$HOME/.cache/uv</code>. The <i><code>uv cache dir</code></i> command can be used to precisely determine this location on your system, which might vary based on environment variables or specific configurations.


title: HISTORY
content:
The <i><code>uv</code></i> project, including its cache management capabilities, was developed by Astral and gained significant traction in early 2024 as a high-performance alternative to traditional Python package management tools like <i><code>pip</code></i>. The <i><code>uv-cache</code></i> subcommand was designed from the outset as an essential component for users to manage the persistent cache that underpins <i><code>uv</code></i>'s speed and efficiency, allowing for quick re-installations and resolutions by reusing downloaded and built artifacts.


title: TLDR
content:
<b>Show the cache directory path</b>`uv cache dir`<br><b>Clean the entire cache (removes all cached packages and environments)</b>`uv cache clean`<br><b>Clean the cache for specific packages</b>`uv cache clean [package1 package2 ...]`<br><b>Prune all unreachable objects from the cache</b>`uv cache prune`<br><b>Prune cache optimized for CI environments like GitHub Actions</b>`uv cache prune --ci`<br><b>Use a specific cache directory</b>`uv cache clean --cache-dir [path/to/cache]`<br><b>Clean cache with verbose output</b>`uv cache clean [[-v|--verbose]]`


title: TLDR
content:
<b>Destroy a database</b>`dropdb [database_name]`<br><b>Request a verification prompt before any destructive actions</b>`dropdb [[-i|--interactive]] [database_name]`<br><b>Connect with a specific username and destroy a database</b>`dropdb [[-U|--username]] [username] [database_name]`<br><b>Force a password prompt before connecting to the database</b>`dropdb [[-W|--password]] [database_name]`<br><b>Suppress a password prompt before connecting to the database</b>`dropdb [[-w|--no-password]] [database_name]`<br><b>Specify the server host name</b>`dropdb [[-h|--host]] [host] [database_name]`<br><b>Specify the server port</b>`dropdb [[-p|--port]] [port] [database_name]`<br><b>Attempt to terminate existing connections before destroying the database</b>`dropdb [[-f|--force]] [database_name]`


title: PARAMETERS
content:
<b><b>-s</b>, <b>--scrollbar</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the scrollbar on the right side of the display.<br><br><b><b>-b</b> <i>N</i>, <b>--bitsperblock=N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of bits to display per block (1-8). Default is 8.<br><br><b><b>-c</b>, <b>--colors</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses colors for the display (this is the default behavior).<br><br><b><b>-C</b>, <b>--nocolors</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the use of colors for the display.<br><br><b><b>-d</b>, <b>--dump</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the file content to standard output in hex/ASCII format and then exits.<br><br><b><b>-e</b>, <b>--ebcdic</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses the EBCDIC character set for the text representation instead of ASCII.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <i>hexedit</i> to open the file, even if there are issues.<br><br><b><b>-o</b> <i>OFFSET</i>, <b>--offset=OFFSET</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial offset in the file from which to begin viewing or editing. Accepts decimal, hexadecimal (e.g., <i>0x100</i>), or suffixed values (e.g., <i>10k</i>, <i>5m</i>).<br><br><b><b>-r</b>, <b>--readonly</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Opens the specified file in read-only mode, preventing any modifications.<br><br><b><b>-V</b>, <b>--view</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables view mode, which is equivalent to enabling both <b>--readonly</b> and <b>--noscroll</b> options.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the <i>hexedit</i> version information and then exits.<br><br>


title: DESCRIPTION
content:
<i>hexedit</i> is a full-screen, interactive utility designed for viewing and editing files in their raw hexadecimal, octal, and ASCII (or EBCDIC) representations. It provides a highly visual interface, similar to a text editor, allowing users to navigate through file contents byte by byte. This makes it invaluable for tasks such as analyzing binary file formats, reverse engineering, patching executables, recovering data, or simply inspecting non-textual data.<br><br>Users can easily switch between different display modes, jump to specific offsets, search for patterns, and perform byte-level modifications directly within the terminal, making it a powerful tool for low-level file manipulation.


title: CAVEATS
content:
Directly editing binary files, especially system files or executables, can lead to file corruption or system instability if not done correctly. Always back up files before making modifications with <i>hexedit</i>. Be cautious of byte order (endianness) when interpreting multi-byte values, as <i>hexedit</i> displays bytes sequentially without assuming a specific endianness for multi-byte values.


title: INTERACTIVE COMMANDS
content:
<i>hexedit</i> operates interactively within the terminal, offering a range of keyboard commands for navigation and editing:<br><b>Arrow keys</b>, <b>PgUp</b>/<b>PgDn</b>: Navigate through the file.<br><b>Tab</b>: Switch between the hexadecimal and ASCII/EBCDIC editing panes.<br><b>Ctrl+S</b>: Search for a string or hexadecimal sequence.<br><b>Ctrl+F</b>: Find the next occurrence of the search pattern.<br><b>Ctrl+R</b>: Initiate a replace operation.<br><b>Ctrl+G</b>: Go to a specific absolute offset in the file.<br><b>Ctrl+X</b>, then <b>Ctrl+C</b>: Save changes and exit.<br><b>Ctrl+C</b> (on its own): Exit without saving (if not prompted for save).<br><b>F1</b> or <b>Ctrl+H</b>: Display the in-program help.<br>When editing, typing in the hexadecimal pane directly modifies bytes (two characters per byte), while typing in the ASCII pane modifies the corresponding characters.


title: DISPLAY MODES
content:
By default, <i>hexedit</i> typically displays three main columns: the file offset, the hexadecimal representation of bytes, and the ASCII (or EBCDIC) representation of those bytes. An octal representation may also be shown if the terminal window size permits. Users can configure column widths and disable various display elements like headers, footers, or scrollbars via command-line options or interactive settings.


title: HISTORY
content:
<i>hexedit</i> emerged as a dedicated full-screen hexadecimal editor for command-line environments, complementing simpler dumping tools like <i>od</i> and <i>xxd</i>. Its development aimed to provide an intuitive, interactive interface for low-level file manipulation, drawing inspiration from traditional text editors to enable direct navigation, search, and modification of binary data within the terminal. It has been a staple utility in Linux and Unix-like systems for decades, evolving to include features like color support and various display options.


title: TLDR
content:
<b>Open file</b>`hexedit [path/to/file]`<br><b>Display file with sectors</b>`hexedit [[-s|--sector]] [path/to/file]`<br><b>Maximize file display</b>`hexedit [[-m|--maximize]] [path/to/file]`<br><b>Display help</b>`hexedit [[-h|--help]]`


title: SYNOPSIS
content:
<b>komac</b> <i>[global_options]</i> <i>&lt;command&gt;</i> <i>[command_options]</i> <i>[arguments...]</i><br>


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the command or a specific subcommand.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information during execution for debugging purposes.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <i>komac</i> client version information.<br><br><b>--config &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to a custom configuration file for <i>komac</i>, overriding default settings.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the command in dry-run mode, showing what would happen without making actual changes to files.<br><br><b>-f, --file &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to a Kubernetes manifest file or a directory containing manifests to process.<br><br><b>--recursive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Processes files in subdirectories recursively when a directory is specified with the --file option.<br><br>


title: DESCRIPTION
content:
<i>komac</i> is a specialized command-line interface (CLI) tool designed to streamline the management and maintenance of Kubernetes manifest files. Its core purpose is to ensure the cleanliness, consistency, and correctness of the YAML configurations used for deploying and managing applications within Kubernetes clusters. <i>komac</i> achieves this by offering functionalities such as automated linting, opinionated formatting, and comprehensive validation against established best practices and predefined rules. This helps developers and DevOps engineers to identify potential issues, enforce coding standards, and prevent common configuration errors before deployment. By integrating <i>komac</i> into their development pipelines, teams can significantly reduce manual review efforts, improve the reliability and security of their Kubernetes deployments, and maintain high-quality, standardized infrastructure-as-code. It serves as an essential utility for anyone working with complex Kubernetes environments.


title: CAVEATS
content:
<i>komac</i> is not typically included in standard Linux distributions and must be installed separately, often via a package manager like `brew`, `go install`, or by downloading pre-compiled binaries. Its functionality is highly specialized for Kubernetes manifest files, meaning it's not a general-purpose text processing tool. The effectiveness of its linting and formatting capabilities depends on the quality and comprehensiveness of its internal rule sets, which might be opinionated and require user configuration to align with specific organizational standards.


title: KEY SUBCOMMANDS
content:
<i>komac</i> operates using various subcommands, each performing a specific task:<br><ul><li><b>validate</b>: Checks Kubernetes manifests against a set of rules for correctness and best practices, often including schema validation.</li><li><b>fmt</b>: Formats Kubernetes YAML files according to a consistent, opinionated style, enhancing readability and consistency across projects.</li><li><b>lint</b>: Identifies potential issues, errors, or deviations from recommended practices within manifest files, providing actionable feedback.</li><li><b>version</b>: Displays the version of the <i>komac</i> tool, useful for debugging and compatibility checks.</li><li><b>help</b>: Provides detailed help for <i>komac</i> or a specific subcommand, explaining its usage and available options.</li></ul>


title: HISTORY
content:
<i>komac</i> emerged as part of the growing ecosystem of tools addressing the complexities of Kubernetes configuration management. Developed to tackle common challenges like YAML consistency, error prevention, and adherence to best practices, it aims to automate aspects of Kubernetes manifest validation and formatting. Its development is often driven by community contributions and the evolving needs of cloud-native development workflows, reflecting a broader industry trend towards 'shift-left' practices in infrastructure-as-code.


title: TLDR
content:
<b>Create a new package from scratch</b>`komac new [Package.Identifier] [[-v|--version]] [1.2.3] [[-u|--urls]] [https://example.com/app.exe]`<br><b>Update an existing package with a new version</b>`komac update [Package.Identifier] [[-v|--version]] [1.2.3] [[-u|--urls]] [https://example.com/app.exe]`<br><b>Update a package with multiple URLs and automatically submit</b>`komac update [Package.Identifier] [[-v|--version]] [1.2.3] [[-u|--urls]] [https://example.com/app.exe https://example.com/app.msi ...] [[-s|--submit]]`<br><b>Remove a version from winget-pkgs</b>`komac remove [Package.Identifier] [[-v|--version]] [1.2.3]`<br><b>List all versions for a package</b>`komac [[list|list-versions]] [Package.Identifier]`<br><b>Sync your fork of winget-pkgs with the upstream repository</b>`komac [[sync|sync-fork]]`<br><b>Update the stored GitHub token</b>`komac token [[add|update]] [[-t|--token]] [your_github_token]`<br><b>Generate shell autocompletion script</b>`komac [[complete|autocomplete]] [bash|elvish|fish|powershell|zsh]`


title: PARAMETERS
content:
<b>&lt;COMMAND&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One of the <i>uv pip</i> subcommands: <b>install</b>, <b>uninstall</b>, <b>list</b>, <b>sync</b>, <b>compile</b>, <b>freeze</b>, etc.<br><br><b><b>install</b> &lt;PACKAGE&gt;...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs specified Python packages into the current environment.<br><br><b><b>uninstall</b> &lt;PACKAGE&gt;...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uninstalls specified Python packages from the current environment.<br><br><b><b>list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists installed Python packages in the current environment.<br><br><b><b>sync</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Synchronizes the environment with a <i>requirements.txt</i> or <i>pyproject.toml</i>, installing missing and removing unneeded packages.<br><br><b><b>compile</b> &lt;FILE&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compiles a lockfile (e.g., <i>requirements.lock</i>) from an input requirements file.<br><br><b><b>-r</b>, <b>--requirement</b> &lt;FILE&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Install or synchronize packages listed in the given requirements file.<br><br><b><b>-e</b>, <b>--editable</b> &lt;PATH&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Install a project in editable mode (e.g., for local development).<br><br><b><b>--upgrade</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Upgrade all specified packages to the newest available version.<br><br><b><b>--force-reinstall</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reinstall all packages, even if they are already up-to-date.<br><br><b><b>--target</b> &lt;DIR&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Install packages into a specific directory, rather than the Python environment's site-packages.<br><br><b><b>--system</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use the system Python environment for installation, bypassing virtual environment checks.<br><br><b><b>--break-system-packages</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allow installations into system Python, even when discouraged by PEP 668.<br><br><b><b>--no-deps</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not install package dependencies; only install the specified packages themselves.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't actually perform any actions, just show what would be done.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increase verbosity of output.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Decrease verbosity of output.<br><br>


title: DESCRIPTION
content:
<i>uv-pip</i> refers to the <i>uv pip</i> subcommand, which serves as a high-performance, drop-in replacement for Python's traditional <i>pip</i> package manager. Developed by Astral and written in Rust, <i>uv</i> is designed for unparalleled speed, often outperforming <i>pip</i> by orders of magnitude in dependency resolution and package installation.<br><br>It aims to provide a unified tool for virtual environment management (like <i>venv</i>) and package installation, streamlining Python project workflows. <i>uv pip</i> supports most common <i>pip</i> commands like <b>install</b>, <b>uninstall</b>, <b>list</b>, and <b>sync</b>, making migration from <i>pip</i> straightforward. Its advanced resolver handles complex dependency graphs efficiently, reducing the likelihood of conflicts and ensuring reproducible builds. This tool is ideal for developers seeking faster build times, more reliable dependency management, and a modern approach to Python environment setup.


title: CAVEATS
content:
<i>uv-pip</i> is a relatively new and rapidly evolving tool. While aiming for high compatibility with <i>pip</i>, some advanced or obscure <i>pip</i> flags might not be directly supported yet or may have different semantics. It is part of the <i>uv</i> toolkit and works best when <i>uv</i> is also used for virtual environment management (e.g., via <i>uv venv</i>) for a cohesive and optimized workflow. Consider its adoption in production environments with proper testing.


title: UNMATCHED PERFORMANCE
content:
<i>uv pip</i> leverages the performance characteristics of Rust to deliver significantly faster dependency resolution and package installation compared to <i>pip</i>. This speed advantage is particularly noticeable in complex projects with many dependencies or in CI/CD pipelines, drastically reducing build times and improving developer productivity.


title: ROBUST DEPENDENCY RESOLUTION
content:
At its core, <i>uv</i> includes a state-of-the-art dependency resolver. This resolver is highly optimized to navigate complex package graphs, identify compatible versions, and resolve conflicts efficiently, leading to more stable and reproducible environments than often achieved with traditional tools.


title: HISTORY
content:
<i>uv</i> was publicly released by Astral in early 2024, designed to be a modern, high-performance replacement for <i>pip</i> and <i>venv</i>. Written in Rust, its development was driven by the need to address the common performance bottlenecks and complexity issues associated with traditional Python package management tools, particularly in large-scale and continuous integration environments. <i>uv pip</i> emerged as the direct counterpart to <i>pip</i>, aiming to provide a blazingly fast and reliable experience for Python dependency resolution and package installation. Its rapid adoption underscores a significant shift towards more efficient tooling in the Python ecosystem.


title: TLDR
content:
<b>Install a package</b>`uv pip install [package]`<br><b>Install packages from a requirements file</b>`uv pip install [[-r|--requirements]] [requirements.txt]`<br><b>Install a package with a specific version</b>`uv pip install [package==1.2.3]`<br><b>Uninstall a package</b>`uv pip uninstall [package]`<br><b>Save installed packages to file</b>`uv pip freeze > [requirements.txt]`<br><b>List installed packages</b>`uv pip list`<br><b>Show information about an installed package</b>`uv pip show [package]`<br><b>Sync environment with a requirements file (install/uninstall to match exactly)</b>`uv pip sync [requirements.txt]`


title: PARAMETERS
content:
<b><i>--output &lt;PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to write the generated lock file. The default is <b>uv.lock</b>.<br><br><b><i>--output-format &lt;FORMAT&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the format for the lock file. Common values include <b>uv</b> (for <b>uv.lock</b>) or <b>pip</b> (for <b>requirements.txt</b>).<br><br><b><i>--python &lt;VERSION_OR_PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target Python interpreter version (e.g., <b>3.9</b>) or path (e.g., <b>/usr/bin/python3.10</b>) for dependency resolution.<br><br><b><i>--dev</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes development dependencies, typically defined in the <b>[project.optional-dependencies]</b> section of <b>pyproject.toml</b> with a 'dev' extra.<br><br><b><i>--all-extras</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes all optional dependencies (extras) defined for the project in <b>pyproject.toml</b> during resolution.<br><br><b><i>--strict</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Fails the operation if any dependency cannot be resolved or if there are conflicting requirements.<br><br><b><i>--refresh</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignores the <b>uv</b> package cache and re-fetches all package metadata and wheels from the network.<br><br>


title: DESCRIPTION
content:
<i>uv lock</i> is a subcommand of the <b>uv</b> Python package manager, designed to create a deterministic lock file for project dependencies. It efficiently resolves all direct and transitive dependencies specified in <i>pyproject.toml</i> or <i>requirements.txt</i> files, pinning them to exact versions and hashes. This process ensures reproducible builds across different environments and over time, preventing unexpected dependency updates.<br><br><i>uv lock</i> is exceptionally fast due to its Rust implementation and parallel network requests. It generates a <i>uv.lock</i> file by default, or can output to other formats like <i>requirements.txt</i>, making it compatible with various deployment workflows. It supports specifying target Python versions and including development dependencies, providing a robust solution for managing Python project environments.


title: CAVEATS
content:
<i>uv lock</i> requires a <b>pyproject.toml</b> file with a <b>[project]</b> section or a <b>requirements.txt</b> file in the current directory to resolve dependencies. While exceptionally fast, initial runs might take longer as <b>uv</b> builds a local cache of package metadata and wheels.<br><br>The default <b>uv.lock</b> format is specific to <b>uv</b> and is not directly consumable by <b>pip</b> without using the <b>--output-format pip</b> option.


title: DETERMINISM AND REPRODUCIBILITY
content:
<i>uv lock</i> creates a fully deterministic lock file, meaning every dependency (direct and transitive) is pinned to an exact version and, optionally, a cryptographic hash. This guarantees that installing from the lock file will always result in the exact same environment, which is crucial for CI/CD pipelines, team collaboration, and long-term project stability.


title: INTEGRATION WITH PYPROJECT.TOML
content:
While it can process <b>requirements.txt</b> files, <i>uv lock</i> is designed to seamlessly integrate with <b>pyproject.toml</b> and PEP 621 metadata. It automatically detects project dependencies, optional groups (extras), and development dependencies, simplifying modern Python project setup and management.


title: HISTORY
content:
<b>uv</b> was developed by Astral and officially announced in February 2024, aiming to be a faster, next-generation alternative to existing Python package management tools like <b>pip</b> and <b>pip-tools</b>. <i>uv lock</i> is a core component of <b>uv</b>'s strategy for reproducible environments, providing a highly optimized and deterministic dependency resolution and locking mechanism from its inception. Its development focuses on speed and correctness, built in Rust.


title: TLDR
content:
<b>Create or update the project's lockfile</b>`uv lock`<br><b>Check if the lockfile is up-to-date without updating it</b>`uv lock --check`<br><b>Assert that a lockfile exists without checking if it's current</b>`uv lock --check-exists`<br><b>Preview what would be locked without writing the lockfile</b>`uv lock --dry-run`<br><b>Lock a specific Python script instead of the current project</b>`uv lock --script [path/to/script.py]`<br><b>Upgrade all packages to their latest compatible versions</b>`uv lock --upgrade`<br><b>Upgrade only specific packages</b>`uv lock --upgrade-package [package1] --upgrade-package [package2]`


title: SYNOPSIS
content:
<b>k3s server</b> [<i>OPTIONS</i>]<br><b>k3s agent</b> [<i>OPTIONS</i>]<br><b>k3s kubectl</b> [<i>COMMAND</i>]<br><b>k3s crictl</b> [<i>COMMAND</i>]<br><b>k3s ctr</b> [<i>COMMAND</i>]<br><b>k3s etcd-snapshot</b> [<i>COMMAND</i>]<br><b>k3s check-config</b> [<i>OPTIONS</i>]<br><b>k3s install</b><br><b>k3s uninstall</b><br><b>k3s -v | --version</b><br><b>k3s -h | --help</b>


title: PARAMETERS
content:
<b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show version information and exit.<br><br><b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help message for the command or subcommand.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debug logging output.<br><br><b>--config &lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the configuration file path to load.<br><br><b>--token &lt;token&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shared secret token used to join agents or additional servers to the cluster.<br><br><b>--cluster-cidr &lt;CIDR&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;CIDR for the Kubernetes cluster network (server only).<br><br><b>--service-cidr &lt;CIDR&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;CIDR for Kubernetes services (server only).<br><br><b>--datastore-endpoint &lt;endpoint&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Database connection string for an external datastore (e.g., SQLite, PostgreSQL, MySQL; server only).<br><br><b>--disable &lt;component&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable a bundled component, e.g., 'traefik', 'local-storage', 'metrics-server', 'servicelb' (server only).<br><br><b>--node-name &lt;name&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the node (server or agent).<br><br><b>--node-ip &lt;ip&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the IP address of the node (server or agent).<br><br><b>--server &lt;url&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;URL of the K3s server to connect to (agent only).<br><br><b>--label &lt;key=value&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a label to the node (agent only).<br><br><b>--taint &lt;key=value:effect&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add a taint to the node (agent only).<br><br>


title: DESCRIPTION
content:
<b>k3s</b> is a highly available, certified Kubernetes distribution designed for production workloads in resource-constrained environments. Developed by Rancher Labs, it packages a complete Kubernetes cluster into a single, small binary, making it ideal for edge computing, IoT devices, CI/CD pipelines, and development environments. It significantly reduces the operational overhead by bundling essential components like containerd, Flannel, CoreDNS, and a lightweight embedded SQLite datastore, yet offers the flexibility to use external datastores like PostgreSQL or MySQL. Its minimal footprint and ease of installation make it a popular choice for deploying Kubernetes where traditional distributions might be too heavy or complex.


title: CAVEATS
content:
While <b>k3s</b> is highly capable for its intended use cases, it's not a drop-in replacement for full-fledged Kubernetes distributions in all scenarios. Its design prioritizes lightness and ease of use, which means some advanced or highly customized features found in upstream Kubernetes might be simplified or require additional configuration. Specifically, it bundles certain components (like Traefik for Ingress, or Flannel for CNI), which are convenient but might limit flexibility if you prefer other solutions out-of-the-box. Users should also be mindful of resource constraints on the target hardware, as even a lightweight Kubernetes still requires a certain baseline of CPU and memory.


title: INSTALLATION
content:
<b>k3s</b> is typically installed via a single command, which downloads and installs the binary as a system service. For example, to install the server:<br>curl -sfL https://get.k3s.io | sh -<br>This simplicity is a core aspect of its design, enabling rapid deployment on various Linux distributions.


title: BUNDLED TOOLS
content:
One of the key features of <b>k3s</b> is its bundling of essential Kubernetes tools directly within the single <b>k3s</b> binary. This includes <b>kubectl</b>, <b>crictl</b>, and <b>ctr</b>. Users can execute these tools by prefixing them with <b>k3s</b> (e.g., <b>k3s kubectl get nodes</b>), eliminating the need for separate installations and ensuring version compatibility with the running <b>k3s</b> cluster.


title: HISTORY
content:
<b>k3s</b> was first released by Rancher Labs (now part of SUSE) in February 2019. Its creation was driven by the increasing demand for Kubernetes in edge and IoT environments, where traditional Kubernetes distributions were often too resource-intensive and complex to deploy. The project quickly gained traction due to its innovative approach of bundling core components into a single, small binary, simplifying installation and management significantly. Its design principle focuses on being a "lightweight, certified Kubernetes," ensuring compatibility with upstream Kubernetes APIs while minimizing footprint and dependencies. It has since become one of the most popular choices for deploying Kubernetes in non-traditional data center settings.


title: TLDR
content:
<b>Run the embedded kubectl command</b>`k3s kubectl get nodes`<br><b>Take an etcd snapshot of the cluster</b>`k3s etcd-snapshot save`<br><b>Rotate the CA certificate</b>`k3s certificate rotate-ca`<br><b>Manage bootstrap tokens</b>`k3s token list`<br><b>Uninstall K3s and remove all components</b>`k3s-uninstall.sh`


title: SYNOPSIS
content:
<b>flutterfire</b> <i>&lt;command&gt;</i> [<i>options</i>]<br><br>Most commonly used as:<br><b>flutterfire configure</b> [<i>options</i>]


title: PARAMETERS
content:
<b><b>configure</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Initiates the process of generating or updating Firebase configuration files for your Flutter project. This is the most frequently used subcommand.<br><br><b>&nbsp;&nbsp;<b>--project</b> <i>&lt;project_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Firebase project ID to use for configuration. If omitted, the tool will attempt to infer it or prompt for selection.<br><br><b>&nbsp;&nbsp;<b>--platforms</b> <i>&lt;platforms&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of target platforms for which to generate configuration files (e.g., <i>android,ios,web,macos,windows,linux</i>).<br><br><b>&nbsp;&nbsp;<b>--ios-bundle-id</b> <i>&lt;bundle_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the iOS bundle ID for the application. Essential for iOS configuration.<br><br><b>&nbsp;&nbsp;<b>--android-package-name</b> <i>&lt;package_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Android package name for the application. Essential for Android configuration.<br><br><b>&nbsp;&nbsp;<b>--web-app-id</b> <i>&lt;app_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Web app ID. Useful when connecting to an existing Web app in Firebase.<br><br><b>&nbsp;&nbsp;<b>--macos-bundle-id</b> <i>&lt;bundle_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the macOS bundle ID for the application.<br><br><b>&nbsp;&nbsp;<b>--windows-project-name</b> <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Windows project name (e.g., <i>Runner</i>). Defaults to your Flutter project name if not provided.<br><br><b>&nbsp;&nbsp;<b>--linux-project-name</b> <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Linux project name (e.g., <i>Runner</i>). Defaults to your Flutter project name if not provided.<br><br><b>&nbsp;&nbsp;<b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug logging for troubleshooting purposes.<br><br><b>&nbsp;&nbsp;<b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the <i>flutterfire</i> command or a specific subcommand.<br><br><b><b>login</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Authenticates the <i>flutterfire</i> CLI with your Google account, allowing it to interact with your Firebase projects.<br><br><b><b>logout</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Logs out the currently authenticated Google account from the <i>flutterfire</i> CLI.<br><br>


title: DESCRIPTION
content:
The <i>flutterfire</i> command-line tool simplifies the integration of Firebase into Flutter projects. It's part of the official FlutterFire ecosystem, designed to automate the setup and generation of Firebase configuration files (like <i>firebase_options.dart</i>) across various platforms (Android, iOS, Web, macOS, Windows, Linux). This tool significantly reduces the manual effort required to link a Flutter application to a Firebase project, ensuring correct initialization and platform-specific settings. It primarily interacts with your Firebase project via the Firebase CLI and your local Flutter project structure, acting as a bridge between your Flutter codebase and your Firebase backend.


title: CAVEATS
content:
<ul><li>Requires the <B>Flutter SDK</B> to be installed and configured in your system's PATH.</li><li>Requires the <B>Firebase CLI</B> (<i>firebase-tools</i>) to be installed globally and authenticated (you typically run <i>firebase login</i> separately).</li><li>The <i>flutterfire</i> command must be executed from the root directory of your Flutter project.</li><li>For specific platforms, ensure their respective platform directories (e.g., <i>android/</i>, <i>ios/</i>, <i>web/</i>) are generated within your Flutter project (e.g., by running <i>flutter create .</i> or <i>flutter build web</i>).</li></ul>


title: HISTORY
content:
The <i>flutterfire</i> CLI tool was developed as a crucial part of the official FlutterFire development initiative. Its inception aimed to significantly streamline the developer experience for integrating Firebase services into Flutter applications, addressing the complexities of managing cross-platform Firebase configurations. It emerged alongside the expansion of Flutter to diverse platforms like web, desktop, and mobile, providing a robust, automated setup process that mitigates common manual configuration errors. Its evolution is tightly coupled with the development of the FlutterFire packages themselves, ensuring consistent and up-to-date Firebase integration.


title: TLDR
content:
<b>Initialize and configure Firebase for your current Flutter app</b>`flutterfire configure`<br><b>Specify platforms (iOS, Android, web) to support</b>`flutterfire configure --platforms [ios,android,...]`<br><b>Use a specific Firebase project</b>`flutterfire configure --project [project_id]`


title: SYNOPSIS
content:
<b>prowler --cloud azure</b> <i>[OPTIONS] [COMMANDS]</i><br><i>(Note: 'prowler-azure' is not a standalone command, but an invocation pattern for Prowler)</i>


title: PARAMETERS
content:
<b><b>--cloud azure</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Mandatory.</i> Specifies Azure as the target cloud provider for the assessment.<br><br><b><b>-s, --services &lt;SERVICE1,SERVICE2&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of Azure services to scan (e.g., 'compute,network'). If omitted, all services relevant to checks will be scanned.<br><br><b><b>-c, --checks &lt;CHECK1,CHECK2&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of specific Prowler check IDs to run (e.g., 'azure_compute_1,azure_network_1').<br><br><b><b>-g, --groups &lt;GROUP1,GROUP2&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of check groups to run (e.g., 'cis_v1.3.0_azure', 'nist'). This executes all checks within the specified groups.<br><br><b><b>-M, --output-formats &lt;FORMAT1,FORMAT2&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Comma-separated list of desired output formats (e.g., 'csv,json,html').<br><br><b><b>-o, --output-directory &lt;DIRECTORY&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directory where the generated output files will be saved.<br><br><b><b>--subscription &lt;SUBSCRIPTION_ID&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a particular Azure subscription ID to scan. Can be provided multiple times for scanning multiple subscriptions.<br><br><b><b>--tenant-id &lt;TENANT_ID&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a particular Azure tenant ID to scan. Can be provided multiple times for scanning multiple tenants.<br><br><b><b>--azure-cli-auth</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces Prowler to authenticate using the Azure CLI credentials currently logged in.<br><br><b><b>--azure-auth-type &lt;TYPE&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Azure authentication type (e.g., 'cli', 'service-principal').<br><br><b><b>--list-checks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available Prowler checks for Azure.<br><br><b><b>--list-groups</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available Prowler check groups for Azure.<br><br><b><b>-q, --quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses verbose output, showing only critical information.<br><br><b><b>-d, --debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug mode, providing more detailed logs for troubleshooting.<br><br><b><b>-F, --fix</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempts to automatically remediate identified findings (where remediation is available for the check).<br><br>


title: DESCRIPTION
content:
Prowler is a comprehensive open-source command-line tool designed for cloud security best practices assessment, auditing, incident response, and hardening. When referred to as "prowler-azure", it signifies running Prowler specifically against Azure subscriptions and resources. It leverages Azure APIs and the Azure CLI to gather configuration data, identifying misconfigurations, deviations from security benchmarks (like CIS Benchmarks for Azure), and potential vulnerabilities. Prowler for Azure helps security teams ensure continuous compliance with various regulations (e.g., NIST, HIPAA, GDPR) and improve the overall security posture of their Azure deployments. It generates detailed reports in multiple formats, providing actionable insights for remediation. This tool is widely adopted by security professionals, auditors, and DevOps teams for proactive cloud security management.


title: CAVEATS
content:
When using Prowler for Azure:<br><i>Authentication:</i> Requires Azure CLI to be installed and configured with appropriate credentials (e.g., via <b>az login</b> or service principal).<br><i>Permissions:</i> The authenticated identity must have sufficient Azure RBAC permissions to read (and potentially write for <b>--fix</b>) resources within the target subscriptions.<br><i>Performance:</i> Scanning large or complex Azure environments can be time-consuming and may incur API throttling if too many requests are made too quickly.<br><i>Dynamic Environment:</i> Azure services and APIs evolve rapidly, which might lead to occasional false positives or temporary inaccuracies until Prowler's checks are updated.


title: AUTHENTICATION METHODS
content:
Prowler primarily authenticates to Azure using the credentials configured in the Azure CLI. Users must ensure they are logged in via <b>az login</b>. Alternatively, Prowler supports authentication via Azure Service Principals by providing the client ID, secret, and tenant ID through command-line arguments.


title: REPORTING CAPABILITIES
content:
Prowler generates comprehensive security reports that can be invaluable for compliance, auditing, and security posture management. Supported formats include HTML for interactive viewing, JSON for programmatic parsing, and CSV for spreadsheet analysis. These reports detail findings, provide recommendations, and map to relevant compliance frameworks.


title: CUSTOMIZATION AND EXTENSIBILITY
content:
One of Prowler's strengths is its extensibility. Users can contribute or create custom checks tailored to their organization's specific security policies or unique Azure configurations. This allows for highly customized security assessments beyond the standard benchmarks provided by default.


title: HISTORY
content:
Prowler originated as a security assessment tool exclusively for AWS. Due to its popularity and the increasing demand for multi-cloud security solutions, its development expanded to include support for other major cloud providers. Azure support was integrated to address the growing need for automated security auditing and hardening for Azure environments, continuously evolving with new checks and capabilities to align with Azure's services and security benchmarks.


title: TLDR
content:
<b>Run the default set of checks on the current Azure account using Azure CLI authentication</b>`prowler azure --az-cli-auth`<br><b>Run checks for specific Azure subscriptions</b>`prowler azure --az-cli-auth --subscription-ids [subscription_id1 subscription_id2 ...]`<br><b>Authenticate using a service principal via environment variables</b>`prowler azure --sp-env-auth`<br><b>Authenticate using browser login and specify a tenant ID</b>`prowler azure --browser-auth --tenant-id "[XXXXXXXX]"`<br><b>Authenticate using a managed identity (e.g. for Azure VM)</b>`prowler azure --managed-identity-auth`<br><b>Run checks for selected Azure services</b>`prowler azure [[-s|--services]] [defender|iam|...]`<br><b>Run a specific Azure check</b>`prowler azure [[-c|--checks]] [storage_blob_public_access_level_is_disabled]`<br><b>Exclude specific checks or services</b>`prowler azure [[-e|--excluded-checks]] [storage_blob_public_access_level_is_disabled] --exclude-services [defender|iam|...]`


title: SYNOPSIS
content:
<i><br>python -m json.tool</i> [<<i>options</i>>] [<<i>input_file</i>>]<br>or<br><i>command_output</i> | <i>python -m json.tool</i> [<<i>options</i>>]


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits, showing available options and usage.<br><br><b>--sort-keys</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sorts the output of dictionaries by key alphabetically, making the output more deterministic and readable.<br><br><b>--json-lines</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Parses the input as a sequence of JSON objects, where each line in the input is expected to be a complete and valid JSON object. This is useful for processing logs or data streams.<br><br><b>infile</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional positional argument specifying a JSON file to parse. If not provided, the tool reads from standard input (stdin).<br><br>


title: DESCRIPTION
content:
<i><br>python -m json.tool</i> is a built-in utility within Python's standard library that allows users to easily pretty-print, validate, and optionally minify JSON (JavaScript Object Notation) data directly from the command line. It leverages the <i>json</i> module, which provides robust JSON encoding and decoding capabilities.<br><br>When invoked, it reads JSON data from standard input (stdin) by default, or from a specified file. It then parses the data and outputs a beautifully formatted, human-readable version to standard output (stdout). This tool is invaluable for developers, system administrators, and anyone working with JSON, as it helps in quickly inspecting malformed JSON, making large JSON files human-readable, or reformatting them for consistency. It's a convenient way to interact with JSON without writing custom Python scripts, making it a go-to for quick JSON manipulation tasks.


title: CAVEATS
content:
<i><br>python -m json.tool</i> is a basic formatting and validation tool, not a full-fledged JSON processing language like <i>jq</i>. While it performs validation by raising an error on invalid input, its error messages might be generic for complex JSON errors. For very large JSON files, its performance might be slower compared to optimized native utilities. It primarily focuses on pretty-printing and assumes a valid JSON structure for successful formatting.


title: INPUT METHODS
content:
The tool supports various input methods:<br><b>1. From a file:</b> <i>python -m json.tool mydata.json</i><br><b>2. From piped input:</b> <i>cat mydata.json | python -m json.tool</i> or <i>curl https://api.example.com/data | python -m json.tool</i><br><b>3. From interactive standard input:</b> Simply run <i>python -m json.tool</i>, paste or type your JSON, then press <i>Ctrl+D</i> (Unix/Linux) or <i>Ctrl+Z</i> then <i>Enter</i> (Windows) to signal end of input.


title: OUTPUT AND REDIRECTION
content:
The formatted JSON output is always sent to standard output (stdout). This allows for easy redirection to another file (e.g., <i>python -m json.tool data.json > formatted_data.json</i>) or piping to other command-line utilities for further processing (e.g., <i>python -m json.tool data.json | less</i>).


title: IMPLICIT VALIDATION
content:
While there isn't an explicit 'validate only' option, the tool performs implicit validation. If the input data is not valid JSON, it will raise a <i>json.JSONDecodeError</i> and print an error message to standard error (stderr), indicating that the input could not be parsed as JSON. This makes it a quick check for JSON syntax correctness.


title: HISTORY
content:
The <i>json</i> module, which powers <i>json.tool</i>, was introduced into Python's standard library with Python 2.6 (as per PEP 3108) and has been an integral part of it ever since. Its inclusion reflected the rapidly growing adoption of JSON as a primary data interchange format across web services and applications. The <i>json.tool</i> command-line utility was made available as a convenient wrapper around the module's core functionalities, providing an immediate, no-script solution for common JSON manipulation tasks like formatting and validation. This development underscored Python's commitment to providing robust, out-of-the-box tools for modern data handling.


title: TLDR
content:
<b>Pretty-print JSON from a file</b>`python -m json.tool [path/to/file.json]`<br><b>Validate and pretty-print JSON from stdin</b>`echo '[{"key": "value"]}' | python -m json.tool`


title: PARAMETERS
content:
<b>microseconds</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The positive integer representing the number of microseconds for which the process should suspend execution.<br><br>


title: DESCRIPTION
content:
The `usleep` "command" (more commonly a C library function) is used to <b>suspend the execution</b> of the calling process or thread for a specified number of microseconds. Its primary purpose is to introduce short, precise delays in programs or scripts, enabling fine-grained control over timing, which is particularly useful for tasks like polling hardware, debouncing inputs, or synchronizing operations that require brief pauses. While it aims for microsecond granularity, the actual sleep duration might be longer due to system scheduling latency and kernel tick rates. For shell scripting, it's less common as a direct standalone utility compared to `sleep(1)`, which operates on seconds, but it might be available in minimal environments like <i>BusyBox</i>. In modern C/C++ programming, it has largely been superseded by `nanosleep()` for higher precision and better signal handling characteristics.


title: CAVEATS
content:
<b>Deprecation</b>: The `usleep()` function is officially <i>deprecated</i> in POSIX.1-2008. It is recommended to use `nanosleep(2)` instead for new code, as `nanosleep` provides better control over signal handling and nanosecond precision.<br><br><b>Precision and Granularity</b>: Although `usleep` aims for microsecond precision, the actual duration of the sleep is subject to the system's clock resolution and scheduler latency. The process might sleep for longer than the requested duration, especially on busy systems or systems with coarse timer interrupts.<br><br><b>Command Availability</b>: It is crucial to note that `usleep` is primarily a <i>C library function</i> (`usleep(3)`). It is <b>not a standard standalone shell command</b> on most mainstream Linux distributions. If encountered as a command, it's typically provided by utility collections like <i>BusyBox</i>, as a shell built-in in specific environments, or as part of a custom script wrapper.<br><br><b>Interruptibility</b>: Like other sleep functions, `usleep` can be interrupted by signals. Upon interruption, it typically returns early.


title: RETURN VALUE (LIBRARY FUNCTION)
content:
When used as a C library function, `usleep()` typically returns <b>0</b> on success. If an error occurs (e.g., an invalid argument), it returns <b>-1</b>. If the sleep is interrupted by a signal, it returns early.


title: EXAMPLE USAGE (CONCEPTUAL)
content:
To pause execution for 100 milliseconds (100,000 microseconds), if `usleep` were available as a shell command, one would use:<br><br><i>usleep 100000</i><br><br>However, in modern shell scripting, it's generally recommended to use <i>sleep 0.1</i> for fractional second pauses.


title: HISTORY
content:
The `usleep` function has been a part of Unix-like systems for a long time, providing a simple way to introduce pauses with microsecond granularity. It was a common utility in early POSIX standards. However, with the evolution of system requirements for higher precision timing and more robust signal handling, `usleep()` was <i>marked as deprecated</i> in the POSIX.1-2008 standard. Its role has largely been taken over by the `nanosleep()` system call, which offers finer (nanosecond) control and more predictable behavior when signals are involved. Despite its deprecation, `usleep` remains widely supported by C libraries for backward compatibility and is still frequently encountered in existing codebases and simple scripting scenarios where its characteristics are sufficient.


title: TLDR
content:
<b>Delay in microseconds</b>`usleep [microseconds]`<br><b>Execute a specific command after a 500,000 microseconds delay</b>`usleep 500000 && [command]`


title: PARAMETERS
content:
<b><i>SUBCOMMAND</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. The name of a specific <I>uv</I> subcommand (e.g., <I>pip</I>, <I>venv</I>, <I>run</I>, <I>sync</I>) for which to display detailed help. If omitted, general usage information for the <I>uv</I> tool itself is shown, listing all available top-level commands.<br><br>


title: DESCRIPTION
content:
The <I>uv help</I> command is an integral part of the <I>uv</I> Python packaging tool, designed to provide comprehensive usage information.<br><br>While not a standalone executable named <I>uv-help</I>, it is correctly invoked as <B>uv help</B> or <B>uv help &lt;SUBCOMMAND&gt;</B>. This command is crucial for users to navigate the various functionalities offered by <I>uv</I>, a fast and modern alternative to <I>pip</I> and <I>virtualenv</I>.<br><br>When invoked without arguments, <B>uv help</B> displays a general overview of the <I>uv</I> tool, listing all available top-level commands (e.g., <I>pip</I>, <I>venv</I>, <I>run</I>) and their brief descriptions. This serves as an excellent starting point for discovering <I>uv</I>'s capabilities.<br><br>For more specific assistance, users can provide a <I>SUBCOMMAND</I> (e.g., <B>uv help pip</B> or <B>uv help venv</B>). This will display detailed help for that particular subcommand, including all its specific options, arguments, and sometimes examples of its usage. This detailed help is invaluable for understanding the nuances of each <I>uv</I> operation, enabling users to effectively utilize this high-performance Python package manager.


title: CAVEATS
content:
The command <I>uv-help</I> does not exist as a standalone executable; the correct invocation is <B>uv help</B> as a subcommand of the <I>uv</I> tool. Using it requires the <I>uv</I> tool to be installed and available in the system's PATH. The displayed help content can be extensive, especially for subcommands with many options.


title: DISCOVERING AVAILABLE COMMANDS
content:
Running <B>uv help</B> without any arguments is the primary way to discover all top-level commands available within the <I>uv</I> tool. It presents a concise list of commands like <I>pip</I>, <I>venv</I>, <I>run</I>, <I>build</I>, <I>sync</I>, and others, each accompanied by a brief explanation of its purpose. This is essential for new users to grasp the breadth of <I>uv</I>'s functionality and identify the appropriate command for their task.


title: ACCESSING DETAILED SUBCOMMAND INFORMATION
content:
To delve deeper into a specific command, users append its name to <B>uv help</B> (e.g., <B>uv help pip</B> or <B>uv help venv</B>). This action provides a detailed breakdown of the subcommand's syntax, its specific options (both short and long forms), expected arguments, and often practical examples. This level of detail is crucial for advanced usage, understanding command-specific behaviors, and troubleshooting issues.


title: HISTORY
content:
<I>uv</I> is a relatively new, high-performance Python package installer and resolver written in Rust. Developed by Astral (now Rye), it was publicly released in late 2023 and quickly gained significant traction as a faster, more robust alternative to existing tools like <I>pip</I> and <I>virtualenv</I>.<br><br>The <I>help</I> subcommand, a standard feature in well-designed command-line interfaces, was implemented from <I>uv</I>'s inception. Its inclusion reflects the developers' commitment to user-friendliness and discoverability, ensuring users can easily understand and leverage <I>uv</I>'s extensive capabilities without needing to consult extensive external documentation.


title: TLDR
content:
<b>Display general help for uv</b>`uv help`<br><b>Display help for a specific command</b>`uv help [command]`<br><b>Display help for a subcommand</b>`uv help [command] [subcommand]`<br><b>Display help without using a pager</b>`uv help --no-pager [command]`


title: SYNOPSIS
content:
<b>prowler-m365</b> [<b>--tenant-id</b> <i>&lt;ID&gt;</i>] [<b>--profile</b> <i>&lt;NAME&gt;</i>] [<b>--checks</b> <i>&lt;CATEGORY|ID&gt;</i>] [<b>--output-format</b> <i>&lt;FORMAT&gt;</i>] [<b>--list-checks</b>] [<b>--help</b>]


title: PARAMETERS
content:
<b><b>--tenant-id</b> <i>&lt;ID&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Microsoft 365 tenant ID to be audited. This is typically a GUID identifying your M365 organization.<br><br><b><b>--profile</b> <i>&lt;NAME&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a predefined credential profile for authentication. Useful for managing access to multiple M365 tenants or accounts.<br><br><b><b>--checks</b> <i>&lt;CATEGORY|ID&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs specific security checks or a category of checks. For example, <i>--checks MFA</i> for Multi-Factor Authentication related checks, or <i>--checks EXO-001</i> for a specific Exchange Online check.<br><br><b><b>--output-format</b> <i>&lt;FORMAT&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the format of the output report. Common formats might include <i>json</i>, <i>csv</i>, <i>html</i>, or <i>text</i>.<br><br><b><b>--report-name</b> <i>&lt;NAME&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a custom name for the generated security report file.<br><br><b><b>--list-checks</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a comprehensive list of all available security checks, often categorized by M365 service or security area.<br><br><b><b>--exclude-checks</b> <i>&lt;CATEGORY|ID&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Excludes specific checks or categories of checks from the audit run, useful for focusing on particular areas or skipping irrelevant checks.<br><br><b><b>--config-file</b> <i>&lt;PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a path to a configuration file containing settings, credentials, or check exclusions.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message detailing command usage and available options.<br><br>


title: DESCRIPTION
content:
The command <b>prowler-m365</b> refers to a conceptual or specialized tool designed to perform security assessments and best practices checks within Microsoft 365 environments. <br><br>While the core Prowler tool (prowler-cloud/prowler) primarily focuses on cloud providers like AWS, Azure (IaaS/PaaS), and GCP, <b>prowler-m365</b> extends this audit philosophy to the SaaS offerings of Microsoft 365. <br><br>Its purpose is to identify misconfigurations, weak security settings, and deviations from recommended best practices across various M365 services such as Entra ID (formerly Azure AD), Exchange Online, SharePoint Online, and Microsoft Teams. It would typically leverage Microsoft Graph API or PowerShell cmdlets to gather configuration data and compare it against a set of predefined security controls, often aligned with industry standards like CIS Benchmarks or NIST guidelines. <br><br><i>Note: This command is not part of the official Prowler Cloud Security tool's distribution and is not a standard, universally available Linux command. It represents a hypothetical or community-driven extension for M365-specific auditing.</i>


title: CAVEATS
content:
The command <b>prowler-m365</b> is not a standard command distributed with the official Prowler Cloud Security tool. It represents a conceptual or specialized community-driven tool designed to bring Prowler-like security auditing capabilities to Microsoft 365 environments. Its actual existence, features, and usage depend entirely on specific custom implementations or third-party projects. Users should verify the source and security of any such tool before deployment. It would typically require appropriate administrative permissions (e.g., Global Reader, Security Reader, or specific API permissions via an Azure AD app registration) to access M365 configuration data.


title: <I>AUTHENTICATION REQUIREMENTS</I>
content:
For <b>prowler-m365</b> to function, it would require proper authentication to the Microsoft 365 tenant. This typically involves registering an application in Azure AD (Entra ID) and granting it the necessary API permissions (e.g., Microsoft Graph API permissions like <i>Directory.Read.All</i>, <i>User.Read.All</i>, <i>Exchange.Read.All</i>). Authentication methods could include client credentials (client ID and secret/certificate) or device code flow for interactive logins.


title: <I>SCOPE OF CHECKS</I>
content:
A comprehensive <b>prowler-m365</b> tool would likely perform checks across various M365 services, including:<br><b>Entra ID (Azure AD)</b>: User/group configurations, MFA status, external collaboration settings, conditional access policies, privileged roles.<br><b>Exchange Online</b>: Mail flow rules, anti-malware/anti-spam policies, mailbox audit logging, public folder settings.<br><b>SharePoint Online</b>: External sharing policies, site permissions, anonymous access settings.<br><b>Microsoft Teams</b>: Guest access controls, messaging policies, sensitive information protection.<br><b>General M365 Tenant Settings</b>: Audit log retention, service health, security defaults, compliance policies.


title: HISTORY
content:
The concept of auditing cloud environments for security misconfigurations gained significant traction with the rise of cloud adoption. Prowler, initially designed for AWS, emerged as a prominent open-source tool for this purpose. As organizations increasingly adopted Microsoft 365 for productivity and collaboration, the need for similar security auditing capabilities for SaaS environments became apparent. <br><br>While the official Prowler tool extends to Azure (PaaS/IaaS), a direct, comprehensive module for Microsoft 365 (SaaS) is not part of its core distribution. This led to the conceptualization or development of tools like <b>prowler-m365</b> by the community or individual organizations, aiming to bridge this gap by applying Prowler's audit philosophy to the unique aspects of M365 configuration and compliance, driven by demands for stricter governance and security posture management.


title: TLDR
content:
<b>Run Prowler with combined service principal and user credentials</b>`prowler m365 --env-auth`<br><b>Authenticate using a service principal</b>`prowler m365 --sp-env-auth`<br><b>Authenticate using the Azure CLI</b>`prowler m365 --az-cli-auth`<br><b>Authenticate using a browser and specify the tenant ID</b>`prowler m365 --browser-auth --tenant-id "[XXXXXXXX]"`<br><b>Run a specific Microsoft 365 check</b>`prowler m365 [[-c|--checks]] [etcd_enm365_onedrive_sharing_enabledcryption]`<br><b>Exclude specific checks</b>`prowler m365 [[-e|--excluded-checks]] [m365_onedrive_sharing_enabled]`


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show general help options.<br><br><b>--help-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show all help options, including GStreamer specific ones.<br><br><b>--help-gst</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show only GStreamer specific options.<br><br><b>--monitor-all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitor and display all types of GStreamer devices.<br><br><b>--monitor-audio-source</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitor and display audio input devices.<br><br><b>--monitor-audio-sink</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitor and display audio output devices.<br><br><b>--monitor-video-source</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitor and display video input devices.<br><br><b>--monitor-video-sink</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Monitor and display video output devices.<br><br><b>--add-types=TYPES</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a comma-separated list of GstDeviceMonitor type names to monitor (e.g., <i>Audio/Source,Video/Sink</i>).<br><br><b>--remove-types=TYPES</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a comma-separated list of GstDeviceMonitor type names to ignore.<br><br><b>--show-caps</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the detailed capabilities (formats, resolutions, etc.) for each detected device.<br><br><b>--unique</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show only unique devices, preventing duplicate entries for the same physical hardware.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show version information for <i>gst-device-monitor-1.0</i> and <b>GStreamer</b>.<br><br><b>--gst-version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show <b>GStreamer</b> version.<br><br><b>--gst-debug-level=LEVEL</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the <b>GStreamer</b> debug level (0=none, 1=error, 2=warn, 3=fixme, 4=info, 5=debug, 6=log, 7=trace).<br><br><b>--gst-debug-no-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable colored debug output.<br><br><b>--gst-debug-disable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable all <b>GStreamer</b> debug output.<br><br><b>--gst-debug-help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show <b>GStreamer</b> debugging options.<br><br><b>--gst-fatal-warnings</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treat <b>GStreamer</b> warnings as fatal errors, causing the application to exit.<br><br><b>--gst-debug-categories=CATEGORIES</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable or disable specific <b>GStreamer</b> debug categories. Prefix with '-' to disable (e.g., <i>GST_ELEMENT_FACTORY:-GST_PLUGIN_LOADING</i>).<br><br><b>--gst-plugin-load=PLUGINS</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force loading of specific <b>GStreamer</b> plugins (comma-separated list of plugin names).<br><br><b>--gst-plugin-path=PATH</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add directories to the <b>GStreamer</b> plugin search path.<br><br><b>--gst-disable-registry-update</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not update the <b>GStreamer</b> plugin registry on startup.<br><br><b>--gst-disable-segtrap</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable the segmentation fault handler.<br><br><b>--gst-enable-segtrap</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable the segmentation fault handler (default).<br><br><b>--gst-license</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the <b>GStreamer</b> license information.<br><br>


title: DESCRIPTION
content:
<br>The <i>gst-device-monitor-1.0</i> command is a powerful diagnostic and inspection tool within the <b>GStreamer</b> multimedia framework. It allows users and developers to list and monitor available audio and video capture devices (sources), as well as audio and video playback devices (sinks) that <b>GStreamer</b> can recognize and utilize on a system. It provides detailed information about each device, including its name, class, properties, and crucially, its capabilities (supported formats, resolutions, frame rates, etc.), which are essential for configuring <b>GStreamer</b> pipelines. <br><br>This tool is invaluable for troubleshooting device detection issues, verifying hardware compatibility, or simply understanding the multimedia device landscape of a Linux system from <b>GStreamer</b>'s perspective. It offers options to filter by device type and to display comprehensive capability sets, making it a go-to utility for anyone working with multimedia applications built upon <b>GStreamer</b>.


title: CAVEATS
content:
<br><i>gst-device-monitor-1.0</i> relies on <b>GStreamer</b>'s installed plugins to detect devices. If specific hardware requires proprietary or non-standard plugins, they must be correctly installed and configured for the device to appear in the output. <br><br>The output can be very verbose, especially when displaying full capabilities or monitoring all device types, which might require piping to tools like <b>grep</b> or <b>less</b> for easier navigation. <br><br>Device detection is dependent on the underlying operating system's device management and driver support. If a device is not properly recognized by the kernel, <b>GStreamer</b> (and thus this tool) will not be able to see it.


title: GSTREAMER ENVIRONMENT VARIABLES
content:
<br>The behavior of <i>gst-device-monitor-1.0</i> can be influenced by standard <b>GStreamer</b> environment variables:<br><br><b>GST_DEBUG</b>: Controls the debug output level and categories (e.g., <i>export GST_DEBUG='*:4'</i> for info level).<br><br><b>GST_PLUGIN_PATH</b>: Specifies additional directories where <b>GStreamer</b> should search for plugins (e.g., <i>export GST_PLUGIN_PATH=/usr/local/lib/gstreamer-1.0</i>).<br><br><b>GST_REGISTRY_FORK</b>: Can be set to <i>no</i> to disable forking during registry updates, sometimes useful for debugging.


title: HISTORY
content:
<br>The <i>gst-device-monitor-1.0</i> command is part of the <b>GStreamer 1.x</b> series, which represents a significant evolution from the older <b>GStreamer 0.10</b> series. Introduced to provide a more robust and consistent API, <b>GStreamer 1.x</b> brought improved device management capabilities. This command specifically emerged as a dedicated tool to centralize and simplify the process of identifying and inspecting multimedia hardware devices from a <b>GStreamer</b> perspective, making it easier for developers and users to diagnose issues and build pipelines without needing to write custom code. Its development reflects <b>GStreamer</b>'s ongoing commitment to comprehensive and user-friendly debugging tools.


title: SEE ALSO
content:
<b>gst-inspect-1.0(1)</b>: Inspect <b>GStreamer</b> plugins and elements., <b>gst-launch-1.0(1)</b>: Build and test <b>GStreamer</b> pipelines from the command line., <b>gst-discoverer-1.0(1)</b>: Extract information from media files and streams., <b>v4l2-ctl(1)</b>: Control Video4Linux2 devices (often relevant for video sources).


title: TLDR
content:
<b>List all current devices</b>`gst-device-monitor-1.0`<br><b>List all current devices and monitor for any changes</b>`gst-device-monitor-1.0 [[-f|--follow]]`<br><b>List devices of a specific type</b>`gst-device-monitor-1.0 [Audio|Video]/[Source|Sink]`


title: DESCRIPTION
content:
The <I>uv-version</I> command, most commonly invoked as <B>uv version</B>, provides detailed version information about the <I>uv</I> executable and the current Python environment. <I>uv</I> is a modern, high-performance Python package installer and resolver written in Rust, designed as a faster and more robust alternative to traditional tools like <I>pip</I>.<br><br>This command is invaluable for debugging, verifying the correct installation of <I>uv</I>, and understanding the Python environment in which <I>uv</I> is operating. The output typically includes the version of the <I>uv</I> binary itself, the Python interpreter's version and executable path, details about the active virtual environment (if one is in use), and system-specific information such as the operating system and architecture. It helps users and developers quickly ascertain the state of their Python development setup.


title: CAVEATS
content:
The command <I>uv-version</I> is generally expected to be an alias or symlink to <B>uv version</B>, which is the standard subcommand invocation within the <I>uv</I> ecosystem. <I>uv</I> itself is a rapidly evolving tool; therefore, its output format and specific features may change between versions.<br>As a new tool, its stability and feature set are subject to ongoing development and refinement.


title: TYPICAL OUTPUT
content:
The output of <B>uv-version</B> (or <B>uv version</B>) typically includes:<br><br><ul><li><I>uv</I> version (e.g., <I>uv 0.1.x</I>)</li><li>Python version and executable path (e.g., <I>Python 3.x.x (path_to_python)</I>)</li><li>Virtual environment details (if active, e.g., <I>venv at path_to_venv</I>)</li><li>Operating system and architecture (e.g., <I>linux-x86_64</I> or <I>windows-x86_64</I>)</li></ul>This detailed output is extremely useful for troubleshooting and reporting issues effectively.


title: NO OPTIONS
content:
The <B>uv-version</B> command, like <B>uv version</B>, does not accept any additional command-line options or arguments. Its sole purpose is to display the version information.


title: HISTORY
content:
<I>uv</I> was developed by Astral (now Rye) and publicly launched in early 2024 as a groundbreaking, high-performance alternative to existing Python package management tools. Built entirely in Rust, its primary goal is to provide significantly faster dependency resolution and package installation compared to <I>pip</I> and <I>pip-tools</I>. The <B>version</B> command has been a fundamental utility from its inception, enabling users to quickly check their <I>uv</I> installation and environment details.


title: TLDR
content:
<b>Display the current project version</b>`uv version`<br><b>Set the project version to a specific value</b>`uv version [1.2.3]`<br><b>Bump the project version using semantic versioning</b>`uv version --bump [major|minor|patch]`<br><b>Preview version changes without writing to pyproject.toml</b>`uv version --bump [patch] --dry-run`<br><b>Update version for a specific package in a workspace</b>`uv version --package [package_name] [1.2.3]`<br><b>Display version in JSON format</b>`uv version --output-format json`


title: TLDR
content:
<b>Run the default set of checks on the AWS account</b>`prowler aws`<br><b>Use a custom AWS profile and filter audited regions</b>`prowler aws [[-p|--profile]] [custom-profile] [[-f|--filter-region]] [us-east-1 eu-south-2 ...]`<br><b>Run checks for selected AWS services</b>`prowler aws [[-s|--services]] [s3|ec2|...]`<br><b>Run a specific AWS check</b>`prowler aws [[-c|--checks]] [s3_bucket_public_access]`<br><b>Exclude specific checks or services</b>`prowler aws [[-e|--excluded-checks]] [s3_bucket_public_access] --exclude-services [s3|ec2|...]`


title: TLDR
content:
<b>Combine multiple .po files into one</b>`msgcat [file1.po file2.po ...] [[-o|--output-file]] [combined.po]`<br><b>Combine input files listed in a text file</b>`msgcat [[-f|--files-from]] [path/to/file_list.txt] [[-o|--output-file]] [combined.po]`<br><b>Set the output encoding (e.g. UTF-8)</b>`msgcat [[-t|--to-code]] [UTF-8] [input.po] [[-o|--output-file]] [output.po]`<br><b>Output only unique messages (appearing in one file only)</b>`msgcat [[-u|--unique]] [file1.po file2.po ...] [[-o|--output-file]] [unique.po]`<br><b>Use the first available translation for duplicate entries</b>`msgcat --use-first [file1.po file2.po ...] [[-o|--output-file]] [output.po]`<br><b>Display help</b>`msgcat [[-h|--help]]`


title: PARAMETERS
content:
<b><I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the project directory containing a <I>pyproject.toml</I> or <I>setup.py</I> file. Defaults to the current directory if not specified.<br><br><b><b>--sdist</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds a source distribution (<I>.tar.gz</I> file) of the project.<br><br><b><b>--wheel</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds a wheel (<I>.whl</I> file) of the project.<br><br><b><b>--output-dir</b> <I>DIR</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Directory where the built packages will be placed. Defaults to <I>./dist</I>.<br><br><b><b>--no-build-isolation</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable build isolation. The build backend will be invoked in the current environment instead of an isolated one.<br><br><b><b>--no-clean</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not clean up the temporary build directory after building.<br><br><b><b>--config-setting</b> <I>KEY=VALUE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pass a configuration setting to the build backend (e.g., <I>--config-setting="--build-option=--my-flag"</I>).<br><br><b><b>--python</b> <I>PYTHON_VERSION_OR_PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the Python interpreter to use for the build environment (e.g., <I>3.10</I>, <I>python3</I>, or a full path).<br><br><b><b>--index-url</b> <I>URL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Base URL of the Python Package Index (default: <I>https://pypi.org/simple</I>).<br><br><b><b>--extra-index-url</b> <I>URL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Additional URL of a Python Package Index to use for package lookup.<br><br><b><b>--find-links</b> <I>PATH_OR_URL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Look for packages in local directories or on given URLs. Supports directory paths and file://, http://, https:// URLs.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more details about the build process.<br><br><b><b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress all output except for errors.<br><br><b><b>--offline</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Operate in offline mode, refusing to make network requests.<br><br><b><b>--cache-dir</b> <I>DIR</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the directory for <I>uv</I>'s cache.<br><br><b><b>--no-cache</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disable <I>uv</I>'s caching mechanism.<br><br><b><b>--strict</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable strict mode, treating warnings as errors.<br><br>


title: DESCRIPTION
content:
The <b>uv build</b> command, part of the <I>uv</I> Python package manager, is designed for efficiently building Python source distributions (<I>sdists</I>) and wheels (<I>wheels</I>) from a local project directory. It serves as a fast, modern alternative to traditional Python packaging tools like <I>pip build</I> or directly invoking <I>setup.py bdist_wheel</I>.<br><br><b>uv build</b> leverages <I>uv</I>'s Rust-based performance and robust dependency resolution capabilities to ensure quick and reliable builds. It automatically detects the project's build backend (e.g., setuptools, hatch, flit) and invokes it within an isolated environment by default, preventing conflicts with the host system's Python environment. Users can specify whether to build an sdist, a wheel, or both, and control output directories and various build-time configurations, making it a versatile tool for packaging Python projects for distribution or deployment.


title: CAVEATS
content:
<b>uv build</b> is a powerful and fast tool, but it's important to be aware of its nuances:<br><br>1. <b>Build Backend Compatibility:</b> While <I>uv</I> aims for broad compatibility, ensure your project's build backend (<I>setuptools</I>, <I>hatch</I>, <I>flit</I>, etc.) is correctly configured in <I>pyproject.toml</I>.<br>2. <b>Isolated Builds:</b> By default, <I>uv build</I> uses isolated build environments. If your build process relies on specific system-level dependencies or environment variables, you might need to adjust them or use <I>--no-build-isolation</I> (though generally not recommended).<br>3. <b>Maturity:</b> <I>uv</I> is a relatively new project, and while stable for many use cases, it might still be actively developing new features or refining existing ones. Always refer to the official <I>uv</I> documentation for the latest best practices and any breaking changes.


title: BUILD ISOLATION
content:
By default, <b>uv build</b> creates a temporary isolated environment to install build-time dependencies (specified in <I>build-system.requires</I> in <I>pyproject.toml</I>). This prevents interference with your global or project-specific Python environment and ensures reproducible builds. If you need to disable this for specific reasons (e.g., complex native dependencies that cannot be easily isolated), use the <I>--no-build-isolation</I> flag.


title: OUTPUT LOCATION
content:
Built packages (sdist and wheel) are, by default, placed in a <I>dist/</I> directory located in your project's root. You can customize this output location using the <I>--output-dir</I> option, providing a path to an existing or new directory where the build artifacts should be saved.


title: HISTORY
content:
The <I>uv</I> project, including its build functionality, was developed by Astral, a company founded by Charlie Marsh. It emerged in late 2023 as a high-performance, Rust-based alternative to existing Python packaging tools like <I>pip</I> and <I>venv</I>. The motivation behind <I>uv</I> was to drastically improve the speed and reliability of Python dependency management and project setup. The <I>build</I> command specifically addresses the need for a fast, robust way to create distributable Python packages, integrating seamlessly with <I>uv</I>'s resolver and installer to handle build-time dependencies efficiently. Its development represents a significant step towards modernizing and accelerating the Python packaging ecosystem.


title: TLDR
content:
<b>Build a package in the current directory</b>`uv build`<br><b>Build a package from a specific directory</b>`uv build [path/to/directory]`<br><b>Build only a wheel (skip source distribution)</b>`uv build --wheel`<br><b>Build only a source distribution (skip wheel)</b>`uv build --sdist`<br><b>Build and output to a specific directory</b>`uv build [[-o|--out-dir]] [path/to/output]`<br><b>Build a specific package in a workspace</b>`uv build --package [package_name]`<br><b>Build all packages in the workspace</b>`uv build [[--all|--all-packages]]`<br><b>Build with a specific Python interpreter</b>`uv build [[-p|--python]] [python3.11]`


title: SYNOPSIS
content:
<b>pkgz</b> <i>&lt;command&gt;</i> [<i>options</i>] [<i>arguments</i>]<br><br><b>Examples:</b><br><b>pkgz install</b> <i>&lt;package_name&gt;</i> [<i>&lt;package_name2&gt;</i> ...]<br><b>pkgz remove</b> <i>&lt;package_name&gt;</i><br><b>pkgz update</b> [<i>&lt;package_name&gt;</i>]<br><b>pkgz search</b> <i>&lt;keyword&gt;</i><br><b>pkgz list</b><br><b>pkgz info</b> <i>&lt;package_name&gt;</i>


title: PARAMETERS
content:
<b><b>install</b> <i>&lt;package_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs one or more specified software packages onto the system. Requires root privileges.<br><br><b><b>remove</b> <i>&lt;package_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes a specified software package from the system. Requires root privileges.<br><br><b><b>update</b> [<i>&lt;package_name&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Updates all installed packages on the system or a specific package if named. Requires root privileges.<br><br><b><b>search</b> <i>&lt;keyword&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Searches for available packages in the repositories that match the given keyword.<br><br><b><b>list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all currently installed software packages on the system.<br><br><b><b>info</b> <i>&lt;package_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed information about a specified package, such as its version, description, and dependencies.<br><br><b><b>-y</b>, <b>--yes</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assumes 'yes' to all prompts, running non-interactively.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of the output, showing more details about the operation.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses output, running silently unless an error occurs.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available commands and options.<br><br>


title: DESCRIPTION
content:
<i><br>Please note: The command <b>pkgz</b> is not a standard or widely recognized Linux command. This analysis is based on a hypothetical interpretation of what such a command could be, designed to serve as a simplified, cross-distribution wrapper for common package management tasks.</i><br><br>The hypothetical <b>pkgz</b> command aims to provide a consistent and user-friendly interface for managing software packages across various Linux distributions. Its primary goal is to abstract away the specific syntax differences between underlying package managers like <b>apt</b> (Debian/Ubuntu), <b>yum</b>/<b>dnf</b> (Red Hat/Fedora), and <b>pacman</b> (Arch Linux).<br><br>By using <b>pkgz</b>, users would theoretically be able to perform operations such as installing, removing, updating, and searching for packages with a single, unified command structure, regardless of the distribution they are using. This approach would simplify system administration tasks for users who work with multiple Linux environments or prefer a more streamlined command-line experience.


title: CAVEATS
content:
<i><br>It is crucial to reiterate that <b>pkgz</b> is a hypothetical command.</i><br><br><b>Not Standard:</b> This command does not exist in standard Linux distributions or as a widely recognized utility. Its analysis here is purely conceptual.<br><b>Underlying Reliance:</b> If it were to exist, <b>pkgz</b> would depend entirely on the presence and proper functioning of the distribution's native package manager (e.g., <b>apt</b>, <b>yum</b>, <b>dnf</b>, <b>pacman</b>).<br><b>Privileges:</b> Most package management operations (install, remove, update) require root user privileges, meaning <b>pkgz</b> commands would typically need to be run with <b>sudo</b>.<br><b>Feature Limitations:</b> A hypothetical wrapper like <b>pkgz</b> might not expose all advanced or nuanced features of the underlying native package managers, focusing only on the most common operations.


title: DESIGN PHILOSOPHY (HYPOTHETICAL)
content:
The envisioned design philosophy for <b>pkgz</b> would prioritize simplicity, consistency, and ease of use. It would aim to lower the learning curve for new Linux users and increase efficiency for experienced administrators by providing a single, intuitive syntax for the most frequently performed package management tasks. The command would internally detect the host distribution and execute the appropriate native package manager commands, acting as an intelligent dispatcher.


title: POTENTIAL IMPLEMENTATION (HYPOTHETICAL)
content:
A practical implementation of <b>pkgz</b> could be achieved through a shell script (e.g., Bash) or a scripting language like Python. It would involve:<br>1. Detecting the Linux distribution (e.g., by checking <b>/etc/os-release</b>).<br>2. Mapping <b>pkgz</b> subcommands (e.g., <b>install</b>, <b>remove</b>) to the corresponding native package manager commands (e.g., <b>apt install</b>, <b>dnf remove</b>).<br>3. Passing arguments and options appropriately to the underlying commands.<br>4. Handling errors and providing standardized output where possible.


title: HISTORY
content:
As a hypothetical command, <b>pkgz</b> has no actual development history. However, its conceptual basis is rooted in the common desire for a unified interface to manage software packages across the diverse Linux ecosystem. Users and developers often create aliases or custom scripts to simplify package management commands, especially when working with multiple distributions. The idea behind <b>pkgz</b> reflects this ongoing effort to streamline command-line interactions and provide a more consistent user experience, abstracting the complexities of underlying, distribution-specific tools.


title: SEE ALSO
content:
<b>apt</b>(8) - Debian/Ubuntu package management tool, <b>yum</b>(8) - RPM-based package management tool (older RHEL/CentOS/Fedora), <b>dnf</b>(8) - RPM-based package management tool (newer RHEL/CentOS/Fedora), <b>pacman</b>(8) - Arch Linux package management tool, <b>dpkg</b>(8) - Debian package tool, <b>rpm</b>(8) - RPM package tool, <b>nala</b>(1) - Frontend for APT (example of a wrapper)


title: SYNOPSIS
content:
The command 'prowler-aws' conceptually refers to running the <b>prowler</b> command with options tailored for AWS environments. <br>Its common syntax is: <br><b>prowler [-p aws] [OPTIONS]</b> <br><br>Where <b>-p aws</b> explicitly sets the provider to AWS (though it's often the default), and <b>[OPTIONS]</b> represents various parameters to control the scan.


title: PARAMETERS
content:
<b><b>-p, --provider &lt;provider&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the cloud provider to scan. For AWS, use '<i>aws</i>'. While often default, explicit specification ensures AWS targeting.<br><br><b><b>-r, --region &lt;region&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the AWS region(s) to include in the scan. Can be specified multiple times for multiple regions, or '<i>all</i>' to scan all regions.<br><br><b><b>-f, --profile &lt;profile_name&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a specific AWS CLI profile from your credentials file (<i>~/.aws/credentials</i>) for authentication.<br><br><b><b>-c, --check &lt;check_id&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs only the specified security check(s). Multiple checks can be provided as a comma-separated list.<br><br><b><b>-g, --group &lt;group_id&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes all checks belonging to a specific security group, e.g., '<i>iam</i>' or '<i>s3</i>'.<br><br><b><b>-C, --compliance &lt;framework&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scans for compliance with a specific framework, e.g., '<i>cis_1.2_aws</i>', '<i>pci_3.2.1</i>', or '<i>hipaa</i>'.<br><br><b><b>-M, --output-format &lt;format&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the output report format (e.g., '<i>json</i>', '<i>csv</i>', '<i>html</i>', '<i>plain</i>').<br><br><b><b>-o, --output-dir &lt;directory&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory where the generated reports will be saved.<br><br><b><b>-q, --quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses the display of the banner and progress updates during the scan, showing only findings.<br><br><b><b>-S, --severity &lt;level&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters findings by severity level (e.g., '<i>critical</i>', '<i>high</i>', '<i>medium</i>', '<i>low</i>', '<i>informational</i>').<br><br>


title: DESCRIPTION
content:
<i>Prowler</i> is an open-source tool designed for Cloud Security Posture Management (CSPM), providing comprehensive security assessments, audits, incident response, and continuous monitoring for AWS environments. <br><br>It functions by interacting with AWS APIs to collect configuration data across your accounts and services. By analyzing this data against a vast database of security best practices and compliance benchmarks (including CIS, PCI-DSS, HIPAA, GDPR, SOC2, NIST 800-53, and AWS FTR), <i>Prowler</i> identifies misconfigurations, vulnerabilities, and deviations from security standards. <br><br>As an agentless tool, it requires no installation on your AWS instances. Its output helps pinpoint potential security risks, enabling organizations to strengthen their cloud security posture and maintain regulatory compliance.


title: CAVEATS
content:
Using <i>Prowler</i> requires appropriate AWS IAM permissions, typically <i>ReadOnlyAccess</i>, to gather configuration data; insufficient permissions will result in incomplete scans. <br>Scans on large AWS accounts or multiple regions can be time-consuming and may occasionally encounter AWS API rate limiting. <br>The experimental '<i>--fix</i>' option should be used with extreme caution as it attempts to make changes to your AWS environment.


title: REQUIRED IAM PERMISSIONS
content:
For <i>Prowler</i> to function correctly, the AWS user or role executing the command must possess sufficient IAM permissions. A common recommendation is to attach the '<i>SecurityAudit</i>' or '<i>ReadOnlyAccess</i>' AWS managed policy, though a custom policy with more granular read-only permissions specific to <i>Prowler</i>'s checks is ideal for production environments.


title: COMPLIANCE FRAMEWORKS INTEGRATION
content:
A key strength of <i>Prowler</i> is its extensive integration with various industry compliance frameworks and security benchmarks. Users can easily audit their AWS environment against standards such as CIS Benchmarks, PCI DSS, GDPR, HIPAA, SOC2, and NIST 800-53, simplifying the process of demonstrating compliance to auditors.


title: HISTORY
content:
<i>Prowler</i> was initially developed by Toni de la Fuente to address internal cloud security assessment needs. It was open-sourced and rapidly gained traction within the cybersecurity community due to its effectiveness in auditing AWS environments. Over time, its capabilities expanded beyond just AWS to include other major cloud providers like Azure and GCP, evolving into a leading multi-cloud CSPM tool.


title: PARAMETERS
content:
<b><I>template-name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. The name of the template to use (e.g., 'aws-typescript', 'azure-python'). If omitted, Pulumi will prompt the user to select one from a list of available templates.<br><br><b><b>--dir</b> <I>directory</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the directory where the new project should be created. If not provided, the current working directory is used.<br><br><b><b>--name</b> <I>project-name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assign a specific name to the new Pulumi project. If not provided, Pulumi will prompt for it.<br><br><b><b>--description</b> <I>description</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provide a description for the new Pulumi project, which will be stored in the Pulumi.yaml file.<br><br><b><b>--stack</b> <I>stack-name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Create an initial stack with the given name. If not provided, Pulumi will prompt for a stack name.<br><br><b><b>--secrets-provider</b> <I>provider</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Define the type of secrets manager to use for the new project. Supported values include 'default' (Pulumi Service), 'passphrase', 'awskms', 'azurekeyvault', or 'gcpkms'.<br><br><b><b>--config-passphrase</b> <I>passphrase</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a passphrase to encrypt secrets when using the 'passphrase' secrets provider. Can also be set via the PULLUMI_CONFIG_PASSPHRASE environment variable.<br><br><b><b>--generate-only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only generate the project files from the template; do not create a stack, log in, or install dependencies.<br><br><b><b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overwrite existing files in the target directory if they conflict with template files.<br><br><b><b>--yes</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip prompts and automatically accept default values or non-interactive choices during project creation.<br><br><b><b>--offline</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not attempt to contact the Pulumi service for templates or configuration. Only use locally available templates.<br><br><b><b>--template</b> <I>path-or-url</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a local path to a template directory or a URL to a git repository containing a template.<br><br><b><b>--logtostderr</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Log all output messages to standard error instead of standard output.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose logging to display more detailed information during command execution.<br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debug logging, providing the most detailed output for troubleshooting.<br><br>


title: DESCRIPTION
content:
The <b>pulumi new</b> command initializes a new Pulumi project from a pre-defined template. <br><br>Pulumi projects are directories containing source code that defines infrastructure as code (IaC) using familiar programming languages like TypeScript, Python, Go, C#, Java, or F#. When executed, <b>pulumi new</b> typically prompts the user for essential details such as the project name, stack name, and optionally, a project description. It then fetches the specified template (either from the official Pulumi template registry, a local path, or a remote URL), copies the template files into the target directory, and can optionally install project dependencies (e.g., npm packages for Node.js, pip packages for Python). This command significantly streamlines the process of getting started with infrastructure as code by providing a boilerplate structure for various cloud providers (AWS, Azure, GCP, Kubernetes) and application types, enabling developers to focus on infrastructure logic rather than initial setup.


title: CAVEATS
content:
The command <b>pulumi new</b> typically requires an active internet connection to download templates from the Pulumi registry unless the <b>--offline</b> flag is used or a local template path is provided. It also assumes the Pulumi CLI is installed and configured. If prompts are skipped using <b>--yes</b>, ensure all necessary configuration (like project name, stack name) is provided via command-line flags, otherwise the command might fail or create a project with default/undesired settings.<br><br>When using the `passphrase` secrets provider, securely managing the passphrase is crucial, as its loss will make encrypted secrets irrecoverable.


title: INTERACTIVE PROMPTS
content:
By default, <b>pulumi new</b> is interactive. If a template name is not provided, it presents a list of available templates. It also prompts for project name, description, and stack name, allowing users to configure their new project dynamically. These prompts can be bypassed using specific command-line flags like <b>--yes</b> and providing values for required parameters.


title: TEMPLATE SOURCES
content:
Templates can be sourced from:<br>1. The official Pulumi template registry (default)<br>2. A local file path (e.g., <b>--template ./my-local-template</b>)<br>3. A Git repository URL (e.g., <b>--template https://github.com/my-org/my-templates#main</b>)<br>This flexibility allows organizations to maintain their own standardized infrastructure templates.


title: HISTORY
content:
The <b>pulumi new</b> command is an integral part of the Pulumi CLI, which was first publicly released in 2018. It reflects Pulumi's core philosophy of enabling developers to define cloud infrastructure using general-purpose programming languages. From its inception, the `new` command has provided a streamlined entry point for users to quickly bootstrap infrastructure projects across various cloud providers and programming languages, continually evolving with new template types and configuration options as Pulumi's ecosystem expands.


title: PARAMETERS
content:
<b><b>-o</b> <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output to FILE instead of standard output (stdout).<br><br><b><b>-s</b> <i>SIZE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify module size in pixels (default: 3). A larger size results in a physically larger QR code image.<br><br><b><b>-l</b> <i>LEVEL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set error correction level (L, M, Q, H). Higher levels provide more resilience but result in larger QR codes.<br><br><b><b>-t</b> <i>TYPE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify output image type (PNG, SVG, ASCII, ANSI, UTF8, ANSI256). ASCII, ANSI, UTF8, and ANSI256 display directly in the terminal.<br><br><b><b>-r</b> <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read input data from FILE instead of command-line arguments or standard input.<br><br><b><b>-d</b> <i>DPI</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set DPI (dots per inch) for PNG output (default: 72). Affects print resolution without changing module size.<br><br><b><b>-m</b> <i>MARGIN</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set margin width in modules (default: 4). This is the quiet zone around the QR code.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show version information of the <b>qrencode</b> utility.<br><br><b><b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help message and exit, listing available options.<br><br>


title: DESCRIPTION
content:
<b>qrencode</b> is a powerful command-line utility designed to encode data into a QR (Quick Response) Code symbol. It can take input from command-line arguments, standard input, or a file, and generate QR codes in various formats, including PNG image files, SVG vector graphics, or even ASCII art directly to the terminal. The command allows users to control aspects like the size of the QR code, the error correction level (which determines resilience to damage), and the output file name, making it highly versatile for integration into scripts or for quick on-the-fly QR code generation. It's built upon the <b>libqrencode</b> library.


title: CAVEATS
content:
The <b>qr</b> command typically refers to <b>qrencode</b> or a similar utility, which might not be installed by default on all Linux distributions. It usually requires the <b>libqrencode</b> development libraries and <b>libpng</b> for image output. Ensure it's installed via your distribution's package manager (e.g., <i>sudo apt install qrencode</i> on Debian/Ubuntu, <i>sudo yum install qrencode</i> on Fedora/RHEL).


title: ERROR CORRECTION LEVELS
content:
<b>qrencode</b> supports four levels of error correction, which determine how much damage a QR code can sustain and still be readable:<br><b>L</b>: Low, 7% of codewords can be restored.<br><b>M</b>: Medium, 15% of codewords can be restored (default).<br><b>Q</b>: Quartile, 25% of codewords can be restored.<br><b>H</b>: High, 30% of codewords can be restored.<br>Higher error correction levels result in larger QR codes for the same data content.


title: OUTPUT TYPES
content:
Beyond common image formats like PNG and SVG, <b>qrencode</b> can output QR codes directly to the terminal using ASCII art, ANSI escape codes, or UTF-8 characters. This is particularly useful for quick display or for embedding QR codes in text-based environments without creating image files.


title: HISTORY
content:
The <b>qrencode</b> utility is part of the <b>libqrencode</b> project, which was started around 2008 by Kentaro Fukuchi. It provides a highly efficient and compliant C library for encoding data into QR Code symbols. The command-line tool <b>qrencode</b> serves as a practical frontend to this library, quickly becoming a de facto standard for command-line QR code generation in the Linux ecosystem due to its simplicity, speed, and robust feature set.


title: PARAMETERS
content:
<b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a short help message describing command usage and available options.<br><br>


title: DESCRIPTION
content:
<b>raspinfo</b> is a utility command specifically designed for Raspberry Pi OS that gathers and displays a comprehensive summary of the system's hardware and software configuration. It provides crucial information such as the CPU type and speed, memory allocation, operating system version, kernel details, firmware revision, storage device usage, network interfaces, and connected peripherals like cameras. This command is invaluable for diagnosing issues, providing system specifications when seeking support on forums, or simply getting a quick overview of a Raspberry Pi's current state. It consolidates data that would otherwise require multiple separate commands, making it a highly convenient tool for Raspberry Pi users.


title: CAVEATS
content:
<ul><li><b>raspinfo</b> is primarily available and designed for Raspberry Pi OS environments. Its utility is limited or non-existent on other Linux distributions.</li><li>While most information is accessible to regular users, some details (e.g., specific hardware diagnostics) might require elevated privileges, though often it runs fine for general overview.</li><li>The output can be extensive, especially on systems with many connected peripherals or complex configurations.</li></ul>


title: OUTPUT SECTIONS
content:
The output of <b>raspinfo</b> is typically categorized into logical sections, including CPU information, Memory usage, Operating System details (OS release, kernel version), Firmware details, Disk space utilization, Network interface configurations, and status of specific Raspberry Pi peripherals like the camera module or display.


title: USAGE IN SUPPORT
content:
Due to its comprehensive nature, <b>raspinfo</b> output is frequently requested by support teams or community members when troubleshooting issues on Raspberry Pi devices. Users are often advised to run <code>raspinfo > info.txt</code> to redirect the output to a file, which can then be easily shared for analysis.


title: HISTORY
content:
The <b>raspinfo</b> command was developed as part of the broader set of Raspberry Pi-specific utilities, often bundled with <i>raspi-config</i> or the <i>raspberrypi-utils</i> package. Its creation reflects the need for a standardized and easy way to gather diagnostic information unique to the Raspberry Pi's ARM architecture and VideoCore GPU, which are not always fully exposed by standard Linux tools. It has evolved alongside the Raspberry Pi hardware, adapting to new models and their unique features, providing a consistent interface for system introspection over time.


title: SYNOPSIS
content:
sdiff [<I>OPTION</I>]... <I>FILE1</I> <I>FILE2</I><br><br>Compares <I>FILE1</I> and <I>FILE2</I> side-by-side, displaying their differences.


title: PARAMETERS
content:
<b><b>-o <I>FILE</I></b>, <b>--output=<I>FILE</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output differences interactively into <I>FILE</I>. This enables a merging mode where you can choose which version of a line to keep, or edit it directly.<br><br><b><b>-s</b>, <b>--suppress-common-lines</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not output common lines; only show lines that differ between the two files.<br><br><b><b>-l</b>, <b>--left-column</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output only the left common column. This is useful when you only care about the content of <I>FILE1</I> but want to see where it aligns with <I>FILE2</I>.<br><br><b><b>-W <I>NUM</I></b>, <b>--width=<I>NUM</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the output width to at most <I>NUM</I> columns. The default width is typically 130 columns.<br><br><b><b>-t</b>, <b>--expand-tabs</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Expand tabs to spaces in the output. This ensures consistent alignment, especially when files contain varying tab widths.<br><br><b><b>-w</b>, <b>--ignore-all-space</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore all white space characters when comparing lines. Differences due to varying amounts of spaces or tabs will be ignored.<br><br><b><b>-B</b>, <b>--ignore-blank-lines</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore changes whose lines are all blank. This means sequences of blank lines will be treated as identical, regardless of their count.<br><br><b><b>-i</b>, <b>--ignore-case</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore case differences in file content. For example, 'Text' and 'text' would be considered identical.<br><br><b><b>--diff-program=<I>PROGRAM</I></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use a specified <I>PROGRAM</I> (e.g., 'diff -Nru') to perform the underlying diff comparison instead of the default internal algorithm.<br><br>


title: DESCRIPTION
content:
<b>sdiff</b> (side-by-side diff) is a utility that displays the differences between two files in a side-by-side format. Unlike <b>diff</b>, which presents differences in a line-by-line, unified, or context format, <b>sdiff</b> aligns corresponding lines from both files next to each other. Common lines appear in both columns, while differing lines or unique lines are indicated with specific markers (e.g., '|' for differing, '<' for left-only, '>' for right-only).<br><br>It's particularly useful for visual comparison and has an optional interactive merge mode (via the <b>-o</b> option) allowing users to choose which version of a line to keep, edit it, or use both, making it a simple tool for manual merging tasks. <b>sdiff</b> is part of the GNU Diffutils package.


title: CAVEATS
content:
The side-by-side display can become challenging to read with very long lines or extensive differences, especially if the terminal width is limited.<br><br>The interactive merge mode, while useful for simple cases, is basic and less powerful than dedicated graphical merge tools (e.g., <b>kdiff3</b>, <b>meld</b>) for complex three-way merges or advanced conflict resolution in version control systems.<br><br>It is primarily a visual comparison tool; for programmatic difference analysis or generating patch files, the <b>diff</b> command is generally preferred.


title: INTERACTIVE MERGE MODE
content:
When used with the <b>-o <I>FILE</I></b> option, <b>sdiff</b> enters an interactive merge session. For each set of differing lines, <b>sdiff</b> prompts the user with various options such as <b>l</b> (take left version), <b>r</b> (take right version), <b>b</b> (take both versions), <b>e</b> (edit the lines), <b>s</b> (silently skip), or <b>q</b> (quit). This makes it a convenient command-line tool for performing simple and direct code merges or resolving minor conflicts.


title: HISTORY
content:
<b>sdiff</b> is an integral part of the GNU Diffutils package, which originated in the early days of Unix to provide robust tools for comparing files. While <b>diff</b> focused on generating patchable difference formats, <b>sdiff</b> emerged to cater specifically to the need for a human-readable, side-by-side presentation of file differences. This visual approach became particularly valuable for code review and manual merge operations. Its later addition of an interactive merge capability further enhanced its utility by allowing users to make on-the-fly decisions about changes directly from the command line.


title: SYNOPSIS
content:
<b>sessreg</b> [-a] [-d] [-w <i>wtmp_file</i>] [-u <i>utmp_file</i>] [-l <i>line_name</i>] [-h <i>hostname</i>] <i>username</i>


title: PARAMETERS
content:
<b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs <b>sessreg</b> to <i>add</i> a new session entry. This is the default action if neither -a nor -d is specified.<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs <b>sessreg</b> to <i>delete</i> an existing session entry. Used when a user logs out, marking the end of a session.<br><br><b>-w <i>wtmp_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an <i>alternative path</i> for the <b>wtmp</b> file, which logs historical login/logout events. The default is typically <i>/var/log/wtmp</i>.<br><br><b>-u <i>utmp_file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an <i>alternative path</i> for the <b>utmp</b> file, which records current logged-in users. The default is typically <i>/var/run/utmp</i>.<br><br><b>-l <i>line_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the <i>line name</i> associated with the session. For X sessions, this is often the display name (e.g., <i>:0</i>). For terminal sessions, it might be the TTY device name.<br><br><b>-h <i>hostname</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <i>hostname</i> from which the session originates. The default is usually the local host's hostname.<br><br>


title: DESCRIPTION
content:
<b>sessreg</b> is a utility designed to record user session activity in the system's accounting files, specifically <i>utmp</i> and <i>wtmp</i>.<br><br>These files maintain records of who is currently logged in (<i>utmp</i>) and a historical log of logins and logouts (<i>wtmp</i>). It's commonly used in graphical environments, particularly by display managers like <i>XDM</i>, to mark the beginning or end of an X session.<br><br>By registering sessions, <b>sessreg</b> ensures that system commands such as <b>who</b>, <b>w</b>, <b>users</b>, and <b>last</b> can accurately report active users and past login events. It can add an entry for a new session or delete an entry when a session terminates, thereby providing a comprehensive record of user presence on the system. This contributes to system monitoring, security auditing, and resource management.


title: CAVEATS
content:
<b>sessreg</b> primarily registers sessions for local logins, often within the context of graphical display managers. It may not be directly used for SSH or other remote login types, which are typically handled by <b>sshd</b> or <b>login</b> itself.<br><br>Incorrect usage or insufficient file permissions could lead to inaccurate login records. It requires appropriate permissions to write to the <i>utmp</i> and <i>wtmp</i> files.


title: FILE MANAGEMENT
content:
<b>sessreg</b> interacts directly with two crucial system accounting files:<br><i>/var/run/utmp</i>: Records currently logged-in users.<br><i>/var/log/wtmp</i>: Maintains a historical log of all login and logout events.<br><br>These files are fundamental for various system tools to provide accurate information about user activity.


title: INTEGRATION WITH DISPLAY MANAGERS
content:
The most common use case for <b>sessreg</b> is its invocation by graphical display managers (e.g., <b>xdm</b>, <b>gdm</b>, <b>lightdm</b>). These managers run <b>sessreg</b> at the start of a user's X session (with <i>-a</i>) and again at the end (with <i>-d</i>) to ensure that graphical logins are properly tracked alongside traditional console or remote logins.


title: HISTORY
content:
<b>sessreg</b> is a long-standing utility within the X Window System, primarily associated with display managers like <b>xdm</b>. Its core function, to accurately update <i>utmp</i> and <i>wtmp</i> files for graphical sessions, has remained consistent since its inception. It has been a standard component in X environments for decades, ensuring proper session accounting and system monitoring capabilities.


title: PARAMETERS
content:
<b><b>-b</b>, <b>--boolean</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the status of all <I>SELinux</I> booleans, indicating whether each is on or off.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides more detailed information about the <I>SELinux</I> policy, including the policy load date and the root directory.<br><br>


title: DESCRIPTION
content:
<br>The <b>sestatus</b> command is a utility for displaying the current status of <I>SELinux</I> (Security-Enhanced Linux) on a system. <br><br><I>SELinux</I> is a mandatory access control (MAC) security mechanism that provides a flexible and powerful way to enforce security policies beyond traditional discretionary access control (DAC). <br><br><b>sestatus</b> helps administrators quickly ascertain if <I>SELinux</I> is enabled, its current operating mode (e.g., <I>enforcing</I>, <I>permissive</I>, or <I>disabled</I>), and details about the loaded security policy. <br><br>The output typically includes the <I>SELinux</I> status, current mode, policy file path, policy type, policy serial number, policy version, and various policy load information. <br><br>It's an essential tool for initial system security checks and troubleshooting <I>SELinux</I>-related access issues, providing a snapshot of the system's security posture regarding <I>SELinux</I> enforcement.


title: CAVEATS
content:
<br><b>sestatus</b> is a reporting tool; it does <I>not</I> change the <I>SELinux</I> status or configuration. <br><br>To alter <I>SELinux</I> mode, use commands like <b>setenforce</b> or modify the <I>/etc/selinux/config</I> file. <br><br>The command's output assumes <I>SELinux</I> is installed and supported by the kernel; otherwise, it will typically report that <I>SELinux</I> is disabled or not supported.


title: HISTORY
content:
<br><I>SELinux</I> originated from the <I>National Security Agency</I> (NSA) as a project to add mandatory access controls to the Linux kernel. <br><br>It was integrated into the mainline Linux kernel in 2003. <br><br><b>sestatus</b> is part of the <I>libselinux</I> development libraries and utilities, which provide the foundational tools for interacting with and managing <I>SELinux</I> policies and contexts. <br><br>Its development is closely tied to the evolution and widespread adoption of <I>SELinux</I> as a critical security feature in enterprise Linux distributions.


title: SYNOPSIS
content:
<b>set</b> [<i>options</i>] [<i>--</i>] [<i>arg ...</i>]<br><b>set -o</b> [<i>option_name</i>]<br><b>set +o</b> [<i>option_name</i>]


title: PARAMETERS
content:
<b><b>-a</b>, <b>-o allexport</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically marks variables and functions that are modified or created for export to the environment of subsequent commands.<br><br><b><b>-b</b>, <b>-o notify</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reports the status of terminated background jobs immediately, rather than waiting for the next primary prompt.<br><br><b><b>-e</b>, <b>-o errexit</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exits immediately if a command exits with a non-zero status. Useful for scripting to prevent unexpected behavior after an error.<br><br><b><b>-f</b>, <b>-o noglob</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables filename expansion (globbing). Shell metacharacters like <i>*, ?, [</i> will be treated as literal characters.<br><br><b><b>-h</b>, <b>-o hashall</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Locates commands by hashing their path during command lookup. This is usually enabled by default in Bash.<br><br><b><b>-k</b>, <b>-o keyword</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;All arguments in a command line that appear to be assignment statements are placed in the environment of that command, not just those that precede the command name.<br><br><b><b>-m</b>, <b>-o monitor</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables job control (e.g., stopping processes with <i>Ctrl+Z</i>, putting them in the background with <i>&</i>).<br><br><b><b>-n</b>, <b>-o noexec</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reads commands but does not execute them. Useful for checking script syntax without running it.<br><br><b><b>-o</b> <i>option_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables the specified option. If used without an option name (<i>set -o</i>), it lists all current shell options and their status.<br><br><b><b>+o</b> <i>option_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the specified option.<br><br><b><b>-p</b>, <b>-o privileged</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turns on privileged mode, which disables processing of <i>~/.bashrc</i> and <i>/etc/profile</i> files when running as root, for security.<br><br><b><b>-t</b>, <b>-o onecmd</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exits after reading and executing one command. Useful for single-command execution in interactive shells.<br><br><b><b>-u</b>, <b>-o nounset</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Treats unset variables and parameters as an error when performing parameter expansion. Useful for catching typos in variable names.<br><br><b><b>-v</b>, <b>-o verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints shell input lines as they are read. Useful for debugging scripts by showing the raw input.<br><br><b><b>-x</b>, <b>-o xtrace</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints commands and their expanded arguments to standard error as they are executed. Indispensable for debugging script execution flow.<br><br><b><b>-B</b>, <b>-o braceexpand</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables brace expansion (e.g., <i>{a,b}c</i> expands to <i>ac bc</i>). This is usually enabled by default.<br><br><b><b>-C</b>, <b>-o noclobber</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents output redirection (<i>>, >&</i>) from overwriting existing files. Use <i>>|</i> to force overwrite.<br><br><b><b>-E</b>, <b>-o errtrace</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If <i>errexit</i> is set, traps on <i>ERR</i> are inherited by shell functions, command substitutions, and subshells. (Bash 4.0+)<br><br><b><b>-H</b>, <b>-o histexpand</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables <i>!</i>-style history expansion. This is usually enabled by default for interactive shells.<br><br><b><b>-P</b>, <b>-o physical</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If set, do not follow symbolic links when performing commands that change the current directory (e.g., <i>cd</i>). The current working directory will be the physical directory.<br><br><b><b>-T</b>, <b>-o extdebug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables extended debugging mode. When a function is called, the <i>BASH_COMMAND</i> and <i>BASH_SUBSHELL</i> variables are set and <i>ERR</i> trap is inherited.<br><br><b><b>--</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Signals the end of options. Subsequent arguments are treated as positional parameters, even if they begin with a hyphen.<br><br><b><i>arg ...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When <b>--</b> is used, these arguments become the new positional parameters (<i>$1, $2, ...</i>). If no arguments are provided after <b>--</b>, positional parameters are unset.<br><br>


title: DESCRIPTION
content:
The <b>set</b> command is a fundamental shell built-in used to modify the behavior of the current shell session or script. It allows users to enable or disable various shell options that control how the shell interprets and executes commands, handles errors, manages jobs, and performs filename expansion. Additionally, <b>set</b> can be used to explicitly define or redefine the shell's positional parameters (<i>$1, $2, ...</i>), which are crucial for script argument processing. Unlike external commands, <b>set</b> directly interacts with and alters the shell's internal state. This command is indispensable for writing robust shell scripts by enforcing specific execution rules, such as exiting on error, tracing command execution for debugging, or preventing accidental file overwrites.


title: CAVEATS
content:
The <b>set</b> command is a shell built-in; its exact behavior and available options can vary slightly between different shells (e.g., Bash, Zsh, Dash). Changes made with <b>set</b> are generally local to the current shell process or script and do not affect parent shells or other concurrently running shells. When using <b>-e</b> (<i>errexit</i>), be aware of its interaction with command pipelines (<i>cmd1 | cmd2</i>), logical operators (<i>&&, ||</i>), and command substitutions, as these can sometimes mask or alter the expected error propagation.


title: LISTING SHELL VARIABLES
content:
When invoked without any arguments or options (i.e., just <b>set</b>), the command typically outputs a list of all currently defined shell variables and their values in a format suitable for re-input to the shell. This can be very useful for inspecting the shell's current state.


title: POSITIONAL PARAMETERS
content:
Beyond setting options, <b>set</b> is also used to explicitly assign values to the shell's positional parameters (<i>$1, $2, ...</i>). Using <b>set --</b> <i>arg1 arg2 ...</i> allows you to define these parameters, overriding any passed to the script or function. If no arguments are given after <b>--</b>, all positional parameters are unset.


title: SHELL BUILT-IN
content:
It's important to remember that <b>set</b> is a shell built-in command, meaning it's an integral part of the shell itself, not an external executable program. This allows it to directly modify the shell's internal state and context, which external commands cannot do.


title: DEBUGGING SCRIPTS
content:
The <b>-n</b> (<i>noexec</i>), <b>-v</b> (<i>verbose</i>), and especially <b>-x</b> (<i>xtrace</i>) options are invaluable tools for debugging shell scripts. They allow you to examine script syntax, see input lines as they are read, and trace the execution path with expanded commands, respectively.


title: HISTORY
content:
The <b>set</b> command has been a core component of Unix shells since the original Bourne Shell (<b>sh</b>) in the late 1970s, providing essential control over shell behavior and script execution. Its fundamental purpose of manipulating shell options and positional parameters has remained consistent across shell implementations. The <i><b>-o</b> option_name</i> syntax for more descriptive option names was introduced with KornShell (<b>ksh</b>) and later adopted by Bash, enhancing readability and usability compared to the original single-letter flags. Its evolution reflects the growing complexity and scripting needs of Unix-like systems.


title: PARAMETERS
content:
<b><I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target directory for Node.js installations. This path would define the base location where Node.js versions are expected to be stored or managed by the command.<br><br>


title: DESCRIPTION
content:
The <I>set-nodeinstalllocation</I> command is not a standard utility found in typical Linux distributions. Its name strongly suggests it would be used to define or modify the root installation path for Node.js versions. If such a command were to exist, it would likely be part of a custom Node.js management script, an installer's configuration utility, or potentially a PowerShell module being used in a Linux environment (e.g., via PowerShell Core or Windows Subsystem for Linux - WSL).<br><br>In standard Linux environments, Node.js installation paths are predominantly managed by package managers (like <I>apt</I>, <I>yum</I>, or <I>dnf</I>) or specialized version managers such as <I>nvm</I> (Node Version Manager). These tools handle installation locations automatically, often placing Node.js versions in system-wide directories or within a user's home directory (e.g., <I>~/.nvm</I>). A hypothetical <I>set-nodeinstalllocation</I> command would provide a way to manually specify or override this default installation root, potentially affecting where new Node.js versions are placed or from where existing ones are referenced.


title: CAVEATS
content:
This command, <I>set-nodeinstalllocation</I>, is not a standard or widely recognized utility within typical Linux distributions. The information provided is speculative, based solely on its descriptive name, and outlines what its functionality <I>would</I> likely be if it were part of a custom script or a specific framework (e.g., PowerShell on WSL). Users should primarily rely on official Node.js installation methods like Node Version Manager (<I>nvm</I>) or distribution-specific package managers (<I>apt</I>, <I>yum</I>, <I>dnf</I>) for managing Node.js on Linux.


title: NODE.JS INSTALLATION ON LINUX
content:
On Linux, Node.js is typically installed through one of two primary methods: <br><br>1. <B>Package Managers:</B> Distribution-specific package managers (e.g., <I>apt</I> on Debian/Ubuntu, <I>yum</I>/<I>dnf</I> on Red Hat/CentOS/Fedora) install Node.js into standard system paths like <I>/usr/bin</I> or <I>/usr/local/bin</I>. This method is straightforward but typically only allows for one system-wide version.<br><br>2. <B>Node Version Manager (nvm):</B> <I>nvm</I> is a popular tool that allows users to install and manage multiple Node.js versions in their home directory (e.g., <I>~/.nvm</I>) and switch between them easily. <I>nvm</I> handles the installation paths internally, abstracting them from the user. Directly 'setting' an install location via a command like <I>set-nodeinstalllocation</I> is not a common practice for these widely used methods.


title: HISTORY
content:
This command does not have a documented history as a standard Linux utility. It most likely originates from custom scripting, specific developer tools, or cross-platform environments (like PowerShell Core) rather than being a component of standard Linux distributions.


title: PARAMETERS
content:
<b><I>&lt;version|alias&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific Node.js version string (e.g., <B>16.14.0</B>, <B>lts/gallium</B>) or a predefined alias (e.g., <B>default</B>, <B>current</B>, <B>lts</B>) to set as the active version.<br><br><b><B>-g</B>, <B>--global</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the specified Node.js version as the system-wide default, affecting new shell sessions.<br><br><b><B>-l</B>, <B>--local</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Node.js version for the current project directory, often by creating or updating a configuration file (e.g., <B>.nvmrc</B>).<br><br><b><B>-p</B>, <B>--persist</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Makes the version selection persistent across shell sessions, typically by updating shell startup scripts.<br><br><b><B>-h</B>, <B>--help</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message showing command usage and available options.<br><br>


title: DESCRIPTION
content:
The <B>set-nodeversion</B> command is a conceptual or custom utility designed to facilitate switching between different installed Node.js versions on a Linux system. While not a standard command shipped with most Linux distributions, it represents the core functionality provided by Node.js version managers like <I>nvm</I> (Node Version Manager) or <I>n</I>. Its primary purpose is to update environment variables, typically the <B>PATH</B>, or manage symbolic links, to point to a specific Node.js installation. This allows developers to easily switch contexts for different projects that might require distinct Node.js versions, ensuring compatibility and avoiding conflicts. Without such a mechanism, managing multiple Node.js versions manually would be cumbersome, involving frequent manual <B>PATH</B> modifications or reinstallation. A <B>set-nodeversion</B> utility abstracts this complexity, offering a simple interface to manage the active Node.js runtime.


title: CAVEATS
content:
<B>set-nodeversion</B> is not a standard Linux command; it is typically a custom script or an alias representing the functionality of Node.js version managers. Therefore, its availability, exact syntax, and options can vary significantly based on how it's implemented (e.g., as part of <I>nvm</I>, <I>n</I>, or a custom shell script). Users should consult the documentation for their specific Node.js version management tool. Improper use could lead to broken Node.js environments or conflicting package installations.


title: COMMON IMPLEMENTATIONS
content:
While <B>set-nodeversion</B> itself is not a direct command, its functionality is best exemplified by:<br><ul><li><B>nvm use &lt;version|alias&gt;</B>: Activates a specific Node.js version for the current shell session.</li><li><B>n &lt;version|alias&gt;</B>: Switches to and uses a specific Node.js version, often making it the system default (depending on installation method).</li><li><B>nvm alias default &lt;version&gt;</B>: Sets a specific version to be used as the default for new shell sessions.</li></ul>These commands handle the underlying logic of adjusting environment variables and symlinks to direct shell commands like <B>node</B> and <B>npm</B> to the desired Node.js installation.


title: HISTORY
content:
The need for commands like <B>set-nodeversion</B> arose from the challenges of managing multiple Node.js projects, each potentially requiring a specific runtime version, in a single development environment. Early Node.js development often involved manual installation and <B>PATH</B> management, which was cumbersome and prone to conflicts. This led to the development of dedicated version management tools like <I>nvm</I> (released around 2010) and <I>n</I> (released around 2012). These tools provided simple command-line interfaces to install, switch, and manage Node.js versions, effectively embodying the conceptual <B>set-nodeversion</B> functionality. The widespread adoption of these tools made multi-version Node.js development much more streamlined, establishing a de facto standard for how developers interact with their Node.js runtimes.


title: SEE ALSO
content:
<I>nvm</I> (Node Version Manager), <I>n</I> (Node.js version management), <B>node</B>(1), <B>npm</B>(1), <B>yarn</B>(1)


title: SYNOPSIS
content:
<b>setarch</b> [<i>options</i>] <i>architecture</i> [<i>command</i> [<i>arguments</i>...]]<br><b>setarch</b> [<i>options</i>] [<i>command</i> [<i>arguments</i>...]]


title: PARAMETERS
content:
<b>architecture</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The target architecture personality string (e.g., <i>i386</i>, <i>x86_64</i>, <i>arm</i>). This is the primary argument to change the reported architecture for the <i>command</i>.<br><br><b>command</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The program or script to be executed with the modified architecture personality.<br><br><b>arguments</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Any arguments to be passed to the <i>command</i>.<br><br><b>-R, --addr-no-randomize</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables address space layout randomization (ASLR) for the executed command, making memory addresses more predictable.<br><br><b>-r, --force-addr-randomize</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces address space layout randomization (ASLR) for the executed command, overriding system defaults if necessary.<br><br><b>-S, --stack-randomize</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces randomization of the stack address for the executed command.<br><br><b>-L, --library-randomize</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces randomization of shared library addresses for the executed command.<br><br><b>-B, --no-brk-randomize</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables randomization of the <i>brk()</i> system call's return address for the executed command, affecting heap layout.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, showing more information about the operations <i>setarch</i> performs.<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 for <i>setarch</i> and exits.<br><br>


title: DESCRIPTION
content:
<i>setarch</i> is a utility that allows you to execute a command with a modified system personality, specifically concerning the reported architecture. Its primary use case is to facilitate the execution of applications compiled for a different architecture (e.g., a 32-bit binary on a 64-bit system, or vice-versa) without requiring explicit recompilation or a full virtualization environment. It achieves this by utilizing the <i>personality(2)</i> system call, which changes how certain system calls and signals behave for the executed process, making it appear as if it's running on the specified architecture. While often used for <i>i386</i> or <i>x86_64</i> compatibility, <i>setarch</i> can theoretically be used with any architecture supported by the kernel's <i>personality</i> system call. It's a powerful tool for compatibility and testing scenarios.


title: CAVEATS
content:
<i>setarch</i> relies on the kernel's <i>personality(2)</i> system call; not all kernels or architectures support all personality types. It does <b>not</b> translate instruction sets; a 32-bit binary run with <i>setarch x86_64</i> will still execute 32-bit instructions (requiring kernel compatibility like IA32_EMULATION). It does not provide a full chroot or virtualization environment; dependencies must still be available for the target architecture.


title: HOW IT WORKS
content:
<i>setarch</i> leverages the <i>personality(2)</i> system call, which allows a process to change certain kernel behaviors and the reported system type (e.g., from <i>x86_64</i> to <i>i386</i>). This does not involve instruction set translation, but rather adjusts how the kernel handles system calls, signals, and other low-level interactions for the specified process, making it appear to the running application as if it's on the target architecture. For example, when running a 32-bit binary on a 64-bit kernel using <i>setarch i386</i>, the kernel's IA32 emulation layer is activated for that process.


title: HISTORY
content:
<i>setarch</i> is part of the <i>util-linux</i> project, a collection of essential Linux utilities. Its development is tied to the evolution of multi-architecture kernel support, particularly the ability for 64-bit Linux kernels to run 32-bit binaries seamlessly through the <i>personality()</i> system call and IA32 emulation. It provides a more flexible way to invoke this personality change compared to specific wrappers like <i>linux32</i>.


title: SYNOPSIS
content:
<b>setcap</b> [<I>options</I>] <I>capabilities</I> <I>filename</I>...<br><b>setcap</b> [<I>options</I>] <b>-r</b> <I>filename</I>...


title: PARAMETERS
content:
<b><I>capabilities</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of capability specifications (e.g., `cap_net_bind_service=+ep`). Capabilities can be added (`+`), removed (`-`), or assigned directly (`=`). The letters <I>p</I>, <I>e</I>, <I>i</I> denote Permitted, Effective, and Inheritable sets respectively. This argument is required unless using the <b>-r</b> option.<br><br><b><I>filename</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the executable file(s) on which capabilities are to be set or removed. Multiple files can be specified.<br><br><b><b>-q</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be quiet; suppress non-error messages.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be verbose; display changes and diagnostics.<br><br><b><b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove all capabilities from the specified file(s). This option mutually excludes the <I>capabilities</I> argument.<br><br>


title: DESCRIPTION
content:
The <b>setcap</b> command is a utility used in Linux to manipulate <i>file capabilities</i>. Linux capabilities are a security feature that partitions the traditional Unix superuser privileges (those of the root user) into distinct units. Instead of granting a program full root access to perform a specific privileged operation, only the exact capabilities required for that task can be granted. For example, a program might need to bind to a low-numbered network port (like 80 or 443) without needing all root privileges.<br><br><b>setcap</b> allows administrators to assign these specific capabilities to an executable file. When such a file is executed by any user, it gains the specified capabilities, enabling it to perform the otherwise privileged operations. This mechanism significantly enhances system security by enforcing the <i>principle of least privilege</i>, reducing the attack surface compared to running entire applications as the root user. It's an essential tool for privilege separation and hardening Linux systems.


title: CAVEATS
content:
Only applies to regular executable files; capabilities cannot be set on directories, symlinks, or typically on scripts (as the interpreter, not the script, receives capabilities).<br>Capabilities are associated with the file's inode and are lost if the file is moved or copied without preserving attributes (e.g., use `cp -a` or `install -p`).<br>Requires kernel support for capabilities.<br>Improper use can still lead to security vulnerabilities; always apply the <i>principle of least privilege</i> by granting only the minimum necessary capabilities.


title: COMMON USE CASES
content:
<ul><li>Allowing a web server (e.g., Nginx) to bind to a privileged port (e.g., 80) without running as root: <br>`<b>setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx</b>`</li><li>Enabling a network utility (e.g., ping) to create raw sockets: <br>`<b>setcap 'cap_net_raw=+ep' /bin/ping</b>`</li></ul>


title: CAPABILITY SETS (P, E, I)
content:
<br><b>p</b> (Permitted): The capabilities that a thread can <I>assert</I>. This set defines the maximum capabilities a process can ever have.<br><b>e</b> (Effective): The capabilities currently <I>active</I> and used by the thread for privileged operations. For file capabilities, these are immediately available upon execution.<br><b>i</b> (Inheritable): Capabilities that are preserved across `execve` calls by non-root users. While set on files, their practical effect largely depends on the process's inheritable set. The most common combination for file capabilities is `+ep` for directly effective capabilities.


title: HISTORY
content:
Linux capabilities were introduced in kernel 2.2 to provide a more granular privilege model, moving away from the all-or-nothing root paradigm. The <b>libcap</b> user-space library and associated utilities like <b>setcap</b> and <b>getcap</b> were developed to manage these new capabilities, allowing for fine-grained control over process and file privileges. This innovation significantly improved the security posture of Linux systems by enabling applications to operate with only the minimum required privileges.


title: SYNOPSIS
content:
<b>setcifsacl</b> [<i>OPTIONS</i>] <i>PATHNAME</i><br>Where <i>OPTIONS</i> include:<br><b>-s</b>, <b>--set</b> &lt;file&gt;<br><b>-m</b>, <b>--modify</b> &lt;acl_entries&gt;<br><b>-x</b>, <b>--remove</b> &lt;acl_entries&gt;<br><b>-d</b>, <b>--default</b> &lt;acl_entries&gt;<br><b>-k</b>, <b>--mask</b> &lt;acl_entries&gt;<br><b>-r</b>, <b>--recursive</b><br><b>-v</b>, <b>--verbose</b><br><b>-D</b>, <b>--debug</b><br><b>-V</b>, <b>--version</b><br><b>-h</b>, <b>--help</b><br><br><i>PATHNAME</i> is the path to the file or directory on the mounted CIFS/SMB share.<br><i>ACL_ENTRIES</i> follow specific formats like &quot;user::perms&quot;, &quot;user:name:perms&quot;, or &quot;S-1-5-21-XXX:type:perms&quot;.


title: PARAMETERS
content:
<b>--set <file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Read ACL entries from the specified &lt;file&gt; and apply them to the target PATHNAME. The file should contain ACL entries in the same format as used with --modify.<br><br><b>--modify <acl_entries></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Modify the existing ACL entries on the target PATHNAME. &lt;acl_entries&gt; can be a comma-separated list of entries (e.g., 'user:john:rw,group:finance:r'). This option adds or updates specific ACLs.<br><br><b>--remove <acl_entries></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove the specified ACL entries from the target PATHNAME. &lt;acl_entries&gt; should match existing entries to be removed.<br><br><b>--default <acl_entries></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set, modify, or remove default ACL entries on a directory. These entries are inherited by newly created files and subdirectories within that directory.<br><br><b>--mask <acl_entries></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set or modify the ACL mask. While Windows ACLs don't have a direct 'mask' concept like POSIX ACLs, this option might be used for compatibility or specific Samba configurations.<br><br><b>-r, --recursive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Apply the ACL changes recursively to all subdirectories and files within the specified PATHNAME.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more details about the operations being performed.<br><br><b>-D, --debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debugging output, providing even more detailed information, useful for troubleshooting.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of the <b>setcifsacl</b> utility and exit.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message with usage instructions and exit.<br><br>


title: DESCRIPTION
content:
The <b>setcifsacl</b> command is a utility from the <i>cifs-utils</i> package designed to manage Windows-style Access Control Lists (ACLs) on files and directories residing on CIFS/SMB network shares mounted on a Linux system. Unlike traditional Linux <b>chmod</b> or <b>setfacl</b> which manage POSIX permissions or POSIX ACLs, <b>setcifsacl</b> directly manipulates the security descriptors stored on the CIFS/SMB server.<br><br>It allows administrators to set, modify, or remove specific ACL entries for users, groups, or SIDs (Security Identifiers), providing granular control over permissions. This is crucial in mixed environments where Windows clients and Linux systems need to share data and maintain consistent access control. For <b>setcifsacl</b> to function correctly, the CIFS/SMB filesystem must be mounted with the <b>cifsacl</b> option, enabling the kernel to communicate ACL requests to the server.


title: CAVEATS
content:
The target CIFS/SMB share must be mounted with the <b>cifsacl</b> option (e.g., <b>mount -t cifs //server/share /mnt/share -o cifsacl</b>). Without this option, <b>setcifsacl</b> will not be able to communicate with the server to modify ACLs.<br><br>ACL changes made with <b>setcifsacl</b> directly affect the Windows-style security descriptors on the server, which may not always align perfectly with traditional POSIX permissions displayed by <b>ls -l</b>. Tools like <b>getcifsacl</b> are needed to view these Windows-style ACLs.<br><br>Proper SID (Security Identifier) mapping between Linux users/groups and Windows SIDs is crucial for correct functionality. This often requires careful configuration of Samba's <b>idmap</b> backend or ensuring proper Active Directory integration. Incorrect mapping can lead to unexpected permission issues or failures in setting ACLs. Not all CIFS/SMB servers fully support all ACL features that <b>setcifsacl</b> might attempt to use.


title: ACL ENTRY FORMAT
content:
The <i>acl_entries</i> argument often takes a specific format. For example, &quot;user:DOMAIN\User:rwx&quot; for a specific user, or &quot;S-1-5-21-XXX:allow:F&quot; for a SID with full control. Permissions can be 'rwx' (read, write, execute), 'R' (Read), 'W' (Write), 'X' (Execute), 'C' (Change), 'F' (Full Control), 'M' (Modify), 'P' (Partial/Execute). The 'type' can be 'allow' or 'deny'. This flexibility allows precise control matching Windows security descriptors.


title: PERMISSIONS TRANSLATION
content:
When using 'rwx' style permissions, <b>setcifsacl</b> translates these to the corresponding Windows generic or specific access rights. For example, 'r' usually maps to <b>FILE_GENERIC_READ</b>, 'w' to <b>FILE_GENERIC_WRITE</b>, and 'x' to <b>FILE_GENERIC_EXECUTE</b>. Full control ('F') encompasses all possible rights.


title: HISTORY
content:
The <b>setcifsacl</b> command is part of the <i>cifs-utils</i> package, which provides a collection of tools for mounting and managing CIFS/SMB filesystems on Linux. It was developed to extend Linux's capabilities to interact more seamlessly with Windows-based network shares, specifically by providing native command-line utilities for managing Windows-style ACLs, which are fundamental to security on SMB/CIFS. Its development aligns with the ongoing effort to improve interoperability between Linux and Windows environments, especially for server and client roles dealing with shared storage.


title: PARAMETERS
content:
<b><b>CONTEXT</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The new SELinux security context string (e.g., <i>system_u:system_r:httpd_t:s0</i>) to apply to the shell or command.<br><br><b><b>COMMAND</b> [<b>ARG</b>]...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional command and its arguments to execute with the specified <b>CONTEXT</b>. If omitted, the current shell's context is changed.<br><br><b><b>-r</b>, <b>--restore</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restores the default security context for the current user, typically derived from user mapping policies configured in SELinux.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br>


title: DESCRIPTION
content:
<i>setcon</i> is a utility within the SELinux toolkit used to change the current security context of the user's shell or to execute a specified command with a different security context.<br><br>In SELinux, every process, file, and system resource is labeled with a security context, typically composed of user, role, type, and sensitivity/category (e.g., <i>unconfined_u:unconfined_r:unconfined_t:s0</i>). <i>setcon</i> allows administrators and policy developers to temporarily assume a different context, which is invaluable for testing SELinux policies, debugging access control issues, or performing actions that require specific SELinux domains.<br><br>When used without a command, it modifies the context of the current shell for subsequent operations. If a command is provided, <i>setcon</i> executes that command in the specified context, similar to <i>runcon</i>. It often requires root privileges or specific SELinux policy permissions to successfully change contexts to ensure system security.


title: CAVEATS
content:
Changing contexts with <i>setcon</i> typically requires root privileges or specific SELinux capabilities (e.g., <i>CAP_SETFCAP</i> or <i>CAP_SETPCAP</i>).<br>The target security context must be explicitly permitted by the active SELinux policy for the current user or process; otherwise, the command will fail with a permission denied error.<br>Using <i>setcon</i> on a shell alters the context for all subsequent commands within that shell until it's reset or the shell is exited.


title: USAGE NOTE FOR SHELLS
content:
When <i>setcon</i> is used without a <b>COMMAND</b>, it changes the security context of the *current shell session*. All subsequent commands executed within that shell will run under the new context. To revert to the previous context, one can use <i>setcon -r</i> or simply exit and reopen the shell.


title: PERMISSIONS AND POLICY
content:
The ability to change security contexts is strictly governed by the SELinux policy. A user cannot arbitrarily change to any context; the policy must contain rules allowing the transition from the current context to the target context. This is a core security feature of SELinux to prevent privilege escalation.


title: HISTORY
content:
<i>setcon</i> is an integral part of the <i>policycoreutils</i> package, which provides essential utilities for managing SELinux. SELinux itself was initially developed by the National Security Agency (NSA) and later integrated into the Linux kernel mainline in 2000. Tools like <i>setcon</i> have been fundamental to interacting with SELinux's mandatory access control system, allowing precise control and testing of security contexts since the early adoption and development of SELinux.


title: PARAMETERS
content:
<b><i>1</i> or <i>Enforcing</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets SELinux to <i>enforcing</i> mode. In this mode, SELinux actively denies operations that violate its security policy and logs these denials.<br><br><b><i>0</i> or <i>Permissive</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets SELinux to <i>permissive</i> mode. In this mode, SELinux does not deny operations, but it still logs policy violations, allowing for analysis without preventing application functionality.<br><br>


title: DESCRIPTION
content:
The <b>setenforce</b> command is a crucial utility within the Security-Enhanced Linux (SELinux) framework, allowing system administrators to instantly modify the operating mode of SELinux.<br><br>SELinux enforces mandatory access control policies and typically operates in one of three states: <i>enforcing</i>, <i>permissive</i>, or <i>disabled</i>. While <i>disabled</i> mode requires a system reboot and modification of configuration files, <b>setenforce</b> enables seamless switching between <i>enforcing</i> and <i>permissive</i> modes without interruption.<br><br>In <i>enforcing</i> mode, SELinux actively blocks any operations that violate its security policy. In contrast, <i>permissive</i> mode allows all operations to proceed but logs any policy violations, making it invaluable for debugging and developing SELinux policies. This immediate control helps in identifying and resolving access issues without disrupting services, as one can quickly toggle the mode to observe behavior or gather audit logs.


title: CAVEATS
content:
<ul><li>Requires <i>root</i> privileges to execute.</li><li>Changes made by <b>setenforce</b> are <i>not persistent</i> across system reboots; the system will revert to the mode defined in <b>/etc/selinux/config</b>.</li><li>It cannot set SELinux to <i>disabled</i> mode. Disabling SELinux requires editing <b>/etc/selinux/config</b> and rebooting the system.</li><li>This command does not relabel file systems. If file contexts are incorrect, commands like <b>restorecon</b> or <b>fixfiles</b> are needed.</li></ul>


title: PERSISTENCE
content:
The state set by <b>setenforce</b> is temporary and only lasts until the next system reboot. To make a change permanent, you must modify the <b>SELINUX</b> entry in the <b>/etc/selinux/config</b> file (e.g., <b>SELINUX=enforcing</b> or <b>SELINUX=permissive</b>) and then reboot the system.


title: TROUBLESHOOTING
content:
One of the most common uses of <b>setenforce</b> is during troubleshooting. By switching to <i>permissive</i> mode (<b>setenforce 0</b>), administrators can determine if an application failure is related to SELinux policy denials. If the application functions correctly in <i>permissive</i> mode, it indicates an SELinux issue, which can then be investigated further by examining audit logs, typically found at <b>/var/log/audit/audit.log</b>.


title: HISTORY
content:
<b>setenforce</b> is a core component of the SELinux framework, which traces its origins back to the National Security Agency (NSA) and its efforts to enhance security in Linux. Integrated into the mainline Linux kernel around 2000, SELinux, along with utilities like <b>setenforce</b>, became a standard security feature in enterprise-grade Linux distributions such as Red Hat Enterprise Linux (RHEL) and Fedora. Its simple, immediate function reflects the practical need for administrators to quickly diagnose and manage SELinux policy issues without requiring a full system restart, making it an indispensable tool for daily operations and troubleshooting.


title: SYNOPSIS
content:
<i><b>setfattr</b></i> [<i>options</i>] <i>--name=name</i> [<i>--value=value</i>] <i>path</i>...<br><i><b>setfattr</b></i> [<i>options</i>] <i>--remove=name</i> <i>path</i>...<br><i><b>setfattr</b></i> [<i>options</i>] <i>--restore=file</i>


title: PARAMETERS
content:
<b><i>--name=name</i>, <i>-n name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the value of the extended attribute <i>name</i>. The attribute name must include a namespace prefix (e.g., <i>user.</i>, <i>security.</i>).<br><br><b><i>--value=value</i>, <i>-v value</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the value of the extended attribute. If not specified with <i>--name</i>, the attribute is set to an empty value. Values are typically expressed as strings or hexadecimal.<br><br><b><i>--remove=name</i>, <i>-x name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the extended attribute <i>name</i> from the specified files or directories.<br><br><b><i>--force</i>, <i>-f</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continue operation even if some attributes cannot be set or removed due to permissions or other errors.<br><br><b><i>--no-dereference</i>, <i>-P</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not dereference symbolic links. Operate on the symbolic link itself rather than its target. This is the default behavior.<br><br><b><i>--dereference</i>, <i>-L</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dereference symbolic links. Operate on the target of the symbolic link, not the link itself.<br><br><b><i>--restore=file</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restore extended attributes from a backup <i>file</i> created by <i><b>getfattr --dump</b></i>. This allows bulk restoration of attributes.<br><br><b><i>--version</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br><b><i>--help</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><i>path...</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more files or directories on which to set or remove extended attributes.<br><br>


title: DESCRIPTION
content:
<i><b>setfattr</b></i> is a command-line utility used to set or remove extended attributes (xattrs) on files and directories. Extended attributes are arbitrary key-value pairs associated with file system objects, providing metadata beyond standard file attributes like permissions, ownership, and timestamps. They are categorized into different namespaces such as <i>user</i>, <i>security</i>, <i>system</i>, and <i>trusted</i>, each serving specific purposes. For instance, <i>security</i> attributes are often used by Mandatory Access Control (MAC) systems like SELinux, while <i>user</i> attributes can store arbitrary data for applications or user scripts. <i><b>setfattr</b></i> allows administrators and users to programmatically manage this additional metadata, enabling more fine-grained control and data association with files. It is commonly used in conjunction with <i><b>getfattr</b></i> to view these attributes.


title: CAVEATS
content:
Not all file systems support extended attributes; common ones that do include ext2/3/4, XFS, and Btrfs. The maximum size of an attribute name and value can vary by file system, generally limited (e.g., 255 bytes for name, 64KB for value on Linux). Users must have appropriate permissions (ownership, write access) to modify extended attributes on a file. Only attributes in the <i>user.</i> namespace are generally editable by non-root users; others require root privileges or specific capabilities.


title: ATTRIBUTE NAMESPACES
content:
Extended attributes are organized into distinct namespaces:<br><i><b>user.</b></i>: For arbitrary user-defined data. Non-privileged users can typically set and retrieve attributes in this namespace.<br><i><b>security.</b></i>: Used by security modules like SELinux to store security labels. These are usually set by the kernel or processes with root privileges.<br><i><b>system.</b></i>: For system-level metadata. Managed by the kernel or root processes.<br><i><b>trusted.</b></i>: Accessible only to processes with the <i>CAP_SYS_ADMIN</i> capability. Intended for use by privileged processes to store trusted information.


title: ATTRIBUTE VALUES
content:
Attribute values can be binary data. When displayed by <i><b>getfattr</b></i>, non-printable characters are often escaped for readability. When setting values with <i><b>setfattr</b></i>, they are typically passed as strings. If the value is intended to be interpreted as binary data, it's often represented in hexadecimal format (e.g., `<i>--value=0xdeadbeef</i>`).


title: HISTORY
content:
The concept of extended attributes has been implemented in various Unix-like systems. On Linux, extended attributes were integrated into core filesystems like ext2/3/4, XFS, and Btrfs as part of a broader effort to enhance file metadata capabilities. <i><b>setfattr</b></i> is a key utility within the <i>attr</i> package, providing command-line access to manage these attributes. Its development and usage parallel the evolution of modern Linux filesystems to support richer and more flexible data association with file system objects.


title: PARAMETERS
content:
<b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display program version information.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a help message and exit.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output during operation.<br><br><b>-vc, --verbose-config</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be verbose about configuration files used.<br><br><b>-o <file>, --output-map=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save current console character map to <i>file</i>.<br><br><b>-om <file>, --output-unimap=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save current console Unicode map to <i>file</i>.<br><br><b>-ou <file>, --output-uni-alt-map=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save current console Unicode alternate map to <i>file</i>.<br><br><b>-O <file>, --output-font=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Save current console font to <i>file</i>.<br><br><b>-C <console>, --console=<console></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Apply font changes to the specified console device (e.g., /dev/tty1).<br><br><b>-U <file>, --unimap=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load a Unicode map from <i>file</i> along with the font.<br><br><b>-M <file>, --map=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load a character map from <i>file</i> along with the font.<br><br><b>-u <file>, --uni-alt-map=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load a Unicode alternate map from <i>file</i>.<br><br><b>-d <file>, --dir=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a directory to search for font files.<br><br><b>-L <file>, --load-only=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load only the font from <i>file</i>, without charmap or unimap.<br><br><b>-w <width>, --width=<width></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the font's character width (columns).<br><br><b>-h <height>, --height=<height></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the font's character height (rows).<br><br><b>-c <char_width>, --char-width=<char_width></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the character cell width.<br><br><b>-r <rows>, --rows=<rows></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the number of text rows on the console.<br><br><b>-F <file>, --default-font=<file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use <i>file</i> as the default font if no fontname is provided.<br><br><b>-A, --auto-vertical-size</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically determine the vertical size of the font.<br><br><b>-W, --auto-hcount</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically determine the horizontal character count.<br><br><b>-T, --test</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Test the font without actually loading it onto the console.<br><br><b>-e <encoding>, --encoding=<encoding></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set console encoding (obsolete for modern Unicode consoles).<br><br><b>-s <size>, --size=<size></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set font size, e.g., '8x16'.<br><br><b>-m <map>, --map-file=<map></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load a character map from <i>map</i> (alias for -M).<br><br><b>-a, --ascii</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force ASCII-only character display (relevant for old terminfo setups).<br><br><b>-b, --8bit</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force 8-bit character display (relevant for old terminfo setups).<br><br><b>-p, --pcf</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Load a PCF font (obsolete, most console fonts are PSF).<br><br><b>-t, --term</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set terminal type (obsolete, handled by kernel).<br><br>


title: DESCRIPTION
content:
<b>setfont</b> is a command-line utility used to load a font onto the Linux console (text-mode terminal, TTY). It allows users to change the appearance of text displayed on the virtual consoles, which are typically accessed via <i>Ctrl+Alt+F1</i> to <i>Ctrl+Alt+F6</i>. Beyond just loading font files, <b>setfont</b> can also load associated character maps (.map files) and Unicode maps (.unimap files) to correctly display various character sets. This is crucial for internationalization, enabling the console to display non-ASCII characters, symbols, and various scripts.<br><br>The command supports various font formats, though often console fonts are in PSF (PC Screen Font) format. While modern Linux systems primarily operate in graphical environments, <b>setfont</b> remains essential for system recovery, single-user mode operations, or simply for users who prefer working directly on the console. It provides flexibility in customizing the text display for readability and aesthetic preferences.


title: CAVEATS
content:
<b>setfont</b> primarily affects the text-mode virtual consoles (TTYs) and typically has no effect on graphical environments (like X11, Wayland) or terminal emulators running within them (e.g., GNOME Terminal, Konsole).<br>It requires root privileges to modify console settings.<br>Some options, such as <code>-e</code>, <code>-p</code>, and <code>-t</code>, are considered obsolete in modern Linux distributions with improved Unicode support and kernel handling of terminal types.


title: COMMON USAGE EXAMPLE
content:
To load a specific font, for example, the <code>latarcyrheb-16.psfu.gz</code> font often found in <code>/usr/share/kbd/consolefonts/</code>, you would use: <br><code>sudo setfont latarcyrheb-16</code><br>The <code>.psfu.gz</code> extension is often implied if the font is in the standard console font directory. You can specify a full path for fonts located elsewhere.


title: FONT LOCATIONS
content:
Console fonts are typically stored in <code>/usr/share/kbd/consolefonts/</code> or similar directories like <code>/usr/share/consolefonts/</code>. These directories contain <code>.psf</code> or <code>.psfu.gz</code> (gzipped PSF Unicode) files, which are the standard formats for console fonts.


title: HISTORY
content:
The <b>setfont</b> command has been a fundamental part of the <code>kbd</code> (keyboard and console tools) package in Linux since its early days. Its primary role has always been to manage the display of text on the virtual consoles, adapting to evolving character encodings and font technologies. Initially, its focus was on 8-bit character sets and simple font formats. Over time, with the advent of Unicode and the need for global character support, <b>setfont</b> was updated to handle Unicode maps (<code>.unimap</code> files) to allow the console to correctly render a wider range of characters beyond the basic Latin alphabet. While its direct interactive use might be less common in graphical desktop environments, it remains a critical component for system boot-up, recovery modes, and low-level console interactions, maintaining its relevance in the Linux ecosystem for decades.


title: PARAMETERS
content:
<b><i>scancode</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The raw hexadecimal value (e.g., 0x00-0x7f) generated by a key press on the keyboard hardware. Use <i>showkey --scancodes</i> to identify these values for unknown keys.<br><br><b><i>keycode</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The decimal integer value (1-255) that the Linux kernel will associate with the given <i>scancode</i>. This internal representation is then used for further keymap translations.<br><br>


title: DESCRIPTION
content:
<i>setkeycodes</i> is a low-level Linux utility used to manually assign a specific kernel <b>keycode</b> to a raw keyboard <b>scancode</b>. Scancodes are the raw hexadecimal values sent by the keyboard hardware when a key is pressed. Keycodes, on the other hand, are the internal numeric representations that the Linux kernel uses to identify keys.<br><br>This command is essential for configuring non-standard keyboards, adjusting for hardware quirks, or remapping keys that are not recognized by default. It allows system administrators or users to establish the fundamental mapping between a physical key's output and its logical representation within the operating system. Once a scancode is mapped to a keycode using <i>setkeycodes</i>, other utilities like <i>loadkeys</i> can then be used to associate these keycodes with specific characters, functions, or actions (e.g., 'A', 'Shift', 'Ctrl').<br><br>Changes made by <i>setkeycodes</i> are typically effective immediately but are not persistent across reboots unless saved in appropriate system configuration files, often found in udev rules or init scripts.


title: CAVEATS
content:
<b>Persistence</b>: Changes made by <i>setkeycodes</i> are typically not persistent across reboots. They must be added to system configuration files (e.g., udev rules, <i>/etc/rc.local</i>, or custom init scripts) to apply permanently.<br><br><b>Low-level Operation</b>: This command operates at a very low level of the input subsystem. Incorrect mappings can potentially render parts of the keyboard unusable or lead to unexpected behavior.<br><br><b>Kernel Dependencies</b>: Its functionality is tightly integrated with the kernel's keyboard driver. Behavior might slightly vary across different Linux kernel versions.


title: IDENTIFYING SCANCODES
content:
The <i>showkey --scancodes</i> command is an invaluable tool for determining the raw scancodes produced by unknown or non-functioning keys on a physical keyboard. These identified scancodes can then be precisely used as input for <i>setkeycodes</i> to establish proper mappings.


title: MAKING CHANGES PERMANENT WITH UDEV
content:
For permanent application of keycode mappings, <i>setkeycodes</i> commands are often integrated into udev rules. Specifically, these mappings can be defined in files like <i>/etc/udev/hwdb.d/60-keyboard.hwdb</i> or similar, which allows the system to automatically apply the custom scancode-to-keycode associations whenever the specific keyboard device is detected.


title: HISTORY
content:
<i>setkeycodes</i> is a core component of the <b>kbd</b> package, which provides console keyboard tools for Linux. Its functionality has been fundamental since the early days of Linux to allow flexible keyboard configuration. It addresses the need to support diverse PC hardware, different keyboard layouts, and non-standard keys by providing a direct way to map hardware scancodes to kernel-recognized keycodes. It has remained a stable and essential utility for low-level keyboard mapping and troubleshooting.


title: PARAMETERS
content:
<b><b>-D</b>, <b>--default</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the keyboard LEDs to their power-on default state (Num Lock ON, Caps Lock OFF, Scroll Lock OFF).<br><br><b><b>-F</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the operation even if the console is not in the expected state (e.g., not a VGA console).<br><br><b><b>-L</b>, <b>--leds</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current state of the keyboard LEDs (Caps Lock, Num Lock, Scroll Lock).<br><br><b><b>-R</b>, <b>--reset</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resets the LEDs to reflect the current keyboard mode (e.g., Num Lock LED reflects the numeric keypad state).<br><br><b><b>-C</b> <I>on|off</I>, <b>--caps-lock</b> <I>on|off</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turns the Caps Lock LED <i>on</i> or <i>off</i>.<br><br><b><b>-N</b> <I>on|off</I>, <b>--num-lock</b> <I>on|off</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turns the Num Lock LED <i>on</i> or <i>off</i>.<br><br><b><b>-S</b> <I>on|off</I>, <b>--scroll-lock</b> <I>on|off</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turns the Scroll Lock LED <i>on</i> or <i>off</i>.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br>


title: DESCRIPTION
content:
<b>setleds</b> is a utility for manipulating the state of the keyboard's light-emitting diodes (LEDs), specifically those indicating the status of the Caps Lock, Num Lock, and Scroll Lock keys. It provides fine-grained control over these indicators primarily in a Linux console environment.<br><br>The command can be used to explicitly turn LEDs on or off, synchronize their state with the current console mode, or revert them to their initial BIOS-determined state. This tool is particularly useful in situations where automated scripts need to manage keyboard states, or for debugging keyboard behavior in text-mode consoles. While less commonly used in modern graphical user interfaces (GUIs) where desktop environments handle LED states, <b>setleds</b> remains a fundamental tool for system administrators and users working directly with the Linux kernel's console subsystem. It is part of the <i>kbd</i> package, which provides various console-related utilities.


title: CAVEATS
content:
<b>setleds</b> primarily affects text-mode virtual consoles (TTYs). In graphical environments (like X11 or Wayland), the desktop environment typically manages keyboard LED states, and <b>setleds</b> might not have the desired effect or its changes could be immediately overridden. Modifying LED states often requires root privileges.


title: USAGE EXAMPLES
content:
Here are some common ways to use <b>setleds</b>:<br><ul><li>To turn the Num Lock LED on: <b>setleds</b> <b>-N</b> <I>on</I></li><li>To turn the Caps Lock LED off: <b>setleds</b> <b>-C</b> <I>off</I></li><li>To display the current LED states: <b>setleds</b> <b>-L</b></li><li>To reset LEDs to reflect the current keyboard mode (e.g., Num Lock on if active): <b>setleds</b> <b>-R</b></li><li>To restore LEDs to their default power-on state (Num Lock on, others off): <b>setleds</b> <b>-D</b></li></ul>


title: HISTORY
content:
<b>setleds</b> is a long-standing utility included as part of the <i>kbd</i> package, which provides a collection of tools for managing the Linux console's keyboard and its associated settings. Its development is closely tied to the evolution of the Linux text-mode console, serving as a direct interface to the kernel's keyboard driver for controlling LED indicators. It has been a standard component of most Linux distributions for many years, predating the widespread use of graphical desktop environments.


title: PARAMETERS
content:
<b><I>console_number</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The numeric identifier of the virtual console (e.g., 1, 2, 3) to which kernel messages and <i>/dev/console</i> output should be redirected. This number corresponds to the <i>ttyN</i> device (e.g., 1 for <i>tty1</i>).<br><br>


title: DESCRIPTION
content:
The <b>setlogcons</b> command is a utility used to redirect kernel messages and the output of the <i>/dev/console</i> device to a specific virtual console. By default, these critical system messages are typically directed to the first active virtual console (often <i>tty1</i>). This command empowers system administrators to change this default destination, allowing them to designate any virtual console, specified by its number, as the primary recipient for kernel logs.<br><br>This redirection is particularly useful for debugging, separating system log output from user interactive sessions on other consoles, or establishing a dedicated console solely for monitoring kernel events. It directly interacts with the kernel's virtual console subsystem to modify the target for these messages.


title: CAVEATS
content:
Requires <b>superuser (root)</b> privileges to execute successfully.<br><br>The command affects where the kernel <i>sends</i> messages. While it can be run from any console, it's often recommended to first switch to the target virtual console (e.g., using <i>chvt</i>) and then execute <b>setlogcons</b> with that console's number for intuitive operation.<br><br>This command controls kernel console output; it does not directly manage or affect user-space logging daemons like <i>syslogd</i> or <i>journald</i>, although these daemons might read from <i>/dev/console</i> if configured to do so.


title: KERNEL INTERACTION
content:
<b>setlogcons</b> operates by making a direct system call (specifically, an <i>ioctl</i> on the console device, usually <i>KDSETLOGCONS</i>) to the Linux kernel. This informs the kernel about which virtual console should receive all subsequent kernel printk messages and other output destined for the console. This direct interaction distinguishes it from user-space logging solutions.


title: USE CASES
content:
Commonly employed in headless server environments, during system boot debugging, or when a system administrator needs a clean, dedicated console for real-time kernel output without interference from other login sessions or applications. It allows for a clear separation of system-level messages from interactive user activities.


title: HISTORY
content:
<b>setlogcons</b> is an integral part of the <i>kbd</i> (keyboard and console utilities) package for Linux, reflecting its long-standing role in managing the Linux virtual console system. Its functionality dates back to the early development of the Linux kernel, serving as a fundamental tool for console management before the widespread adoption of graphical desktop environments. While its primary function remains relevant for low-level system administration and debugging, its direct usage might be less frequent in modern, primarily graphical desktop environments compared to its utility in server or embedded systems.


title: SYNOPSIS
content:
<b>setmetamode</b> [<i>OPTION</i>]...<br><b>setmetamode</b> { <b>-e</b> | <b>--esc</b> | <b>-8</b> | <b>--8bit</b> }


title: PARAMETERS
content:
<b><b>-e</b>, <b>--esc</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Meta key to send an Escape character as a prefix when combined with another key. This mode is often preferred by applications that rely on ESC sequences for Meta key recognition.<br><br><b><b>-8</b>, <b>--8bit</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Meta key to set the 8th bit of the character when combined with another key. This effectively makes the character an 8-bit character, useful for certain character encodings like ISO 8859-1.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message showing usage information and exits.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information for the <b>setmetamode</b> utility and exits.<br><br>


title: DESCRIPTION
content:
The <b>setmetamode</b> command is a utility from the <i>kbd</i> package used to control how the keyboard's Meta key (typically the Alt key) behaves in the Linux console (text mode). It allows you to define whether the Meta key, when pressed with another key, generates an 8-bit character (by setting the 8th bit) or sends an Escape character as a prefix. This distinction is crucial for how certain applications, especially older terminal programs or command-line utilities like Emacs, interpret Meta key combinations. By default, many systems might use the 8-bit mode. Switching to Escape-prefix mode (using <b>-e</b>) can resolve issues where Meta key combinations aren't recognized correctly by some console applications. Conversely, the 8-bit mode (using <b>-8</b>) is often desired for ISO 8859-1 compatible character input. The command affects the current console session and is typically managed by privileged users due to its system-wide keyboard impact within the console.


title: CAVEATS
content:
This command primarily affects the virtual consoles (text mode terminals) and has no direct impact on graphical environments (like X11, Wayland) or terminal emulators running within them. Its behavior can sometimes be overridden or configured by <i>loadkeys</i> or specific terminal settings, which might lead to unexpected interactions if not managed carefully.


title: META KEY INTERPRETATION
content:
The Meta key's interpretation is crucial for console applications.<br>In <i>Escape-prefix</i> mode (<b>-e</b>), pressing Alt-A sends the sequence "ESC A".<br>In <i>8-bit</i> mode (<b>-8</b>), it sends a single character with its 8th bit set (e.g., Alt-A might produce a different character depending on the character set). The choice depends on the application's expected input behavior.


title: HISTORY
content:
The <b>setmetamode</b> utility is part of the <i>kbd</i> package, which provides essential tools for managing the Linux console keyboard and fonts. Its functionality has been a stable component of Linux console management for many years. It addresses the critical need for configuring the nuanced behavior of keyboard input, particularly concerning international character sets and specialized key combinations required by text-based applications like Emacs or vi in console environments.


title: SYNOPSIS
content:
<b>setoolkit</b><br><br><i>Description:</i> Launches the interactive, menu-driven Social-Engineer Toolkit. All options and configurations are selected within the toolkit's interactive interface.


title: PARAMETERS
content:
<b>Interactive Menu Options</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unlike traditional Linux commands, <b>setoolkit</b> operates primarily through an interactive, numbered menu system after launch. The 'parameters' are the various attack modules and options chosen within this menu, not command-line arguments.<br><br><b>Spear-Phishing Attack</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows for crafting highly targeted email attacks, including bulk mailer, individual email attacks, and credential harvesting.<br><br><b>Website Attack Vectors</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides various methods to exploit websites, such as credential harvester attack, tabnabbing, web jacking, Java applet attack, Metasploit browser exploit, and more.<br><br><b>Infectious Media Generator</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates malicious payloads (e.g., USB autorun, CD/DVD) that can infect a target system when inserted or executed.<br><br><b>Create a Payload and Listener</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assists in creating custom payloads for various operating systems and setting up a listener to catch reverse shells or other connections.<br><br><b>Mass Mailer Attack</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends emails to a large list of recipients, often used for generic phishing campaigns.<br><br><b>Arduino-Based Attack</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exploits the functionality of Arduino-based devices like Teensy for keyboard injection attacks.<br><br><b>Wireless Access Point Attack</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets up a rogue wireless access point to capture credentials or launch other network-based attacks.<br><br><b>SMS Spoofing Attack</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows sending spoofed SMS messages to mobile devices.<br><br>


title: DESCRIPTION
content:
<b>setoolkit</b> (the Social-Engineer Toolkit) is an open-source penetration testing framework designed for social engineering. It automates common social engineering attack vectors, making it easier for security professionals to test their organization's susceptibility to such attacks. It's widely used in ethical hacking, red teaming, and security awareness training. The toolkit focuses on human vulnerabilities, leveraging various techniques like phishing, credential harvesting, malware delivery, and web-based exploits. Instead of relying on technical vulnerabilities, <b>setoolkit</b> targets the human element, which is often considered the weakest link in the security chain. It provides a user-friendly, menu-driven interface that guides the user through different attack scenarios, simplifying complex multi-stage attacks. It's a staple in Kali Linux distributions for its effectiveness in simulating real-world social engineering threats.


title: CAVEATS
content:
<i>Ethical Use Only:</i> <b>setoolkit</b> is a powerful tool designed for ethical security testing. Misuse can have severe legal consequences.<br><br><i>Root Privileges:</i> It often requires root (sudo) privileges to perform certain operations, especially network-related attacks.<br><br><i>Detection:</i> Malicious payloads and activities generated by <b>setoolkit</b> can be detected by antivirus software and intrusion detection/prevention systems.<br><br><i>Network Configuration:</i> Many attacks (e.g., credential harvesting, Metasploit exploits) require proper network configuration, such as port forwarding, for external accessibility.


title: INTERACTIVE MENU OPERATION
content:
Upon execution, <b>setoolkit</b> presents a main menu with numbered options. Users navigate by typing the corresponding number and pressing Enter. This menu-driven approach simplifies the complex workflow of social engineering attacks, guiding the user step-by-step through configuration and execution.


title: DEPENDENCIES AND INTEGRATION
content:
<b>setoolkit</b> is primarily written in Python and relies on various Python libraries. It often integrates with other powerful tools and frameworks, most notably the Metasploit Framework, to deliver payloads and manage listeners. This integration enhances its capabilities by leveraging Metasploit's extensive exploit and payload database.


title: CORE PHILOSOPHY
content:
The toolkit's core philosophy revolves around testing the 'human firewall'. It provides the means to simulate sophisticated social engineering campaigns that mimic real-world attacks, allowing organizations to assess and improve their employees' awareness and resilience against such threats.


title: HISTORY
content:
The Social-Engineer Toolkit (SET) was created by David Kennedy (also known as 'ReL1K'), a well-known security researcher and founder of TrustedSec and DerbyCon. It was designed to automate and simplify social engineering attacks for penetration testers. Since its initial release, SET has become an integral part of the ethical hacking community and is a standard inclusion in penetration testing distributions like Kali Linux. Its development focused on providing a user-friendly interface to complex attack vectors, making advanced social engineering techniques accessible to a broader audience while promoting responsible security testing.


title: SEE ALSO
content:
msfconsole(1) - Metasploit Framework Console, nmap(1) - Network exploration tool and security scanner, ettercap(8) - A comprehensive suite for man-in-the-middle attacks, aircrack-ng(8) - Wireless security audit tools


title: SYNOPSIS
content:
<b>setsebool</b> [<b>-P</b>] [<b>-N</b>] <I>boolean</I> {<I>on</I> | <I>off</I>}<br><b>setsebool</b> [<b>-P</b>] [<b>-N</b>] <I>boolean1</I>=<I>value1</I> [<I>boolean2</I>=<I>value2</I> ...]<br><b>setsebool</b> [<b>-hV</b>]


title: PARAMETERS
content:
<b>boolean</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the SELinux boolean to modify.<br><br><b>{on | off}</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The desired state for the boolean: 'on' (true) or 'off' (false).<br><br><b>boolean=value</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alternative syntax for specifying a boolean and its value, particularly useful when setting multiple booleans at once (e.g., 'httpd_can_network_connect=on ftpd_full_access=off').<br><br><b>-P, --persistent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Makes the boolean change permanent across system reboots. Without this option, the change is only effective until the next reboot.<br><br><b>-N, --noninteractive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables interactive prompts and warnings, such as when a specified boolean does not exist.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and exits.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays version information and exits.<br><br>


title: DESCRIPTION
content:
<b>setsebool</b> is a command-line utility used to manage <I>SELinux booleans</I>. <br>SELinux booleans are true/false switches within the SELinux policy that allow administrators to enable or disable specific security behaviors without having to load an entirely new policy. <br>This provides flexibility in configuring SELinux to meet varying security requirements or application needs. <br>The <b>setsebool</b> command can set these booleans either <I>temporarily</I> (for the current runtime session) or <I>persistently</I> (so the setting survives system reboots). <br>It's an essential tool for fine-tuning SELinux enforcement for services and users, ensuring that applications have the necessary permissions while maintaining a secure posture.


title: CAVEATS
content:
Requires root privileges to execute. <br>Changes made without the <b>-P</b> (<i>--persistent</i>) option are temporary and will revert to their default or last persistent state upon the next system reboot. <br>Care must be taken when setting booleans, as an incorrect setting might inadvertently weaken the system's security posture or interfere with legitimate application functionality. <br>Always verify the current state and intended effect of a boolean before making changes. Use commands like <I>getsebool -a</I> or <I>semanage boolean -l</I> to list available booleans and their descriptions.


title: LISTING AVAILABLE BOOLEANS
content:
To view all available SELinux booleans and their current states, use the command: <br><I>getsebool -a</I><br>For more detailed descriptions of each boolean, you can use: <br><I>semanage boolean -l</I>


title: COMMON USE CASES
content:
Many SELinux booleans are named intuitively, indicating the service or functionality they control. <br>For example, to allow the Apache HTTP server to make network connections (e.g., to a backend database), you might use: <br><I>setsebool -P httpd_can_network_connect on</I><br>Another common use case is enabling FTP access for home directories: <br><I>setsebool -P ftpd_full_access on</I>


title: HISTORY
content:
The <I>setsebool</I> command is an integral part of the SELinux userspace utilities, which emerged from the SELinux project initially developed by the National Security Agency (NSA) and later adopted and integrated into mainstream Linux distributions like Fedora and Red Hat Enterprise Linux in the early 2000s. <br>Its development was driven by the need for a flexible mechanism to adjust SELinux policy behavior dynamically without requiring a full policy rebuild and reload. <br>Booleans provide a fine-grained control over specific security features, and <I>setsebool</I> has been a core utility for administrators to interact with these policy switches since their inception, facilitating easier management of complex SELinux environments.


title: SYNOPSIS
content:
<b>setserial</b> [ <i>-v</i> ] [ <i>-a</i> ] [ <i>-G</i> ] [ <i>-g</i> ] [ <i>-b</i> ] [ <i>-X</i> ] <i>&lt;device&gt;</i> [ <i>&lt;parameters&gt;</i> ... ]<br><b>setserial</b> <i>-t &lt;device&gt;</i><br><b>setserial</b> <i>-V</i>


title: PARAMETERS
content:
<b><i>-v</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Verbose mode. Displays more detailed information about the serial port configuration, including any errors.<br><br><b><i>-a</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display all available information for the specified device, or list details for all detected serial devices if no device is specified.<br><br><b><i>-G</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Graphical output mode, intended for displaying information in a more structured, table-like format (less commonly used today).<br><br><b><i>-g</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print only the device names of the configured serial ports, one per line, useful for scripting.<br><br><b><i>-b</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Report the current baud rate settings for the specified device. Note that the actual communication speed is often managed by <i>stty</i>.<br><br><b><i>-X</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Expert mode. Displays raw, numeric values for internal serial port settings, useful for advanced debugging.<br><br><b><i>-t</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Test mode. Performs basic tests on the serial port, such as checking for IRQ conflicts or the presence of a UART chip.<br><br><b><i>-V</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information for the <i>setserial</i> utility.<br><br>


title: DESCRIPTION
content:
<i>setserial</i> is a Linux command-line utility used to examine and configure the parameters of traditional serial ports (UARTs). It allows administrators to view and modify settings such as the I/O base address, IRQ number, port type (e.g., 16550A, 16450), and various flags like <i>skip_test</i> or <i>auto_irq</i>. Historically, it was crucial for optimizing serial port performance and ensuring correct operation for devices such as modems, serial consoles, and industrial equipment connected via physical COM ports. While it can retrieve real-time port status, its ability to persistently configure ports usually relies on system initialization scripts, as the settings are not preserved across reboots by <i>setserial</i> itself. With the advent of <i>udev</i> and more dynamic kernel module loading, its direct use for initial system setup has become less common, especially for USB-to-serial adapters which are managed differently. However, it still serves as a valuable diagnostic tool for traditional UART-based serial ports.


title: CAVEATS
content:
Settings made with <i>setserial</i> are generally not persistent across system reboots; they must be re-applied via system initialization scripts (e.g., <i>/etc/rc.local</i> or distribution-specific configuration files). It primarily configures traditional UARTs and is less relevant for USB-to-serial converters or modern virtual serial ports which are managed dynamically by <i>udev</i> and <i>sysfs</i>. Root privileges are typically required to modify serial port settings.


title: IMPORTANT DEVICE CONFIGURATION PARAMETERS
content:
When configuring a specific serial device using <i>setserial &lt;device&gt; &lt;parameters&gt;</i>, various settings can be specified after the device path (e.g., <i>/dev/ttyS0</i>). Common and important examples include:<br> <b>port &lt;address&gt;</b>: Sets the I/O base address for the serial port (e.g., <i>0x3f8</i> for COM1).<br> <b>irq &lt;number&gt;</b>: Assigns the Interrupt Request (IRQ) line (e.g., <i>4</i> for COM1).<br> <b>uart &lt;type&gt;</b>: Specifies the UART chip type present (e.g., <i>16550A</i>, <i>16450</i>, or <i>none</i>). This helps the kernel driver optimize.<br> <b>baud_base &lt;rate&gt;</b>: Sets the base baud rate divisor for the port, from which actual communication baud rates are derived (e.g., <i>115200</i>).<br>Other flags can control behavior like <b>auto_irq</b> (automatically detect IRQ), <b>skip_test</b> (skip IRQ/port testing during boot), <b>low_latency</b> (optimize for low-latency communication), and various flow control or closing wait settings.


title: MODERN ALTERNATIVES AND PERSISTENCE
content:
In modern Linux systems, especially for USB-to-serial adapters, serial ports are typically managed by <i>udev</i> rules and kernel modules which automatically detect and configure devices. For persistent configuration of traditional serial ports, commands are often placed in system initialization scripts like <i>/etc/rc.local</i>, or in specific configuration files provided by the distribution (e.g., <i>/etc/default/setserial</i> or a systemd service). Direct, ad-hoc manipulation with <i>setserial</i> is now more common for diagnosing issues with legacy hardware rather than initial setup or permanent configuration.


title: HISTORY
content:
<i>setserial</i> has been a part of Linux since its early days, providing essential functionality for configuring hardware serial ports, particularly for modem and terminal connectivity on physical COM ports. Its prominence began to decline significantly with the introduction of the 2.6 series kernel and the <i>udev</i> daemon, which revolutionized dynamic device management and device file creation. While still included in most distributions for backward compatibility and specific diagnostic purposes, its role in initial system configuration has largely been superseded by automated device detection and configuration frameworks.


title: SEE ALSO
content:
<i>stty</i>(1), <i>agetty</i>(8), <i>udevadm</i>(8), <i>dmesg</i>(1), <i>lsusb</i>(8), <i>lspci</i>(8)


title: PARAMETERS
content:
<b>-c, --ctty</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt to attach the new process's standard input/output/error to the specified terminal. Rarely used for typical daemonization.<br><br><b>-f, --fork</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Fork and execute the program in the child process. The parent <b><I>setsid</I></b> then exits immediately. This is useful for the double-forking idiom.<br><br><b>-w, --wait</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Wait for the child process to exit. This option is available in newer versions (e.g., util-linux >= 2.36).<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help information and exit.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
The <b><I>setsid</I></b> command runs a program in a new session. When invoked, it makes the specified program the leader of a new session, ensuring that the process group becomes independent of the controlling terminal from which <b><I>setsid</I></b> was launched. This is crucial for processes designed to run in the background, such as daemon processes, which need to continue executing even after the user logs out or the terminal session closes.<br><br>By creating a new session, <b><I>setsid</I></b> effectively detaches the process from any controlling terminal and prevents it from receiving signals like <b><I>SIGHUP</I></b> (hang-up signal) that are typically sent to processes associated with a disconnecting terminal. This allows long-running tasks to execute reliably without interruption, making it a fundamental tool for daemonization and background task management in Linux and Unix-like systems. It's often used in shell scripts to ensure a process's longevity.


title: CAVEATS
content:
<b><I>setsid</I></b> itself does not automatically redirect standard I/O (stdin, stdout, stderr). For robust daemonization, you typically need to manually redirect these to <b><I>/dev/null</I></b> or specific log files.<br><br>If the new session leader (the <b><I>program</I></b> executed by <b><I>setsid</I></b>) subsequently opens a terminal, it can become its controlling terminal, potentially negating the detachment purpose unless further precautions are taken.


title: DOUBLE-FORKING IDIOM
content:
For robust daemonization, <b><I>setsid</I></b> is often combined with a double-forking technique. The first fork creates a child that calls <b><I>setsid</I></b>, and then this child forks again. The grand-child process then becomes the actual daemon. This ensures that the intermediate child (the session leader) exits, allowing the grand-child to be reparented by <b><I>init</I></b> (or `systemd` etc.) and to be completely detached from the original controlling terminal, making it immune to terminal-related signals. The <b><I>setsid --fork</I></b> option simplifies this by effectively performing the first fork internally.


title: IMMUNITY TO SIGHUP
content:
One of the primary reasons to use <b><I>setsid</I></b> is to prevent processes from receiving the <b><I>SIGHUP</I></b> signal. This signal is traditionally sent to processes in a session when their controlling terminal disconnects. By creating a new session and detaching from the terminal, processes started with <b><I>setsid</I></b> are no longer part of the original session and therefore do not receive <b><I>SIGHUP</I></b> upon terminal closure, allowing them to continue running unimpeded.


title: HISTORY
content:
The concept of sessions and process groups, along with the `setsid()` system call, is a fundamental part of POSIX and Unix-like operating systems design. It enables the robust management of processes, particularly background services and daemons. The <b><I>setsid</I></b> utility provides a convenient shell-level wrapper around the `setsid()` system call, making it accessible for scripting and direct command-line use. Its utility has been consistent since the early days of Unix for managing long-running, terminal-independent processes.


title: SEE ALSO
content:
<I>nohup</I>(1), <I>disown</I>(1), <I>screen</I>(1), <I>tmux</I>(1), <I>fork</I>(2), <I>setsid</I>(2)


title: PARAMETERS
content:
<b>-foreground <I>color</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the foreground color of the text. Valid colors include black, red, green, yellow, blue, magenta, cyan, white, and their 'bright' variants (e.g., brightred).<br><br><b>-background <I>color</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the background color of the terminal. Valid colors are the same as for -foreground.<br><br><b>-clear</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clears the terminal screen and moves the cursor to the top-left corner.<br><br><b>-reset</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resets the terminal to its initial power-on state, clearing all attributes and screen contents.<br><br><b>-cursor [on|off]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls the visibility of the text cursor. 'on' shows the cursor, 'off' hides it.<br><br><b>-blank [<I>N</I>|force]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the screen blanking timeout to <I>N</I> minutes. If no activity, the screen blanks. 'force' immediately blanks the screen. Use '0' to disable blanking.<br><br><b>-powersave [on|vsync|hsync|dpms|off]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls VESA power saving features. 'on' or 'dpms' enables DPMS, 'off' disables it. 'vsync' and 'hsync' control vertical and horizontal sync respectively.<br><br><b>-msg [on|off]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables or disables the display of kernel messages on the console.<br><br><b>-dump [<I>N</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Dumps the contents of virtual console <I>N</I> (or current console if <I>N</I> is omitted) to standard output.<br><br><b>-ulcolor <I>color</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the color for underlined text. Only applicable if the terminal supports underline colors.<br><br><b>-halfbright [on|off]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables or disables the half-bright attribute for characters.<br><br><b>-blength <I>N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the duration of the bell sound in milliseconds.<br><br><b>-bfreq <I>N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the frequency of the bell sound in Hz.<br><br><b>-store</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Saves the current terminal settings to memory.<br><br><b>-recall</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restores the terminal settings previously saved with -store.<br><br><b>-regtabs <I>N</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets tab stops at every <I>N</I> columns.<br><br><b>-term <I>terminal_name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the terminal type for the current console, for compatibility with programs that check TERMCAP or TERMINFO.<br><br>


title: DESCRIPTION
content:
The <b>setterm</b> command is a utility used to configure various attributes of a Linux console (TTY). It allows users and scripts to control aspects like foreground and background colors, cursor visibility, screen blanking, bell parameters, and other display characteristics. Unlike generic terminal manipulation tools like <I>tput</I> which rely on the <I>terminfo</I> database, <I>setterm</I> directly interacts with the kernel's terminal driver using specific escape sequences, making it particularly suited for the virtual consoles provided by the Linux kernel. It is commonly employed in shell scripts to set up specific terminal environments, for example, to change prompt colors, clear the screen, or reset the terminal to a known state after an application exits.


title: CAVEATS
content:
<b>setterm</b> is primarily designed for direct Linux console (TTY) interaction. Its functionality may be limited or behave unexpectedly when used within graphical terminal emulators (e.g., <I>xterm</I>, <I>gnome-terminal</I>, <I>konsole</I>), as these emulators often implement their own display logic or rely on different escape sequences. Some options may require root privileges or specific kernel support. Effects are typically session-specific and revert upon closing the terminal or rebooting.


title: USAGE IN SHELL SCRIPTS
content:
<b>setterm</b> is widely used in shell scripts for various purposes, such as:<br>Setting specific foreground and background colors for shell prompts (e.g., via PS1 environment variable).<br>Clearing the screen before displaying an application's output.<br>Temporarily hiding the cursor during sensitive operations.<br>Ensuring a consistent terminal state across different script executions.<br>For example, <I>setterm -foreground green -clear</I> could be used at the start of a script.


title: INTERACTION WITH KERNEL TTY DRIVER
content:
Unlike generic terminal control programs that rely on <I>terminfo</I> or <I>termcap</I> databases (like <I>tput</I>), <b>setterm</b> directly communicates with the Linux kernel's virtual console (TTY) driver. It achieves this by writing specific control sequences and escape codes, which the kernel interprets to modify the console's behavior and appearance. This direct interaction is what makes it so effective for the bare Linux console environment.


title: HISTORY
content:
The <b>setterm</b> command is part of the <I>util-linux</I> project, a fundamental collection of utilities for the Linux operating system. It has been a standard tool for managing Linux console attributes for many years, providing a simpler interface to kernel terminal drivers than manually emitting complex ANSI escape sequences. While its direct use might be less frequent in modern graphical desktop environments, it remains essential for server administration, embedded systems, and shell scripting on bare Linux consoles.


title: PARAMETERS
content:
<b>-k, --kbd</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set up only the keyboard configuration.<br><br><b>-f, --font</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set up only the console font.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be verbose during operation, showing more details about the setup process.<br><br><b>-q, --quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress all output messages, running silently.<br><br><b>-n, --noclear</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not clear the screen before applying new console settings.<br><br><b>-C, --condev=<I>DEVICE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the console device to configure (e.g., <i>/dev/tty0</i>).<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display version information and exit.<br><br>


title: DESCRIPTION
content:
<b>setupcon</b> is a Linux command-line utility used to configure the console's appearance and behavior. Its primary function is to set the console font (typeface) and the keyboard map (layout). It is often invoked during system boot to ensure the console is properly configured for the user's locale and preferences.<br><br><b>setupcon</b> reads its configuration from files like <i>/etc/default/console-setup</i> or <i>/etc/console-setup.conf</i>, which store settings such as font family, font size, keyboard layout, and console colors. It acts as a high-level wrapper, internally calling lower-level utilities such as <b>setfont</b> to apply font settings and <b>loadkeys</b> to apply keyboard layout changes.<br><br>This command is crucial for internationalization, allowing users to input and view characters correctly in various languages directly on the console, even before a graphical environment starts. It provides an easy way to manage console settings without directly interacting with the underlying low-level commands.


title: CAVEATS
content:
Changes made by <b>setupcon</b> are typically for the current console session or until reboot, depending on how it's integrated with system initialization scripts. It primarily affects virtual consoles (like tty1-tty6), not graphical terminals (such as xterm, gnome-terminal, or Konsole). Root privileges are required to modify console settings.


title: CONFIGURATION FILES
content:
The command often reads its configuration from files such as <i>/etc/default/console-setup</i> or <i>/etc/console-setup.conf</i>. These files contain variables defining the desired keyboard layout, font, and other console preferences. Administrators can edit these files to make persistent changes to the console setup.


title: SYSTEM INTEGRATION
content:
On many modern Linux distributions, <b>setupcon</b> is automatically executed during the boot process, often via an init script or a systemd service (e.g., <i>console-setup.service</i>). This ensures that the console is configured correctly from the moment the system starts, providing the correct character sets and keyboard layouts for the user's locale.


title: HISTORY
content:
<b>setupcon</b> is part of the <b>kbd</b> package, which provides various utilities for configuring the Linux console. It emerged to simplify the complex process of manually configuring console fonts and keymaps, especially with the growing need for internationalization support in Linux. Its role has remained consistent, providing a high-level interface to <b>setfont</b> and <b>loadkeys</b>, abstracting the underlying complexities for users and system administrators.


title: PARAMETERS
content:
<b>on</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables VESA screen blanking on the console. The screen will blank after the system's configured inactivity timeout.<br><br><b>off</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables VESA screen blanking on the console. The screen will not blank due to inactivity.<br><br>


title: DESCRIPTION
content:
The <b>setvesablank</b> command is a Linux utility used to control the VESA (Video Electronics Standards Association) blanking feature of the console. It allows users to enable or disable the screen blanking mechanism, which is part of the power management features for the display. When enabled, the console screen will go blank after a period of inactivity, similar to a screen saver, helping to save power and prevent screen burn-in. <br><br>This command is particularly relevant in environments where direct console access is frequent and power management is desired, such as servers or embedded systems without a full graphical desktop environment. It operates directly on the Linux console driver to manipulate the VESA blanking state.


title: CAVEATS
content:
This command primarily affects the <b>text-mode Linux console</b> and typically has no effect on graphical desktop environments (like GNOME, KDE, XFCE, etc.).<br><br>The blanking timeout period is usually configured separately, often via tools like <i>setterm</i> or kernel parameters. <i>setvesablank</i> only enables or disables the feature, not its duration.<br><br>Requires root privileges or appropriate permissions to modify console settings.<br><br>Its functionality might be superseded or managed differently by modern display managers or power management daemons in contemporary Linux distributions.


title: SCREEN BLANKING VS. SCREEN SAVER
content:
While often used interchangeably, screen blanking (as controlled by <b>setvesablank</b>) typically refers to turning off the display signal or putting the display into a low-power state. A screen saver, on the other hand, usually involves displaying dynamic patterns to prevent burn-in, often without actually powering down the display. <b>setvesablank</b> focuses on the former.


title: HISTORY
content:
The <b>setvesablank</b> command is part of the <b>kbd</b> project, which provides utilities for managing the Linux console's keyboard and screen. It has been available for a long time as a fundamental tool for console management in Linux, reflecting the early importance of power saving and display protection features even in text-mode environments. Its development has been intertwined with the evolution of the Linux kernel's console drivers.


title: SYNOPSIS
content:
<b>setvtrgb</b> [<i>-e &lt;escape_char&gt;</i>] [<i>-u</i>] [<i>&lt;r0&gt; &lt;g0&gt; &lt;b0&gt; ... &lt;r15&gt; &lt;g15&gt; &lt;b15&gt;</i>]<br>The RGB triplets <i>&lt;rN&gt; &lt;gN&gt; &lt;bN&gt;</i> are required unless the <i>-u</i> option is used.


title: PARAMETERS
content:
<b><i>-e &lt;escape_char&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative escape character (default is '\033') to use for ioctl calls, which communicate with the kernel.<br><br><b><i>-u</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Undoes the previous color map change and restores the default 16-color palette of the virtual terminal. When this option is used, no RGB values should be provided.<br><br><b><i>&lt;r0&gt; &lt;g0&gt; &lt;b0&gt; ... &lt;r15&gt; &lt;g15&gt; &lt;b15&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A sequence of 16 triplets, where each triplet <i>&lt;rN&gt; &lt;gN&gt; &lt;bN&gt;</i> defines the Red, Green, and Blue components for console color N (from 0 to 15). Each component is an integer from 0 to 255. These values override the console's default color map.<br><br>


title: DESCRIPTION
content:
<i>setvtrgb</i> is a Linux command-line utility used to modify the color palette of the virtual console (TTY). It allows users to redefine the 16 standard VGA colors (colors 0 through 15) by specifying their Red, Green, and Blue (RGB) components. Each color is defined by a triplet of integers ranging from 0 to 255 for its red, green, and blue intensity, respectively. This enables customization of the text and background colors displayed on the console, providing a personalized visual experience or ensuring better readability. The changes apply directly to the kernel's console color map and affect all subsequent text output on that specific virtual terminal. It is primarily used by system administrators or users who spend a lot of time in a console environment.


title: CAVEATS
content:
<i>setvtrgb</i> only affects the Linux virtual consoles (TTYs) and will not work in graphical terminal emulators such as <i>xterm</i>, <i>gnome-terminal</i>, or <i>konsole</i>.<br>Modifying the console color map typically requires root privileges or appropriate capabilities (e.g., <i>CAP_SYS_TTY_CONFIG</i>) to interact with the kernel's console device.<br>Changes made by <i>setvtrgb</i> are usually temporary and specific to the current virtual terminal session. They might be reset upon rebooting the system or switching to a different virtual terminal if its default map is loaded.<br>The kernel must support the <i>TIOCL_SETRGB</i> ioctl for this command to function. Most modern Linux kernels include this support.


title: HISTORY
content:
The <i>setvtrgb</i> utility is part of the <i>kbd</i> package, which provides various console utilities for Linux. Its development is closely tied to the evolution of the Linux console itself, offering fine-grained control over its appearance. The ability to customize console colors has been a feature available since early Linux kernel versions supporting the <i>TIOCL_SETRGB</i> ioctl, allowing users and system administrators to personalize their command-line environments beyond the basic 16-color VGA palette. It continues to be relevant for systems where a graphical environment is not present or desired, such as embedded systems, servers, or rescue environments.


title: PARAMETERS
content:
<b><i>layout</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the primary keyboard layout to use (e.g., 'us', 'de', 'fr'). This is a common positional argument.<br><br><b><i>variant</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a variant for the chosen layout (e.g., 'dvorak' for the 'us' layout, 'neo' for 'de'). This is a common positional argument, following the layout.<br><br><b><i>option</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more keyboard options. Options control various behaviors like layout switching combinations (e.g., 'grp:alt_shift_toggle'), Caps Lock behavior (e.g., 'caps:swapescape'), or compose key settings. Can be repeated or provided as positional arguments after layout/variant.<br><br><b><b>-rules</b> <i>rules</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the base rules file to use, defining the available models, layouts, and options. Defaults to 'evdev' on most modern systems.<br><br><b><b>-model</b> <i>model</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the keyboard model, which maps physical keycodes to symbolic key names (e.g., 'pc105', 'microsoftpro').<br><br><b><b>-layout</b> <i>layout</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly sets the base keyboard layout, equivalent to the positional <i>layout</i> argument.<br><br><b><b>-variant</b> <i>variant</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly sets the layout variant, equivalent to the positional <i>variant</i> argument.<br><br><b><b>-option</b> <i>option</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly adds a keyboard option. This option can be specified multiple times for multiple options, or options can be space-separated after other positional arguments.<br><br><b><b>-print</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the XKB configuration it would apply, without actually loading it into the server.<br><br><b><b>-query</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Queries and prints the currently active XKB configuration on the X server.<br><br><b><b>-device</b> <i>id</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Applies the configuration to a specific keyboard device identified by its ID. Useful in multi-keyboard setups.<br><br><b><b>-display</b> <i>display</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the X server display to connect to (e.g., ':0').<br><br>


title: DESCRIPTION
content:
<i>setxkbmap</i> is a utility program used to load a new keyboard description into the X server. It is the standard tool for dynamically changing keyboard layouts, models, and options within the X Window System without needing to restart the X server. Instead of modifying server configuration files directly, <i>setxkbmap</i> interacts with the X Keyboard Extension (XKB) to apply immediate changes. Users can specify a keyboard layout (e.g., 'us', 'fr', 'de'), a keyboard model (e.g., 'pc105'), and various options (e.g., 'grp:alt_shift_toggle' for layout switching or 'caps:swapescape' to remap Caps Lock to Escape). It retrieves keyboard configuration data from a hierarchical collection of XKB data files, which define keyboard rules, layouts, models, and symbols. This allows for flexible and powerful configuration of national layouts, special keybindings, and other keyboard behaviors.


title: CAVEATS
content:
Changes made with <i>setxkbmap</i> are typically transient and apply only to the current X session. They will not persist across reboots unless configured via a startup script (like <i>~/.xinitrc</i> or <i>~/.xprofile</i>), a desktop environment's settings, or a system-wide tool like <i>localectl</i>.<br><br>Using <i>setxkbmap</i> can sometimes interfere with keyboard settings managed by a desktop environment (e.g., GNOME, KDE), potentially leading to conflicting configurations if both try to control the keyboard.<br><br>This command only affects the X Window System; it does not change keyboard settings for virtual consoles (TTYs).


title: XKB CONFIGURATION FILES
content:
<i>setxkbmap</i> relies on a comprehensive set of XKB configuration files, typically located under <i>/usr/share/X11/xkb/</i>. This directory contains subdirectories like <i>rules/</i>, <i>symbols/</i>, <i>layouts/</i>, <i>geometry/</i>, and <i>compat/</i>, which collectively define all aspects of keyboard behavior, from keycodes and symbols to layouts and options.


title: COMMON USE CASES
content:
Setting a specific layout: <b>setxkbmap us</b><br>Setting a layout with a variant: <b>setxkbmap us dvorak</b><br>Adding an option for layout switching: <b>setxkbmap us -option grp:alt_shift_toggle</b><br>Combining multiple settings: <b>setxkbmap de neo -option caps:swapescape -option grp:win_space_toggle</b><br>Querying current settings: <b>setxkbmap -query</b>


title: HISTORY
content:
<i>setxkbmap</i> is a key component of the X Keyboard Extension (XKB), which was introduced to the X Window System in the early 1990s. XKB revolutionized keyboard configuration by providing a vastly more flexible and powerful system compared to its predecessor, <i>xmodmap</i>. Its design allowed for complex national layouts, multiple symbol groups, and a wide array of customizable options, quickly becoming the standard for X server keyboard management. <i>setxkbmap</i> serves as a high-level front-end to XKB's sophisticated capabilities, abstracting the complexities of directly compiling XKB keymaps with <i>xkbcomp</i>. Its role has remained central in providing dynamic keyboard configuration for graphical Linux and Unix environments.


title: DESCRIPTION
content:
The command 'sex' does not exist as a standard utility in common Linux distributions. It is often a mistyped command, or a misunderstanding. Users frequently intending to use commands like <i>sed</i> (stream editor) for text manipulation, or <i>seq</i> (sequence) for generating number sequences, might mistakenly type 'sex'. Linux commands are typically short, mnemonic, and follow conventions for system utilities. Any command with this exact name would likely be a custom script or an obscure, non-standard application installed by a user, and would not be part of the core GNU/Linux utilities. Therefore, attempting to execute 'sex' will typically result in a 'command not found' error.


title: CAVEATS
content:
The command 'sex' is not a standard utility found in Unix-like operating systems, including Linux. Attempting to execute it will result in a 'command not found' error message from your shell. Users should verify the spelling of commands, especially when dealing with common command-line tools. Common commands that might be confused with 'sex' due to proximity on the keyboard or similar pronunciation include <i>sed</i> (stream editor) and <i>seq</i> (generate sequences of numbers).


title: HISTORY
content:
There is no known history or development for a standard Linux command named 'sex', as it does not exist within the official GNU core utilities or other widely adopted Linux projects.


title: SYNOPSIS
content:
Given that <b>sf</b> is not a standard command, a universal synopsis cannot be provided. Its syntax would vary drastically based on its specific interpretation (e.g., an alias for <b>sftp</b>, a custom script, or a niche utility).


title: DESCRIPTION
content:
The command <b>sf</b> is not a standard, universally recognized executable in most common Linux distributions (e.g., Debian, Ubuntu, Fedora, CentOS). Unlike commands such as <b>ls</b>, <b>grep</b>, or <b>cd</b>, there is no default <b>man sf</b> page or pre-installed utility named <b>sf</b> that performs a common system function. <br><br>Its appearance in a command-line context almost certainly implies one of the following scenarios:<br><b>Typo or Abbreviation:</b> It is a typo or abbreviation for a more common command, most frequently <b>sftp</b> (Secure File Transfer Protocol client), <b>ssh</b> (Secure Shell client), or <b>sync</b> (synchronize data on disk).<br><b>User-Defined Alias or Shell Function:</b> Users often create short aliases or shell functions for long commands or sequences of commands for convenience, such as <i>alias sf='sftp user@host:/path'</i> or <i>sf() { ... }</i>.<br><b>Specific Software Packages:</b> It is an executable belonging to a specific, non-standard software package that has been installed on the system. Examples might include <i>sf-convert</i> from <i>stardict-tools</i> or a component of a SmartFabric utility, but these are highly context-dependent and not part of a base Linux installation.<br><b>Systemd Context:</b> Less commonly, it could be a component of a system management framework like <i>systemd</i> (e.g., related to <i>systemd-run --scope</i> for service forking, though <b>sf</b> isn't a direct user command here).<br><br>Therefore, the behavior of <b>sf</b> is entirely dependent on the specific system's configuration and installed software, making a general analysis impossible.


title: CAVEATS
content:
The primary caveat is that <b>sf</b> is not a standard Linux command. Relying on <b>sf</b> without knowing its specific definition on a given system can lead to unexpected behavior or command not found errors. Its functionality is entirely context-dependent, stemming from user aliases, custom scripts, or specialized software installations. Users should always check <b>type sf</b> or <b>which sf</b> to understand its origin on their system.


title: POSSIBLE INTERPRETATIONS
content:
While <b>sf</b> is not a standard command, it could refer to:<br><b>Typo for SFTP:</b> Often, users might mistakenly type <b>sf</b> when intending to use <b>sftp</b> for secure file transfers.<br><b>User-Defined Alias/Function:</b> Many users create shell aliases or functions for frequently used or complex commands, e.g., <i>alias sf='sftp example.com'</i>.<br><b>Specific Software Utilities:</b> In some very niche or proprietary software environments, <b>sf</b> might be an executable name. For instance, <i>sf-convert</i> (from stardict-tools) or <i>smartfan</i> (often invoked as <b>sf</b>). However, these are not general-purpose system commands.


title: HISTORY
content:
There is no documented history or development timeline for a standard, general-purpose <b>sf</b> command in Linux, as it does not exist as such. Any 'history' related to <b>sf</b> would be specific to its localized use as an alias, custom script, or a component of a particular software package installed on a system.


title: SYNOPSIS
content:
<b>sfdisk</b> [<I>options</I>] <I>device</I><br><b>sfdisk</b> -s <I>device</I><br><b>sfdisk</b> -l [<I>device</I>]<br><b>sfdisk</b> -d [<I>device</I>]


title: PARAMETERS
content:
<b><b>-d</b>, <b>--dump</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Dumps the current partition table of a device to standard output in a format that can be used as input for <i>sfdisk</i>.<br><br><b><b>-l</b>, <b>--list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Lists the partitions on the specified device (or all devices if none is specified), showing their start, end, size, and type.<br><br><b><b>-s</b>, <b>--show-size</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Prints the size of the specified device in sectors.<br><br><b><b>-N</b> <I>number</I>, <b>--part-number</b> <I>number</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies the partition number to act upon for operations like deleting or creating.<br><br><b><b>-n</b>, <b>--no-act</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Performs a dry run; shows what would be done without making any actual changes to the disk.<br><br><b><b>-u</b> <I>unit</I>, <b>--unit</b> <I>unit</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies the unit for sizes and offsets. Common units are 'sectors', 'cylinders', 'MiB', 'GiB'.<br><br><b><b>--delete</b> [<I>partno</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Deletes all partitions or a specific partition number if provided.<br><br><b><b>--type</b> <I>type</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>When creating a new partition, sets the partition type (e.g., Linux, FAT32, swap).<br><br><b><b>--json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Outputs information in a machine-readable JSON format, suitable for scripting and parsing.<br><br><b><b>--label</b> <I>type</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specifies the disk label type to use (e.g., 'dos' for MBR, 'gpt' for GPT).<br><br>


title: DESCRIPTION
content:
<i>sfdisk</i> is a powerful, non-interactive tool for managing partition tables on block devices. Designed primarily for scripting, it enables automated creation, modification, listing, and checking of disk partitions. It supports various partition table formats, including MBR (DOS), GPT, BSD, Sun, and SGI. <br><br>Unlike interactive tools, <i>sfdisk</i> operates by reading and writing partition layout descriptions, often from standard input or files, making it ideal for system deployment, backup, and recovery scenarios. Its output is easily parsable, allowing users to back up a disk's partition structure and restore it on another, or even on the same disk. It offers precise control over partition start and end sectors, sizes, types, and bootable flags. It is part of the <i>util-linux</i> project.


title: CAVEATS
content:
<i>sfdisk</i> is a powerful tool, and misuse can lead to severe data loss. Always back up important data before making partition changes. Because it's non-interactive, it offers no "undo" prompt, executing commands directly based on the provided input. It requires root privileges to operate on devices. After modifying a partition table, the kernel might need to be informed of the changes (e.g., via <i>partprobe</i> or a reboot) for them to be recognized by the system. <i>sfdisk</i> manages only the partition table, not the filesystems themselves; filesystems must be created separately using tools like <i>mkfs</i>.


title: INPUT FORMAT FOR PARTITION CREATION
content:
When creating or modifying partitions, <i>sfdisk</i> typically reads a description of the desired partition layout from standard input or a file. This description uses a simple, line-oriented format where each line represents a partition and its attributes (e.g., start, size, type). For example: <br><i>start=2048,size=1048576,type=83</i><br><i>start=*,size=+,type=82</i><br>This allows for precise, programmatic control over the disk's partitioning. Attributes can often be specified using shorthand or relative values (e.g., '*' for the next available sector, '+' for fill remaining space).


title: COMMON USE CASES
content:
Beyond simple partitioning, <i>sfdisk</i> is extensively used for: <br>- Automated OS installations and system deployments where partitioning needs to be done consistently across many machines. <br>- Disk imaging and cloning, allowing the exact partition layout of one disk to be replicated onto another. <br>- Backup and restoration of partition tables, providing a robust method to recover disk layouts in case of corruption or accidental deletion.


title: HISTORY
content:
<i>sfdisk</i> has been a long-standing component of the <i>util-linux</i> package, providing a non-interactive alternative to the more interactive <i>fdisk</i> utility. Its design focuses on scriptability, making it a foundational tool for automated system deployments and disk imaging solutions in Linux environments. Over time, it has evolved to support modern partition table formats like GPT, alongside the traditional MBR (DOS) format, ensuring its continued relevance in contemporary system administration.


title: SYNOPSIS
content:
As 'sfdk' is not a standard command, a direct synopsis is not applicable. <br><br>If referring to <B><code>sfdx</code></B> (Salesforce CLI):<br><B><code>sfdx [COMMAND] [SUBCOMMAND] [OPTIONS]</code></B><br><br>Examples:<br><B><code>sfdx force:org:create -f config/project-scratch-def.json --setalias myScratchOrg --setdefaultusername</code></B><br><B><code>sfdx force:source:push</code></B><br><B><code>sfdx force:auth:web:login</code></B>


title: PARAMETERS
content:
<b><I>COMMAND</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The main command category (e.g., <B><code>force</code></B>, <B><code>org</code></B>, <B><code>project</code></B>). Many commands are grouped under 'force:'.<br><br><b><I>SUBCOMMAND</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific action to perform within a command category (e.g., <B><code>org:create</code></B>, <B><code>source:push</code></B>, <B><code>auth:web:login</code></B>).<br><br><b><I>OPTIONS</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Flags or arguments that modify the behavior of the command or provide necessary input.<br><br><b><B><code>-o, --target-org &lt;string&gt;</code></B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the username or alias of the Salesforce org to execute the command against. Overrides the default.<br><br><b><B><code>-u, --target-org &lt;string&gt;</code></B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Short alias for <B><code>--target-org</code></B>.<br><br><b><B><code>-f, --definitionfile &lt;filepath&gt;</code></B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to a scratch org definition file for creating a new scratch org.<br><br><b><B><code>--setalias &lt;string&gt;</code></B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a human-readable alias for the authenticated org or created scratch org.<br><br><b><B><code>--setdefaultusername</code></B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the newly authenticated/created org as the default username for subsequent commands.<br><br><b><B><code>--json</code></B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the results in JSON format, useful for scripting and automation.<br><br><b><B><code>--loglevel &lt;level&gt;</code></B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the logging level (e.g., <B><code>trace</code></B>, <B><code>debug</code></B>, <B><code>info</code></B>, <B><code>warn</code></B>, <B><code>error</code></B>, <B><code>fatal</code></B>, <B><code>default</code></B>).<br><br><b><B><code>-h, --help</code></B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display help for a command or subcommand.<br><br>


title: DESCRIPTION
content:
The command 'sfdk' is not a standard or recognized Linux command. It is highly probable that this is a typo for <B><code>sfdx</code></B>, which refers to the Salesforce CLI (Command Line Interface). The Salesforce CLI is a powerful command-line interface that simplifies development and build automation for Salesforce. It allows developers to create, test, and deploy applications to Salesforce environments directly from their terminal.<br><br>The <B><code>sfdx</code></B> command provides a suite of tools for working with Salesforce data and metadata, including managing Salesforce DX projects, creating scratch orgs, pushing and pulling source code, deploying metadata, and managing Salesforce authentication. It's a critical tool for modern Salesforce development, enabling automated deployments, continuous integration, and seamless collaboration among development teams. Without <B><code>sfdx</code></B> (or its newer iteration, <B><code>sf</code></B>), many advanced Salesforce development workflows would be significantly more complex or impossible to automate.


title: CAVEATS
content:
The command <B><code>sfdk</code></B> is not a standard Linux command and will likely result in a 'command not found' error. All information provided here assumes the user intended to inquire about <B><code>sfdx</code></B>, the Salesforce CLI. <br><br>The Salesforce CLI (<B><code>sfdx</code></B> or <B><code>sf</code></B>) is not installed by default on Linux distributions and must be installed separately, typically via <B><code>npm</code></B> or a dedicated installer. Its functionality is entirely dependent on a Salesforce development environment and credentials.


title: INSTALLATION (FOR SFDX/SF CLI)
content:
To use the Salesforce CLI, you typically install it via <B><code>npm</code></B> (Node Package Manager) or by downloading a specific installer for your operating system. For example, using npm:<br><B><code>npm install --global @salesforce/cli</code></B><br>This command installs the unified <B><code>sf</code></B> command, which can also execute most <B><code>sfdx</code></B> commands.


title: COMMON USE CASES
content:
The Salesforce CLI is widely used for:<br>1. <B>Source-driven development:</B> Managing Salesforce metadata and code in a version control system (like Git).<br>2. <B>Scratch orgs:</B> Creating disposable Salesforce environments for development and testing.<br>3. <B>Automation:</B> Scripting deployments, data loading, and CI/CD pipelines.<br>4. <B>Debugging and Monitoring:</B> Using commands to inspect logs, query data, and validate deployments.


title: HISTORY
content:
The Salesforce CLI originally began as <B><code>sfdx</code></B>, the command for Salesforce DX, a comprehensive suite of tools for agile and open development on the Salesforce platform. It was introduced to facilitate source-driven development, scratch orgs, and continuous integration practices. Over time, Salesforce evolved its CLI, introducing a new unified command, <B><code>sf</code></B>, which aims to simplify and consolidate the functionalities previously spread across various <B><code>sfdx</code></B> commands. While <B><code>sfdx</code></B> commands are still fully supported, <B><code>sf</code></B> is the recommended new command for future development and provides a more streamlined experience.


title: SYNOPSIS
content:
<B>sfdk-apply</B> <B>--source-dir</B> <I>PATH</I> <B>--target-org</B> <I>ALIAS_OR_ID</I> [<B>OPTIONS</B>]


title: PARAMETERS
content:
<b><B>--source-dir</B> <I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the local directory containing Salesforce metadata or source code to deploy.<br><br><b><B>--target-org</B> <I>ALIAS_OR_ID</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The alias or ID of the Salesforce org to deploy the changes to. This org must be authenticated in your SFDK environment.<br><br><b><B>--check-only</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a validation deployment without actually saving any changes to the target org. Useful for pre-deployment checks.<br><br><b><B>--dry-run</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Simulates the deployment process, showing what would happen without committing any changes. Similar to <B>--check-only</B> but might have subtle differences depending on the SFDK version.<br><br><b><B>--api-version</B> <I>VERSION</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Salesforce API version to use for the deployment. Defaults to the latest supported version.<br><br><b><B>--wait</B> <I>MINUTES</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The number of minutes to wait for the deployment operation to complete. Defaults to a reasonable timeout.<br><br><b><B>--json</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the command results in JSON format, useful for scripting and automation.<br><br><b><B>--verbose</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays more detailed output during the deployment process, including progress and potential warnings.<br><br><b><B>--quiet</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all command output except for critical errors, useful for silent operations in scripts.<br><br><b><B>--help</B>, <B>-h</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information and usage details for the <B>sfdk-apply</B> command.<br><br>


title: DESCRIPTION
content:
The `sfdk-apply` command is a crucial utility within the Salesforce Development Kit (SFDK), designed for deploying or applying changes to a Salesforce organization. It facilitates the process of taking local metadata, source code, or configuration files and synchronizing them with a remote Salesforce org.<br><br>This command is typically used by developers and administrators to push new features, bug fixes, or configuration updates from a local development environment or version control system to a scratch org, sandbox, or even a production environment (with caution). Its primary function is to interpret the provided source (often a directory containing Salesforce metadata components or unpacked source files) and apply the corresponding changes to the specified target Salesforce org. It handles the complex dependencies and potential destructive changes that might occur during deployment, providing feedback on the success or failure of the operation. This command is fundamental for maintaining consistency between local development artifacts and the deployed state of a Salesforce application, streamlining CI/CD pipelines and collaborative development efforts.


title: CAVEATS
content:
This command operates within the Salesforce Development Kit (SFDK) ecosystem. It requires a properly configured SFDK environment and authenticated Salesforce organizations. Applying changes to production organizations should always be done with extreme caution and after thorough testing in lower environments. Network connectivity to Salesforce servers is essential. Be aware that if components are removed from your local <I>--source-dir</I>, they might be destructively deleted from the target org upon deployment.


title: CI/CD INTEGRATION
content:
<B>sfdk-apply</B> is frequently utilized in continuous integration and continuous deployment (CI/CD) pipelines to automate the deployment of code and configuration changes, ensuring consistent and rapid delivery of Salesforce applications.


title: ROLLBACK CONSIDERATIONS
content:
While <B>sfdk-apply</B> facilitates deployments, it does not inherently provide an automatic rollback mechanism. Reverting changes typically involves deploying a previous version of the source or manually undoing the modifications on the target Salesforce org.


title: HISTORY
content:
The <B>sfdk-apply</B> command emerged as a core component of the Salesforce Development Kit (SFDK), a suite of tools designed to streamline the development and deployment lifecycle for Salesforce applications. Its development paralleled the growth of Salesforce DX (SFDX) and the increasing need for robust, automatable methods to manage Salesforce metadata and source code. It became a cornerstone for continuous integration and continuous deployment (CI/CD) pipelines in Salesforce development, providing a programmatic way to synchronize local development artifacts with remote Salesforce environments.


title: PARAMETERS
content:
<b>-s &lt;file&gt;, --srpm=&lt;file&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the source RPM (<i>.src.rpm</i>) file for which to determine build requirements. This is an alternative to specifying a project path.<br><br><b>-p &lt;path&gt;, --project=&lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the Sailfish OS project directory (e.g., containing 'rpm' or 'packaging' subdirectory) for which to determine build requirements. This is an alternative to specifying an SRPM file.<br><br><b>-r &lt;release&gt;, --release=&lt;release&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the target Sailfish OS release (e.g., '4.5.0.19') for dependency resolution. This ensures dependencies are resolved against the correct OS version's repositories.<br><br><b>-a &lt;arch&gt;, --arch=&lt;arch&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target architecture (e.g., 'armv7hl', 'aarch64', 'i486') for which to resolve dependencies. This is crucial for cross-compilation scenarios to ensure correct architecture-specific dependencies are identified.<br><br><b>--repo-dir=&lt;path&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative directory where repositories (e.g., RPMs or metadata) are located. This is useful for custom or offline build environments.<br><br><b>--chroot-name=&lt;name&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a specific named chroot or build target within the SDK to query for dependency information. Essential when multiple build environments are configured.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of the output, providing more detailed information about the dependency resolution process and what packages are being considered.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits, showing all available options and usage examples for the command.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-build-requires</b> command is a crucial utility within the Sailfish OS SDK, designed to streamline the package building process. Its primary function is to analyze a given Sailfish OS project directory or a source RPM (SRPM) file and determine all the necessary build-time dependencies. These dependencies are a set of packages (e.g., development libraries, header files, build tools) that must be installed in the build environment for the compilation, linking, and packaging of the software to succeed.<br><br>By accurately identifying these requirements, developers can ensure that their build environments are correctly configured, preventing compilation failures due to missing components. The command typically queries the SDK's configured repositories and build targets to resolve these dependencies, providing a list of package names that can then be installed using a package manager like Zypper or DNF. This automation greatly simplifies cross-compilation and dependency management for Sailfish OS development.


title: CAVEATS
content:
The <b>sfdk-build-requires</b> command relies heavily on a properly configured Sailfish OS SDK environment, including accessible repositories and defined build targets. It may not function correctly if the SDK is not initialized, if required repository metadata is missing or outdated, or if the specified SRPM/project path is invalid.<br><br>It primarily identifies dependencies explicitly listed in the package's spec file (e.g., <i>BuildRequires</i>, <i>Requires</i> sections). It generally cannot account for implicit dependencies or host system tools not managed by the target package manager within the SDK's build environment.


title: INTEGRATION WITH BUILD WORKFLOW
content:
This command is typically the first step in a Sailfish OS package build process. Developers often run <b>sfdk-build-requires</b> to get a list of missing dependencies, then use a package manager (e.g., <i>zypper install</i> or <i>dnf install</i>) to install them into their build environment before initiating the actual package build with a command like <b>sfdk build</b>. This ensures a clean and successful compilation.


title: OUTPUT FORMAT
content:
The command usually outputs a simple list of package names, one per line, to standard output. This format is designed for easy scripting and automation, allowing the output to be directly piped as input to package managers for bulk installation of missing dependencies.


title: HISTORY
content:
The <b>sfdk-build-requires</b> command, as part of the Sailfish OS SDK (<b>sfdk</b>) suite, was developed by Jolla Ltd. and the broader Sailfish OS community. Its evolution has paralleled the development of Sailfish OS itself, focusing on providing robust and efficient tools for developers to build applications and system components for the mobile platform. It emerged from the need to simplify the complex process of managing build dependencies in a Linux-based cross-compilation environment, especially for RPM-based packaging workflows, thereby becoming an indispensable part of the Sailfish OS development toolchain.


title: PARAMETERS
content:
<b>&lt;<i>target_name</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the pre-configured Sailfish OS build target (e.g., <i>SailfishOS-4.5.0.19-armv7hl</i>). This specifies which OS version and architecture the build environment should be configured for.<br><br><b><i>[command]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional command to execute non-interactively within the build shell. If provided, the shell will execute this command and then exit, rather than providing an interactive session.<br><br><b><b>--list-targets</b>, <b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available Sailfish OS build targets configured in the SDK.<br><br><b><b>--shell=&lt;<i>shell_path</i>&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the desired shell executable to use inside the build environment (e.g., <i>sfdk-build-shell --shell=/bin/zsh SailfishOS-4.5.0.19-armv7hl</i>).<br><br><b><b>--cwd=&lt;<i>path</i>&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial working directory inside the build environment. This path should be accessible within the chroot/container.<br><br><b><b>--no-shell-init</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the build shell from sourcing default initialization files (like <i>.profile</i> or <i>.bashrc</i>), which can be useful for specific scripting scenarios.<br><br><b><b>--sdk-only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ensures that the shell environment is strictly confined to SDK tools and the target's root filesystem, preventing access to host system binaries.<br><br><b><b>--verbose</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of the command's output, showing more details about the environment setup process.<br><br><b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message for the <b>sfdk-build-shell</b> command.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-build-shell</b> command is an essential utility within the Sailfish OS Software Development Kit (SDK). Its primary function is to launch an interactive shell environment specifically configured for developing and building applications, packages, and components for Sailfish OS. This environment typically takes the form of a chroot or a container, providing a clean, isolated, and consistent build setup that includes the correct cross-compilation toolchains, libraries, and header files corresponding to a particular Sailfish OS target architecture and version. By using <b>sfdk-build-shell</b>, developers can compile their source code, run tests, and create distributable packages within an environment that closely mimics the actual device, ensuring compatibility and reproducibility. It abstracts away the complexities of setting up build dependencies manually, making the development workflow streamlined and efficient.


title: CAVEATS
content:
The use of <b>sfdk-build-shell</b> requires a properly installed and configured Sailfish OS SDK. It relies on pre-configured build targets; if targets are missing or corrupted, the command may fail. Network access from within the build shell might be restricted depending on the SDK setup. Changes made within the build shell are typically isolated to the chroot/container and do not affect the host system directly; persistent changes usually involve modifying the host's SDK configuration or project files.


title: ENVIRONMENT VARIABLES
content:
When entering the <b>sfdk-build-shell</b>, several environment variables are set to correctly configure the build environment, including <i>PATH</i>, <i>PKG_CONFIG_PATH</i>, <i>LD_LIBRARY_PATH</i>, and cross-compilation specific variables like <i>CC</i>, <i>CXX</i>, and <i>AR</i>. These variables point to the appropriate toolchain components within the target's root filesystem.


title: INTEGRATION WITH IDES
content:
While <b>sfdk-build-shell</b> is a command-line tool, it forms the backbone for build processes initiated from integrated development environments (IDEs) like Qt Creator when configured for Sailfish OS development. Qt Creator often uses <i>sfdk</i> commands internally to manage build targets and execute compilation steps within these isolated shells.


title: HISTORY
content:
The <b>sfdk-build-shell</b> command, like the rest of the Sailfish OS SDK tools, has evolved with the development of Sailfish OS itself. From its early days, the SDK emphasized providing a robust and isolated build environment to cater to different hardware architectures (e.g., <i>armv7hl</i>, <i>aarch64</i>) and various Sailfish OS versions. This tool specifically emerged to simplify the process of entering such environments, abstracting away the manual setup of <i>chroot</i> or container commands. Its continuous refinement has focused on improving build reproducibility, streamlining the developer experience, and supporting new target platforms as Sailfish OS has matured.


title: PARAMETERS
content:
<b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the results in JSON format, suitable for programmatic parsing.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display more detailed information during the diagnostic process, including raw command outputs and additional checks.<br><br>


title: DESCRIPTION
content:
The command 'sfdk-check' is not a standard Linux command. However, it is highly likely a conceptual reference or a typo for diagnostic commands within the <b>Salesforce DX CLI</b> (<code>sfdx</code>). The most analogous command is <code>sfdx doctor:diagnose</code> (or its alias <code>sfdx doctor</code>), which is used to analyze the health, configuration, and dependencies of your Salesforce development environment.<br><br>This diagnostic tool verifies critical components such as Node.js installation, Java Development Kit (JDK) presence, Salesforce CLI plugin versions, environment variable settings, and network connectivity to Salesforce instances. It helps developers quickly identify and troubleshoot common setup issues, ensuring their environment is ready for Salesforce development tasks. The output typically provides a summary of passed and failed checks, often with recommendations for remediation.


title: CAVEATS
content:
The command 'sfdk-check' itself does not exist as a standard Linux utility or within the official Salesforce CLI. This analysis is based on the assumption that it refers to the diagnostic capabilities commonly found in Software Development Kits (SDKs), specifically drawing parallels to the <code>sfdx doctor:diagnose</code> command from the <b>Salesforce DX CLI</b>. Users should verify the exact command in their specific SDK documentation if 'sfdk-check' is encountered.


title: TYPICAL CHECKS PERFORMED
content:
A diagnostic command like this typically verifies:<br><b>Node.js Version:</b> Ensures the installed Node.js version meets requirements.<br><b>Java Development Kit (JDK):</b> Checks for JDK installation and correct version (often required for older Salesforce tooling or specific plugins).<br><b>Salesforce CLI Version:</b> Confirms the CLI itself is up-to-date.<br><b>Plugin Health:</b> Validates installed Salesforce CLI plugins.<br><b>Environment Variables:</b> Looks for correctly set environment variables like <code>PATH</code>, <code>JAVA_HOME</code>, etc.<br><b>Network Connectivity:</b> Tests the ability to reach Salesforce API endpoints.


title: USE CASES
content:
This command is primarily used by developers when:<br><b>1. Setting up a new development environment.</b><br><b>2. Troubleshooting issues</b> with Salesforce CLI commands or project deployment.<br><b>3. Verifying prerequisites</b> for new features or Salesforce CLI updates.


title: HISTORY
content:
Diagnostic tools like 'sfdx doctor:diagnose' became essential with the advent of complex SDKs and CLI tools that rely on multiple external dependencies (Node.js, Java, specific npm packages, etc.). As Salesforce development shifted towards a command-line-centric and source-driven model with <b>Salesforce DX</b>, ensuring a consistent and healthy development environment became critical. The 'doctor' command family was introduced to provide self-service troubleshooting, reducing setup friction and support overhead for developers.


title: SYNOPSIS
content:
<b>sfdk-cmake</b> [<I>options</I>] <I>path-to-source</I><br><b>sfdk-cmake</b> --build <I>build-directory</I> [<I>options</I>]<br><b>sfdk-cmake</b> --install <I>build-directory</I> [<I>options</I>]


title: PARAMETERS
content:
<b>-G <generator></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the build system generator. Common choices include 'Unix Makefiles' or 'Ninja'. <b>sfdk-cmake</b> might default to a suitable generator if not specified.<br><br><b>-D<variable>=<value></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines a CMake variable. This is commonly used to pass configuration options to the project, such as enabling/disabling features or specifying paths. <b>sfdk-cmake</b> may set some default variables internally.<br><br><b>-B <build-directory></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory where the build files (e.g., Makefiles, Ninja files) will be generated. It's good practice to build outside the source directory.<br><br><b>-S <source-directory></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the source directory containing the <I>CMakeLists.txt</I> file. Often inferred from the positional argument.<br><br><b>--build <build-directory></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Builds a previously configured project. This command invokes the native build tool (e.g., <I>make</I> or <I>ninja</I>) within the specified build directory.<br><br><b>--install <build-directory></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs the project targets. This command runs the 'install' target of the build system, typically after a successful build.<br><br><b>--clean-first</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with '--build' to clean a project before building it.<br><br><b>--target <target></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with '--build' to specify a particular target to build (e.g., 'all', 'install', a specific library).<br><br><b>--config <config></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with '--build' (primarily for multi-configuration generators like Visual Studio) to specify the build configuration (e.g., 'Debug', 'Release').<br><br><b>-DCMAKE_INSTALL_PREFIX=<path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the installation directory for the project. When building for Sailfish OS, this often defaults to the SDK's sysroot structure.<br><br><b><path-to-source></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A positional argument representing the path to the source directory containing the top-level <I>CMakeLists.txt</I> file. Often used as the first argument when configuring a project.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-cmake</b> command is a specialized wrapper for the standard <I>CMake</I> build system generator, provided as part of the Sailfish OS SDK (SDK). Its primary purpose is to simplify the process of configuring and building applications or libraries for the Sailfish OS platform, especially in cross-compilation environments. Instead of manually setting complex toolchain files, sysroots, and build environments for different Sailfish OS targets (e.g., specific device architectures or SDK versions), <b>sfdk-cmake</b> automates these configurations.<br><br>It essentially invokes the underlying <I>CMake</I> executable with pre-configured settings tailored for Sailfish OS development, making the cross-compilation setup seamless for developers. Developers can use it much like the regular <I>cmake</I> command, passing most of the standard <I>CMake</I> options and arguments, which <b>sfdk-cmake</b> then relays to the actual <I>CMake</I> process after applying its Sailfish OS-specific adjustments.


title: CAVEATS
content:
<b>sfdk-cmake</b> is not a standalone command; it requires the Sailfish OS SDK to be installed and properly configured. It is specifically designed for cross-compiling projects for Sailfish OS and may not function correctly or be suitable for native development environments outside the SDK. Its behavior is tightly coupled with the SDK's internal toolchain and environment settings, which are dynamically applied before invoking <I>CMake</I>.


title: SIMPLIFYING CROSS-COMPILATION
content:
One of the core benefits of <b>sfdk-cmake</b> is its ability to automatically set up the <I>CMake</I> toolchain file (<I>CMAKE_TOOLCHAIN_FILE</I>) and other critical variables required for cross-compilation to the Sailfish OS target. This eliminates the need for developers to manually specify these often complex paths and settings, significantly reducing configuration errors and setup time.


title: INTEGRATION WITH SFDK ENVIRONMENT
content:
<b>sfdk-cmake</b> operates within the context of the currently active Sailfish OS SDK environment (as managed by the <I>sfdk</I> command). This means it automatically picks up the correct target architecture, SDK version, and sysroot location defined by the <I>sfdk</I> configuration, ensuring that projects are built against the correct platform components.


title: HISTORY
content:
The <b>sfdk-cmake</b> command emerged as part of the Sailfish OS SDK, developed by Jolla. As Sailfish OS application development embraced <I>CMake</I> as a primary build system, a need arose to simplify the complex cross-compilation setup. <b>sfdk-cmake</b> was introduced to abstract away the intricate details of toolchain configuration, sysroot management, and environment variables necessary for building against the SDK. Its evolution is closely tied to the development of the Sailfish OS platform and the <I>sfdk</I> utility itself, aiming to provide a streamlined and developer-friendly experience for building native applications.


title: PARAMETERS
content:
<b>--output <file_or_dir></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output path for the <b>compile_commands.json</b> file or a directory to place it in.<br><br><b>--project-path <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Designate the root directory of the Salesforce project for which the compile database should be generated.<br><br><b>--force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force overwriting an existing <b>compile_commands.json</b> file without prompting.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, displaying detailed information about the generation process and any encountered issues.<br><br><b>--help, -h</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a concise help message with command usage and available options.<br><br><b>--version, -v</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the version information of the <b>sfdk-compiledb</b> utility.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-compiledb</b> command is a specialized utility within the Salesforce Development Kit (SFDK) or Salesforce CLI ecosystem, designed to generate a <b>compile_commands.json</b> file for Salesforce projects. This file serves as a "compile database" that provides crucial information about how source code files (e.g., Apex, Lightning Web Components) are compiled, including compiler flags, include paths, and definitions.<br><br>Modern Integrated Development Environments (IDEs) and static analysis tools, such as VS Code with Salesforce extensions, heavily rely on this database to enable advanced code intelligence features like accurate auto-completion, go-to-definition, symbol renaming, linting, and error detection, significantly enhancing developer productivity within Salesforce development workflows. While its exact invocation might vary across SFDK versions or be an internal helper, its core function is to facilitate robust language server support for Salesforce-specific programming languages.


title: CAVEATS
content:
This command is not a standard Linux utility but is part of the Salesforce Development Kit (SFDK) or Salesforce CLI. Its exact availability, naming, and specific options may vary significantly depending on the installed SFDK/CLI version, or it might be an internal helper script not directly exposed as <b>sfdk-compiledb</b>. Modern Salesforce CLI often consolidates such functionality under subcommands like <I>sf project generate compile-database</I>.


title: PURPOSE OF COMPILE DATABASE (<I>COMPILE_COMMANDS.JSON</I>)
content:
A <b>compile_commands.json</b> file is a JSON array of command objects, where each object describes how a single source file in a project is compiled. It typically includes the file's path, the compiler executable, and all the command-line arguments used for its compilation. This standardized format allows various development tools to accurately parse and analyze the codebase without needing to understand the underlying build system.


title: INTEGRATION WITH IDES AND LANGUAGE SERVERS
content:
The generated <b>compile_commands.json</b> file is primarily consumed by Language Server Protocol (LSP) clients and IDE extensions. For Salesforce development, this is crucial for tools like VS Code with the Salesforce Extension Pack, enabling features such as precise code navigation (go-to-definition, find references), intelligent auto-completion, real-time error checking, refactoring capabilities, and static analysis for Apex, LWC, and other Salesforce-specific artifacts, significantly streamlining the development workflow.


title: HISTORY
content:
The concept of a compile database emerged to standardize how development tools (like language servers, linters, and static analyzers) understand project compilation settings, especially for C/C++ projects. With the increasing complexity of Salesforce development, particularly with Apex and Lightning Web Components, the need for similar advanced IDE support grew. Tools like <b>sfdk-compiledb</b> (or its equivalent within the Salesforce CLI) were developed to bridge this gap, enabling modern code intelligence for Salesforce-specific languages and enhancing developer experience.


title: SYNOPSIS
content:
<b>sfdk-config</b> [<i>OPTIONS</i>] <i>COMMAND_TYPE</i> [<i>ARGUMENTS</i>]<br><br>Examples:<br><b>sfdk-config</b> --list <i>targets</i><br><b>sfdk-config</b> --add <i>engine</i> --name <i>&lt;my_engine&gt;</i> --path <i>/opt/sdk/vm</i><br><b>sfdk-config</b> --remove <i>target</i> --name <i>&lt;jolla_phone&gt;</i>


title: PARAMETERS
content:
<b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits, showing usage details for the command.<br><br><b><b>--list</b>, <b>-l</b> <i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists existing configurations of a specified <i>type</i>. Common types include <i>targets</i>, <i>engines</i>, and <i>sdks</i>.<br><br><b><b>--add</b>, <b>-a</b> <i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a new configuration of a specified <i>type</i>. This command usually requires the <b>--name</b> option and other type-specific parameters.<br><br><b><b>--remove</b>, <b>-r</b> <i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes an existing configuration of a specified <i>type</i>. It requires the <b>--name</b> option to identify which configuration to remove.<br><br><b><b>--update</b>, <b>-u</b> <i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Updates an existing configuration of a specified <i>type</i>. It requires the <b>--name</b> option and parameters to modify.<br><br><b><b>--name</b> <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the unique name for the configuration being added, removed, or updated.<br><br><b><b>--path</b> <i>&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used when adding or updating <i>sdk</i> or <i>engine</i> configurations, specifying the installation path.<br><br><b><b>--sdk-version</b> <i>&lt;version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Sailfish OS SDK version when defining a new target or SDK configuration.<br><br><b><b>--toolchain</b> <i>&lt;toolchain_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <i>target</i> configurations to specify the associated build toolchain.<br><br><b><b>--architecture</b> <i>&lt;arch&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target architecture (e.g., <i>armv7hl</i>, <i>aarch64</i>) for a new or updated <i>target</i> configuration.<br><br><b><b>--sdk</b> <i>&lt;sdk_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Associates a <i>target</i> configuration with a previously defined <i>sdk</i> configuration.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the operation's progress.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-config</b> command is a utility included with the Sailfish OS SDK (Software Development Kit). Its primary purpose is to manage various aspects of the SDK's configuration, enabling developers to define, list, add, remove, and update build targets, build engines, and SDK versions.<br><br>Build targets typically represent different Sailfish OS versions or architectures (e.g., a specific release for a specific device), while build engines are the virtual machines or environments where the actual compilation occurs. This tool is essential for setting up and maintaining a robust development environment for Sailfish OS applications, ensuring that the correct SDK components and build environments are available and properly configured for development and compilation tasks.


title: CAVEATS
content:
The <b>sfdk-config</b> command is specific to the Sailfish OS SDK and is not a standard Linux utility found in most distributions. It requires the Sailfish OS SDK to be properly installed and configured on the system. Usage and available options may vary slightly with different versions of the SDK, and incorrect configuration can lead to build environment issues for Sailfish OS applications.


title: CONFIGURATION TYPES
content:
The <b>sfdk-config</b> command operates on different types of configurations, which are specified as arguments to commands like <b>--list</b>, <b>--add</b>, <b>--remove</b>, and <b>--update</b>. The primary types are:<br><b><I>targets</I></b>: Define specific build environments, usually associated with a Sailfish OS version and architecture.<br><b><I>engines</I></b>: Represent the virtual machines or local environments where compilation and SDK tasks are performed.<br><b><I>sdks</I></b>: Refer to the base Sailfish OS SDK installations themselves.


title: HISTORY
content:
<b>sfdk-config</b> is an integral part of the Sailfish OS SDK, which is developed by Jolla Ltd. Its evolution is closely tied to the development of the Sailfish OS and its tooling ecosystem. It has been a core component for managing the SDK's complex environment, allowing developers to adapt their setup for various Sailfish OS releases and hardware targets since the early days of the SDK's release.


title: SYNOPSIS
content:
<b>sf deploy source</b> [--source-dir &lt;<i>path</i>&gt; | --manifest &lt;<i>path</i>&gt; | --metadata &lt;<i>string</i>&gt;] <br>[--api-version &lt;<i>string</i>&gt;] [--async] [--check-only] [--dry-run] [--ignore-warnings]<br>[--json] [--max-poll &lt;<i>integer</i>&gt;] [--test-level &lt;<i>string</i>&gt;] [--target-org &lt;<i>string</i>&gt;]


title: PARAMETERS
content:
<b>--source-dir <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the local directory containing the source to deploy. Ideal for deploying changes from a specific project path or workspace.<br><br><b>--manifest <path></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Points to a manifest file (package.xml) that explicitly lists the metadata components to be deployed. Useful for precise and controlled deployments.<br><br><b>--metadata <string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a comma-separated list of specific metadata component names or types to deploy. Allows targeted deployment of individual components directly.<br><br><b>--api-version <string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the API version for the deployment operation. Ensures compatibility with the target org's current API version.<br><br><b>--async</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the deployment operation asynchronously, allowing the CLI to return control to the terminal while the deployment proceeds in the background.<br><br><b>--check-only</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a validation deployment without actually saving any changes to the target org. Critical for pre-deployment checks and validating metadata dependencies.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;An alias for --check-only, offering a clearer indication of its validation-only purpose, simulating a deployment without actual changes.<br><br><b>--ignore-warnings</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows the deployment to proceed even if warnings are encountered, preventing the command from failing due to non-critical issues during deployment.<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the command results in JSON format, facilitating programmatic parsing and integration with automated scripts or CI/CD pipelines.<br><br><b>--max-poll <integer></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the maximum number of minutes to wait for the deployment command to complete before timing out. Defaults to 360 minutes.<br><br><b>--test-level <string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Determines which Apex tests run during deployment (e.g., NoTestRun, RunSpecifiedTests, RunLocalTests, RunAllTestsInOrg). Essential for code coverage and validation.<br><br><b>--target-org <string></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the username or alias of the Salesforce org to which the source will be deployed. This is a crucial parameter for directing deployments.<br><br>


title: DESCRIPTION
content:
The command `sfdk-deploy` is assumed to refer to the Salesforce CLI's modern `sf deploy source` (or its predecessor `sfdx force:source:deploy`) command. It is used to transfer local Salesforce metadata and source code, such as Apex classes, Lightning web components, and custom objects, from a development environment to a Salesforce org (e.g., sandbox, production, or scratch org). This command is fundamental for Salesforce development workflows, enabling developers to push their changes for testing, integration, or release. It supports deploying from a specified directory, a manifest file (package.xml), or individual metadata components, offering flexibility for various deployment strategies and CI/CD pipelines.


title: CAVEATS
content:
The command `sfdk-deploy` is not a standard Linux command; this analysis assumes it refers to the Salesforce CLI command `sf deploy source` (or its predecessor `sfdx force:source:deploy`). <br>Users must have the Salesforce CLI installed and be authenticated to a Salesforce org. <br>Deployment operations require stable network connectivity to Salesforce servers. <br>Some metadata types may have limitations or specific requirements when deployed via the Salesforce Metadata API, which this command leverages.


title: DEPLOYMENT SCOPE AND SCENARIOS
content:
This command is highly versatile, supporting various deployment scenarios: from pushing incremental changes to scratch orgs during active development, to deploying validated feature sets to sandboxes for testing and UAT, and finally to production environments for release. It scales to different project sizes and complexities.


title: DETAILED ERROR REPORTING
content:
Upon completion, the command provides comprehensive success or failure messages. In case of errors, it offers detailed reports, including compilation issues, missing dependencies, validation rule failures, or insufficient code coverage. This robust feedback mechanism is vital for efficient troubleshooting and debugging deployment issues.


title: HISTORY
content:
Initially, Salesforce deployments were primarily managed via the Metadata API (e.g., using the Ant Migration Tool). With the advent of Salesforce DX, `sfdx force:source:deploy` emerged as a foundational command for source-driven development, particularly with scratch orgs. More recently, Salesforce unified its CLI under the `sf` executable, streamlining command syntax. `sfdx force:source:deploy` was simplified to `sf deploy source`, offering a more intuitive and consistent experience while maintaining its core functionality for deploying source code and metadata.


title: SEE ALSO
content:
<i>sf retrieve source</i>(1), <i>sf project deploy start</i>(1), <i>sf deploy mdapi</i>(1), <i>sf validate deploy</i>(1)


title: SYNOPSIS
content:
<b>sfdk device &lt;subcommand&gt; [options...]</b><br>Alternatively, <br><b>sfdk device &lt;subcommand&gt; --help</b><br> for subcommand specific options.


title: PARAMETERS
content:
<b>flash</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Flashes a Sailfish OS image onto the connected device.<br><br><b>list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all detectable Sailfish OS devices and their IDs.<br><br><b>ssh</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Establishes an SSH connection to a specified Sailfish OS device.<br><br><b>status</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current status of a connected Sailfish OS device.<br><br><b>targets</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages SDK targets (SDK toolchains, APIs) installed on the device.<br><br><b>setup</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Guides the user through the initial setup process for a new device connection.<br><br><b>reset</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Resets the device connection state, often used for troubleshooting.<br><br>


title: DESCRIPTION
content:
<i>sfdk-device</i>, more accurately invoked as <br><b>sfdk device</b><br>, is a crucial subcommand of the Sailfish OS SDK command-line tool (<b>sfdk</b>). It provides comprehensive functionalities for interacting with and managing physical Sailfish OS devices (smartphones, tablets) during development. Developers use it to flash new operating system images onto devices, establish SSH connections for remote debugging and file transfer, manage SDK build targets installed on the device, and monitor device status. This tool streamlines the development workflow by providing a unified interface for device setup, provisioning, and troubleshooting, essential for building and testing applications within the Sailfish OS ecosystem.


title: CAVEATS
content:
The <i>sfdk-device</i> command is exclusive to the Sailfish OS SDK environment and requires the SDK to be properly installed and configured. Using the <br><b>flash</b><br> subcommand incorrectly can potentially brick your device, making it unrecoverable. Always ensure you are using the correct image for your device model and follow official documentation carefully.


title: DEVICE IDENTIFICATION
content:
Many <br><b>sfdk device</b><br> subcommands (like <br><b>status</b><br> or <br><b>ssh</b><br>) can optionally take a device ID as an argument. If multiple devices are connected, specifying the ID ensures the command operates on the intended device. The device ID can be found using <br><b>sfdk device list</b><br>.


title: SDK TARGETS
content:
SDK targets are specific build environments (e.g., Sailfish OS versions, architectures) that can be installed directly onto a development device. This allows for native compilation and testing on the device itself. The <br><b>sfdk device targets</b><br> subcommand is used to manage these installations.


title: HISTORY
content:
The <br><b>sfdk device</b><br> functionality has been an integral part of the Sailfish OS SDK since its early development by Jolla. It was introduced to provide developers with robust command-line tools for managing development devices, facilitating efficient testing and deployment of applications and system components on actual hardware.


title: SYNOPSIS
content:
<b>sfdk-emulator</b> <I>action</I> [<I>options</I>] [<I>emulator_name</I>]<br><i>Common actions include:</i><br><b>sfdk-emulator</b> list<br><b>sfdk-emulator</b> start <I>emulator_name</I><br><b>sfdk-emulator</b> stop <I>emulator_name</I><br><b>sfdk-emulator</b> create <I>emulator_name</I> [options]<br><b>sfdk-emulator</b> connect <I>emulator_name</I>


title: PARAMETERS
content:
<b><i>action</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the operation to perform (e.g., <b>list</b>, <b>start</b>, <b>stop</b>, <b>create</b>, <b>delete</b>, <b>connect</b>, <b>reboot</b>, <b>status</b>).<br><br><b><i>emulator_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The unique name of the emulator instance to operate on.<br><br><b><b>--sdk-version</b> <i>&lt;version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Used with <b>create</b>)</i> Specifies the Sailfish OS version to install on the emulator.<br><br><b><b>--target</b> <i>&lt;target_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Used with <b>create</b>)</i> Selects a specific SDK target configuration for the emulator.<br><br><b><b>--device-type</b> <i>&lt;type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Used with <b>create</b>)</i> Defines the emulated device profile (e.g., phone, tablet).<br><br><b><b>--qemu-options</b> <i>&quot;&lt;options&gt;&quot;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes additional QEMU command-line options directly to the underlying emulator process.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, displaying more detailed information about the operation.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays general help or help for a specific <i>action</i>.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-emulator</b> command is an essential utility within the Sailfish OS SDK (SFDK). It provides developers with a comprehensive set of tools to manage and interact with Sailfish OS emulators. These emulators are typically virtual machines, often based on QEMU, that run the Sailfish OS environment on a desktop Linux system. This allows developers to test applications, debug code, and verify functionality without requiring a physical Sailfish OS device.<br><br>The command facilitates various operations, including listing available emulators, creating new emulator instances with specific configurations (like Sailfish OS versions or device profiles), starting and stopping running emulators, and establishing connections to them for development purposes (e.g., SSH, adb-like access). It streamlines the development workflow by providing a consistent and reproducible testing environment, crucial for porting applications or developing new ones for the Sailfish OS platform.


title: CAVEATS
content:
<b>sfdk-emulator</b> requires the Sailfish OS SDK to be fully installed and configured on a Linux host. It is resource-intensive, as emulators consume significant CPU, RAM, and disk space. Network configuration for the emulator can sometimes be complex, requiring adjustments for internet access or host-guest communication. Compatibility with specific Linux distributions or kernel versions might vary. Users should also ensure they have sufficient disk space for emulator images and snapshots.


title: DEVELOPER WORKFLOW
content:
A typical workflow involves first using <b>sfdk-emulator create</b> to set up an emulator with a desired Sailfish OS version. Then, <b>sfdk-emulator start</b> launches the virtual machine. Developers can then use <b>sfdk-emulator connect</b> to gain shell access or use SDK tools like <b>sfdk deploy</b> to push applications to the running emulator for testing. Finally, <b>sfdk-emulator stop</b> is used to shut down the instance.


title: QEMU INTEGRATION
content:
While <b>sfdk-emulator</b> abstracts much of the complexity, it relies heavily on QEMU for virtualization. Understanding basic QEMU concepts can be beneficial for advanced debugging or custom configurations, especially when using the <b>--qemu-options</b> flag. Network issues are often related to QEMU's networking setup.


title: HISTORY
content:
The <b>sfdk-emulator</b> command, along with the broader Sailfish OS SDK, was developed by Jolla Ltd. and its partners to facilitate application development for the Sailfish OS mobile operating system. It emerged as a crucial component during the early stages of Sailfish OS, providing developers with a robust and accessible environment to test their software without constant reliance on physical devices. Its design reflects the need for a comprehensive developer experience, integrating closely with the SDK's build and deployment tools. Over time, it has evolved with Sailfish OS versions, adapting to new architectures and features while maintaining its core purpose of enabling efficient emulator-based development.


title: PARAMETERS
content:
<b><B>--help</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Displays a help message and exits.</I><br><br><b><B>--version</B></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>Shows version information and exits.</I><br><br>


title: DESCRIPTION
content:
The <I>sfdk-emulator-device-model-list</I> command is a utility provided as part of the Sailfish OS SDK. Its primary purpose is to display a list of all available device models that can be used to create new emulator instances. For developers working with Sailfish OS, this command is crucial for identifying which device profiles (e.g., different screen resolutions, hardware configurations) are supported for emulation.<br><br>The output typically consists of a simple list of model identifiers, which can then be used as an argument for other SDK commands, such as <I>sfdk emulator create</I>, to specify the target device for a new emulator. This command helps streamline the development workflow by ensuring developers can easily discover and select the correct device model for testing their applications in an emulated environment.


title: CAVEATS
content:
<I>This command is part of the Sailfish OS SDK and requires the SDK to be installed and correctly configured on the system. It may not be available or function as expected if the SDK is not present or if its environment variables are not properly set. The exact list of device models depends on the SDK version and any installed updates or extensions. Its output is generally intended for programmatic use or direct input into other SDK commands, rather than extensive human-readable formatting.</I>


title: <B>OUTPUT FORMAT</B>
content:
<I>The command typically outputs a simple list of device model identifiers, one per line. For example:<br><br><code><br>Jolla_1<br>Jolla_C<br>Xperia_X<br></code><br>These identifiers correspond to specific device profiles available for emulation within the Sailfish OS SDK.</I>


title: <B>TYPICAL USAGE</B>
content:
<I>Developers usually run this command to find the correct device model string needed when creating a new emulator instance, for example:<br><br><code><br>$ sfdk-emulator-device-model-list<br>Jolla_1<br>Xperia_X<br>$ sfdk emulator create --name myemulator --device Xperia_X<br></code></I>


title: SYNOPSIS
content:
<b>sfdk</b> <b>emulator</b> <b>device-model-show</b> [<i>OPTIONS</i>] <i>&lt;DEVICE_MODEL_NAME&gt;</i>


title: PARAMETERS
content:
<b><i>DEVICE_MODEL_NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The unique name or identifier of the emulator device model for which to display detailed information. This is a mandatory argument.<br><br><b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a brief help message and exit. This option shows the command's basic usage and available parameters.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-emulator-device-model-show</b> command is part of the Sailfish OS SDK, designed to provide detailed information about a specific emulator device model. Developers use this command to inspect the configuration, capabilities, and properties of predefined or custom emulator models available within their SDK setup.<br><br>This includes details like screen resolution, CPU architecture, RAM, storage, and other hardware specifications that an emulated device would possess. It's crucial for understanding how an application might behave on different virtual hardware configurations, aiding in development, testing, and debugging processes for Sailfish OS applications.<br><br>By specifying the desired device model name, users can retrieve a comprehensive summary of its characteristics, enabling informed decisions about targeting specific emulator profiles for their development work.


title: CAVEATS
content:
This command requires the Sailfish OS SDK to be installed and configured correctly on the system. The specified device model name must exist within the SDK's registered emulator models; otherwise, an error indicating an unknown or invalid model will be returned. The exact output format and the level of detail provided may vary slightly between different versions of the Sailfish OS SDK.


title: USAGE CONTEXT
content:
This command is typically used after listing available device models with <b>sfdk emulator device-model-list</b> to choose a specific model for detailed inspection. The information provided by <b>device-model-show</b> helps in understanding the specifications of a particular emulator model, which can then be used to inform choices when configuring other emulator-related commands, such as <b>sfdk emulator create</b> or <b>sfdk emulator start</b> with specific profiles.


title: OUTPUT FORMAT
content:
The output of the command is typically human-readable text, detailing various attributes like resolution, memory, processor architecture, and other hardware-related specifications of the selected emulator device model.


title: HISTORY
content:
The <b>sfdk</b> tool, including its emulator management subcommands, evolved significantly with the Sailfish OS SDK itself. As the platform matured and diversified across various hardware configurations, the need for robust emulator testing became paramount.<br><br>Commands like <b>device-model-show</b> were introduced to give developers fine-grained control and insight into the emulated environments, reflecting the increasing complexity and flexibility of the SDK's virtualization capabilities. Its development mirrors the ongoing efforts to streamline Sailfish OS application development and ensure compatibility across a range of virtual devices.


title: PARAMETERS
content:
<b><I>COMMAND</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific command to be executed inside the Sailfish OS emulator instance.<br><br><b><I>COMMAND_ARGS...</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional arguments that are passed directly to the command being executed inside the emulator.<br><br><b>--emulator-id <ID></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the unique ID of the emulator instance to connect to. If omitted, the command typically targets the default or only currently running emulator instance.<br><br><b>--root</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes the specified command with root (superuser) privileges inside the emulator. Use with caution as this can make system-wide changes.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message and usage information for the <b>sfdk-emulator-exec</b> command.<br><br><b>--</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A special separator used to indicate that all subsequent arguments on the command line are to be interpreted as part of the <I>COMMAND</I> and its <I>COMMAND_ARGS</I>, rather than as options for <b>sfdk-emulator-exec</b> itself. This is particularly useful when the command or its arguments might conflict with <b>sfdk-emulator-exec</b>'s own options.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-emulator-exec</b> command is a utility provided by the Sailfish OS SDK (SFDK) that allows developers to execute commands directly within a running Sailfish OS emulator instance. It acts as a bridge, enabling remote shell access to the emulated environment without needing to manually set up SSH connections or other complex network configurations. This tool is indispensable for debugging applications, inspecting the emulator's filesystem, managing processes, and performing various administrative tasks inside the virtual Sailfish OS device during development. It streamlines the testing process by providing a direct way to interact with the emulator's operating system, facilitating rapid iteration and troubleshooting.


title: CAVEATS
content:
Successful execution of <b>sfdk-emulator-exec</b> relies on the Sailfish OS SDK being properly installed and configured on the host system. Furthermore, the target Sailfish OS emulator instance must be actively running and accessible for the command to establish a connection and execute the desired operations. Commands run inside the emulator will operate within its specific environment, including its own PATH, user permissions (defaulting to 'nemo' unless --root is used), and filesystem structure, which may differ from the host system.


title: USAGE EXAMPLES
content:
Here are some common usage examples of <b>sfdk-emulator-exec</b>:<br><br><b>Listing files in the emulator's root directory:</b><br><I>sfdk-emulator-exec ls /</I><br><br><b>Checking disk usage as root within the emulator:</b><br><I>sfdk-emulator-exec --root df -h</I><br><br><b>Executing a command with arguments containing spaces using the separator:</b><br><I>sfdk-emulator-exec -- find /usr/share -name '*desktop*'</I><br><br><b>Running a custom script located in the emulator's home directory:</b><br><I>sfdk-emulator-exec /home/nemo/myscript.sh</I>


title: HISTORY
content:
<b>sfdk-emulator-exec</b> is a core component of the Sailfish OS SDK, which was developed by Jolla to facilitate application development for the Sailfish OS platform. It emerged as an essential tool early in the SDK's lifecycle, providing developers with direct shell access to the evolving emulator environment. Its design and functionality have been continuously refined alongside updates to Sailfish OS and its underlying virtualization technologies, ensuring it remains a robust utility for developers across various SDK versions.


title: PARAMETERS
content:
<b><b>--list</b>, <b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available Sailfish OS emulator images that can be installed or are already installed.<br><br><b><b>--update</b>, <b>-u</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks for and updates installed Sailfish OS emulator images to their latest available versions.<br><br><b><b>--delete</b> <i>&lt;EMULATOR_NAME&gt;</i>, <b>-d</b> <i>&lt;EMULATOR_NAME&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the specified Sailfish OS emulator image from the system.<br><br><b><b>--no-confirm</b>, <b>-y</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Proceeds with operations without requiring user confirmation for prompts.<br><br><b><b>--version</b> <i>&lt;VERSION&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular version of the emulator image to install or update.<br><br><b><b>--download-only</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Downloads the specified emulator image without performing the full installation and configuration.<br><br><b><b>--install-path</b> <i>&lt;PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative directory for installing emulator images, overriding the default SDK path.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-emulator-install</b> command is an integral part of the Sailfish OS Software Development Kit (SDK). Its primary purpose is to streamline the installation and management of Sailfish OS emulator images, which are essential for application development and testing without requiring physical devices. This utility typically handles the entire process from downloading specific emulator versions to their proper configuration, making them readily available for use within the Sailfish OS IDE (Qt Creator) or via other SDK command-line tools. It simplifies the setup of a robust development environment by providing a consistent and efficient method for acquiring and maintaining virtual devices that mirror Sailfish OS devices.


title: CAVEATS
content:
This command requires the Sailfish OS SDK to be properly installed and configured on your system.<br>An active internet connection is typically required to download emulator images, which can be substantial in size.<br>Emulator performance relies heavily on underlying virtualization technologies (like QEMU/KVM); ensure hardware virtualization (VT-x/AMD-V) is enabled in your system's BIOS/UEFI for optimal speed.


title: INTEGRATION WITH SAILFISH OS IDE
content:
The functionality of <b>sfdk-emulator-install</b> is often integrated into the Sailfish OS IDE (Qt Creator), allowing developers to manage emulator installations and updates graphically directly from the development environment.


title: VIRTUALIZATION REQUIREMENTS
content:
Sailfish OS emulators typically leverage virtualization software such as QEMU, often accelerated by KVM on Linux hosts. Ensuring that your system meets the virtualization requirements, including enabling hardware virtualization in BIOS and having necessary kernel modules loaded, is crucial for smooth emulator operation.


title: HISTORY
content:
The <b>sfdk-emulator-install</b> command is part of the Sailfish OS SDK, developed by Jolla. Its evolution has mirrored the development of Sailfish OS itself, adapting to new OS releases and hardware architectures to provide developers with stable and performant emulator environments. It has been a key component in simplifying the setup process for Sailfish OS application developers since the early days of the SDK.


title: DESCRIPTION
content:
The <b>sfdk-emulator-list</b> command is a utility within the Sailfish OS Software Development Kit (SDK) specifically designed to interact with and display information about available emulator targets. These emulators are crucial for developing and testing applications for Sailfish OS on a desktop environment without requiring physical hardware. The command lists the names of configured emulators, which might include those managed by Android Emulator Manager (AEM) integrated with the SDK, or other virtual machine instances set up for development. Developers use this command to quickly ascertain which emulator targets are accessible for deploying, debugging, and running their applications. It helps in verifying the SDK setup and identifying the correct target name for subsequent commands like <b>sfdk-build</b> or <b>sfdk-deploy</b>. The output typically provides a simple list of emulator identifiers, facilitating streamlined development workflows.


title: CAVEATS
content:
This command requires the Sailfish OS SDK to be installed and properly configured on the host system. Emulators must be set up within the SDK environment (e.g., via <b>sfdk-config</b>) for them to be listed. The output is dependent on the currently configured SDK targets and any installed Android SDK components for Android Emulator Manager (AEM) instances. The command itself does not create, modify, or manage emulators; its sole purpose is to list those that are already known to the SDK.


title: TYPICAL OUTPUT
content:
The command typically prints a simple list of names or identifiers of the currently configured emulator targets, one per line. For example:<br><i>Sailfish_OS_Emulator_4.5.0_EA</i><br><i>Android_Emulator_Nexus_5X</i><br>These names are then used as arguments to other <b>sfdk</b> commands that require a specific target, such as <b>sfdk-deploy</b> or <b>sfdk-build</b>.


title: HISTORY
content:
The <b>sfdk</b> toolchain, including <b>sfdk-emulator-list</b>, is an integral part of the Sailfish OS SDK, developed by Jolla. It emerged as a dedicated set of command-line tools to support cross-platform development for the Sailfish OS, providing a robust alternative to purely GUI-driven development environments. The emphasis has always been on providing a consistent development experience across different host operating systems (Linux, macOS, Windows) and simplifying interaction with build engines, SDK targets, and emulators. <b>sfdk-emulator-list</b> specifically addresses the need for developers to quickly identify and manage their virtual testing environments, evolving alongside the SDK's capabilities to support various emulator types, primarily Android Emulator Manager (AEM) instances used for compatibility layers.


title: SYNOPSIS
content:
sfdk-emulator-remove [<b>-f</b>|<b>--force</b>] [<b>-h</b>|<b>--help</b>] <i>&lt;emulator_name&gt;</i>


title: PARAMETERS
content:
<b><i>&lt;emulator_name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Mandatory.</i> The unique name or identifier of the Sailfish OS emulator instance to be removed. This name is typically assigned during the emulator's creation.<br><br><b><b>-f</b>, <b>--force</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force the removal of the emulator without prompting for confirmation. Use this option with extreme caution, as it bypasses safety checks.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message outlining the command's usage and options, then exit.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-emulator-remove</b> command is a specialized utility within the Sailfish OS SDK, designed for managing and uninstalling virtual machine emulators. These emulators provide a simulated Sailfish OS environment for developers to test applications without physical hardware. When invoked, this command permanently deletes a specified emulator instance, including its virtual disk image, configuration files, and any stored data. This action is irreversible and primarily serves to free up disk space and clean up the development environment. It requires the precise name or ID of the emulator to be removed, which can typically be listed using other <b>sfdk-emulator</b> commands. It is a critical tool for maintaining a tidy and efficient development workspace.


title: CAVEATS
content:
Removal of an emulator is an <i>irreversible operation</i> that permanently deletes all associated data, including any applications, settings, or files stored within that specific emulator instance. Ensure no critical data resides within the emulator and that no development processes are actively using it before proceeding. This command requires the Sailfish OS SDK to be correctly installed and configured on your system for proper functionality.


title: DISK SPACE MANAGEMENT
content:
Removing unused or obsolete emulators is crucial for freeing up significant disk space on your development machine, as individual emulator images can often consume several gigabytes of storage.


title: COMMAND-LINE INTEGRATION
content:
As a command-line utility, <b>sfdk-emulator-remove</b> can be easily integrated into automated scripts for batch operations or continuous integration/development workflows, streamlining the management of testing environments.


title: HISTORY
content:
The <b>sfdk-emulator-remove</b> command has been an integral part of the Sailfish OS SDK since its early versions, evolving alongside the SDK's capabilities. Its development focused on providing developers with a straightforward method to manage their virtual testing environments, ensuring efficient resource allocation and workspace cleanup. Its functionality has remained consistent, reflecting the fundamental need for emulator lifecycle management.


title: SEE ALSO
content:
sfdk-emulator-create(1), sfdk-emulator-list(1), sfdk-emulator-start(1), sfdk-emulator-stop(1), sfdk(1)


title: PARAMETERS
content:
<b><i>&lt;emulator_name_or_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The unique name or identifier of the Sailfish OS emulator instance to be set as the active or default one for subsequent SDK operations. This name typically corresponds to an emulator previously created using <b>sfdk emulator create</b>.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits, showing usage information for the command.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the operation's progress and actions.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses non-essential output, showing only errors or critical information, useful for scripting.<br><br>


title: DESCRIPTION
content:
<b>sfdk-emulator-set</b> is an assumed utility within the Sailfish OS Software Development Kit (SDK), primarily used for managing or configuring the active emulator environment. While not a top-level <b>sfdk</b> command directly documented in standard CLI references as <b>sfdk-emulator-set</b>, its name suggests a function similar to <b>sfdk emulator set-default</b> or a script for initializing a specific emulator setup. It allows developers to specify which Sailfish OS emulator instance or configuration should be used by default for subsequent SDK operations like building and deploying applications. This command is crucial in multi-emulator environments, enabling seamless switching between different Sailfish OS versions or device types for testing purposes without manual configuration changes for each project or task. Its exact implementation details may vary depending on the SDK version or whether it acts as an internal helper script or a user-facing command.


title: CAVEATS
content:
The <b>sfdk-emulator-set</b> command is not a standard, top-level command documented in the main Sailfish OS SDK CLI reference (like <b>sfdk emulator set-default</b>). Its exact parameters and behavior might vary significantly between SDK versions, or it might function as an internal helper script. Users should consult their specific SDK installation's documentation or use <b>--help</b> if available for precise usage.


title: USAGE CONTEXT
content:
This command is typically executed within a Sailfish OS SDK development environment, often from the SDK's command-line interface or a terminal where the SDK's environment variables are sourced. It is primarily used by developers to prepare their build and deployment environment before compiling applications or deploying them to a specific emulator instance for testing. Its successful execution depends on having a properly installed Sailfish OS SDK and pre-configured emulator images.


title: HISTORY
content:
The Sailfish OS SDK and its command-line tools, including components for emulator management, have evolved since the platform's inception. While the specific <b>sfdk-emulator-set</b> command may not have a long, publicly documented history as a standalone utility, the functionality it represents (setting a default or active emulator) has been a core part of SDK operations. Earlier versions of the SDK might have relied more on individual scripts for specific tasks, which later consolidated into comprehensive subcommands under the main <b>sfdk emulator</b> utility, such as <b>sfdk emulator set-default</b>. Its usage likely reflects a pattern of direct script invocation for specific configuration tasks within the SDK environment.


title: PARAMETERS
content:
<b><i>&lt;emulator_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional argument specifying the unique identifier of a particular Sailfish OS emulator. If provided, the command will display detailed information only for that specific emulator. If omitted, it typically lists summary information for all known or running emulators.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-emulator-show</b> command is an essential utility within the Sailfish OS SDK (SFDK), a comprehensive toolkit for developing applications targeting the Sailfish OS mobile platform. This command provides developers with a convenient way to inspect and retrieve detailed information about the virtual devices, commonly known as 'emulators,' that are configured and managed by the SDK. Developers extensively use these emulators to test their applications in an environment that closely resembles actual Sailfish OS devices, eliminating the need for physical hardware during initial development and debugging phases.<br><br>When invoked without arguments, <b>sfdk-emulator-show</b> typically lists all available emulators, providing key details such as their unique identifiers, the specific Sailfish OS version they emulate, their current operational status (e.g., <i>Running</i>, <i>Stopped</i>), and network connectivity information like IP addresses. When a specific emulator identifier is provided as an argument, the command focuses on displaying more in-depth information for that single emulator. This command is crucial for debugging, verifying the correctness of emulator setups, and ensuring applications perform as expected across various Sailfish OS versions and configurations. It significantly contributes to an efficient development workflow by offering clear insights into the testing environment.


title: CAVEATS
content:
This command requires the Sailfish OS SDK to be installed and properly configured on the system. Emulator details, particularly network IP addresses, are generally only available for emulators that are currently running. The exact output format and the specific details provided may vary slightly depending on the SFDK version installed.


title: EMULATOR STATES
content:
The command frequently reports the operational state of an emulator. Common states include <i>Running</i> (the emulator is active and usable), <i>Stopped</i> (the emulator is powered off), <i>Configured</i> (the emulator exists but is not currently running), or <i>Error</i> (indicating a problem with the emulator setup or operation). Understanding these states is crucial for effective troubleshooting and managing your development environment.


title: NETWORK DETAILS
content:
When an emulator is in the <i>Running</i> state, <b>sfdk-emulator-show</b> typically provides its IP address. This IP address is essential for establishing network connections from the host development machine to the emulator, enabling actions such as secure shell (SSH) access, direct application deployment, or testing network-dependent features of an application.


title: HISTORY
content:
The functionality provided by <b>sfdk-emulator-show</b>, often integrated as the `sfdk emulator show` subcommand, has been a foundational element of the Sailfish OS SDK since its early stages of development. As Sailfish OS evolved, the SDK consolidated its command-line tools under the unified `sfdk` interface. The ability for developers to easily inspect and manage the status and details of their testing emulators was deemed fundamental for productivity. Consequently, this 'show' functionality has remained a core component, reflecting the SDK's commitment to providing immediate and relevant information for an efficient virtual testing environment.


title: SEE ALSO
content:
sfdk(1), sfdk-emulator-create(1), sfdk-emulator-start(1), sfdk-emulator-stop(1), sfdk-emulator-list(1)


title: PARAMETERS
content:
<b><i>EMULATOR_ID</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the unique identifier of the emulator instance to be started. If omitted, the command might start a default or the most recently used emulator.<br><br><b><b>--display</b> <I>MODE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the graphical display mode for the emulator. Common modes include <i>vnc</i> for remote VNC access, <i>x11</i> for display on a local X server, or <i>null</i> for a headless operation.<br><br><b><b>--port</b> <I>PORT_NUMBER</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a specific network port, often for VNC connections, allowing remote viewing and control of the emulator's display.<br><br><b><b>--headless</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the emulator without a graphical user interface. This mode is particularly useful for automated testing, CI/CD pipelines, or when graphical output is not required.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed information about the emulator's startup process and potential issues.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available options and usage information for the command.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-emulator-start</b> command is a core utility within the Sailfish OS SDK, designed to launch a virtual instance of the Sailfish OS environment. This emulator is crucial for developers to test and debug applications without needing physical hardware. It provides a software-simulated environment that mimics a Sailfish OS device, allowing for development iteration, UI testing, and functional verification. Users can configure various aspects of the emulator's startup, such as display modes, network ports for remote access, and whether it runs in a visible or headless mode. It integrates seamlessly into the SDK's workflow, often being used in conjunction with IDEs like Qt Creator for a streamlined development experience. The command typically takes an emulator ID to specify which pre-configured instance to start, providing flexibility for different testing scenarios.


title: CAVEATS
content:
Starting the emulator consumes significant system resources (CPU, RAM, disk I/O), which can impact overall system performance. Network port conflicts can occur if the specified port is already in use. Ensure that your system meets the Sailfish OS SDK's requirements for optimal emulator performance. Graphical display modes like <i>x11</i> require a running X server.


title: INTEGRATION WITH IDES
content:
The Sailfish OS SDK, including its emulator functionality, is designed to integrate well with popular IDEs such as Qt Creator. Developers can often launch and manage emulators directly from their IDE, facilitating a seamless develop-test-debug cycle.


title: NETWORK CONFIGURATION
content:
The emulator typically sets up a virtual network interface, allowing the emulated device to access the host's network and the internet. This is crucial for applications requiring network connectivity, such as those that interact with web services or use online resources.


title: HISTORY
content:
The <b>sfdk-emulator-start</b> command is an integral part of the Sailfish OS SDK, developed by Jolla. It has been a consistent component since the early days of the SDK, evolving with new Sailfish OS releases to provide a stable and reliable emulation environment for application developers targeting the platform. Its development has focused on improving performance, compatibility, and integration with modern development workflows.


title: SEE ALSO
content:
sfdk-emulator-create(1), sfdk-emulator-list(1), sfdk-emulator-stop(1), sfdk-build(1), sfdk-deploy(1)


title: PARAMETERS
content:
<b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message and exit.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show version information for the command and exit.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-emulator-status</b> command is a utility provided as part of the Sailfish OS Software Development Kit (SDK). Its primary function is to report the current operational status of one or more Sailfish OS emulators. These emulators are typically QEMU-based virtual machines designed to simulate Sailfish OS devices, allowing developers to test applications without physical hardware.<br><br>When invoked, the command queries the SDK's managed emulator instances and provides crucial information such as whether an emulator is running, its assigned IP address, the virtual device model it simulates, and potentially its SSH port if port forwarding is enabled. This command is essential for developers to verify that their testing environment is correctly set up and to troubleshoot connectivity issues with the emulated devices, ensuring a smooth development workflow for Sailfish OS applications.


title: CAVEATS
content:
This command is specific to the Sailfish OS SDK and is not a standard Linux utility found in general distributions. It requires the Sailfish OS SDK to be installed and properly configured on the system. The exact output and available options might vary slightly between different SDK versions and emulator setups.


title: TYPICAL USAGE
content:
To check the status of your Sailfish OS emulator, simply run the command without any options:<br><br><b>$ sfdk-emulator-status</b><br><br>A typical output indicating a running emulator might look like this:<br><i>Emulator status: running</i><br><i>IP address: 192.168.100.15</i><br><i>SDK version: 4.5.0.19</i><br><i>Device: Sailfish_OS-latest-aarch64-emulator</i><br><i>SSH port: 2222</i><br><br>If the emulator is not running, the output would indicate its stopped or uninitialized state, aiding in quick diagnosis.


title: HISTORY
content:
As an integral part of the Sailfish OS SDK, <b>sfdk-emulator-status</b> emerged alongside the SDK's first public releases. Its development has mirrored the evolution of Sailfish OS itself, providing developers with essential tools to manage virtual testing environments. It has remained a core component for diagnosing and ensuring the availability of emulators throughout the SDK's lifecycle, reflecting the SDK's commitment to providing robust development tools.


title: SEE ALSO
content:
sfdk(1), sfdk-emulator-start(1), sfdk-emulator-stop(1), sfdk-emulator-create(1), qemu-system-x86_64(1)


title: SYNOPSIS
content:
<b>sfdk emulator-stop</b> [<i>&lt;emulator_name_or_id&gt;</i>] [<b>--force</b> | <b>-f</b>]<br><b>sfdk emulator-stop --all</b> [<b>--force</b> | <b>-f</b>]


title: PARAMETERS
content:
<b><i>&lt;emulator_name_or_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name or unique identifier of the specific Sailfish OS emulator instance to stop. If omitted and <b>--all</b> is not specified, the command may attempt to stop the default or currently active emulator.<br><br><b><b>--all</b>, <b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stops all currently running Sailfish OS emulator instances.<br><br><b><b>--force</b>, <b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the immediate termination of the emulator process, bypassing graceful shutdown procedures. This can be useful if an emulator is unresponsive but may lead to unsaved state loss.<br><br>


title: DESCRIPTION
content:
The <b>sfdk-emulator-stop</b> command is a utility within the Sailfish OS Software Development Kit (SDK) used to terminate running Sailfish OS emulator instances. These emulators provide a virtual environment for developers to test their applications without requiring physical hardware. This command is essential for managing development resources, freeing up system memory and CPU cycles occupied by the emulator. It is typically invoked after development or testing sessions are complete, or when a different emulator configuration needs to be started. The command can stop a specific emulator identified by its name or ID, or it can be used to stop all active emulators. It ensures a clean shutdown of the virtual machine process associated with the emulator, preventing resource leaks and preparing the system for subsequent development tasks.


title: CAVEATS
content:
Stopping an emulator forcefully (with <b>--force</b>) might lead to data loss or corrupt the emulator's state if not all data is flushed to disk. <br>Always ensure all necessary work within the emulator is saved before stopping, especially when not using <b>--force</b>. <br>Running the command without specifying an emulator name/ID or <b>--all</b> might result in an error or unexpected behavior, depending on the <b>sfdk</b> version and configuration.


