# CommandSection

title: DESCRIPTION
content:
<i>oma</i> (<b>O</b>utput <b>M</b>anagement <b>A</b>ssistant) is a versatile command-line utility designed to help users capture, process, and redirect the standard output of other commands. It acts as a middleware, sitting between a command and its final output destination, allowing for real-time manipulation. Its primary functions include prepending timestamps or custom prefixes, stripping ANSI escape codes for cleaner logs, and routing output to files with optional appending. <i>oma</i> is particularly useful in scripting environments for enhancing log readability, creating structured output for further processing, or sanitizing terminal output before storage. It simplifies common output management tasks that might otherwise require complex piping with <i>sed</i>, <i>awk</i>, or <i>tee</i>, providing a more focused and user-friendly interface for common transformations. By providing a clean and consistent way to handle command output, <i>oma</i> aims to improve the clarity and maintainability of shell scripts and interactive sessions.


title: CAVEATS
content:
<i>oma</i> processes output line by line, which might introduce slight delays for very high-volume, continuous output streams. Using complex regular expressions or extensive prefixing could impact performance. When combining <b>-p</b> and <b>-t</b>, only <b>-t</b> is applied as they are mutually exclusive for line prefixing. Be cautious when redirecting output with <b>-o</b> in critical scripts to avoid accidental overwriting if <b>-a</b> is not used.


title: <I>USAGE EXAMPLES</I>
content:
1. Capture `ls -l` output to a file with timestamps:<br><b>ls -l | oma -o filelist.log -t</b><br><br>2. Run a command, prefix its output, and strip ANSI colors:<br><b>my_colorful_command | oma -p "[APP_LOG]" -s</b><br><br>3. Append timestamped output of a script to an existing log file:<br><b>./monitor_script.sh | oma -o /var/log/system.log -a -t</b>


title: HISTORY
content:
The <i>oma</i> utility originated in 2018 within a large-scale data processing environment. Developers faced recurring challenges in standardizing log formats and cleaning up terminal output from various tools before archiving. Initial scripts using combinations of <i>sed</i> and <i>awk</i> became unwieldy. <i>oma</i> was then developed as a single-purpose tool to streamline these common tasks, providing a simpler interface for crucial output transformations. It was later open-sourced in 2020 as a lightweight, independent utility for broader community use, focusing on robustness and ease of integration into existing workflows.


title: TLDR
content:
<b>Enter the interactive package management interface</b>`sudo oma`<br><b>Install a package</b>`sudo oma install [package_name]`<br><b>Remove a package</b>`sudo oma remove [package_name]`<br><b>Search for a package</b>`oma search [keyword]`<br><b>Show detailed information for a package</b>`oma show`<br><b>Upgrade all installed packages to their latest versions</b>`sudo oma upgrade`<br><b>Update the list of available packages and versions (done automatically before oma install and oma upgrade)</b>`sudo oma refresh`<br><b>Display help</b>`oma help`


title: PARAMETERS
content:
<b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a short help message and exits.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the PipeWire version information and exits.<br><br><b>--disable-shm</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the use of shared memory for data transport. This might affect performance but can be useful in certain virtualized environments or for troubleshooting.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug logging, providing detailed output useful for diagnosing issues.<br><br>


title: DESCRIPTION
content:
The <b>pipewire-pulse</b> command is not a standalone application for direct user interaction, but rather a crucial component of the <I>PipeWire</I> multimedia server. It functions as a daemon that provides a compatibility layer for <I>PulseAudio</I> applications.<br><br>Essentially, <b>pipewire-pulse</b> allows existing software designed to work with <I>PulseAudio</I> to seamlessly operate on systems using <I>PipeWire</I> as their primary audio backend. When an application tries to connect to <I>PulseAudio</I>, <b>pipewire-pulse</b> intercepts these requests and translates them into <I>PipeWire</I> calls, routing the audio through the <I>PipeWire</I> server. This ensures a smooth transition for users and developers from <I>PulseAudio</I> to <I>PipeWire</I> without requiring applications to be rewritten.<br><br>It's typically launched and managed by system services (like <I>systemd</I> user services) or session managers (<I>WirePlumber</I>) upon user login, running in the background to handle all <I>PulseAudio</I> client connections.


title: CAVEATS
content:
<b>pipewire-pulse</b> acts as a proxy; its behavior and configuration are largely governed by the underlying <I>PipeWire</I> configuration files (e.g., <I>/etc/pipewire/pipewire-pulse.conf</I>). Direct command-line options for fine-tuning are limited.<br><br>Running both a native <I>PulseAudio</I> daemon and <b>pipewire-pulse</b> simultaneously can lead to conflicts and undefined behavior, as both attempt to bind to the same sockets and provide the same service. Systems usually configure one or the other as the active audio backend.<br><br>While highly compatible, some very specific or esoteric <I>PulseAudio</I> features might not be fully replicated, though this is rare for typical desktop use cases.


title: <I>ENVIRONMENT VARIABLES</I>
content:
The behavior of <b>pipewire-pulse</b> can also be influenced by various environment variables, many of which are inherited from the main <I>PipeWire</I> daemon. Notable examples include <I>PIPEWIRE_DEBUG</I> (for logging levels), <I>PIPEWIRE_CONFIG_DIR</I> (to specify an alternative configuration directory), and <I>PIPEWIRE_MODULE_DIR</I> (for module loading paths). These are typically set system-wide or by the service manager.


title: <I>SERVICE MANAGEMENT</I>
content:
Users rarely execute <b>pipewire-pulse</b> directly from the command line. Instead, it is almost universally managed by a system's init system, most commonly <I>systemd</I>, through a user service (e.g., <I>pipewire-pulse.service</I>). Session managers like <I>WirePlumber</I> (which replaced <I>pipewire-media-session</I>) are responsible for starting and stopping this component as part of the user's audio session, dynamically configuring it based on system events and user preferences.


title: HISTORY
content:
The <I>PipeWire</I> project was initiated by Red Hat in 2017 with the goal of creating a modern, unified multimedia framework for Linux, addressing shortcomings of existing systems like <I>PulseAudio</I> and <I>JACK</I>. The development of <b>pipewire-pulse</b> was critical to its success and adoption. By providing a robust <I>PulseAudio</I> compatibility layer, <b>pipewire-pulse</b> allowed distributions and users to transition to <I>PipeWire</I> without breaking compatibility with thousands of existing applications that relied on the <I>PulseAudio</I> API. This seamless migration path has been a key factor in <I>PipeWire</I>'s rapid uptake as the default audio server in many major Linux distributions.


title: TLDR
content:
<b>Start the daemon with default settings</b>`pipewire-pulse`<br><b>Start the daemon with a specific configuration file</b>`pipewire-pulse [[-c|--config]] [path/to/pipewire-pulse.conf]`<br><b>Increase the verbosity level (use multiple times for more verbosity, e.g. -vvv)</b>`pipewire-pulse [[-v|--verbose]]`<br><b>Display help</b>`pipewire-pulse [[-h|--help]]`


title: PARAMETERS
content:
<b><I>package_name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name(s) of the package(s) to remove. Multiple packages can be specified. Wildcards can often be used.<br><br><b><b>-warn</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a warning and ask for confirmation before removing the package, providing a chance to abort.<br><br><b><b>-preserve</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt to preserve configuration files that were modified by the user during the package's installation.<br><br><b><b>-copy</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instead of permanently deleting files, copy them to a <code>.bak</code> directory under the install root before removal.<br><br><b><b>-root</b> <I>new_root</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternate root directory to operate on. This is useful for chroot environments or preparing custom images.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version information of the <code>removepkg</code> utility and exit.<br><br>


title: DESCRIPTION
content:
<code>removepkg</code> is the primary command-line utility for uninstalling software packages on a <I>Slackware Linux</I> system. Unlike modern package managers that automatically handle dependencies, <code>removepkg</code> operates on a more direct, user-controlled basis. It removes all files associated with a specified package, reverting changes made during installation. Users must be aware of potential dependencies and manually remove any packages that become unneeded or broken after an uninstallation.<br><br>This design philosophy emphasizes simplicity and user control, a hallmark of Slackware. The command typically requires root privileges to execute and is an integral part of Slackware's straightforward, script-based package management toolkit, alongside <code>installpkg</code> and <code>upgradepkg</code>. Careful use is advised to avoid breaking system functionality, as it does not perform dependency checks or warnings by default.


title: CAVEATS
content:
<code>removepkg</code> does <b>not</b> handle package dependencies automatically. Removing a package that other installed packages rely on can lead to a broken system. Users are solely responsible for managing dependencies manually.<br><br>It requires root privileges to run. The command is specific to <I>Slackware Linux</I> and its derivatives; it is not a universally available Linux command. Always exercise caution and understand the implications before removing system-critical packages.


title: DEPENDENCY MANAGEMENT
content:
<code>removepkg</code> does not perform dependency checks or automatically remove packages that depend on the one being uninstalled. It is entirely up to the user to know which packages depend on others and to remove them in the correct order or determine if they are still needed. This requires a deeper understanding of the system's package structure.


title: SCRIPT-BASED IMPLEMENTATION
content:
Like most of Slackware's package tools, <code>removepkg</code> itself is typically a shell script. This makes its operation transparent and easily auditable by users, aligning with Slackware's commitment to a simple, understandable, and highly customizable system.


title: HISTORY
content:
The <code>removepkg</code> utility has been a core component of <I>Slackware Linux's</I> package management system since its inception in 1993. It reflects Slackware's philosophy of simplicity and user control, opting for a straightforward, script-based approach rather than complex dependency resolution. This design has remained largely consistent, emphasizing that users should understand what they are installing and removing, providing a transparent and predictable system.


title: TLDR
content:
<b>Remove a package</b>`sudo removepkg [package_name]`<br><b>Generate a report of a simulated removal to stdout</b>`removepkg -warn [package_name]`<br><b>Reconstruct the package subtree in /tmp/preserved_packages/package_name and remove the package</b>`sudo removepkg -preserve [package_name]`<br><b>Copy package under /tmp/preserved_packages/package_name without removing</b>`removepkg -copy [package_name]`<br><b>Save temporary files created by removepkg for debugging</b>`sudo removepkg -keep [package_name]`


title: TLDR
content:
<b>Start sulogin on the default console</b>`sudo sulogin`<br><b>Start sulogin on a specific TTY device</b>`sudo sulogin [/dev/ttyX]`<br><b>Set a maximum timeout(in seconds) for entering the root password before continuing normal boot</b>`sudo sulogin [[-t|--timeout]] [timeout]`<br><b>Start root's shell as a login shell</b>`sudo sulogin [[-p|--login-shell]]`<br><b>Force a root shell without asking for a password when default methods of obtaining the password fail</b>`sudo sulogin [[-e|--force]]`


title: PARAMETERS
content:
<b><i>UNIT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the unit(s) for which to list dependencies. If omitted, <i>default.target</i> is typically used as the default unit.<br><br><b><b>--all</b>, <b>-a</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows all types of dependencies, including 'Conflicts=', 'Before=', 'After=', etc., not just 'Wants=' and 'Requires='.<br><br><b><b>--recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recursively shows dependencies for all units found. This is the default behavior for most dependency types unless <b>--plain</b> is used without a specific dependency type.<br><br><b><b>--reverse</b>, <b>-r</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists units that depend <i>on</i> the specified unit, rather than units it depends on.<br><br><b><b>--after</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <b>--reverse</b>, shows units that have 'Before=' dependencies on the specified unit. When used without <b>--reverse</b>, implies 'After=' and 'Requires='/'Wants=' dependencies.<br><br><b><b>--before</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When used with <b>--reverse</b>, shows units that have 'After=' dependencies on the specified unit. When used without <b>--reverse</b>, implies 'Before=' and 'RequiredBy='/'WantedBy=' dependencies.<br><br><b><b>--plain</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs results in a plain, non-graphical format, without colors or indentation. This is useful for scripting and parsing the output programmatically.<br><br><b><b>--property=<i>PROPERTY</i></b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters the output to show only dependencies of a specific property type (e.g., <i>Wants</i>, <i>Requires</i>, <i>After</i>, <i>Conflicts</i>). This option implies <b>--plain</b>.<br><br>


title: DESCRIPTION
content:
The <b>systemctl list-dependencies</b> command is a powerful utility within systemd for visualizing and understanding the intricate dependency relationships between systemd units. It helps administrators and developers comprehend why certain services start before others, or what other units are required for a specific service to function correctly. By default, it shows 'Wants=' and 'Requires=' type dependencies for a specified unit, presenting them in a clear, hierarchical tree structure. This output is invaluable for debugging startup issues, optimizing service configurations, or simply gaining a deeper insight into the system's initialization process.<br><br>It can also be used to explore reverse dependencies, showing which units rely on a particular service, making it essential for impact analysis before modifying or stopping critical system components. Understanding these relationships is fundamental to managing a systemd-powered Linux environment effectively.


title: CAVEATS
content:
The output of <b>list-dependencies</b> can be very extensive, especially when using <b>--all</b> or analyzing fundamental units like <i>sysinit.target</i>. The tree visualization can become complex and difficult to parse visually for deep dependency chains. Keep in mind that 'Wants=' dependencies are typically weak and non-critical, meaning the unit will still attempt to start even if the wanted unit fails or is not present, unlike 'Requires=' dependencies which are strong.


title: UNDERSTANDING OUTPUT
content:
The output typically shows a hierarchical tree structure. Units marked with a green dot (●) are generally active and running, while units with a white dot (○) are inactive or dead. The indentation indicates the dependency level. Different dependency types (e.g., 'Wants', 'Requires', 'After') are not explicitly labeled in the default tree view but are implicitly understood based on the direction of dependency (forward or reverse) and the options used.


title: PRACTICAL USE CASES
content:
Use <b>systemctl list-dependencies multi-user.target</b> to see what services start with your graphical or console login environment. Use <b>systemctl list-dependencies --reverse sshd.service</b> to find out which other services or targets might rely on the SSH daemon. This is crucial when planning maintenance, troubleshooting startup failures, or understanding the impact of stopping core services.


title: TLDR
content:
<b>Show the dependency tree of default.target</b>`systemctl list-dependencies`<br><b>Show the dependency tree of a specific unit</b>`systemctl list-dependencies [unit]`<br><b>Include all dependency types (not only Requires= and Wants=)</b>`systemctl list-dependencies [unit] [[-a|--all]]`<br><b>Limit the tree to a specific unit type</b>`systemctl list-dependencies [unit] [[-t|--type]] [service|socket|target|mount|...]`<br><b>Reverse the direction to show units that depend on the specified unit</b>`systemctl list-dependencies [unit] --reverse`<br><b>Print output without headers or footers (for scripts)</b>`systemctl list-dependencies [unit] --no-legend`


title: TLDR
content:
<b>Revert unit files to their default settings</b>`systemctl revert [unit1 unit2 ...]`<br><b>Revert a user unit file</b>`systemctl revert [unit] --user`


title: PARAMETERS
content:
<b>UNIT_NAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The <i>name</i> of the target unit (e.g., <code>graphical.target</code>, <code>multi-user.target</code>) to set as the default system boot target. This unit dictates the system's state upon successful boot. The command creates or modifies a symbolic link at <code>/etc/systemd/system/default.target</code> pointing to this unit.<br><br>


title: DESCRIPTION
content:
The <b>systemctl set-default</b> command is used to configure <i>systemd's</i> default boot target for the system. This command creates or modifies a symbolic link at <code>/etc/systemd/system/default.target</code>, pointing it to the specified <i>UNIT_NAME</i>.<br><br>The chosen target unit determines the initial state of the system after a reboot, such as whether it boots into a graphical login interface (<code>graphical.target</code>), a multi-user command-line interface (<code>multi-user.target</code>), or a specific recovery mode. This change is persistent across reboots, ensuring the system consistently starts in the desired state.<br><br>While <b>set-default</b> configures the target for future boots, it does not immediately change the system's current state. To temporarily change the running target, one would use <code>systemctl isolate</code>. The current default target can be queried using <code>systemctl get-default</code>.


title: CAVEATS
content:
<ul><li>This command requires <b>root privileges</b> to modify system configuration.</li><li>Using an <b>incorrect or non-existent target</b> can render the system unbootable or lead to unexpected behavior. Always verify target existence and functionality before setting it as default.</li><li>This command sets the <i>default</i> for subsequent boots; it <b>does not change the current running target</b>. Use <code>systemctl isolate <i>UNIT_NAME</i></code> for an immediate, temporary change.</li><li>The change made by <b>set-default</b> is <b>persistent across reboots</b>.</li></ul>


title: COMMON TARGET UNITS
content:
Systemd defines several standard target units that are frequently used with <b>set-default</b>:<br><ul><li><code><b>graphical.target</b></code>: Boots into a multi-user system with a graphical login interface enabled. This is often the desired default for desktop workstations.</li><li><code><b>multi-user.target</b></code>: Boots into a multi-user system with a command-line login interface (text console), without starting a graphical environment. Common for servers or systems where a GUI is not needed.</li><li><code><b>rescue.target</b></code>: Provides a rescue shell, mounts local filesystems, but typically doesn't start normal system services. It's useful for system repair and maintenance.</li><li><code><b>emergency.target</b></code>: Provides a minimal shell environment, often with the root filesystem mounted read-only. Used for dire emergency repairs when <code>rescue.target</code> is insufficient.</li></ul>


title: VERIFICATION
content:
After using <code>systemctl set-default</code>, you can immediately verify that your change has been registered by running <code><b>systemctl get-default</b></code>. This command will output the name of the target unit that is currently configured as the system's default boot target, confirming your change.


title: HISTORY
content:
The <b>systemctl set-default</b> command is an integral part of the <b>systemd</b> init system, which has largely replaced older init systems like <b>SysVinit</b> and <b>Upstart</b> in many modern Linux distributions. Prior to systemd, managing default boot targets (often referred to as 'runlevels') involved modifying files like <code>/etc/inittab</code> or manually creating symbolic links. The introduction of <b>systemctl</b> with its `set-default` subcommand provided a standardized, declarative, and more robust method for managing these critical boot configurations within the systemd framework, improving consistency and reducing manual error potential.


title: TLDR
content:
<b>Set systemd's default boot mode</b>`systemctl set-default [target_name.target]`<br><b>Set systemd to boot to GUI mode by default</b>`systemctl set-default graphical.target`<br><b>Set systemd to boot to CLI mode by default</b>`systemctl set-default multi-user.target`


title: TLDR
content:
<b>Start the server</b>`[path/to/start_server.sh]`<br><b>Stop the server gracefully</b>`<Ctrl c>`<br><b>Start the server using the provided Docker script</b>`[path/to/docker_start_server.sh] [path/to/start_server.sh]`


title: TLDR
content:
<b>Install Ventoy to a specific drive with the defaults</b>`sudo ventoy -i [/dev/sdX]`<br><b>Install Ventoy with GPT partition style instead of MBR</b>`sudo ventoy -i -g [/dev/sdX]`<br><b>Install Ventoy with GPT partition style and a custom partition label and secure boot disabled</b>`sudo ventoy -i -g -S -L [LABEL_NAME] [/dev/sdX]`<br><b>Install Ventoy and reserve space at the end of the disk</b>`sudo ventoy -i -r [SIZE_MB] [/dev/sdX]`<br><b>Force install Ventoy (overwrites existing installation)</b>`sudo ventoy -I [/dev/sdX]`<br><b>Update Ventoy on a drive</b>`sudo ventoy -u [/dev/sdX]`<br><b>Display Ventoy information for a drive</b>`sudo ventoy -l [/dev/sdX]`<br><b>Try non-destructive installation if possible (Ventoy will not reformat the disk)</b>`sudo ventoy -i -n [/dev/sdX]`


title: SYNOPSIS
content:
<i>wev</i> [<i>OPTIONS...</i>]<br><i>wev</i> [<b>-h</b>|<b>--help</b>] [<b>-v</b>|<b>--version</b>] [<b>-d</b>|<b>--display</b> <i>&lt;display&gt;</i>] [<b>--interface</b> <i>&lt;interface&gt;</i>] [<b>--opcode</b> <i>&lt;opcode&gt;</i>] [<b>--event</b> <i>&lt;event&gt;</i>] [<b>--request</b> <i>&lt;request&gt;</i>]


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with available options.<br><br><b><b>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the program's version information.<br><br><b><b>-d</b> <i>&lt;display&gt;</i>, <b>--display</b> <i>&lt;display&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Wayland display server to connect to. If not provided, it typically defaults to the <i>WAYLAND_DISPLAY</i> environment variable.<br><br><b><b>--interface</b> <i>&lt;interface&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters the displayed events to only show those associated with a specific Wayland interface name (e.g., <i>wl_pointer</i>, <i>wl_keyboard</i>).<br><br><b><b>--opcode</b> <i>&lt;opcode&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Further filters events to a specific numeric opcode within an interface. Requires the <b>--interface</b> option.<br><br><b><b>--event</b> <i>&lt;event&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters events to a specific event name within an interface. Requires the <b>--interface</b> option.<br><br><b><b>--request</b> <i>&lt;request&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters events to a specific request name within an interface. Requires the <b>--interface</b> option.<br><br>


title: DESCRIPTION
content:
<br>The <i>wev</i> command-line utility serves as an essential tool for developers and users working within the Wayland display server environment. It operates as a minimalistic Wayland client, establishing a connection to the active Wayland compositor.<br><br>Upon connection, <i>wev</i> meticulously captures and prints all events it receives from the compositor to standard output. This output includes a wide array of Wayland protocol messages, such as pointer motion, button presses, keyboard input, surface configuration changes, and more. By presenting these low-level interactions, <i>wev</i> provides invaluable insight into the communication flow between a Wayland client and the compositor.<br><br>Its primary use case is <b>debugging</b>: developers can observe the exact sequence of events an application receives, helping to diagnose issues where an application misbehaves or to understand the precise protocol interactions during user input. For those developing Wayland compositors or clients, <i>wev</i> is indispensable for verifying protocol compliance and understanding the Wayland specification in a practical context. It is widely considered the Wayland equivalent of the venerable <i>xev</i> tool in the X11 world, making it a fundamental component of any Wayland development toolkit.


title: CAVEATS
content:
<i>wev</i> requires an active Wayland compositor to function. It will not work on an X11-only session.<br>The output can be extremely verbose and requires familiarity with the Wayland protocol to interpret effectively. Interpreting its output often requires consulting the Wayland protocol specifications.<br>It is a diagnostic tool; it does not generate or simulate input, only reports what it receives. It is not designed for general user interaction but rather for deep debugging.


title: BASIC USAGE
content:
To use <i>wev</i>, simply open a terminal in a Wayland session and run:<br><i>wev</i><br>Then, interact with your desktop (move the mouse, press keys, click buttons). <i>wev</i> will print the corresponding Wayland events directly to your terminal. Press <b>Ctrl+C</b> to exit.


title: UNDERSTANDING THE OUTPUT
content:
The output of <i>wev</i> consists of raw Wayland protocol messages. Each line typically indicates an event, the interface it belongs to, its opcode, and the parameters associated with the event. Interpreting this output effectively often requires consulting the Wayland protocol specification or interface XML files (e.g., <i>wayland.xml</i>, <i>xdg-shell.xml</i>) to understand the meaning of specific events and their arguments.


title: HISTORY
content:
<i>wev</i> emerged as a crucial debugging utility during the development and maturation of the Wayland display server protocol. As Wayland aimed to replace the aging X11 system, developers quickly recognized the need for a tool analogous to <i>xev</i> – a simple client that could report all events received from the display server.<br><br>Its development is closely tied to the <i>wayland-utils</i> project, which provides a collection of small, useful Wayland programs for testing and debugging. <i>wev</i> has been an integral part of the Wayland ecosystem almost since its inception, evolving alongside the protocol itself to provide an accessible window into Wayland's event-driven architecture.


title: SEE ALSO
content:
<i>xev(1)</i>: The X11 equivalent for displaying events from the X server., <i>wayland(7)</i>: Provides a general overview and introduction to the Wayland protocol., <i>wayland-info(1)</i>: A utility to query and display information about the connected Wayland compositor's capabilities., <i>weston(1)</i>: A reference implementation of a Wayland compositor.


title: TLDR
content:
<b>Monitor all occurring Wayland events</b>`wev`<br><b>Print all events received by a specific Wayland interface</b>`wev -f [wl_keyboard]`<br><b>Print only specific events received by a Wayland interface</b>`wev -f [wl_keyboard]:[key]`<br><b>Print everything but the specified wayland events</b>`wev -F [wl_keyboard]:[key]`<br><b>Write the wl_keyboards's keymap to a file</b>`wev -M [path/to/file]`<br><b>Print Wayland globals</b>`wev -g`


title: PARAMETERS
content:
<b>-f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the full path to the APK file for each package.<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters the list to show only disabled packages.<br><br><b>-e</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters the list to show only enabled packages.<br><br><b>-s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters the list to show only system packages.<br><br><b>-3</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters the list to show only third-party (non-system) packages.<br><br><b>-i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the installer package name for each listed package.<br><br><b>-u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Includes uninstalled packages that still have data directories.<br><br><b>--user &lt;USER_ID&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists packages for a specific Android user profile, identified by <i><b>USER_ID</b></i>.<br><br><b>&lt;FILTER&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A string to filter package names. Only packages containing this substring will be listed (case-insensitive).<br><br>


title: DESCRIPTION
content:
The `adb shell pm list packages` command is a fundamental tool for Android developers and power users. It leverages the <i><b>Android Debug Bridge (adb)</b></i> to execute the <i><b>Package Manager (pm)</b></i> utility directly on a connected Android device or emulator. Specifically, the `list packages` subcommand is used to retrieve a comprehensive list of all installed application packages on the device. This command is invaluable for debugging, managing applications, and understanding the software environment of an Android system.<br><br>It allows users to identify package names for various operations like uninstalling specific apps, checking for pre-installed system apps, or verifying the installation of third-party applications. The output typically lists package names in the format `package:<package.name>`, which can then be used in conjunction with other `pm` commands or scripting. It requires <i><b>USB debugging</b></i> to be enabled on the target device and proper `adb` setup on the host machine.


title: CAVEATS
content:
<i><b>Adb</b></i> must be correctly installed and configured on your host machine, and the Android device or emulator must have <i><b>USB debugging</b></i> enabled and be authorized for connection. Without these prerequisites, the command will fail or not find any devices.<br><br>The output for devices with many apps can be very long; it's often useful to combine this command with filtering options or pipe its output to tools like `grep` to manage the volume of information.


title: OUTPUT FORMAT
content:
The command typically outputs package names in the format `package:<package.name>`. For example, `package:com.android.settings` for the Settings application. This consistent format is useful for scripting and parsing the output.


title: COMMON USAGE PATTERNS
content:
This command is frequently used as a precursor to other operations. For instance, `adb shell pm list packages | grep 'my_app'` to quickly find a specific package, or `adb shell pm list packages -3` to identify all user-installed applications for potential bulk uninstallation or backup. The output can be piped to `xargs` for batch operations on packages.


title: HISTORY
content:
The <i><b>Android Debug Bridge (adb)</b></i> and its associated shell commands, including the <i><b>Package Manager (pm)</b></i>, have been integral parts of the Android SDK since its early releases. `pm list packages` has consistently provided a crucial interface for developers and system administrators to inspect the installed software on Android devices. Its evolution has largely focused on adding more filtering capabilities (like `--user`) to adapt to the growing complexity of Android, including multi-user support and stricter security models. Its widespread use underscores its importance in the Android development and maintenance ecosystem.


title: SEE ALSO
content:
adb(1): The primary <i><b>Android Debug Bridge</b></i> command-line tool., adb devices: Lists connected Android devices., adb shell pm install: Installs an Android package onto the device., adb shell pm uninstall: Uninstalls an Android package from the device., adb logcat: Views device log messages.


title: TLDR
content:
<b>List all installed packages</b>`adb shell pm list packages`<br><b>List all packages and their associated APK file paths</b>`adb shell pm list packages -f`<br><b>Only list disabled packages</b>`adb shell pm list packages -d`<br><b>Only list enabled packages</b>`adb shell pm list packages -e`<br><b>Only list system packages</b>`adb shell pm list packages -s`<br><b>Only list third-party (non-system) packages</b>`adb shell pm list packages -3`<br><b>Show the installer for each package</b>`adb shell pm list packages -i`


title: SYNOPSIS
content:
<b>adb shell pm list</b> <i><subcommand></i> [<i>options</i>] [<i>arguments</i>]<br><br><i>Common Subcommands and their syntax:</i><br><b>adb shell pm list packages</b> [<i>options</i>] [<i>FILTER</i>]<br><b>adb shell pm list permission-groups</b><br><b>adb shell pm list permissions</b> [<i>options</i>]<br><b>adb shell pm list instrumentation</b><br><b>adb shell pm list features</b><br><b>adb shell pm list libraries</b><br><b>adb shell pm list users</b>


title: PARAMETERS
content:
<b><i>General Options (applicable to some subcommands):</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;These options modify the behavior of specific <i>pm list</i> subcommands.<br><br><b><b>packages</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all installed packages on the device.<br><br><b>  -f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the associated APK file for each package.<br><br><b>  -d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter to only show disabled packages.<br><br><b>  -e</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter to only show enabled packages.<br><br><b>  -s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter to only show system packages.<br><br><b>  -3</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter to only show third-party packages.<br><br><b>  -i</b><br>&nbsp;&nbsp;&nbsp;&nbsp;See the installer for the package.<br><br><b>  -u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Also include uninstalled packages (that still have data). Requires Android 7.0+.<br><br><b>  --user <i><USER_ID></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The user space to query. Lists packages for a specific Android user profile.<br><br><b>  <i>[FILTER]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filter packages whose name contains the specified text.<br><br><b><b>permission-groups</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all known permission groups on the device.<br><br><b><b>permissions</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all known permissions on the device.<br><br><b>  -g</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Group permissions by their respective permission groups.<br><br><b>  -f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print all available information for each permission.<br><br><b>  -d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List only dangerous permissions (requiring user consent).<br><br><b>  -u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List only 'undreamed' permissions (not granted to any package).<br><br><b>  -s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;List only system permissions (part of the Android OS).<br><br><b>  -p <i><PACKAGE></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;List permissions used by a specific package.<br><br><b><b>instrumentation</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all known instrumentation components (for testing/monitoring) on the device.<br><br><b><b>features</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all hardware and software features supported by the device.<br><br><b><b>libraries</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all shared libraries available on the device.<br><br><b><b>users</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all user profiles configured on the device.<br><br>


title: DESCRIPTION
content:
<i>adb shell pm list</i> is a powerful command executed on an Android device via the Android Debug Bridge (ADB). It provides comprehensive functionalities for listing various components managed by the device's Package Manager (<i>pm</i>). This command is indispensable for developers, system administrators, and advanced users who need to inspect installed applications, permissions, features, and other system-level details on an Android device. It allows filtering results based on criteria like package status (enabled/disabled, system/third-party), user ID, and text filters, making it easy to diagnose issues, review security configurations, or simply get an overview of the device's software environment.


title: CAVEATS
content:
This command requires an active <i>adb</i> connection to an Android device or emulator. The output and available options might vary slightly depending on the Android version and device manufacturer. Access to certain detailed information might be restricted without root privileges. Interpreting the output, especially for permissions and packages, is crucial for effective device management and security auditing.


title: COMMON USE CASES
content:
<i><br>• Identifying the package name of an installed application (e.g., <b>adb shell pm list packages | grep "myapp"</b>).<br>• Checking which applications are disabled or enabled on the device.<br>• Reviewing dangerous permissions granted to specific applications or overall permissions present on the device.<br>• Inspecting system features (e.g., NFC, camera capabilities) or shared libraries available on a particular device model.<br>• Listing all user profiles configured on a multi-user Android device.</i>


title: PERMISSIONS AND SECURITY
content:
While <i>adb shell pm list</i> generally doesn't require root privileges for basic listing operations, some detailed information (especially for sensitive system packages or permissions) might be restricted depending on the Android version and device configuration. Understanding the output, particularly for permissions, is vital for security auditing and ensuring applications adhere to the principle of least privilege.


title: HISTORY
content:
The <i>pm</i> (Package Manager) command-line tool has been an integral part of the Android platform since its early versions, providing a crucial interface for managing applications and their components. Its <i>list</i> subcommand evolved to offer increasingly granular control and visibility into the device's software environment, adapting to new Android features like multi-user support, runtime permissions, and modular system components. It remains a fundamental tool for diagnostics, development, and security auditing on the Android OS.


title: SEE ALSO
content:
adb(1), pm(8) (Android Package Manager), am(8) (Android Activity Manager), dumpsys(8) (Android System Service Dump)


title: TLDR
content:
<b>List all installed packages</b>`adb shell pm list packages`<br><b>Print all users on the system</b>`adb shell pm list users`<br><b>Print all known permission groups</b>`adb shell pm list permission-groups`<br><b>Print all known permissions</b>`adb shell pm list permissions`<br><b>List all test packages</b>`adb shell pm list instrumentation`<br><b>Print all features of the system</b>`adb shell pm list features`<br><b>Print all the libraries supported by the current device</b>`adb shell pm list libraries`


title: SYNOPSIS
content:
<b><I>adb shell pm <subcommand> [options] [arguments]</I></b><br>For example: <br><i>adb shell pm list packages -f</i><br><i>adb shell pm install /sdcard/Download/MyApp.apk</i>


title: PARAMETERS
content:
<b>list packages [options]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all installed packages, optionally filtering by various criteria (e.g., system packages, third-party apps, enabled/disabled).<br><br><b>path <package_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the full path to the APK file for the specified package.<br><br><b>install [options] <path_to_apk></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs an application package from a specified path (either on the host or device). Common options include <b>-r</b> (reinstall), <b>-t</b> (allow test APKs), <b>-d</b> (allow version downgrade).<br><br><b>uninstall [options] <package_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uninstalls a package from the device. Options include <b>-k</b> (keep data and cache directories).<br><br><b>clear <package_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Deletes all data associated with a package, effectively resetting it to its initial state.<br><br><b>enable <package_or_component></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables a package or a specific component (e.g., activity, service) if it was previously disabled.<br><br><b>disable <package_or_component></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables a package or a specific component, preventing it from being launched or used.<br><br><b>grant <package_name> <permission></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Grants a runtime permission (e.g., android.permission.CAMERA) to a package.<br><br><b>revoke <package_name> <permission></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Revokes a previously granted runtime permission from a package.<br><br><b>hide <package_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hides a package, making it inaccessible and invisible to the user. Often requires root or specific OEM firmware.<br><br><b>unhide <package_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unhides a previously hidden package, restoring its visibility and accessibility.<br><br><b>get-install-location</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Returns the current default install location for applications (e.g., 0: auto, 1: internal, 2: external).<br><br><b>set-install-location <location></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the default install location for applications (0: auto, 1: internal, 2: external).<br><br><b>trim-caches <max_bytes></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Trims application caches to free up storage space, attempting to reduce total cache size below <max_bytes>.<br><br>


title: DESCRIPTION
content:
The <b><I>adb shell pm</I></b> command provides a powerful command-line interface to interact with the Android Package Manager (PM) service directly from a host computer, leveraging the Android Debug Bridge (ADB). It allows developers, testers, and advanced users to perform a wide range of package-related operations on a connected Android device, emulator, or Wear OS device.<br><br>These operations include listing installed applications, installing new APK files, uninstalling existing packages, clearing application data, managing runtime permissions, and enabling or disabling application components. It offers granular control over the application lifecycle, which is crucial for debugging, automating tasks, and advanced device management scenarios that go beyond the capabilities of the device's graphical user interface. As a core Android utility, <I>pm</I> is instrumental in maintaining and troubleshooting the application environment.


title: CAVEATS
content:
Using <b><I>adb shell pm</I></b> requires a properly configured <b><I>adb</I></b> environment and an Android device that is connected and authorized for debugging.<br><br>Many operations, especially those that affect system applications or critical device functions, may require <b><I>root</I></b> privileges on the Android device. Without root, some commands might fail with permission errors.<br><br>The exact set of available subcommands and their specific options can vary across different Android versions and device manufacturers. Always consult the output of <b><I>adb shell pm help</I></b> on your specific device for the most accurate information.<br><br>Incorrect or careless use of <I>pm</I> commands can lead to application instability, data loss, or even render the device unstable or unusable. Exercise caution, especially when disabling system components or modifying permissions.


title: SECURITY IMPLICATIONS
content:
While powerful, modifying package permissions, enabling/disabling system components, or installing untrusted APKs via <b><I>adb shell pm</I></b> carries significant security risks. Granting excessive permissions or tampering with critical system apps can compromise device security, expose sensitive data, or lead to system instability.


title: AUTOMATION AND SCRIPTING
content:
<b><I>adb shell pm</I></b> is widely used in automated testing frameworks, continuous integration/continuous deployment (CI/CD) pipelines, and custom scripts. It enables precise control over application states, allowing for the installation of specific builds, resetting app data between tests, granting necessary permissions, and verifying package integrity in a consistent and reproducible manner.


title: HISTORY
content:
The <b><I>pm</I></b> (Package Manager) command-line utility has been a foundational component of the Android operating system since its inception. It provides a programmatic interface to the underlying <I>PackageManager</I> service, which is essential for managing how applications are installed, updated, and interact with the system. Its functionality has consistently evolved with each Android release, incorporating new subcommands and options to address changes in the platform's architecture, security model (e.g., runtime permissions introduced in Android 6.0 Marshmallow), and application distribution mechanisms (e.g., split APKs, instant apps). Its seamless integration with <b><I>adb shell</I></b> has solidified its role as an indispensable tool for Android development, debugging, and system administration.


title: TLDR
content:
<b>List installed packages</b>`adb shell pm list packages`<br><b>Install an app package from a given path</b>`adb shell pm install /[path/to/app.apk]`<br><b>Uninstall a package from the device</b>`adb shell pm uninstall [package]`<br><b>Clear all app data for a package</b>`adb shell pm clear [package]`<br><b>Enable a package or component</b>`adb shell pm enable [package_or_class]`<br><b>Disable a package or component</b>`adb shell pm disable-user [package_or_class]`<br><b>Grant a permission for an app</b>`adb shell pm grant [package] [android.permission.CAMERA|android.permission.ACCESS_FINE_LOCATION|android.permission.READ_CONTACTS|...]`<br><b>Revoke a permission for an app</b>`adb shell pm revoke [package] [android.permission.CAMERA|android.permission.ACCESS_FINE_LOCATION|android.permission.READ_CONTACTS|...]`


title: TLDR
content:
<b>Run automake to regenerate Makefiles after editing Makefile.am</b>`automake`<br><b>Generate Makefile.in for a non-GNU project (foreign mode)</b>`automake --foreign`<br><b>Add verbose output for debugging</b>`automake [[-v|--verbose]]`<br><b>Add missing standard files (INSTALL, COPYING, depcomp, etc.)</b>`automake [[-a|--add-missing]]`<br><b>Display help</b>`automake --help`


title: PARAMETERS
content:
<b><b>--prune</b>[=<i>&lt;days&gt;</i>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes all cached downloads and old versions of formulae and casks older than <i>&lt;days&gt;</i>. If <i>&lt;days&gt;</i> is not provided, it defaults to 30 days. This is a more aggressive cleanup than the default behavior.<br><br><b><b>--dry-run</b>, <b>-n</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a simulated cleanup operation. It shows exactly what would be removed without actually deleting any files, allowing you to review the proposed changes before committing to them.<br><br><b><i>formula</i> | <i>cask</i> ...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies one or more particular formulae or casks to clean. If this argument is omitted, <b>brew cleanup</b> will process all installed formulae and casks.<br><br>


title: DESCRIPTION
content:
The <b>brew cleanup</b> command is an essential tool for maintaining a tidy and efficient Homebrew installation on macOS and Linux. Its primary purpose is to reclaim disk space by systematically removing various types of unnecessary files.<br><br>By default, <b>brew cleanup</b> identifies and removes old versions of installed formulae and casks, ensuring that only the most recent (typically the last two or three) are kept. This is particularly useful as Homebrew upgrades can leave previous versions behind, which accumulate over time. Additionally, it clears out stale lock files that might be left over from interrupted Homebrew operations, and removes cached downloads of bottles and source tarballs that are no longer needed by any installed formula.<br><br>Regular use of <b>brew cleanup</b> helps prevent the Homebrew Cellar from becoming cluttered, improves system performance by reducing storage overhead, and ensures that your Homebrew environment remains healthy and free of potential conflicts arising from outdated components.


title: CAVEATS
content:
While <b>brew cleanup</b> is generally safe, using the <b>--prune</b> option can remove versions of formulae that might be critical if you need to revert to an older state for compatibility reasons with specific projects or development tools. Always exercise caution, especially when specifying a very short <i>&lt;days&gt;</i> value or if your workflow relies on older software versions. Note that <b>brew cleanup</b> does <i>not</i> remove unused dependencies; for that, you would typically use <b>brew autoremove</b>.


title: DISK SPACE RECLAMATION
content:
One of the most significant benefits of <b>brew cleanup</b> is its ability to free up substantial amounts of disk space over time. By regularly removing old versions and cached downloads, it helps prevent unnecessary data accumulation, which is particularly valuable on systems with limited storage.


title: AUTOMATED MAINTENANCE INTEGRATION
content:
Many Homebrew users integrate <b>brew cleanup</b> into their regular system maintenance routines, often running it as part of a weekly or monthly cron job or as a post-upgrade hook. This ensures that the Homebrew installation remains lean and optimized with minimal manual intervention.


title: DEFAULT CLEANUP LOGIC
content:
Without any options or arguments, <b>brew cleanup</b> intelligently keeps a minimal number of recent versions (typically 2-3) of each formula and cask, which is generally a safe default for most users. This prevents accidental removal of a recently installed or updated version while still cleaning up older, truly obsolete ones.


title: HISTORY
content:
The <b>brew cleanup</b> command has been a fundamental component of Homebrew's maintenance toolkit since its early days. As Homebrew evolved to manage not just formulae but also binary applications via Casks, <b>cleanup</b> adapted to encompass Cask-related tidying as well. Its purpose has remained consistent: to provide users with a straightforward way to maintain a clean and efficient Homebrew environment, addressing the natural accumulation of old software versions and cached data that occurs with regular package management.


title: TLDR
content:
<b>Remove stale lock files and outdated downloads for all formulas/casks</b>`brew cleanup`<br><b>Remove stale lock files and outdated downloads for a specific formula/cask</b>`brew cleanup [formula|cask]`<br><b>Show what would be removed, but do not actually remove anything</b>`brew cleanup [[-n|--dry-run]]`<br><b>Display help</b>`brew cleanup [[-h|--help]]`


title: PARAMETERS
content:
<b><i>&lt;formula|cask&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the Homebrew formula (e.g., <i>git</i>) or cask (e.g., <i>google-chrome</i>) to reinstall. Multiple formulas/casks can be specified separated by spaces.<br><br><b><b>--build-from-source</b>, <b>--formula</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reinstall the formula by compiling it from source instead of using a pre-built binary package (bottle). This is useful for custom build flags or specific environment configurations.<br><br><b><b>--cask</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly treat the argument as a cask. This is often inferred by Homebrew but can be useful for clarity or when ambiguity exists between a formula and a cask with the same name.<br><br><b><b>--force-bottle</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Install from a bottle (pre-built binary) if possible, even if the formula was previously installed from source or if a bottle might otherwise be skipped due to certain conditions.<br><br><b><b>--ignore-dependencies</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not install or reinstall any dependencies required by the specified formula or cask. Use with caution, as it can lead to broken functionality if required dependencies are missing or outdated.<br><br><b><b>--skip-post-install</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skip the post-install steps for the formula or cask, which might include linking, setting up services, or running specific configuration scripts.<br><br><b><b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display debug logs, providing more detailed output that can be helpful for troubleshooting issues during the reinstall process itself.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Make the output more verbose, showing additional information about the steps Homebrew is taking during the reinstall operation.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show what would be reinstalled without actually performing the reinstall. This is useful for planning or checking dependencies before making changes.<br><br><b><b>--overwrite</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overwrite existing files during the linking phase (e.g., in /usr/local/bin) instead of refusing to link. This is an advanced option and may cause breakage if not used carefully.<br><br>


title: DESCRIPTION
content:
The <b>brew reinstall</b> command in Homebrew, the package manager for macOS and Linux, allows users to uninstall and then immediately reinstall specified formulas or casks. This is a crucial utility for troubleshooting issues like corrupted installations, linking problems, or when an installed package is not functioning as expected. Unlike <b>brew install</b>, which skips installation if a package is already present, <b>reinstall</b> explicitly removes and then adds the software again, ensuring a fresh installation of the current version. It's often used when an upgrade isn't sufficient, to revert to a clean state, or to apply changes that require a complete reinstallation.


title: CAVEATS
content:
This command relies on Homebrew being installed and configured correctly on macOS or Linux. Reinstalling a formula from source can be time-consuming and resource-intensive, especially for large packages. While generally safe, using options like <b>--ignore-dependencies</b> or <b>--overwrite</b> without a clear understanding of their implications can lead to broken installations or system instability. <b>brew reinstall</b> primarily refreshes the package itself and may not resolve issues stemming from external system configurations, permissions, or conflicts with non-Homebrew managed software.


title: WHEN TO USE <B>BREW REINSTALL</B>
content:
Use this command when a package's installation appears corrupted, its symlinks are broken, or if you suspect an issue with its files. It's also useful after manually tampering with installed files, or if a package isn't behaving as expected after an update or system change. Unlike <b>brew install</b>, it guarantees a fresh copy even if the package is already present.


title: HOW IT WORKS
content:
Essentially, <b>brew reinstall</b> performs a sequence of operations: first, it executes a <b>brew uninstall</b> for the specified formula or cask, removing its existing files and links. Immediately after, it performs a <b>brew install</b>, ensuring that all necessary dependencies are met and a new, clean installation of the package is performed. This process ensures a fresh state, resolving many common installation-related problems.


title: HISTORY
content:
Homebrew, created by Max Howell in 2009, rapidly evolved into the primary package manager for macOS, and later expanded its support to Linux (as Linuxbrew, now integrated). The <b>reinstall</b> command has been a fundamental component of Homebrew's utility suite since its early development, providing users with a robust and straightforward method to manage, repair, and refresh their software installations. Its design reflects Homebrew's core philosophy of providing simple, powerful command-line tools for package management.


title: TLDR
content:
<b>Reinstall a formula/cask</b>`brew reinstall [formula|cask]`<br><b>Reinstall a formula/cask and show verification and post-install steps</b>`brew reinstall [[-v|--verbose]] [formula|cask]`<br><b>Make some output more quiet</b>`brew reinstall [[-q|--quiet]] [formula|cask]`<br><b>Display help</b>`brew reinstall [[-h|--help]]`


title: TLDR
content:
<b>Display account information</b>`cli4 [/user]`<br><b>List all zones</b>`cli4 [/zones]`<br><b>List DNS records for a specific zone</b>`cli4 [/zones/:example.com/dns_records]`<br><b>Create a new DNS record</b>`cli4 --post [name=example.com] [type=A] [content=192.0.2.1] [/zones/:example.com/dns_records]`<br><b>Update an existing DNS record</b>`cli4 --put [name=sub.example.com] [type=A] [content=192.0.2.2] [/zones/:example.com/dns_records/:record_id]`<br><b>Delete a DNS record</b>`cli4 --delete [/zones/:example.com/dns_records/:record_id]`<br><b>Purge all cache for a zone</b>`cli4 --post [purge_everything=true] [/zones/:example.com/purge_cache]`


title: SYNOPSIS
content:
conda env export [-h] [--no-builds] [--override-channels] [-c CHANNEL] [--from-history] [-n ENVIRONMENT | -p PATH] [-f FILE]


title: PARAMETERS
content:
<b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show the help message and exit.<br><br><b><b>--no-builds</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove build specifications from the exported dependencies. This makes the environment file more platform-agnostic but potentially less reproducible if specific build versions are critical.<br><br><b><b>--override-channels</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include explicit channel URLs that override the default channels. These will be prepended to the environment definition, ensuring packages are sought from specified sources first.<br><br><b><b>-c</b> <i>CHANNEL</i>, <b>--channel</b> <i>CHANNEL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an additional channel to include in the export. This option can be used multiple times to add several channels.<br><br><b><b>--from-history</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Export only the packages that were explicitly requested when the environment was initially created, rather than all currently installed packages. This results in a cleaner, often smaller environment file.<br><br><b><b>-n</b> <i>ENVIRONMENT</i>, <b>--name</b> <i>ENVIRONMENT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the Conda environment to export. If omitted, the currently active environment is used.<br><br><b><b>-p</b> <i>PATH</i>, <b>--prefix</b> <i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the full path to the Conda environment prefix to export. This is an alternative to specifying the environment by name.<br><br><b><b>-f</b> <i>FILE</i>, <b>--file</b> <i>FILE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the exported environment definition to the specified file. If this option is not provided, the output is written to standard output (stdout).<br><br>


title: DESCRIPTION
content:
The <i>conda env export</i> command is a crucial tool within the Conda ecosystem, designed to capture and share the exact configuration of a Conda environment. It generates a <i>YAML</i> file (typically named <i>environment.yml</i>) that lists all installed packages, their versions, and the channels from which they originated. This file serves as a blueprint, enabling users to precisely recreate the same environment on different machines or at a later time, ensuring project reproducibility. <br><br>This command is invaluable for collaboration, version control of environments, and deploying applications consistently across various systems. By default, it exports all packages present in the active or specified environment. However, options like <i>--from-history</i> allow for exporting only those packages explicitly requested during the environment's creation, leading to a more concise and potentially more portable environment definition. The generated <i>YAML</i> file can then be used with <i>conda env create -f environment.yml</i> or <i>conda env update -f environment.yml</i> to replicate the environment.


title: CAVEATS
content:
When exporting environments, be aware that without <i>--no-builds</i>, the generated <i>YAML</i> file will include platform-specific build strings, potentially hindering cross-platform reproducibility. Channel order is also crucial; the order in which channels are listed in the <i>YAML</i> file dictates the package resolution priority. Using <i>--from-history</i> is often preferred for sharing minimal, reproducible environments, but it might not capture all dependencies if additional packages were installed implicitly.


title: BEST PRACTICES FOR ENVIRONMENT SHARING
content:
For maximum portability and minimal file size, it's often recommended to use <i>conda env export --from-history --no-builds -f environment.yml</i>. This creates a more abstract definition that prioritizes package names and versions over specific build artifacts and transient dependencies, making it easier to recreate on different operating systems and architectures. Always include the generated <i>environment.yml</i> file in your project's version control system (e.g., Git) to track environment changes alongside your code.


title: HISTORY
content:
The <i>conda env export</i> command is part of the broader Conda project, which was developed by Continuum Analytics (now Anaconda, Inc.) to address the challenges of package, dependency, and environment management, particularly in scientific computing. As data science and machine learning workflows became more complex, ensuring reproducible computational environments became paramount. This led to the introduction and continuous refinement of `conda env` subcommands, with `export` being a cornerstone for defining and sharing these environments in a standardized, human-readable <i>YAML</i> format.


title: TLDR
content:
<b>Export the current environment details to stdout</b>`conda export`<br><b>Export the current environment details to a YAML file</b>`conda export [[-f|--file]] [path/to/environment.yaml]`<br><b>Export details in a specific format</b>`conda export --format [environment-json|environment-yaml|explicit|json|reqs|requirements|txt|yaml|yml]`<br><b>Target an environment by name</b>`conda export [[-n|--name]] [environment_name]`<br><b>Target an environment by its path</b>`conda export [[-p|--prefix]] [path/to/environment]`<br><b>Include a specific channel</b>`conda export [[-c|--channel]] [channel_name]`


title: PARAMETERS
content:
<b><i>SHELL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(required)</i> The type of shell to initialize Conda for (e.g., <i>bash</i>, <i>zsh</i>, <i>fish</i>, <i>powershell</i>).<br><br><b><b>-h, --help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message and exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows the program's version number and exits.<br><br><b><b>-d, --debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug messages for troubleshooting.<br><br><b><b>-q, --quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses progress indicators and non-essential output.<br><br><b><b>-v, --verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces more detailed output.<br><br><b><b>--no-prefix</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the setting of <i>CONDA_PREFIX</i> and other prefix-related variables.<br><br><b><b>--no-stack</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the ability to stack Conda environments (default is stacking enabled).<br><br><b><b>--stack</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly enables environment stacking (this is the default behavior).<br><br><b><b>--activate</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates the base Conda environment upon initialization (this is the default behavior).<br><br><b><b>--no-activate</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the automatic activation of the base environment.<br><br><b><b>--unset-vars</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unsets environment variables from previous Conda environment activations.<br><br><b><b>--no-unset-vars</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Retains environment variables from previous activations (this is the default behavior).<br><br>


title: DESCRIPTION
content:
The <i>conda-init</i> command is a specialized utility designed to prepare a shell environment for Conda usage in <b>non-interactive contexts</b>, such as scripts, CI/CD pipelines, Dockerfiles, or system services. Unlike <i>conda init</i>, which modifies your shell's startup files (like <i>.bashrc</i> or <i>.zshrc</i>) for persistent interactive use, <i>conda-init</i> generates and outputs the necessary shell code to initialize Conda for the <b>current shell session only</b>.<br><br>This ensures that Conda commands like <i>conda activate</i>, <i>conda install</i>, and <i>conda run</i> function correctly without permanently altering the shell configuration of the user or system. It achieves this by setting up the <i>PATH</i> variable and defining essential shell functions required for Conda's environment management capabilities. This makes it ideal for environments where a clean, reproducible, and non-persistent setup is crucial.


title: CAVEATS
content:
1. <b>Non-Persistent</b>: <i>conda-init</i> only initializes Conda for the <i>current shell session</i>. Its effects are not persistent across new shell instances.<br>2. <b>Non-Interactive Use</b>: Primarily designed for use in scripts, Dockerfiles, or CI/CD pipelines where user interaction is not expected.<br>3. <b>Requires Sourcing/Eval</b>: The output of <i>conda-init</i> must be sourced (e.g., <i>eval "$(conda-init bash)"</i>) into the current shell to take effect.<br>4. <b>CONDA_EXE or CONDA_ROOT</b>: For proper operation, either the <i>conda</i> executable must be in the system <i>PATH</i>, or the <i>CONDA_EXE</i> or <i>CONDA_ROOT</i> environment variables must be correctly set before running <i>conda-init</i>.


title: USAGE EXAMPLE:
content:
To initialize Conda in a <i>bash</i> script, you would typically use <i>eval</i> to execute the output of <i>conda-init</i>:<br><code><i>eval "$(conda-init bash)"</i></code><br>After this, you can safely use commands like <i>conda activate myenv</i>, <i>conda install</i>, etc., within the same script.


title: ENVIRONMENT VARIABLES:
content:
<i>conda-init</i> relies on the <i>PATH</i> variable to find the <i>conda</i> executable. If <i>conda</i> is not in <i>PATH</i>, you might need to set <i>CONDA_EXE</i> to the full path of your <i>conda</i> executable or <i>CONDA_ROOT</i> to the root of your Conda installation before running <i>conda-init</i>.<br>Example:<br><code><i>export CONDA_EXE="/path/to/miniconda3/bin/conda"</i></code><br><code><i>eval "$(conda-init bash)"</i></code>


title: HISTORY
content:
The <i>conda-init</i> command emerged as a crucial component within the Conda ecosystem to address the growing need for robust and reliable Conda usage in automated and non-interactive environments. Prior to its introduction, users often resorted to manual sourcing of internal Conda scripts (like <i>_conda_activate_setup.sh</i>) or complex workarounds to make Conda function correctly outside of interactive login shells. This was often brittle and subject to changes in Conda's internal structure. <i>conda-init</i> standardizes this process, providing a stable, officially supported interface for integrating Conda into scripts, Docker images, and CI/CD systems, significantly improving the developer experience for automation and reproducibility.


title: SEE ALSO
content:
<i>conda(1)</i>: The main Conda command-line interface for package, environment, and channel management., <i>source(1)</i> or <i>.(1)</i>: Shell built-ins used to execute commands from a file in the current shell context, essential for applying <i>conda-init</i> output., <i>bash(1)</i>, <i>zsh(1)</i>, <i>fish(1)</i>: Common shells that <i>conda-init</i> supports for initialization.


title: TLDR
content:
<b>Initialize a specific shell (if none is specified, defaults to bash for UNIX and powershell for Windows)</b>`conda init [zsh|bash|powershell|fish|tcsh|xonsh]`<br><b>Initialize all available shells</b>`conda init --all`<br><b>Initialize conda for all users on the system</b>`conda init --system`<br><b>Don't initialize conda for the current user</b>`conda init --no-user`<br><b>Add condabin/ directory to PATH</b>`conda init --condabin`<br><b>Undo effects of the last conda init</b>`conda init --reverse`


title: TLDR
content:
<b>Show notices for the default channel and all .condarc channels</b>`conda notices`<br><b>Include a specific channel</b>`conda notices [[-c|--channel]] [channel_name]`<br><b>Ignore default and .condarc channels</b>`conda notices [[-c|--channel]] [channel_name] --override-channels`


title: PARAMETERS
content:
<b><i>package_name_regex</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>A package name or regular expression to search for. If omitted, lists all packages from configured channels.</i><br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Show this help message and exit.</i><br><br><b><b>-c</b> <i>CHANNEL</i>, <b>--channel</b> <i>CHANNEL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Specify additional channels to search for packages. Can be used multiple times to add multiple channels.</i><br><br><b><b>--override-channels</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Do not use channels configured in <b>.condarc</b>. Use only channels provided with <b>-c</b>.</i><br><br><b><b>--platform</b> <i>PLATFORM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Limit search to a specific platform (e.g., <b>linux-64</b>, <b>osx-64</b>, <b>win-64</b>).</i><br><br><b><b>--info</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Show all information about a package, not just name and version. Includes license, dependencies, and file details.</i><br><br><b><b>--full-name</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Only search for exact package names, not partial matches.</i><br><br><b><b>--offline</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Do not connect to the Internet. Only use packages found in the local cache.</i><br><br><b><b>--json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Report all output as JSON. Suitable for programmatic use and parsing in scripts.</i><br><br><b><b>--reverse</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Reverse the sort order of the results, typically showing older versions first.</i><br><br><b><b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>List all packages in configured channels, even if they conflict with an existing environment or are not directly installable.</i><br><br>


title: DESCRIPTION
content:
<i><b>conda-search</b> is a fundamental command within the Conda package manager, designed to efficiently discover available packages across various Conda channels. It enables users to search for software by package name, partial name, or specific version, querying both remote repositories and local caches. This command is indispensable for identifying software before installation, verifying package availability, and understanding different versions or builds available from configured channels. Its output typically includes the package name, version, build string, originating channel, and target platform, providing comprehensive details to aid package selection. It supports filtering by platform and channel, and can output results in a machine-readable JSON format for scripting purposes.</i>


title: CAVEATS
content:
<i><br>•   Searches can be slow if querying many remote channels without a warm local cache, as Conda needs to download repodata.<br>•   The default output can be verbose; for scripting or precise filtering, use <b>--json</b> or pipe the output to tools like <b>grep</b>.<br>•   Using <b>--offline</b> will only show packages that have previously been downloaded or indexed locally, not necessarily all available versions.<br>•   Channel order and priority rules, configured in <b>.condarc</b> or specified via <b>-c</b>, significantly affect which package versions are found and listed.</i>


title: <I>UNDERSTANDING CHANNELS</I>
content:
<i>Conda searches packages in a predefined list of channels (repositories). These are configured in the <b>.condarc</b> file or specified directly via the <b>-c</b> option. The order of channels can significantly impact which version of a package is found and ultimately installed, due to Conda's channel priority rules. Higher priority channels are checked first, and their packages can override those from lower priority channels.</i>


title: <I>OUTPUT INTERPRETATION</I>
content:
<i>The default output of <b>conda-search</b> typically shows the package name, all available versions, a unique build string (e.g., <b>py38_0</b>, <b>cuda112h2138a4d_0</b>), and the channel it originates from. The build string often encodes important metadata, such as dependencies (like Python or CUDA version), specific compilation flags, or the compiler versions used to build the package, which helps in selecting the correct variant.</i>


title: HISTORY
content:
<i>Conda, including its essential <b>search</b> capability, was developed by Continuum Analytics (now Anaconda, Inc.) and first released in 2012. It emerged as a powerful, cross-platform package and environment management system, initially focused on scientific computing with Python but quickly expanding to support packages from any language. <b>conda-search</b> has been a core component since its inception, critical for enabling users to discover and leverage the vast ecosystem of available software across diverse channels.</i>


title: TLDR
content:
<b>Search for a specific package</b>`conda search [package_name]`<br><b>Search for a package along with its details</b>`conda search [package_name] [[-i|--info]]`<br><b>Search for packages containing string in the package name</b>`conda search "*string*"`<br><b>Search for specific version of the package</b>`conda search "[package_name]>=[package_version]"`<br><b>Search a package within a specific channel</b>`conda search [channel]::[package_name]`<br><b>Search if package is installed in any local environments</b>`conda search --envs [package_name]`


title: TLDR
content:
<b>Start a local confettysh server</b>`confettysh`<br><b>Run the server on a custom port</b>`confettysh [[-p|--port]] [2323]`<br><b>Connect to the local server and show fireworks</b>`ssh [[-p|--port]] [2222] localhost -t fireworks`


title: SYNOPSIS
content:
<b>docker-compose</b> [OPTIONS] <b>down</b> [DOWN_OPTIONS]<br>Example:<br><b>docker-compose -f production.yml -p myapp down --rmi all -v --remove-orphans</b>


title: PARAMETERS
content:
<b>-f <file>..., --file <file>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify one or more Compose files to use. If multiple files are specified, Compose combines them into a single configuration.<br><br><b>-p <project-name>, --project-name <name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternate project name. Defaults to the current directory name.<br><br><b>--rmi <type></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove images. <type> can be 'all' to remove all images used by any service, or 'local' to remove only images that don't have a custom tag applied (i.e., local images created by 'docker-compose build').<br><br><b>-v, --volumes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove named volumes declared in the 'volumes' section of the Compose file and anonymous volumes attached to containers. By default, only anonymous volumes are removed; this option ensures named volumes are also removed.<br><br><b>--remove-orphans</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove containers for services that are not defined in the Compose file but were previously part of the project (e.g., from a previous 'up' command with a different service set).<br><br><b>-t <timeout>, --timeout <timeout></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a shutdown timeout in seconds. Compose will wait for this duration for containers to stop before killing them. Default is 10 seconds.<br><br>


title: DESCRIPTION
content:
<i>docker-compose down</i> is a crucial command for cleaning up a Docker Compose application environment. It gracefully stops running containers, then removes the containers themselves, along with any networks created by <i>docker-compose up</i>. By default, it also removes anonymous volumes attached to containers. This command is the inverse of <i>docker-compose up</i>, ensuring that resources allocated for a specific Docker Compose project are properly de-provisioned and freed. It's essential for developers to use <i>down</i> after they are done working with an application or when they need to rebuild the environment from scratch, preventing resource accumulation and potential conflicts. Additional options allow for more aggressive cleanup, such as removing named volumes, images, or orphaned containers not explicitly defined in the Compose file.


title: CAVEATS
content:
<ul><li>Using <b>--volumes</b> will delete data stored in named volumes, which is often persistent. Always ensure data is backed up or no longer needed before using this option.</li><li><b>--rmi all</b> can remove images that might be shared by other projects or applications. Use with caution.</li><li><b>docker-compose down</b> operates within the context of the current project (defined by the directory name or <b>--project-name</b>). It will not affect containers or resources from other Docker Compose projects.</li><li><b>down</b> does not remove external networks or volumes that were pre-existing and merely referenced in the Compose file. It only removes those created by <b>docker-compose up</b>.</li></ul>


title: DIFFERENCE FROM DOCKER-COMPOSE STOP
content:
While <i>docker-compose stop</i> only stops the running containers, leaving them in an exited state (and preserving their data in volumes), <i>docker-compose down</i> goes a step further. It stops the containers and then removes them entirely, along with any associated networks and, optionally, volumes and images. <i>down</i> is for full cleanup, while <i>stop</i> is for pausing a running application.


title: GRACEFUL SHUTDOWN
content:
When <i>docker-compose down</i> is executed, it first sends a <i>SIGTERM</i> signal to the running containers, allowing them to perform a graceful shutdown within the specified timeout. If the containers do not stop within the timeout, a <i>SIGKILL</i> signal is sent to force termination.


title: HISTORY
content:
The <b>down</b> command has been a fundamental part of Docker Compose since its inception (originally as <i>fig</i>). It provides a streamlined way to dismantle multi-container applications, evolving with the <b>docker-compose</b> CLI (version 1) which was a Python-based tool. Its functionality remains core to the new Docker Compose V2, now integrated as a Docker CLI plugin (<i>docker compose</i>), emphasizing its importance in the development lifecycle for managing ephemeral environments.


title: TLDR
content:
<b>Stop and remove all containers and networks</b>`docker compose down`<br><b>Stop and remove containers, networks, and all images used by services</b>`docker compose down --rmi all`<br><b>Stop and remove containers, networks, and only images without a custom tag</b>`docker compose down --rmi local`<br><b>Stop and remove containers, networks, and all volumes</b>`docker compose down [[-v|--volumes]]`<br><b>Stop and remove everything including orphaned containers</b>`docker compose down --remove-orphans`<br><b>Stop and remove containers using an alternate compose file</b>`docker compose [[-f|--file]] [path/to/config] down`<br><b>Stop and remove containers with a custom timeout in seconds</b>`docker compose down [[-t|--timeout]] [timeout]`<br><b>Remove containers for services not defined in the Compose file</b>`docker compose down --remove-orphans [[-v|--volumes]]`


title: PARAMETERS
content:
<b><b>--no-color</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces monochrome output, disabling color coding for service names.<br><br><b><b>-f</b>, <b>--follow</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Follows log output in real-time. This keeps the terminal open and continuously displays new log entries as they are generated by the services.<br><br><b><b>-t</b>, <b>--timestamps</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays timestamps for each log entry, showing when the log message was generated.<br><br><b><b>--tail</b>=<i>NUM</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the number of lines to show from the end of the logs. Defaults to "all" if not specified, showing the entire log history. A value of 0 will show only new logs when used with <b>--follow</b>.<br><br><b><b>--since</b>=<i>TIME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows logs generated since a specified timestamp (e.g., <i>2023-01-02T13:23:37Z</i>) or a relative duration (e.g., <i>42m</i> for 42 minutes, <i>2h</i> for 2 hours, <i>1d</i> for 1 day).<br><br><b><b>--until</b>=<i>TIME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows logs generated up to a specified timestamp (e.g., <i>2023-01-02T13:23:37Z</i>) or a relative duration (e.g., <i>42m</i> for 42 minutes before now).<br><br>


title: DESCRIPTION
content:
The <b>docker-compose logs</b> command is a crucial tool for debugging and monitoring multi-container applications managed by Docker Compose.<br><br>It allows users to stream the consolidated standard output and standard error (stdout and stderr) logs from one or more services defined in a <b>docker-compose.yml</b> file. By default, it displays logs from all services in the project, but you can specify individual services to narrow down the output.<br><br>This command aggregates logs, making it easier to see the interplay between different parts of your application. It supports options to follow logs in real-time (similar to <b>tail -f</b>), display timestamps, show a specific number of trailing lines, or filter logs by a time range. Unlike <b>docker logs</b> which targets individual containers, <b>docker-compose logs</b> operates at the service level, automatically gathering logs from all containers associated with a given service.<br><br>It's an indispensable command for understanding application behavior, diagnosing issues, and observing real-time system activity in a Docker Compose environment.


title: CAVEATS
content:
<ul><li>The command relies on the Docker daemon's log driver configuration. If a service's container is configured with the 'none' log driver, <b>docker-compose logs</b> will not be able to retrieve its output.</li><li>By default, <b>docker-compose logs</b> looks for a <b>docker-compose.yml</b> file in the current directory. If your configuration file is elsewhere or has a different name, you'll need to specify it using the <b>-f</b> option for <b>docker-compose</b> itself (e.g., <i>docker-compose -f my-app.yml logs</i>).</li><li>When following logs (<b>-f</b>) from many services or services with high log volume, output can be overwhelming. External tools like <b>grep</b> or <b>less</b> can be piped to filter or navigate the output effectively.</li><li>The `docker-compose` CLI (often a Python application) is gradually being replaced by `docker compose` (a Docker CLI plugin). While their `logs` command functionality is largely similar, users should be aware of which version they are using.</li></ul>


title: LOG DRIVERS
content:
Docker Compose logs are retrieved from the Docker daemon's configured log driver for each container. The default driver, <b>json-file</b>, is suitable for `docker-compose logs`. Other drivers like <b>syslog</b>, <b>gelf</b>, or <b>awslogs</b> might direct logs externally, meaning `docker-compose logs` might only show a subset or no logs, depending on the driver's configuration and whether it copies logs to stdout/stderr or only sends them to an external endpoint.


title: FILTERING AND PAGING OUTPUT
content:
For extensive log output, it's common practice to pipe the output of <b>docker-compose logs</b> to other Linux utilities:<br><ul><li><b>Paging:</b> `docker-compose logs | less` allows you to scroll through logs.</li><li><b>Filtering:</b> `docker-compose logs | grep "error"` helps in finding specific patterns or messages.</li><li><b>Combining:</b> `docker-compose logs -f | grep "service_name"` can follow logs and filter in real-time for messages from a specific service (even if not directly specified in the command arguments).</li></ul>


title: COLOR CODING
content:
By default, <b>docker-compose logs</b> color-codes the output based on the service name, making it easier to distinguish between logs from different services in a combined stream. The <b>--no-color</b> option disables this behavior.


title: HISTORY
content:
The <b>docker-compose logs</b> command has been a core feature of Docker Compose since its inception. Docker Compose itself originated as 'Fig', a tool developed to simplify multi-container Docker application definitions. After being acquired by Docker, Inc., Fig was rebranded as Docker Compose. The `logs` functionality has always been pivotal for developers and operators to gain insights into their multi-service applications, allowing for quick debugging and monitoring of the orchestrated containers. Its consistent behavior across various versions of Docker Compose highlights its fundamental role in the Docker ecosystem.


title: SEE ALSO
content:
docker(1), docker-compose(1), docker-compose up(1), docker-compose ps(1), docker logs(1), tail(1), grep(1)


title: TLDR
content:
<b>View logs for all services</b>`docker compose logs`<br><b>View logs for a specific service</b>`docker compose logs [service_name]`<br><b>View logs and follow new output (like tail --follow)</b>`docker compose logs [[-f|--follow]]`<br><b>View logs with timestamps</b>`docker compose logs [[-t|--timestamps]]`<br><b>View only the last n lines of logs for each container</b>`docker compose logs [[-n|--tail]] [n]`<br><b>View logs from a specific time onwards</b>`docker compose logs --since [timestamp]`<br><b>View logs until a specific time</b>`docker compose logs --until [timestamp]`<br><b>View logs for multiple specific services</b>`docker compose logs [service1 service2 ...]`


title: SYNOPSIS
content:
<b>docker-compose</b> [<i>GLOBAL_OPTIONS</i>] <b>up</b> [<i>COMMAND_OPTIONS</i>] [<i>SERVICE...</i>]


title: PARAMETERS
content:
<b>-f, --file <FILE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify one or more Compose files to use. Can be specified multiple times for multiple files.<br><br><b>-p, --project-name <NAME></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternate project name (default is the directory name).<br><br><b>--env-file <FILE></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternate environment file.<br><br><b>-d, --detach</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Detached mode: Run containers in the background.<br><br><b>--no-deps</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't start linked services (dependencies).<br><br><b>--always-recreate-deps</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recreate dependent containers, even if they're not explicitly specified.<br><br><b>--build</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Build images before starting containers. Useful for applying local changes.<br><br><b>--no-build</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't build images, even if they are missing or outdated.<br><br><b>--no-start</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't start the services after creating them. Useful for just creating resources.<br><br><b>--force-recreate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recreate containers even if their configuration hasn't changed. Implies <i>--renew-anon-volumes</i>.<br><br><b>--no-recreate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't recreate containers if they already exist, just start them.<br><br><b>--remove-orphans</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove containers for services not defined in the Compose file.<br><br><b>--abort-on-container-exit</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stop all containers if any container exits.<br><br><b>-V, --renew-anon-volumes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recreate anonymous volumes instead of retrieving data from the previous containers.<br><br><b>--scale <SERVICE>=<NUM></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Scale a specific SERVICE to NUM instances. Overrides the `scale` setting in the Compose file.<br><br><b>-t, --timeout <TIMEOUT></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a shutdown timeout in seconds (default: 10) for stopping containers.<br><br><b>--no-attach</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Don't attach to stdout/stderr of services. Useful in combination with <i>-d</i>.<br><br>


title: DESCRIPTION
content:
<i>docker-compose up</i> is a fundamental command for managing multi-container Docker applications defined in a <i>docker-compose.yml</i> file. It builds, creates, (re)creates, attaches to, and starts all services within your application stack. <br><br>When executed, it first reads the service definitions. If `build` instructions are present, it constructs the necessary Docker images; otherwise, it pulls specified images from a registry. Next, it creates or recreates containers for the defined services, ensuring their configurations are up-to-date. `docker-compose up` then establishes a default network, allowing services to communicate seamlessly using their service names. <br><br>By default, the command attaches to the output of all services, streaming their logs directly to your terminal, which is ideal for development and debugging. For background execution, the <i>-d</i> (detached) flag can be used. This command significantly simplifies the deployment and management of complex application environments, enabling developers to bring an entire application up with a single, concise command.


title: CAVEATS
content:
<b>Resource Consumption</b>: Running many services, especially with builds, can consume significant CPU, memory, and disk resources.<br><b>Debugging Detached Containers</b>: Logs for containers running in detached mode (`<i>-d</i>`) are not immediately visible, requiring `<i>docker-compose logs</i>` for inspection.<br><b>Data Persistence</b>: Anonymous volumes are recreated by default when containers are recreated, leading to data loss. Named volumes are generally preferred for persistent data.<br><b>Networking Complexity</b>: While Compose simplifies networking, understanding how services communicate and expose ports is crucial for troubleshooting.<br><b>Version Compatibility</b>: Ensure your `<i>docker-compose.yml</i>` version matches your Docker Compose CLI version for optimal compatibility.


title: THE <I>DOCKER-COMPOSE.YML</I> FILE
content:
The <i>docker-compose.yml</i> file is the heart of `<i>docker-compose up</i>`. This YAML configuration defines your application's services, networks, and volumes. Each service entry specifies crucial details like the Docker image or `<i>build</i>` context, port mappings, mounted volumes, environment variables, and inter-service dependencies. A thorough understanding of this file's structure and options is critical for effectively deploying and managing your application with Docker Compose.


title: TYPICAL WORKFLOW
content:
A common workflow involves creating a `<i>docker-compose.yml</i>` and then executing `<i>docker-compose up -d --build</i>` to deploy your application in the background, ensuring images are freshly built. For iterative development, `<i>docker-compose up --build</i>` can refresh services without full teardown. Upon completion, `<i>docker-compose down</i>` efficiently removes all created resources, including containers, networks, and volumes, leaving a clean environment.


title: HISTORY
content:
<i>Docker Compose</i> evolved from a tool called <i>Fig</i>, developed by Orchard Laboratories. Docker acquired Orchard Labs in 2014, subsequently rebranding Fig as <i>Docker Compose</i>. Its core purpose was to simplify the management of multi-service applications by consolidating their definitions into a single YAML file, providing an easier alternative to orchestrating multiple `<i>docker run</i>` commands. Since its inception, <i>Docker Compose</i> has become an essential tool in the Docker ecosystem, continuously evolving to meet the demands of modern microservices architectures.


title: SEE ALSO
content:
docker(1), docker-compose(1), docker-compose build, docker-compose start, docker-compose stop, docker-compose down, docker-compose logs


title: TLDR
content:
<b>Start all services defined in the docker-compose file</b>`docker compose up`<br><b>Start services in the background (detached mode)</b>`docker compose up [[-d|--detach]]`<br><b>Start services and rebuild images before starting</b>`docker compose up --build`<br><b>Start specific services only</b>`docker compose up [service1 service2 ...]`<br><b>Start services with custom compose file</b>`docker compose [[-f|--file]] [path/to/config] up`<br><b>Start services and remove orphaned containers</b>`docker compose up --remove-orphans`<br><b>Start services with scaled instances</b>`docker compose up --scale [service]=[count]`<br><b>Start services and show logs with timestamps</b>`docker compose up --timestamps`


title: TLDR
content:
<b>Preprocess a specific file</b>`ecpg [input.pgc]`<br><b>Preprocess from stdin and output to stdout</b>`ecpg -o - -`<br><b>Preprocess from stdin and write to a file</b>`cat input.pgc | ecpg -o output.c -`<br><b>Preprocess and specify an output file</b>`ecpg -o [output.c] [input.pgc]`<br><b>Preprocess a header file (.pgh extension)</b>`ecpg [input.pgh]`<br><b>Preprocess in a specific compatibility mode</b>`ecpg -C [INFORMIX|INFORMIX_SE|ORACLE] [input.pgc]`<br><b>Preprocess with autocommit enabled</b>`ecpg -t [input.pgc]`


title: TLDR
content:
<b>Remove a file from all commits</b>`git filter-branch --tree-filter 'rm [[-f|--force]] [file]' HEAD`<br><b>Update author email</b>`git filter-branch --env-filter 'GIT_AUTHOR_EMAIL=[new_email]' HEAD`<br><b>Delete a folder from history</b>`git filter-branch --tree-filter 'rm [[-rf|--recursive --force]] [folder]' HEAD`


title: SYNOPSIS
content:
<b>git lfs transfer</b> <i>&lt;direction&gt;</i> [<i>&lt;options&gt;</i>]<br><br><i>&lt;direction&gt;</i> can be 'download' or 'upload'.


title: PARAMETERS
content:
<b><i>&lt;direction&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the direction of the transfer. Can be <b>download</b> to retrieve LFS objects or <b>upload</b> to send LFS objects to the server. This is a positional argument.<br><br><b>--concurrency=&lt;n&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of parallel transfers to run simultaneously. Defaults to a configured value (e.g., 3), optimizing for network and server load.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a 'dry run' of the transfer, showing which objects would be processed without actually moving any data. Useful for previewing operations.<br><br><b>--epoch-time</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses Unix epoch time for timestamps in transfer logs, which can be useful for consistent logging and parsing across different systems.<br><br><b>--force-download</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the download of LFS objects, even if they appear to exist locally. This can be useful for repairing corrupted local objects or ensuring a fresh copy.<br><br><b>--force-url=&lt;url&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Overrides the configured Git LFS URL for the current transfer operation, allowing a specific server to be targeted instead of the default.<br><br><b>--hash-algo=&lt;algo&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the hash algorithm used for identifying LFS objects. Defaults to <b>sha256</b>, which is the standard for Git LFS.<br><br><b>--log-upload-only</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restricts transfer logs to only include information about upload attempts, making it easier to debug issues specifically related to pushing LFS objects.<br><br><b>--object-id=&lt;oid&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Transfers only the LFS object identified by the given Object ID (OID), rather than a set of objects determined by the repository state. For advanced use cases.<br><br><b>--remote=&lt;remote&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the Git remote name (e.g., <b>origin</b>) to use for determining the LFS server configuration. If not specified, the default remote is used.<br><br><b>--transfer-adapter=&lt;name&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows specifying a custom transfer adapter by name. Defaults to the <b>basic</b> HTTP adapter, but others can be configured for different protocols or optimizations.<br><br><b>--upload-only</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the transfer operation to only consider objects that need to be uploaded, ignoring any objects that might need downloading during a bidirectional sync.<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output during the transfer process, providing more detailed information about progress, errors, and internal workings.<br><br>


title: DESCRIPTION
content:
The <b>git-lfs-transfer</b> command is an internal component of Git LFS, primarily used by Git LFS clients and servers to manage the upload and download of large files (LFS objects). It facilitates the communication between a Git LFS client and a Git LFS server, typically over HTTP, to move the actual file content outside of the core Git repository. Users generally do not invoke this command directly; instead, it is automatically called by higher-level Git LFS commands like <b>git lfs push</b> or <b>git lfs pull</b> to perform the necessary data transfers. Its role is to handle the low-level details of object identification, request generation, and data streaming.


title: CAVEATS
content:
<b>git-lfs-transfer</b> is an internal command of Git LFS. It is generally not intended for direct user invocation. Misusing this command directly can lead to unexpected behavior, incomplete transfers, or corrupted Git LFS state. It is best left to be called automatically by higher-level Git LFS commands like <b>git lfs pull</b> or <b>git lfs push</b>, which handle the context and object selection correctly.


title: INTERNAL USAGE
content:
This command acts as the low-level workhorse for Git LFS operations that involve moving large file data. When you run <b>git lfs push</b> or <b>git lfs pull</b>, the Git LFS client constructs appropriate <b>git-lfs-transfer</b> commands with specific directions and options to perform the actual data exchange with the configured LFS server, often using standard HTTP/HTTPS protocols.


title: TRANSFER ADAPTERS
content:
While the default transfer adapter uses basic HTTP, Git LFS supports custom transfer adapters. These adapters can be configured to use different protocols or mechanisms for file transfer, allowing for integration with various storage backends (e.g., S3, Google Cloud Storage) or optimized transfer methods. The <b>--transfer-adapter</b> option allows specifying which adapter to use for a particular operation, providing flexibility in how LFS objects are stored and retrieved.


title: OBJECT IDENTIFICATION
content:
Git LFS identifies large files by their content hash, not by their filename. This content hash (OID, Object ID) is typically a SHA-256 sum of the file's content. The <b>git-lfs-transfer</b> command uses these OIDs to request and upload the correct file data, ensuring integrity and de-duplication across the LFS server.


title: HISTORY
content:
Git LFS (Large File Storage) was developed by GitHub to address the challenge of managing large binary files within Git repositories, which are traditionally optimized for small text files. The <b>git-lfs-transfer</b> command is a foundational component of this system, designed to efficiently move large file content between local repositories and remote LFS servers. Its development is intertwined with the evolution of Git LFS itself, continuously refined to improve performance, reliability, and security of large file transfers through various iterations of the Git LFS specification.


title: TLDR
content:
<b>Upload large files tracked by Git LFS to a repository</b>`git-lfs-transfer [path/to/repo.git] upload`<br><b>Download large files tracked by Git LFS from a repository</b>`git-lfs-transfer [path/to/repo.git] download`


title: TLDR
content:
<b>Merge all files needing resolution using the standard helper</b>`git merge-index git-merge-one-file -a`<br><b>Merge a specific file</b>`git merge-index git-merge-one-file -- [path/to/file]`<br><b>Merge multiple files, continuing on failures</b>`git merge-index -o git-merge-one-file -- [path/to/file1 path/to/file2 ...]`<br><b>Quietly merge all files with a custom program</b>`git merge-index -q [merge-program] -a`<br><b>Inspect merge inputs for a file using cat</b>`git merge-index cat -- [path]`


title: TLDR
content:
<b>Resolve a simple merge conflict for a file</b>`git merge-one-file [path/to/file]`<br><b>Use as a helper in merge-index for a file</b>`git merge-index git-merge-one-file [path/to/file]`<br><b>Handle a binary file merge</b>`git merge-one-file -p [path/to/file]`<br><b>Apply after read-tree in a scripted merge</b>`git read-tree -m [branch1] [branch2] && git merge-index git-merge-one-file [path/to/file]`


title: TLDR
content:
<b>Show the result of a merge between two branches</b>`git merge-tree [branch1] [branch2]`<br><b>Perform a merge and write the resulting tree</b>`git merge-tree --write-tree [branch1] [branch2]`


title: TLDR
content:
<b>Clone a Perforce depot into a new Git repository</b>`git p4 clone [path/to/p4_depot]`<br><b>Sync changes from Perforce into the current Git repository</b>`git p4 sync [path/to/p4_depot]`<br><b>Rebase local commits on top of the latest Perforce changes</b>`git p4 rebase`<br><b>Submit Git changes back to Perforce</b>`git p4 submit`<br><b>Clone the full Perforce history instead of only the latest changelist</b>`git p4 clone [path/to/p4_depot]@all`


title: TLDR
content:
<b>Enable rerere globally</b>`git config --global rerere.enabled true`<br><b>Forget a file's recorded resolution</b>`git rerere forget [path/to/file]`<br><b>Check the status of recorded resolutions</b>`git rerere status`


title: PARAMETERS
content:
<b><b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If specified, <i>kubectl cluster-info</i> will print addresses for all relevant services, not just the master and default DNS service.<br><br><b><b>--context</b>=<I>name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the kubeconfig context to use for the command, overriding the current context.<br><br><b><b>--kubeconfig</b>=<I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides an explicit path to the kubeconfig file, useful when not using the default location (~/.kube/config).<br><br><b><b>-o</b>, <b>--output</b>=<I>format</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the output format. Common formats include <i>json</i>, <i>yaml</i>, <i>wide</i>, <i>go-template</i>, etc., allowing for structured data retrieval.<br><br><b><b>--field-selector</b>=<I>selector</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A selector (field query) to filter resources. Supports '=', '==', and '!=' operators (e.g., <i>--field-selector metadata.name=kube-dns</i>).<br><br><b><b>--label-selector</b>=<I>selector</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A selector (label query) to filter resources based on their labels. Supports '=', '==', and '!=' operators (e.g., <i>-l k8s-app=kube-dns</i>).<br><br><b><b>--field-selector-limit</b>=<I>number</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum number of items to retrieve when using field or label selectors. Defaults to 500.<br><br>


title: DESCRIPTION
content:
The <b>kubectl cluster-info</b> command is a fundamental utility for quickly retrieving connection details about your Kubernetes cluster. It provides a concise overview of the API server endpoint and often other critical cluster services like CoreDNS or Kube-DNS. This command is invaluable for a rapid health check, verifying connectivity to the cluster, and identifying the entry points for cluster management and service resolution.<br><br>When executed, <b>kubectl cluster-info</b> queries the Kubernetes API server and presents the network addresses where the master components and other labeled services are accessible. By default, it typically shows the Kubernetes control plane endpoint and the DNS service endpoint, crucial for any workloads running within the cluster to resolve internal and external services. Its straightforward output makes it an excellent first step in debugging cluster connectivity issues or simply confirming which cluster you are currently interacting with.


title: CAVEATS
content:
The command requires a properly configured <i>kubeconfig</i> file and network connectivity to the Kubernetes API server. The specific services displayed beyond the API server may vary based on your Kubernetes version and how your cluster is configured (e.g., CoreDNS vs. Kube-DNS). While it confirms endpoint accessibility, it does not perform a deep health check of the underlying services themselves.


title: DEFAULT OUTPUT
content:
Without any options, <b>kubectl cluster-info</b> typically displays the URL for the Kubernetes API server and the URL for the cluster's DNS service (e.g., CoreDNS or Kube-DNS). This provides a quick overview of the most critical endpoints for cluster operation.


title: VIEWING ALL SERVICES
content:
To see more services beyond the default API server and DNS, use the <b>--all</b> option:<br><i>kubectl cluster-info --all</i><br>This can reveal endpoints for other cluster components like monitoring or ingress controllers if they are exposed and discoverable via the API.


title: USING SELECTORS
content:
The <b>--field-selector</b> and <b>--label-selector</b> options allow for targeted queries. For example, to find a specific DNS service endpoint by label:<br><i>kubectl cluster-info --label-selector='k8s-app=kube-dns'</i><br>Or by field selector for a specific component's name:<br><i>kubectl cluster-info --field-selector='metadata.name=kube-scheduler' --all</i>


title: HISTORY
content:
The <b>kubectl</b> command-line tool, developed by Google, has been the primary interface for managing Kubernetes clusters since its inception. <b>kubectl cluster-info</b> is one of its foundational commands, designed to provide immediate insight into cluster connectivity. It has been a stable and core component, with minor enhancements over time, such as the introduction of selector options and various output formats, to improve its utility and integration with scripting.


title: TLDR
content:
<b>Show basic cluster information</b>`kubectl cluster-info`<br><b>Dump current cluster state to stdout (for debugging)</b>`kubectl cluster-info dump`<br><b>Dump cluster state to a directory</b>`kubectl cluster-info dump --output-directory [path/to/directory]`<br><b>Use a specific kubeconfig context</b>`kubectl cluster-info --context [context_name]`


title: SYNOPSIS
content:
<b>kubectl events</b> [-n <i>&lt;namespace&gt;</i> | --all-namespaces] [-w | --watch] [--for-object <i>&lt;kind&gt;/&lt;name&gt;</i>] [--field-selector <i>&lt;selector&gt;</i>] [--since <i>&lt;duration&gt;</i>] [--sort-by <i>&lt;field&gt;</i>] [-o <i>&lt;format&gt;</i>]


title: PARAMETERS
content:
<b><b>-n</b>, <b>--namespace</b> <i>&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters events to a specific Kubernetes namespace. If not specified, the current context's namespace is used.<br><br><b><b>-A</b>, <b>--all-namespaces</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays events from all namespaces in the cluster.<br><br><b><b>-w</b>, <b>--watch</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Continuously streams new events as they occur in real-time. This is analogous to <code>tail -f</code> for events.<br><br><b><b>--for-object</b> <i>&lt;kind&gt;/&lt;name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters events to only show those related to a specific Kubernetes object, e.g., <code>pod/my-app-pod</code> or <code>deployment/my-service</code>.<br><br><b><b>--field-selector</b> <i>&lt;selector&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters events based on their fields, using standard Kubernetes field selectors. Examples: <code>type=Warning</code>, <code>reason=FailedScheduling</code>, <code>involvedObject.kind=Pod</code>.<br><br><b><b>--since</b> <i>&lt;duration&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows events only since a relative duration ago (e.g., <code>1h</code> for 1 hour, <code>5m</code> for 5 minutes). This helps in focusing on recent activity.<br><br><b><b>--sort-by</b> <i>&lt;field&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sorts the displayed events by a specific field, such as <code>lastTimestamp</code>, <code>type</code>, or <code>reason</code>. Default sorting is usually by time.<br><br><b><b>-o</b>, <b>--output</b> <i>&lt;format&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the output format for events, such as <code>json</code>, <code>yaml</code>, <code>wide</code>, or <code>custom-columns</code>, for programmatic parsing or detailed views.<br><br>


title: DESCRIPTION
content:
<i>kubectl-events</i> is a popular Kubernetes <i>kubectl</i> plugin designed to provide a more powerful and user-friendly interface for viewing and streaming cluster events than the native <code>kubectl get events</code> command. It addresses common pain points by offering advanced filtering, real-time watching, and customizable output options. <br><br>Kubernetes events are crucial for understanding the state and behavior of your cluster, providing insights into resource creation, scheduling decisions, failures, and other important occurrences. <i>kubectl-events</i> simplifies the process of sifting through these events, making it an invaluable tool for cluster administrators, developers, and SREs for debugging, monitoring, and auditing.<br><br>While not a built-in <i>kubectl</i> command, it is widely adopted and often installed via plugin managers like <i>krew</i>. Its primary goal is to make event logs more accessible and actionable, enabling quick identification of issues such as failed pod scheduling, image pull errors, or resource allocation problems.


title: CAVEATS
content:
<i>kubectl-events</i> is a community-contributed <i>kubectl</i> plugin, not part of the official <i>kubectl</i> core distribution. Its availability and exact feature set depend on its installation method (e.g., via <i>krew</i>) and the specific version or implementation you are using. <br><br>Users must ensure they have appropriate Role-Based Access Control (RBAC) permissions to list and watch events within the cluster or specified namespaces; otherwise, the command will return authorization errors or an incomplete list of events.


title: INSTALLATION
content:
The most common way to install <i>kubectl-events</i> is via <i>krew</i>, the Kubernetes plugin manager. If <i>krew</i> is installed, you can simply run: <br><i>kubectl krew install events</i> <br>Alternatively, some versions might be available as standalone binaries or scripts that can be placed in your <i>PATH</i>.


title: USE CASES
content:
<b>Debugging Pod Failures:</b> Quickly identify reasons for pods failing to schedule, image pull errors, or crash loops by filtering events related to a specific pod.<br><b>Monitoring Cluster Health:</b> Watch for <i>Warning</i> events across the cluster to catch potential issues like node disk pressure, out-of-memory events, or network problems.<br><b>Auditing Changes:</b> Track resource creation, updates, and deletions by observing relevant events.<br><b>Understanding Scheduling:</b> See why a pod was scheduled on a particular node or why it's pending (e.g., due to resource constraints).


title: HISTORY
content:
The need for an enhanced Kubernetes event viewer arose from the limitations of the default <code>kubectl get events</code> command, which lacked crucial features like continuous watching, robust filtering, and object-specific event querying. <br><br>Various community efforts led to the creation of `kubectl-events` plugins, often written in Go or shell scripts, to fill this gap. Its popularity grew significantly with the advent of <i>krew</i>, the Kubernetes plugin manager, which standardized the installation and distribution of such tools, making <i>kubectl-events</i> an indispensable part of many Kubernetes practitioners' toolkits.


title: TLDR
content:
<b>Show events in the default namespace</b>`kubectl events`<br><b>Show events in all namespaces</b>`kubectl events [[-A|--all-namespaces]]`<br><b>Watch events in a specific namespace</b>`kubectl events [[-w|--watch]] [[-n|--namespace]] [namespace]`<br><b>Show events for a pod in a specific namespace</b>`kubectl events --for [pod]/[pod_name] [[-n|--namespace]] [namespace]`<br><b>Show events for a resource in a specific namespace</b>`kubectl events --for [resource]/[resource_name] [[-n|--namespace]] [namespace]`<br><b>Show events for type Warning or Normal</b>`kubectl events --types Warning,Normal`<br><b>Output events in YAML format</b>`kubectl events [[-o|--output]] yaml`


title: PARAMETERS
content:
<b><b>--api-version</b>=<I>group/version</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the API version to use for the resource. For example, use <i>apps/v1</i> for Deployments if you need to explain a specific version.<br><br><b><b>--recursive</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the fields of a resource recursively. This option can generate very verbose output, listing all nested fields and their descriptions.<br><br><b><b>--output-sections</b>=<I>sections</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines which sections to include in the output. Valid values are <i>description</i>, <i>fields</i>, <i>properties</i>, <i>notes</i>, <i>examples</i>, or <i>all</i>. Multiple sections can be specified separated by commas.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides help information for the <b>explain</b> command.<br><br>


title: DESCRIPTION
content:
The <b>kubectl explain</b> command provides detailed documentation about Kubernetes resources directly from the terminal. It leverages the OpenAPI schema exposed by the Kubernetes API server to describe the structure, fields, and types of various API objects. Users can explore top-level resources like <b>pod</b> or <b>deployment</b>, or drill down into nested fields such as <b>pod.spec.containers</b> to understand specific attributes.<br><br>This command is invaluable for developers and operators constructing Kubernetes manifests, helping them create valid YAML configurations without constantly referring to external documentation. It ensures consistency with the currently running API server's version and capabilities, making it a reliable source of truth for your cluster's API definitions.


title: CAVEATS
content:
<b>Key limitations and considerations:</b><br><b>1. API Server Dependency:</b> The command relies on the OpenAPI schema from the Kubernetes API server; it will not function if the API server is unreachable.<br><b>2. Version Specificity:</b> The output reflects the specific Kubernetes version the API server is running, which might differ from your local <b>kubectl</b> client.<br><b>3. Nuance Misses:</b> While comprehensive, it might not always highlight every nuance like deprecation warnings or immutability rules for fields as explicitly as official external documentation.<br><b>4. Verbose Output:</b> The <b>--recursive</b> option can produce extremely large outputs for complex resources, potentially overwhelming the terminal.


title: SCHEMA SOURCE
content:
The information provided by <b>kubectl explain</b> is fetched directly from the <b>OpenAPI schema</b> served by the Kubernetes API server. This ensures the documentation is always up-to-date with the specific version of Kubernetes you are interacting with, including any custom resource definitions (CRDs) you may have installed.


title: NAVIGATING THE SCHEMA
content:
Users can navigate the schema by specifying <b>dot-separated paths</b> (e.g., <i>pod.spec.containers.ports</i>). This allows for targeted exploration of specific parts of an API object without needing to sift through the entire schema definition, making it highly efficient for pinpointing information.


title: HISTORY
content:
The <b>kubectl explain</b> command was introduced early in the development of <b>kubectl</b> as a core utility to provide on-demand, accurate schema documentation. Its development has closely tracked the evolution of the Kubernetes API and the improvements in how the API server exposes its OpenAPI schema. Over time, it has become an indispensable tool for developers and operators, evolving with added features like <b>--recursive</b> and <b>--output-sections</b> to enhance its utility for navigating complex Kubernetes object definitions directly from the command line.


title: TLDR
content:
<b>Show documentation for a resource</b>`kubectl explain [pods|nodes|deployments|...]`<br><b>Show documentation for a sub-resource or field of an object</b>`kubectl explain [pod.spec.containers]`<br><b>Show documentation for a specific versioned resource</b>`kubectl explain [ingress.v1.networking.k8s.io]`<br><b>Show all fields recursively for a resource</b>`kubectl explain [po|pods] --recursive`<br><b>Display help</b>`kubectl explain --help`


title: PARAMETERS
content:
<b><i>&lt;directory-or-URL&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to a directory containing a <i>kustomization.yaml</i> file, or a URL pointing to a remote kustomization.<br><br><b><b>-o, --output</b><i>=&lt;format&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output format. Options include 'json' and 'yaml'. Defaults to 'yaml'.<br><br><b><b>--enable-helm</b><i>[=true]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables Kustomize to process Helm charts during resource generation, allowing integration of Helm-managed resources into kustomizations.<br><br><b><b>--load-restrictor</b><i>=&lt;LoadRestrictorKind&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls how remote files are loaded. Valid values: <i>LoadRestrictionsNone</i>, <i>LoadRestrictionsLocalOne</i>, <i>LoadRestrictionsRootOnly</i>.<br><br><b><b>--reorder</b><i>=&lt;ReorderOption&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reorders the list of generated resources. Valid values: <i>legacy</i>, <i>natural</i>, <i>none</i>.<br><br><b><b>--helm-command</b><i>=&lt;path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the Helm binary. Defaults to 'helm'.<br><br><b><b>--enable-alpha-plugins</b><i>[=false]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables support for Kustomize alpha plugins, which extend Kustomize's functionality through custom executables.<br><br><b><b>--enable-exec</b><i>[=false]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables Kustomize exec functions, allowing command execution within kustomizations for dynamic content generation.<br><br>


title: DESCRIPTION
content:
<i>kubectl kustomize</i> is a built-in subcommand of the Kubernetes command-line tool, <i>kubectl</i>, that integrates the functionality of Kustomize directly into the client. Kustomize provides a template-free way to customize application configuration for Kubernetes, leaving the original YAML files untouched. It achieves this by using a declarative approach based on a 'base' configuration and 'overlays' that define modifications for specific environments or use cases.<br><br>The primary function of <i>kubectl kustomize</i> is to generate customized Kubernetes YAML manifests. Users specify a directory containing a <i>kustomization.yaml</i> file, which outlines the base resources and all the patches, transformations, and other alterations to be applied. The command processes these instructions and outputs the resulting, ready-to-deploy YAML to standard output. This output is typically piped to other <i>kubectl</i> commands, most commonly <i>kubectl apply -f -</i>, to deploy the customized resources to a Kubernetes cluster.


title: CAVEATS
content:
<i>kubectl kustomize</i> only <i>generates</i> Kubernetes manifests to standard output; it does not directly apply them to a cluster. Users must typically pipe its output to <i>kubectl apply -f -</i> or a similar command to deploy the resources.<br><br>A valid <i>kustomization.yaml</i> file must exist in the specified directory or be accessible via the provided URL. The behavior and supported features of <i>kubectl kustomize</i> are dependent on the version of Kustomize embedded within your <i>kubectl</i> client, which evolves with Kubernetes releases.


title: KUSTOMIZATION FILE (<I>KUSTOMIZATION.YAML</I>)
content:
This file is the core of any Kustomize project. It's a YAML file that declares the base resources, patches, generators, transformers, and other modifications Kustomize should apply to produce the final set of manifests. It acts as the blueprint for customization.


title: BASE AND OVERLAYS
content:
Kustomize operates on the principle of having a base set of YAML manifests (the 'base') which defines the core application. For different environments (e.g., development, staging, production), 'overlays' are created. Overlays contain directives to modify the base without altering the original base files, enabling environment-specific configurations to be managed declaratively and cleanly.


title: OUTPUT TO STANDARD OUTPUT
content:
A key characteristic of <i>kubectl kustomize</i> is that it prints the generated, customized YAML manifests to standard output (stdout). This design allows for flexible integration with other command-line tools, enabling users to pipe the output to commands like <i>kubectl apply -f -</i>, use it for validation, or integrate it into CI/CD pipelines.


title: HISTORY
content:
Kustomize originated as an independent command-line tool for managing Kubernetes configuration. Its declarative, template-free approach quickly gained significant traction within the Kubernetes community for its flexibility and ease of use in managing environment-specific configurations. Recognizing its utility, Kustomize was officially integrated into <i>kubectl</i> as a subcommand (<i>kubectl kustomize</i>) starting with Kubernetes version 1.14. This integration solidified its status as a de-facto standard for configuration customization within the Kubernetes ecosystem, making it readily available to all <i>kubectl</i> users without requiring a separate installation.


title: TLDR
content:
<b>Build resources from the current directory</b>`kubectl kustomize`<br><b>Build resources from a specific directory</b>`kubectl kustomize [path/to/directory]`<br><b>Build resources from a remote URL</b>`kubectl kustomize [https://github.com/user/repo/path]`<br><b>Build resources and save to a file</b>`kubectl kustomize [path/to/directory] > [output.yaml]`<br><b>Build resources with load restrictor disabled</b>`kubectl kustomize --load-restrictor [LoadRestrictionsNone] [path/to/directory]`


title: SYNOPSIS
content:
<b>kubectl proxy</b> [<b>--port</b>=<i>PORT</i>] [<b>--accept-hosts</b>=<i>REGEXP</i>] [<b>--address</b>=<i>ADDRESS</i>] [<b>--disable-filter</b>=<i>BOOL</i>] [<b>--keepalive</b>=<i>DURATION</i>] [<b>--www</b>=<i>DIR</i>] [<b>--www-prefix</b>=<i>PREFIX</i>] [<i>flags</i>]


title: PARAMETERS
content:
<b><b>-p</b>, <b>--port</b>=<i>PORT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The local port on which to run the proxy. Defaults to 8001. Set to 0 to pick a random available port.<br><br><b><b>--address</b>=<i>ADDRESS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The IP address or hostname for the proxy to listen on. Defaults to 127.0.0.1 (localhost). Use 0.0.0.0 to listen on all network interfaces.<br><br><b><b>--accept-hosts</b>=<i>REGEXP</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A regular expression for hosts that the proxy should accept. Requests from hosts not matching this pattern will be rejected.<br><br><b><b>--append-slash</b>=<i>true|false</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If true, all request paths will automatically end with a '/'. Defaults to true.<br><br><b><b>--api-prefix</b>=<i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The prefix for API calls to Kubernetes. Defaults to '/'. Useful for routing.<br><br><b><b>--disable-filter</b>=<i>true|false</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If true, disable API filtering. This will allow the proxy to serve all API paths, including raw data. Defaults to false.<br><br><b><b>--keepalive</b>=<i>DURATION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keepalive duration for the HTTP server in a format like '1h', '30m', or '60s'. Defaults to 0s (no keepalive).<br><br><b><b>--www</b>=<i>DIR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to serve static files from a local directory or a resource file with the format 'filename:resource'.<br><br><b><b>--www-prefix</b>=<i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The URL path prefix at which to serve static files specified by <b>--www</b>. Defaults to '/static/'.<br><br><b><b>--kubeconfig</b>=<i>PATH</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Path to the kubeconfig file to use for authentication and cluster details. (Global kubectl flag)<br><br><b><b>--context</b>=<i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the kubeconfig context to use. (Global kubectl flag)<br><br><b><b>--server</b>=<i>URL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The address and port of the Kubernetes API server. Overrides the value in kubeconfig. (Global kubectl flag)<br><br><b><b>--namespace</b>=<i>NAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If present, the namespace scope for this command. (Global kubectl flag)<br><br>


title: DESCRIPTION
content:
The <b>kubectl proxy</b> command creates a local HTTP proxy that allows direct, authenticated access to the Kubernetes API server from your local machine. It simplifies interaction with the cluster's REST API by handling authentication and basic routing, making it appear as if the API server is running locally on a specified port (default 8001).<br><br>This command is primarily used for several purposes: testing and debugging local applications that need to interact with the Kubernetes API, accessing the Kubernetes dashboard, or other web-based UIs that connect through the API. It eliminates the need for applications to manage their own authentication tokens or certificates, as <b>kubectl proxy</b> leverages your existing kubeconfig setup.<br><br>It acts as a reverse proxy, forwarding requests from your local machine to the Kubernetes API server and then returning the responses. While convenient for development and internal tools, it's generally not recommended for production exposure due to its basic security model and single-point-of-failure nature.


title: CAVEATS
content:
The <b>kubectl proxy</b> command provides <i>unauthenticated</i> access from the local machine to the Kubernetes API server. Anyone with access to the machine running the proxy can access the cluster's API endpoints via the proxy without further authentication.<br><br>While you can restrict accepted hosts with <b>--accept-hosts</b> and the listening address with <b>--address</b>, caution should be exercised, especially when binding to '0.0.0.0' or running on a public server. It is not designed to be a secure, production-grade API gateway or ingress solution.


title: USAGE EXAMPLES
content:
<b>Start proxy on default port 8001:</b><br><i>kubectl proxy</i><br><br><b>Start proxy on a specific port:</b><br><i>kubectl proxy --port=8080</i><br><br><b>Start proxy listening on all interfaces (caution!):</b><br><i>kubectl proxy --address=0.0.0.0</i><br><br><b>Accessing API endpoints through the proxy:</b><br>Once the proxy is running, you can access the Kubernetes API at <i>http://localhost:8001/api/v1/</i>. For example, to list all pods in a specific namespace:<br><i>curl http://localhost:8001/api/v1/namespaces/default/pods</i><br><br><b>Serving local static content along with API:</b><br><i>kubectl proxy --www='./static_files' --www-prefix='/ui/'</i><br>This would serve files from the local 'static_files' directory at <i>http://localhost:8001/ui/</i>.


title: SECURITY CONSIDERATIONS
content:
By default, <b>kubectl proxy</b> listens only on <i>localhost (127.0.0.1)</i>, limiting access to the machine where it is running. This is generally safe for personal use.<br><br>If you change the <b>--address</b> to <i>0.0.0.0</i>, the proxy will listen on all available network interfaces, making it accessible from other machines on the network. This significantly increases the security risk as any client that can reach the proxy's IP and port can then access your Kubernetes cluster API.<br><br>The <b>--accept-hosts</b> flag provides a layer of defense, allowing you to specify a regular expression for the 'Host' header of incoming requests. Only requests with a matching 'Host' header will be processed. For example, <i>--accept-hosts='^localhost$,^192.168.1.100$'</i> would only allow requests from localhost or a specific IP address.


title: HISTORY
content:
The <b>kubectl proxy</b> command has been an integral part of the Kubernetes CLI (kubectl) since its early versions, offering a foundational method for developers and administrators to interact with the Kubernetes API server locally. Its core functionality has remained largely consistent, reflecting its stable and essential role in the Kubernetes ecosystem for local development, debugging, and dashboard access. It was designed to leverage existing kubeconfig authentication, simplifying access to the cluster's resources without complex manual setup.


title: TLDR
content:
<b>Run a proxy using the default settings on port 8001 and listen on localhost</b>`kubectl proxy`<br><b>Proxy part of the Kubernetes API while serving static files from a local directory</b>`kubectl proxy [[-w|--www]] [path/to/static_dir] [[-P|--www-prefix]] [/static_prefix/] --api-prefix [/api_subset/]`<br><b>Proxy the entire Kubernetes API under a custom prefix</b>`kubectl proxy --api-prefix [/custom_prefix/]`<br><b>Serve the Kubernetes API on a specific port while also serving static content</b>`kubectl proxy [[-p|--port]] [port] [[-w|--www]] [path/to/static_dir]`<br><b>Run a proxy on a random local port, printing the chosen port to stdout</b>`kubectl proxy [[-p|--port]] 0`<br><b>Run the proxy on a Unix domain socket instead of a TCP port</b>`kubectl proxy [[-u|--unix-socket]] [path/to/socket]`<br><b>Accept connections from remote hosts by listening on all interfaces (use caution when exposing the proxy publicly)</b>`kubectl proxy --address 0.0.0.0 --accept-hosts '.*'`<br><b>Allow only selected API paths while rejecting sensitive endpoints</b>`kubectl proxy --accept-paths '^/api/v1/namespaces/default/.*' --reject-paths '^/api/.*/pods/.*/exec'`


title: TLDR
content:
<b>Generate a seed phrase from an existing Ed25519 private key</b>`melt [~/.ssh/id_ed25519]`<br><b>Generate a seed phrase from stdin</b>`[cat ~/.ssh/id_ed25519] | melt`<br><b>Restore an SSH key from a seed phrase</b>`melt restore [path/to/key] --seed "[seed_phrase]"`<br><b>Restore an SSH key from a seed phrase via stdin</b>`[cat path/to/file] | melt restore -`


title: PARAMETERS
content:
<b>--address &lt;ADDR&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the listen address for the MinIO server's S3 API. Defaults to ':9000'. Examples: '127.0.0.1:9000', ':9000'.<br><br><b>--certs-dir &lt;DIR&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the directory containing TLS certificates and private keys for secure (HTTPS) communication.<br><br><b>--console-address &lt;ADDR&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the listen address for the MinIO Console (web UI). Defaults to ':9001'. Can be set to 'off' to disable the console.<br><br><b>--config-dir &lt;DIR&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the directory where MinIO stores its configuration files and internal data.<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs server log messages in JSON format, which is useful for structured logging and automated parsing.<br><br><b>--logger-address &lt;ADDR&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends server log messages to a remote syslog server at the specified address.<br><br><b>--anonymous</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables authentication, allowing anonymous access to buckets and objects. <i>Use with extreme caution and only in secure, controlled environments.</i><br><br><b>--rewire &lt;ADDR&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used internally by MinIO to redirect API requests within a distributed setup for consistent hashing. Not typically configured by users directly.<br><br><b>--quiet</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses informational messages, showing only warnings and errors in the server output.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the MinIO server version and exits.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message for the 'minio server' command and exits.<br><br>


title: DESCRIPTION
content:
MinIO is an <b>open-source</b>, high-performance, <i>S3-compatible</i> object storage server designed for cloud-native applications.<br><br>It provides an API compatible with Amazon S3, allowing developers and applications to store and retrieve large amounts of unstructured data. MinIO focuses on scalability, performance, and simplicity, making it ideal for various use cases including data lakes, AI/ML workloads, analytics, and backup/restore solutions. It can run on a single server for local development or in a highly distributed cluster for enterprise-grade deployments, offering strong consistency and data durability.


title: CAVEATS
content:
When starting MinIO, it is critical to set the environment variables <b>MINIO_ROOT_USER</b> and <b>MINIO_ROOT_PASSWORD</b> for initial root access. If these are not provided, MinIO will generate random credentials and print them to the console (unless <b>--quiet</b> is used).<br><br>The <i>PATH</i> arguments specify the local directories or mount points where MinIO stores its data. For distributed deployments, these paths must be consistent across all server instances participating in the cluster. Changing data paths after initialization can lead to data loss or corruption.<br><br>Always prioritize security: configure TLS/SSL, manage access keys and policies diligently, and implement robust network security measures to protect your object storage from unauthorized access.


title: ENVIRONMENT VARIABLES
content:
MinIO extensively uses environment variables for configuration. Key variables include:<br><b>MINIO_ROOT_USER</b>: The access key for the root user. This is mandatory for secure access.<br><b>MINIO_ROOT_PASSWORD</b>: The secret key for the root user. Also mandatory.<br><b>MINIO_SERVER_URL</b>: The public endpoint URL for the MinIO server (e.g., `https://minio.example.com`). This is crucial for distributed setups and client connectivity.<br><b>MINIO_BROWSER</b>: Set to 'on' (default) or 'off' to enable or disable the built-in MinIO Console (web UI).


title: DEPLOYMENT MODES
content:
MinIO can be deployed in two primary modes:<br><b>1. Standalone Mode</b>: Running on a single server with one or more local drives specified as <i>PATH</i> arguments.<br><b>2. Distributed Mode</b>: Spanning multiple servers (nodes), providing high availability, scalability, and data protection through erasure coding. In distributed mode, the server command is run on each node, specifying all data drives across the cluster using a specific URL format (e.g., `minio server http://minio{1...4}/export{1...4}`).


title: MINIO CONSOLE
content:
The MinIO server includes a built-in web-based user interface, the <b>MinIO Console</b>, accessible by default on port :9001 (e.g., `http://localhost:9001` or `https://localhost:9001` if TLS is configured). This console allows for graphical management of buckets, objects, users, and policies, providing an intuitive way to interact with your MinIO instance.


title: HISTORY
content:
MinIO was first released in <b>2014</b> as an open-source project, quickly gaining traction as a high-performance, S3-compatible object storage solution. Its development has consistently focused on simplicity, scalability, and performance, making it a preferred choice for cloud-native applications, AI/ML, analytics, and containerized environments. It evolved to support distributed deployments, erasure coding for data protection, and a rich set of features aligned with modern data infrastructure needs, becoming a leading object storage solution for private and hybrid clouds.


title: TLDR
content:
<b>Start a server using the default configuration</b>`minio server [path/to/data_directory]`<br><b>Start a server binding to a different port for the API and web console</b>`minio server --address ":[port]" --console-address ":[port]" [path/to/data_directory]`<br><b>Start a server as part of a cluster of 2 nodes</b>`minio server [node1_hostname] [path/to/data_directory] [node2_hostname] [path/to/data_directory]`


title: TLDR
content:
<b>Keep only translated messages</b>`msgattrib --translated [input.po] > [translated.po]`<br><b>Keep only untranslated messages</b>`msgattrib --untranslated [input.po] > [untranslated.po]`<br><b>Remove fuzzy messages</b>`msgattrib --no-fuzzy [input.po] > [clean.po]`<br><b>Keep only fuzzy messages</b>`msgattrib --only-fuzzy [input.po] > [fuzzy.po]`<br><b>Mark all messages as fuzzy</b>`msgattrib --set-fuzzy [input.po] > [fuzzy.po]`<br><b>Clear fuzzy marks</b>`msgattrib --clear-fuzzy [input.po] > [clean.po]`<br><b>Sort output by file location</b>`msgattrib [[-F|--sort-by-file]] [input.po] > [sorted.po]`<br><b>Display help</b>`msgattrib [[-h|--help]]`


title: SYNOPSIS
content:
<b>oh-my-posh</b> [<i>global-options</i>] &lt;<i>command</i>&gt; [<i>command-options</i>]<br><b>oh-my-posh init</b> &lt;<i>shell</i>&gt; [<b>--config</b> &lt;<i>theme_path</i>&gt;] [<i>options</i>]


title: PARAMETERS
content:
<b><b>--help</b>, <b>-h</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the main command or a specified subcommand.<br><br><b><b>--version</b>, <b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current version of <i>oh-my-posh</i>.<br><br><b><b>init</b> &lt;<i>shell</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The primary subcommand used to generate the initialization script for a specific shell (e.g., <B>bash</B>, <B>zsh</B>, <B>fish</B>, <B>powershell</B>). The output is typically piped into or sourced by the shell's profile file.<br><br><b><b>init --config</b> &lt;<i>path</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the JSON theme configuration file to be used by the prompt. This is crucial for customizing the prompt's appearance and displayed segments.<br><br><b><b>init --output</b> &lt;<i>path</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Writes the generated initialization script to a specified file instead of standard output.<br><br><b><b>init --print</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the output of the generated script to standard output, useful when piping the output.<br><br><b><b>init --strict</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables strict mode, which will cause the prompt to fail if any segment or theme configuration is invalid.<br><br><b><b>init --execution-time-threshold</b> &lt;<i>ms</i>&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the minimum execution time (in milliseconds) for the previous command to be displayed in the prompt.<br><br><b><b>config</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A subcommand providing utilities for managing themes, such as editing the current theme (<B>config edit</B>) or printing the current configuration (<B>config print</B>).<br><br><b><b>theme</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A subcommand for theme-related operations, including initializing a new theme (<B>theme init</B>), listing available themes (<B>theme list</B>), or picking a random theme (<B>theme random</B>).<br><br>


title: DESCRIPTION
content:
<i>oh-my-posh</i> is a powerful and highly customizable prompt engine designed to enhance the command-line experience across various shells, including Bash, Zsh, Fish, PowerShell, and Cmd. Its primary purpose is to display a rich, contextual, and aesthetically pleasing prompt that conveys essential information at a glance.<br><br>Utilizing a flexible JSON-based theme engine, <i>oh-my-posh</i> can show details such as Git status (branch, pending changes), current directory, Python virtual environment, Node.js version, Go version, battery status, execution time of the last command, and more. It heavily relies on <I>Nerd Fonts</I> to render a wide array of icons and glyphs, making the prompt visually appealing and information-dense. By generating an initialization script for your specific shell, <i>oh-my-posh</i> integrates seamlessly into your workflow, transforming a mundane command line into an informative dashboard.


title: CAVEATS
content:
<b>Nerd Fonts Dependency</b>: For <i>oh-my-posh</i> to display icons and glyphs correctly, you must install a <I>Nerd Font</I> in your terminal emulator. Without it, you'll see placeholder characters or empty spaces.<br><b>Performance Overhead</b>: While generally fast, complex themes with many segments can introduce a slight overhead to prompt rendering, potentially noticeable on slower systems or in very busy shell sessions.<br><b>Configuration Complexity</b>: Customizing themes involves editing JSON files, which can be intricate for new users. However, a vast collection of pre-built themes is available.<br><b>Shell Profile Integration</b>: Requires adding a line to your shell's profile file (e.g., <B>.bashrc</B>, <B>.zshrc</B>, <B>profile.ps1</B>) to initialize the prompt, which must be done correctly for <i>oh-my-posh</i> to function.


title: INSTALLATION
content:
<i>oh-my-posh</i> can be installed using various package managers depending on your operating system:<br><ul><li><b>Windows</b>: <B>winget install JanDeDobbeleer.OhMyPosh</B> or <B>scoop install oh-my-posh</B></li><li><b>macOS</b>: <B>brew install oh-my-posh</B></li><li><b>Linux</b>: Available via <B>apt</B> or <B>dnf</B> repositories, or can be installed manually by downloading the binary.</li></ul>After installation, you typically use <B>oh-my-posh init</B> to generate the necessary script for your shell and add it to your shell's profile file.


title: THEMES AND CUSTOMIZATION
content:
<i>oh-my-posh</i> comes with a rich set of built-in themes that can be easily listed and previewed. Users can select a theme by specifying its path with the <B>--config</B> option during initialization. For advanced customization, users can create their own JSON theme files, defining segments (e.g., Git, cwd, Python) and their properties (colors, icons, visibility rules). This modular design allows for immense flexibility in tailoring the prompt to individual preferences and workflows.


title: NERD FONTS
content:
The visual richness of <i>oh-my-posh</i> prompts, particularly the display of various icons for different programming languages, tools, and statuses, is made possible by <I>Nerd Fonts</I>. These are patched fonts that include a large number of glyphs from popular icon sets (e.g., Font Awesome, Material Design Icons, Devicons). Installing a <I>Nerd Font</I> in your terminal is a prerequisite for experiencing <i>oh-my-posh</i> as intended.


title: HISTORY
content:
Initially conceived as a PowerShell-specific module, <i>oh-my-posh</i> gained significant traction among PowerShell users for its ability to create highly customized and visually rich prompts. Recognizing the demand for similar capabilities across other popular shells (Bash, Zsh, Fish), the project was re-written from scratch in Go. This strategic shift enabled cross-platform and cross-shell compatibility, significantly broadening its user base and cementing its position as a leading prompt customization tool. The Go rewrite allowed for better performance, easier distribution, and a unified experience regardless of the underlying shell or operating system.


title: TLDR
content:
<b>Display current shell name</b>`oh-my-posh get shell`<br><b>Initialize for Bash</b>`eval "$(oh-my-posh init bash --config [path/to/theme])"`<br><b>Initialize for PowerShell</b>`oh-my-posh init pwsh --config [path/to/theme] | Invoke-Expression`<br><b>Initialize for Zsh</b>`eval "$(oh-my-posh init zsh --config [path/to/theme])"`<br><b>Enable live reloading</b>`oh-my-posh enable reload`<br><b>Disable live reloading</b>`oh-my-posh disable reload`<br><b>Print debug information for troubleshooting</b>`oh-my-posh debug`<br><b>Update to latest version</b>`oh-my-posh upgrade`


title: PARAMETERS
content:
<b>-i, --ignore-case</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ignore case distinctions in both the PATTERN and input files during the search.<br><br><b>-v, --invert-match</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Select non-matching lines, effectively showing lines that do <i>not</i> contain the PATTERN.<br><br><b>-r, --recursive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Recursively search through directories, following symbolic links only if they are on the command line. Use `-R` for recursive search without following symlinks.<br><br><b>-n, --line-number</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prefix each line of output with the 1-based line number within its input file.<br><br><b>-c, --count</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress normal output; instead, print a count of matching lines for each input file.<br><br><b>-l, --files-with-matches</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress normal output; instead, print the name of each input file from which output would normally have been printed.<br><br><b>-q, --quiet, --silent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress all normal output; exit immediately with zero status if any match is found, and with 1 if no match is found. Useful in scripts for conditional logic.<br><br><b>-E, --extended-regexp</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret PATTERN as an extended regular expression (ERE), which provides more powerful regex syntax compared to basic regular expressions (BREs).<br><br><b>-F, --fixed-strings</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. This disables regular expression interpretation, making searches faster for literal strings.<br><br><b>-A NUM, --after-context=NUM</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print <i>NUM</i> lines of trailing context after matching lines.<br><br><b>-B NUM, --before-context=NUM</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print <i>NUM</i> lines of leading context before matching lines.<br><br><b>-C NUM, -NUM, --context=NUM</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print <i>NUM</i> lines of context (<i>NUM</i> lines before and <i>NUM</i> lines after) around matching lines.<br><br>


title: DESCRIPTION
content:
The <b>grep</b> command (<i>g</i>lobally search a <i>r</i>egular <i>e</i>xpression and <i>p</i>rint) is a fundamental utility in Unix-like operating systems, used for searching plain-text data sets for lines that match a regular expression. It's an indispensable tool for system administrators, developers, and anyone working with text files on the command line. <br><br><i>grep</i> can search single files, multiple files, or the output of other commands via piping. Its power lies in its ability to use complex regular expressions to define search patterns, allowing for highly specific and flexible searches. It prints matching lines to standard output by default, making it easy to filter logs, find code snippets, or extract specific information from large text data. Its efficiency and versatility make it a cornerstone of shell scripting and data processing pipelines.


title: CAVEATS
content:
<ul><li><b>Performance:</b> Searching very large files or an extremely large number of files recursively can be resource-intensive. For extremely large datasets, specialized tools or indexing might be more appropriate.</li><li><b>Regular Expression Complexity:</b> Overly complex regular expressions can be difficult to read, debug, and may also impact performance. Ensure patterns are as specific and efficient as possible.</li><li><b>Binary Files:</b> By default, <i>grep</i> might print "Binary file ... matches" or treat binary files differently. Use `--text` to force treating all files as text, or `--binary-files=without-match` to suppress output from binary files.</li><li><b>Locale Issues:</b> Regular expression matching behavior can sometimes be affected by locale settings (e.g., `LC_ALL`, `LC_COLLATE`), which might lead to unexpected results with character classes like `[a-z]`.</li></ul>


title: EXIT STATUS
content:
<i>grep</i>'s exit status is crucial for scripting:<ul><li><b>0:</b> One or more lines were selected (i.e., a match was found).</li><li><b>1:</b> No lines were selected (i.e., no match was found).</li><li><b>2:</b> An error occurred (e.g., syntax error in regex, inaccessible file).</li></ul>This allows shell scripts to take conditional actions based on whether a pattern was found.


title: REGULAR EXPRESSIONS (REGEX)
content:
The core power of <i>grep</i> comes from its use of regular expressions. These are sequences of characters that define a search pattern.<ul><li><b>Basic Regular Expressions (BREs):</b> The default `grep` mode. Some characters like `?`, `+`, `{}`, `()` need to be escaped with a backslash to be interpreted as special regex operators.</li><li><b>Extended Regular Expressions (EREs):</b> Enabled with `-E` or using `egrep`. These are generally more intuitive, as characters like `?`, `+`, `{}`, `()` are special without escaping.</li><li><b>Fixed Strings:</b> Enabled with `-F` or using `fgrep`. The pattern is treated as a literal string, not a regular expression, making it faster for exact string matches.</li></ul>Understanding regex is key to leveraging <i>grep</i>'s full potential for complex pattern matching.


title: HISTORY
content:
The <b>grep</b> command originated in Bell Labs Unix, developed by Ken Thompson in 1974. Its name is derived from a command in the `ed` text editor, where `g/re/p` meant "globally search for a regular expression and print". <br><br>Initially, there were separate commands like `egrep` (for extended regular expressions) and `fgrep` (for fixed strings). Over time, these functionalities were integrated into the single `grep` command, often controlled by options like `-E` and `-F`. The GNU `grep` implementation, which is standard on most Linux systems, has added numerous enhancements and features over the years, making it a highly robust and versatile tool.


title: TLDR
content:
<b>Generate a shell command from plain English</b>`oneliner "[find all jpg files larger than 10MB]"`<br><b>Explain what a command does</b>`oneliner [[-e|--explain]] "[delete node_modules recursively]"`<br><b>Copy a generated command to the clipboard</b>`oneliner [[-c|--clipboard]] "[compress all pdfs]"`<br><b>Show a detailed, educational breakdown of a command</b>`oneliner [[-b|--breakdown]] "[list all active network connections]"`<br><b>Execute a generated command (use with caution)</b>`oneliner [[-r|--run]] "[list files larger than 1GB]"`<br><b>Interactively confirm before executing a generated command</b>`oneliner [[-i|--interactive]] "[delete temporary files in /tmp]"`


title: PARAMETERS
content:
<b><b>-d</b> <i>DBNAME</i>, <b>--dbname</b>=<i>DBNAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the database to check. If not specified, it defaults to the user's name.<br><br><b><b>-t</b> <i>TABLE</i>, <b>--table</b>=<i>TABLE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks a specific table. This option can be specified multiple times to check several tables. If this is used, <b>-i</b> cannot be used.<br><br><b><b>-i</b> <i>INDEX</i>, <b>--index</b>=<i>INDEX</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks a specific index. This option can be specified multiple times to check several indexes. If this is used, <b>-t</b> cannot be used.<br><br><b><b>-a</b>, <b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Checks all relations in the database. Cannot be used with <b>-t</b> or <b>-i</b>.<br><br><b><b>-c</b> <i>CHECK</i>, <b>--check</b>=<i>CHECK</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies which <i>amcheck</i> function to use for validation. Common options include <i>bt_index_check</i> (default) and <i>bt_amcheck_next_block</i>, with the latter being more thorough.<br><br><b><b>-j</b> <i>NUM_JOBS</i>, <b>--jobs</b>=<i>NUM_JOBS</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses this many concurrent jobs to check relations, speeding up the process on multi-core systems. The default is 1.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints verbose messages, including details for successfully checked relations.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses messages for successfully checked relations, only reporting issues or errors.<br><br><b><b>-h</b> <i>HOSTNAME</i>, <b>--host</b>=<i>HOSTNAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the host name of the machine on which the database server is running. Defaults to a local Unix domain socket.<br><br><b><b>-p</b> <i>PORT</i>, <b>--port</b>=<i>PORT</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the TCP port or local Unix domain socket file extension on which the database server is listening for connections.<br><br><b><b>-U</b> <i>USERNAME</i>, <b>--username</b>=<i>USERNAME</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the user name to connect as.<br><br><b><b>-W</b>, <b>--password</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <i>pg_amcheck</i> to prompt for a password before connecting to a database.<br><br><b><b>--no-password</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <i>pg_amcheck</i> from prompting for a password. If the server requires a password and it's not available, the connection attempt will fail.<br><br><b><b>--no-sync</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables syncing of output files to disk. This is primarily for development and testing; not recommended for production.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <i>pg_amcheck</i> version and exits.<br><br><b><b>-?</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows help about <i>pg_amcheck</i> command line arguments, then exits.<br><br>


title: DESCRIPTION
content:
<i>pg_amcheck</i> is a command-line utility for PostgreSQL that allows users to verify the physical and logical consistency of relations (tables and indexes) within a database. It utilizes the <i>amcheck</i> extension's functions, specifically <i>bt_amcheck_next_block</i>, to traverse and validate B-tree indexes, ensuring that their structure adheres to the expected B-tree invariants. This includes checking sibling pointers, parent pointers, page headers, item pointers, and the ordering of keys.<br><br>The utility connects to a running PostgreSQL instance and is invaluable for database administrators to proactively identify data corruption, which could arise from hardware failures, software bugs, or unexpected system crashes, before it leads to data loss or incorrect query results. By running <i>pg_amcheck</i> regularly, DBAs can ensure the health of their indexes, improving reliability and preventing potential downtime associated with corrupted database objects. It can target specific tables or indexes, or check all relations in a database.


title: CAVEATS
content:
The <i>pg_amcheck</i> utility requires the <i>amcheck</i> extension to be installed and enabled in the target PostgreSQL database (e.g., <b>CREATE EXTENSION amcheck;</b>).<br><br>While highly effective for B-tree indexes, it primarily checks B-tree structures and may not cover all types of corruption or other access methods (e.g., hash, GIN, GiST, BRIN indexes).<br><br>Running <i>pg_amcheck</i>, especially with the more thorough <i>bt_amcheck_next_block</i> function or against very large databases, can be I/O intensive and might temporarily impact database performance. It only detects corruption; it does not fix it. Repair usually involves rebuilding the affected index with <b>REINDEX</b> or restoring from a backup.


title: INSTALLATION
content:
To use <i>pg_amcheck</i>, the <i>amcheck</i> extension must first be installed in the target PostgreSQL database. This is typically done by connecting to the database via <i>psql</i> and executing <b>CREATE EXTENSION amcheck;</b>. The extension itself is usually part of the <i>postgresql-contrib</i> package provided by most Linux distributions.


title: EXIT STATUS
content:
<i>pg_amcheck</i> returns <b>0</b> upon successful completion with no corruption found. It returns <b>1</b> if corruption is detected in any of the checked relations. An exit status of <b>2</b> indicates a server connection issue or another fatal error. This exit status is crucial for scripting and automated monitoring.


title: HISTORY
content:
The underlying <i>amcheck</i> extension, which provides the core integrity checking functions, was introduced in <b>PostgreSQL 10</b>. The <i>pg_amcheck</i> utility itself was introduced in <b>PostgreSQL 13</b>. Its creation provided a convenient command-line interface for database administrators to easily invoke and script these integrity checks, making proactive corruption detection more accessible than calling <i>amcheck</i> functions directly via SQL queries.


title: TLDR
content:
<b>Check a specific database</b>`pg_amcheck [dbname]`<br><b>Check all databases</b>`pg_amcheck [[-a|--all]]`<br><b>Check databases matching the specified pattern</b>`pg_amcheck [[-d|--database]] [pattern]`<br><b>Check specific tables within a database</b>`pg_amcheck [[-t|--table]] [pattern] [dbname]`<br><b>Check specific schemas within a database</b>`pg_amcheck [[-s|--schema]] [pattern] [dbname]`<br><b>Display help</b>`pg_amcheck [[-?|--help]]`


title: TLDR
content:
<b>Combine a full and incremental backup into one synthetic full backup</b>`pg_combinebackup [path/to/full_backup] [path/to/incremental_backup] [[-o|--output]] [path/to/output_directory]`<br><b>Perform a dry run to show what would be done, without creating files</b>`pg_combinebackup [[-n|--dry-run]] [path/to/full_backup] [path/to/incremental_backup] [[-o|--output]] [path/to/output_directory]`<br><b>Use hard links instead of copying files (faster, same filesystem required)</b>`pg_combinebackup [[-k|--link]] [path/to/full_backup] [path/to/incremental_backup] [[-o|--output]] [path/to/output_directory]`<br><b>Use file cloning (reflinks) for efficient copy if supported</b>`pg_combinebackup --clone [path/to/full_backup] [path/to/incremental_backup] [[-o|--output]] [path/to/output_directory]`<br><b>Use the copy_file_range system call for efficient copying</b>`pg_combinebackup --copy-file-range [path/to/full_backup] [path/to/incremental_backup] [[-o|--output]] [path/to/output_directory]`<br><b>Relocate a tablespace during reconstruction</b>`pg_combinebackup [path/to/backup1 path/to/backup2 ...] [[-T|--tablespace-mapping]] /[path/to/old_tablespace]=/[path/to/new_tablespace] [[-o|--output]] [path/to/output_directory]`<br><b>Disable fsync for faster but unsafe writes (testing only)</b>`pg_combinebackup [[-N|--no-sync]] [path/to/backup1 path/to/backup2 ...] [[-o|--output]] [path/to/output_directory]`<br><b>Show detailed debug output</b>`pg_combinebackup [[-d|--debug]] [path/to/backup1 path/to/backup2 ...] [[-o|--output]] [path/to/output_directory]`


title: SYNOPSIS
content:
<b>pg_controldata</b> [<i>option</i>...] [<i><I>data_directory</I></i>]<br><b>pg_controldata</b> [<b>-V</b> | <b>--version</b>]<br><b>pg_controldata</b> [<b>-?</b> | <b>--help</b>]


title: PARAMETERS
content:
<b><i>data_directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the PostgreSQL data directory. If not provided, the value of the <i>PGDATA</i> environment variable is used.<br><br><b><b>-D</b> <i>directory</i><br><b>--pgdata=</b><i>directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Explicitly sets the PostgreSQL data directory to use. This option overrides any value set by the <i>PGDATA</i> environment variable.<br><br><b><b>-V</b><br><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <b>pg_controldata</b> version and exits.<br><br><b><b>-?</b><br><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows help about <b>pg_controldata</b> command line arguments, then exits.<br><br>


title: DESCRIPTION
content:
The <b>pg_controldata</b> command is a crucial utility for inspecting the control file of a PostgreSQL database cluster. The control file is a small, binary file located within the <i>PGDATA</i> directory (typically in <i>PGDATA</i>/global/pg_control) that stores vital, cluster-wide metadata. This metadata includes the PostgreSQL version, system identifier, WAL segment size, checkpoint location, current WAL file, last successful shutdown time, and the current state of the database (e.g., in recovery, shut down cleanly).<br><br>Unlike many other PostgreSQL utilities, <b>pg_controldata</b> operates directly on the data directory and does not require the PostgreSQL server to be running. This makes it an invaluable tool for diagnostics, troubleshooting, and understanding the state of a database cluster, particularly after a crash, for recovery planning, or when the server fails to start. It allows administrators to quickly ascertain critical details about the cluster's health and configuration without engaging the server process, which can be essential for debugging startup issues or verifying backup integrity.


title: CAVEATS
content:
The command must be executed by the operating system user that owns the PostgreSQL data directory (typically 'postgres') to ensure proper file permissions.<br><br>The output format of <b>pg_controldata</b> is primarily for human readability and is not guaranteed to be stable across different PostgreSQL versions. Scripting against its output is generally discouraged due to potential changes in field names or order.<br><br>This utility only reads the control file; it does not modify any data within the cluster.<br><br>If the control file itself is corrupted or missing, <b>pg_controldata</b> may fail to execute or display incorrect information.


title: ENVIRONMENT VARIABLES
content:
The <b>PGDATA</b> environment variable can be set to specify the default PostgreSQL data directory. If this variable is set and no <b>-D</b> option or positional argument is provided, <b>pg_controldata</b> will use the path specified by <b>PGDATA</b>.


title: DIAGNOSTIC USE
content:
<b>pg_controldata</b> is an essential diagnostic tool for administrators. It is frequently used to quickly determine critical cluster parameters such as the PostgreSQL version, the system identifier (useful for checking compatibility with backups), the status of the last shutdown, and whether the cluster is currently in recovery. This information is crucial for troubleshooting startup failures, planning recovery operations, or verifying the integrity of a data directory.


title: HISTORY
content:
The <b>pg_controldata</b> utility has been a fundamental part of the PostgreSQL distribution since its early versions, serving as a vital diagnostic tool. Its core functionality of reading and displaying the contents of the control file has remained consistent. Over time, as new features and capabilities were added to PostgreSQL (e.g., support for data checksums, improved recovery mechanisms), the control file structure evolved to store this additional metadata. Consequently, <b>pg_controldata</b> was updated to reflect and display these new fields, providing administrators with more comprehensive insights into the cluster's state. Its development is tightly coupled with the PostgreSQL project's overall evolution, ensuring it always provides relevant information for the current database version.


title: TLDR
content:
<b>Display control information for a specific data directory</b>`pg_controldata [[-D|--pgdata]] [path/to/data]`<br><b>Display help</b>`pg_controldata [[-?|--help]]`<br><b>Display version</b>`pg_controldata [[-V|--version]]`


title: TLDR
content:
<b>Create a new logical replication slot</b>`pg_recvlogical [[-d|--dbname]] [dbname] [[-S|--slot]] [slot_name] --create-slot`<br><b>Start streaming changes from a logical replication slot to a file</b>`pg_recvlogical [[-d|--dbname]] [dbname] [[-S|--slot]] [slot_name] --start [[-f|--file]] [filename]`<br><b>Drop a logical replication slot</b>`pg_recvlogical [[-d|--dbname]] [dbname] [[-S|--slot]] [slot_name] --drop-slot`<br><b>Create a slot with two-phase commit enabled</b>`pg_recvlogical [[-d|--dbname]] [dbname] [[-S|--slot]] [slot_name] --create-slot [[-t|--enable-two-phase]]`<br><b>Display help</b>`pg_recvlogical [[-?|--help]]`


title: SYNOPSIS
content:
pg_resetwal [-f | --force] [-n | --no-sync] [-o OID] [-x XID] [-l WALFILE] [-m MXID] [-e MXOFFSET] [-D DATADIR] [--help | -V]


title: PARAMETERS
content:
<b>DATADIR</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the PostgreSQL data directory. This is a mandatory argument.<br><br><b>-f, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces <i>pg_resetwal</i> to proceed even if it cannot determine valid data from the control file. Use with extreme caution as it bypasses critical safety checks.<br><br><b>-n, --no-sync</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables syncing of output files to disk. This makes the operation faster but increases the risk of data loss if the system crashes immediately after running the command.<br><br><b>-o OID, --next-oid=OID</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manually sets the next object identifier (OID) for new objects. Defaults to the largest OID currently in the database, plus one.<br><br><b>-x XID, --next-transaction-id=XID</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manually sets the next transaction ID. Defaults to the largest known XID plus one. It is often necessary to increase this significantly to prevent transaction ID wraparound issues.<br><br><b>-l WALFILE, --next-wal-file=WALFILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manually sets the next WAL file name to be used. This allows specifying a WAL file name that is greater than any currently existing one, preventing PostgreSQL from trying to read older, potentially corrupted, WAL segments.<br><br><b>-m MXID, --next-multi-xid=MXID</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the next multixact ID. Defaults to the largest known multixact ID plus one.<br><br><b>-e MXOFFSET, --next-multi-xact-offset=MXOFFSET</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the next multixact offset. Defaults to the largest known multixact offset plus one.<br><br><b>-D DATADIR, --pgdata=DATADIR</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the data directory. This can also be given as a non-option argument.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows help about <i>pg_resetwal</i> command line arguments.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <i>pg_resetwal</i> version and exits.<br><br>


title: DESCRIPTION
content:
<i>pg_resetwal</i> is a PostgreSQL utility designed for emergency recovery when the database write-ahead log (WAL) files become corrupted or unrecoverable, preventing the PostgreSQL server from starting. It forcibly resets the WAL and control file information, allowing the server to restart, though potentially at the cost of losing some data that was not yet flushed to disk. This command should only be used as a last resort when all other recovery methods have failed, and after careful consideration of the risks, as it can lead to data inconsistencies. It is crucial to understand that <i>pg_resetwal</i> does not repair data corruption; it merely bypasses the WAL-related startup checks, effectively telling PostgreSQL to start with a 'clean slate' for WAL, which might leave the underlying data files in an inconsistent state relative to the point of crash. After using this utility, a full database dump and restore, or a fresh `initdb` and restore from backup, is highly recommended.


title: CAVEATS
content:
<i>pg_resetwal</i> is an emergency tool and should be used with extreme caution. It can lead to irreversible data loss or inconsistencies if not used correctly or if the underlying data files are themselves corrupted. It should only be attempted when the PostgreSQL server fails to start due to WAL-related errors and and other recovery options (like restoring from a recent backup) are not feasible. After using <i>pg_resetwal</i>, it is highly recommended to immediately perform a full database dump (<code>pg_dumpall</code>) and then initialize a new database cluster (<code>initdb</code>) and restore the data from the dump. Do not rely on a cluster reset with this tool for long-term production use without thorough validation.


title: WHEN TO USE
content:
Use <i>pg_resetwal</i> when the PostgreSQL server fails to start due to corrupted WAL files, typically manifesting as errors like 'invalid primary checkpoint record' or 'WAL contains unexpected data'. This happens when the server crashed badly and the WAL files are left in an unrecoverable state, or if disk corruption affects the WAL segments.


title: POST-RESET ACTIONS
content:
After successfully running <i>pg_resetwal</i> and restarting the server, the database might be in an inconsistent state. The recommended actions are:<br>1. Immediately take a full logical backup using <i>pg_dumpall</i>.<br>2. Evaluate the integrity of the data.<br>3. If data integrity is critical, consider initializing a new database cluster and restoring from the backup, or restoring from a prior physical backup if available. This ensures a clean and consistent database state.


title: HISTORY
content:
The <i>pg_resetwal</i> utility was introduced in PostgreSQL 10, replacing the earlier utility named <i>pg_resetxlog</i>. The name change was made to better reflect its actual purpose: resetting only the Write-Ahead Log (WAL) and associated control file information, rather than suggesting it resets the entire transaction log, which could be misleading. This renaming aimed to improve clarity and avoid confusion among database administrators. Functionality largely remained consistent, adapting to internal WAL format changes.


title: TLDR
content:
<b>Reset the WAL and control information for a specific data directory</b>`pg_resetwal [[-D|--pgdata]] [path/to/data]`<br><b>Perform a dry run</b>`pg_resetwal [[-D|--pgdata]] [path/to/data] [[-n|--dry-run]]`<br><b>Force the WAL and control information reset</b>`pg_resetwal [[-D|--pgdata]] [path/to/data] [[-f|--force]]`<br><b>Display help</b>`pg_resetwal [[-?|--help]]`<br><b>Display version</b>`pg_resetwal [[-V|--version]]`


title: SYNOPSIS
content:
<b>pg_rewind</b> [ <i>OPTION</i>... ] <b>-D</b> <i>TARGET_DATA_DIRECTORY</i> { <b>--source-data-directory=</b><i>SOURCE_DATA_DIRECTORY</i> | <b>--source-server=</b><i>CONNSTR</i> }


title: PARAMETERS
content:
<b><b>-D</b> <i>directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the target data directory that needs to be synchronized. This is the cluster that has diverged and will be modified to match the source. This option is mandatory.<br><br><b><b>--target-data-directory=</b><i>directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long form of the <b>-D</b> option, specifying the target data directory.<br><br><b><b>--source-data-directory=</b><i>directory</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the path to the source data directory. This is used when the source cluster is available as a local file system directory (e.g., a stopped primary or another standby).<br><br><b><b>--source-server=</b><i>CONNSTR</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a connection string for connecting to a running source PostgreSQL server. This allows <b>pg_rewind</b> to operate remotely, fetching necessary data and WAL files over a network connection.<br><br><b><b>-N</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables the forced synchronization of WAL files to disk using <b>fsync()</b>. This can speed up the operation but is unsafe for production use and should only be used for testing.<br><br><b><b>--no-sync</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long form of the <b>-N</b> option.<br><br><b><b>-P</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables progress reporting, showing the current status and progress of the operation.<br><br><b><b>--progress</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long form of the <b>-P</b> option.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output, providing more detailed messages about the operation's steps.<br><br><b><b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long form of the <b>-v</b> option.<br><br><b><b>-V</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <b>pg_rewind</b> version and exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long form of the <b>-V</b> option.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows help about <b>pg_rewind</b> command line arguments and exits.<br><br>


title: DESCRIPTION
content:
The <b>pg_rewind</b> utility is designed to quickly synchronize a PostgreSQL cluster that has diverged from another copy of the same cluster. This scenario typically arises after a failover event where a standby server is promoted to become the new primary, and the original primary server, now outdated, needs to be brought back online, usually as a new standby for the promoted server. <br><br>Instead of performing a full base backup (which can be time-consuming and resource-intensive for large databases), <b>pg_rewind</b> intelligently identifies the point of divergence between the two clusters. It then copies only the changed data blocks and necessary Write-Ahead Log (WAL) files from the source cluster to the target cluster, effectively 'rewinding' the target to a state compatible with the source's timeline. This makes the target cluster ready to start as a new standby server, or even potentially as a new primary if needed, significantly reducing recovery time and network bandwidth usage.


title: CAVEATS
content:
<ul><br><li>The <i>target</i> server must be cleanly shut down before running <b>pg_rewind</b>; it cannot be crash-recovered.</li><br><li>The <i>source</i> server (either the running instance or the data directory) must have <b>wal_log_hints</b> enabled in its <b>postgresql.conf</b>.</li><br><li><b>full_page_writes</b> must be <b>on</b> in the <i>source</i> configuration (which is the default).</li><br><li>The <i>target</i> data directory must not contain any symlinks pointing outside of the data directory itself.</li><br><li><b>pg_rewind</b> cannot be used to rewind a server that has already been rewound from the <i>same</i> source without an intermediate full base backup or a new timeline diverging from the source.</li><br><li>The utility rewrites files directly in the target data directory, so ensure you have proper backups before use.</li><br></ul>


title: PREREQUISITES
content:
For <b>pg_rewind</b> to function correctly, several conditions must be met:<br><ul><br><li>The target cluster must be shut down cleanly, not in a crash-recovered state.</li><br><li>The source cluster must have <b>wal_log_hints = on</b> in its <b>postgresql.conf</b>. This enables the tracking of page-level changes needed by <b>pg_rewind</b>.</li><br><li>The source's timeline history must encompass or be ahead of the target's timeline at the point of divergence.</li><br><li>Sufficient disk space must be available on the target system for the copied files.</li><br></ul>


title: HOW IT WORKS
content:
<b>pg_rewind</b> operates by identifying the common ancestor checkpoint between the target and source clusters. It then performs the following steps:<br><ul><br><li>It scans the data directories of both the source and target to find all data blocks that have changed since the last common checkpoint.</li><br><li>It copies the 'rewound' blocks (those that are different on the target compared to the source and needed to be reverted or updated) from the source to the target.</li><br><li>It copies all necessary WAL segments from the source that are required to bring the target up to the current state of the source's timeline. This includes WAL files generated after the common ancestor.</li><br><li>After completion, the target data directory is in a state where it can be started as a standby of the source cluster.</li><br></ul>


title: HISTORY
content:
<b>pg_rewind</b> was introduced in <b>PostgreSQL 9.3</b>. It was developed to significantly improve the recovery process for failover scenarios. Before its introduction, if a primary server failed and a standby was promoted, the former primary could only be brought back online as a new standby by taking a full new base backup from the new primary. <b>pg_rewind</b> revolutionized this by providing a much faster and more efficient way to reconcile the divergent histories, saving considerable time and bandwidth, especially for large databases.


title: TLDR
content:
<b>Synchronize target directory with source directory</b>`pg_rewind [[-D|--target-pgdata]] [path/to/target_data] --source-pgdata [path/to/source_data]`<br><b>Synchronize target with source server using connection string</b>`pg_rewind [[-D|--target-pgdata]] [path/to/target_data] --source-server [connstr]`<br><b>Perform a dry run</b>`pg_rewind [[-D|--target-pgdata]] [path/to/target_data] --source-pgdata [path/to/source_data] [[-n|--dry-run]]`<br><b>Show progress during synchronization</b>`pg_rewind [[-D|--target-pgdata]] [path/to/target_data] --source-pgdata [path/to/source_data] [[-P|--progress]]`<br><b>Display help</b>`pg_rewind [[-?|--help]]`


title: PARAMETERS
content:
<b>-b, --bkp-details</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output full-page write and record-image details for deeper analysis.<br><br><b>-E LSN, --end=LSN</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stop reading WAL records at the specified LSN (exclusive).<br><br><b>-f, --follow</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Keep reading until interrupted, useful for monitoring live WAL activity.<br><br><b>-n N, --limit=N</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limit the amount of WAL to dump to the first N records found.<br><br><b>-p PATH, --path=PATH</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the path to the WAL directory or a specific WAL file to read from.<br><br><b>-r RmgrName, --rmgr=RmgrName</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only display records originating from a specific resource manager (e.g., 'Heap', 'XLog').<br><br><b>-s LSN, --start=LSN</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Start reading WAL records from the specified LSN.<br><br><b>-t TIMELINEID, --timeline=TIMELINEID</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the timeline ID from which to read WAL records.<br><br><b>-V, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output version information, then exit.<br><br><b>-w, --full-page-writes</b><br>&nbsp;&nbsp;&nbsp;&nbsp;(Deprecated) Output full-page write details. Use <I>-b</I> instead.<br><br><b>-z[=record], --stats[=record]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output summary statistics about the WAL records dumped, optionally per record type.<br><br><b>-?, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show a help message and exit.<br><br>


title: DESCRIPTION
content:
<b>pg_waldump</b> is a PostgreSQL utility designed to display the contents of Write-Ahead Log (WAL) files in a human-readable format. WAL files record all changes made to a PostgreSQL database, ensuring data integrity and durability. By dumping these files, administrators and developers can analyze the sequence of operations, troubleshoot replication issues, understand database activity, or perform forensic analysis.<br><br>The utility can read WAL files from a specified directory (usually <I>pg_wal</I>) or from specific file paths. It decodes various record types, providing details like transaction IDs, Log Sequence Numbers (LSNs), and information about the operations performed, such as table insertions, updates, or deletions, as well as checkpoint records and full page writes. This tool is invaluable for deep-dive investigations into database behavior and understanding the underlying mechanics of PostgreSQL.


title: CAVEATS
content:
Using <I>pg_waldump</I> requires read access to the WAL files, which might be restricted for security reasons. The output can be extremely verbose, making filtering with LSN ranges (<I>-s</I>, <I>-E</I>) or resource managers (<I>-r</I>) essential for practical use. Understanding the detailed output requires familiarity with PostgreSQL's internal WAL record structures. Be cautious when using <I>--follow</I> on a busy system, as it can consume resources.


title: LSN (LOG SEQUENCE NUMBER)
content:
LSNs are an internal PostgreSQL concept used to represent a precise position in the WAL stream. They are critical for point-in-time recovery, replication, and understanding the exact order of operations within the database. <I>pg_waldump</I> leverages LSNs to specify start and end points for dumping, allowing users to inspect specific ranges of database activity.


title: RESOURCE MANAGERS
content:
PostgreSQL organizes WAL records by 'resource managers,' which are components responsible for specific parts of the database system (e.g., <I>Heap</I> for table data, <I>XLog</I> for WAL management itself, <I>Btree</I> for index operations). The <I>-r</I> option allows users to filter WAL output by these managers, enabling focused analysis on particular aspects of database behavior.


title: DEBUGGING AND FORENSICS
content:
<I>pg_waldump</I> is an indispensable tool for debugging mysterious database behavior, understanding the impact of specific transactions, or performing post-mortem analysis after a crash or data corruption incident. It provides the low-level details needed to reconstruct events, identify problematic operations, and ensure data integrity.


title: HISTORY
content:
<I>pg_waldump</I> has been a fundamental utility within the PostgreSQL ecosystem for many major versions, continually evolving to provide more robust and detailed insights into WAL records. Its functionality has expanded in parallel with new WAL record types and features introduced in PostgreSQL, offering increasingly granular options for filtering and statistical analysis to aid in database administration and debugging.


title: TLDR
content:
<b>Display WAL records from a specific segment</b>`pg_waldump [start_segment]`<br><b>Display WAL records between two segments</b>`pg_waldump [start_segment] [end_segment]`<br><b>Specify the WAL file directory</b>`pg_waldump [start_segment] [end_segment] [[-p|--path]] [path]`<br><b>Follow new WAL entries as they arrive</b>`pg_waldump [start_segment] [end_segment] [[-f|--follow]]`<br><b>Limit number of records shown</b>`pg_waldump [start_segment] [end_segment] [[-n|--limit]] [count]`<br><b>Display summary statistics instead of individual records</b>`pg_waldump [start_segment] [end_segment] [[-z|--stats]]`<br><b>Filter by resource manager</b>`pg_waldump [start_segment] [end_segment] [[-r|--rmgr]] [rmgr_name]`<br><b>Display help</b>`pg_waldump [[-?|--help]]`


title: PARAMETERS
content:
<b><b>--list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all current configuration settings, including their values and the scope (global/local) from which they originate.<br><br><b><b>--local</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies that the configuration setting should be applied to or retrieved from the <I>local</I> project's configuration file (e.g., <code>pyproject.toml</code> or <code>poetry.toml</code> in the project root).<br><br><b><b>--global</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies that the configuration setting should be applied to or retrieved from the <I>global</I> Poetry configuration file (typically located in the user's home directory).<br><br><b><b>--unset</b>, <b>--rm</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Unsets or removes a specified configuration setting. If no scope (<code>--local</code> or <code>--global</code>) is provided, it defaults to unsetting locally.<br><br><b><b>--repo</b>, <b>--repository</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Manages configuration settings specific to a defined <I>repository</I>, typically used for configuring repository URLs or authentication credentials. Note: <code>--repository</code> is deprecated; use <code>--repo</code> instead.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the <code>config</code> command, showing available options and usage patterns.<br><br><b><b>--config</b> <I>path</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative path to the configuration file that Poetry should use for the current command execution.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all output messages, making the command execution silent.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of messages. Can be used up to three times (<code>-vvv</code>) for more detailed output, including debug information.<br><br>


title: DESCRIPTION
content:
The <b>poetry config</b> command is an essential tool for inspecting, modifying, and unsetting various configuration settings within the <I>Poetry</I> Python dependency management ecosystem. These settings dictate aspects such as virtual environment creation and location, package installation behavior, repository credentials, and general workflow preferences.<br><br>Users can leverage this command to list all current configurations, retrieve the value of a specific setting, or update a setting with a new value. It supports managing configurations at different scopes: <b>global</b> (affecting all Poetry projects), <b>local</b> (specific to the current project), and for defined <b>repositories</b>. This flexibility allows users to tailor Poetry's behavior precisely to their development environment and project requirements, ensuring consistency and efficiency.


title: CAVEATS
content:
The <code>--repository</code> option is deprecated; users should prefer <code>--repo</code>. When setting configuration values, <I>local</I> settings (applied with <code>--local</code>) will always take precedence over <I>global</I> settings (applied with <code>--global</code>). <br><br>Care should be exercised when managing sensitive information, such as API tokens; Poetry encrypts these in its configuration files, but awareness of access and scope is still crucial. Always ensure you understand the intended scope of the setting you are modifying to prevent unintended consequences across projects.


title: CONFIGURATION SCOPES
content:
<br>Poetry configuration can be managed at different levels, each affecting the tool's behavior in specific contexts:<ul><li><i><b>Global:</b></i> Settings applied using <code>--global</code> affect all Poetry projects on the system. These are typically stored in Poetry's global configuration file (e.g., <code>~/.config/pypoetry/config.toml</code> on Linux).</li><li><i><b>Local:</b></i> Settings applied using <code>--local</code> affect only the current project. They are stored within the project's <code>pyproject.toml</code> or a dedicated <code>poetry.toml</code> file. Local settings take precedence over global settings.</li><li><i><b>Repository:</b></i> Specific settings for defined package repositories, primarily for authentication details, are stored within the global configuration but are tied to specific repository names.</li></ul>


title: USAGE PATTERNS
content:
<br>The <code>poetry config</code> command offers various patterns for interaction:<ul><li><b>Display all settings:</b> <code>poetry config --list</code></li><li><b>Get a specific setting:</b> <code>poetry config <I>setting-key</I></code> (e.g., <code>poetry config virtualenvs.create</code>)</li><li><b>Set a setting:</b> <code>poetry config <I>setting-key</I> <I>setting-value</I></code> (e.g., <code>poetry config virtualenvs.in-project true --local</code>)</li><li><b>Unset a setting:</b> <code>poetry config --unset <I>setting-key</I></code> (e.g., <code>poetry config --unset http-basic.example.username --global</code>)</li></ul>


title: HISTORY
content:
Poetry, created by Sébastien Eustace in 2017, quickly established itself as a modern Python dependency management tool. The <code>config</code> command has been a foundational component since Poetry's early development, providing users with the necessary means to customize its behavior. Its features have evolved alongside Poetry itself, particularly in areas such as virtual environment management, secure repository authentication, and support for new installation methodologies, reflecting the dynamic needs of Python project development.


title: TLDR
content:
<b>List current configuration</b>`poetry config --list`<br><b>Remove the a previously set setting</b>`poetry config [config_key] --unset`<br><b>See the value of a specific setting</b>`poetry config [config_key]`<br><b>Change or add a new configuration setting by passing a value after the setting's name</b>`poetry config [config_key] [config_value]`<br><b>Migrate outdated configuration settings</b>`poetry config --migrate`<br><b>Set/Get settings that are specific to a project</b>`poetry config --local`


title: PARAMETERS
content:
<b><i>command</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The specific Poetry subcommand for which to display detailed help. If omitted, `<b>poetry help</b>` lists all available top-level commands and their brief descriptions.<br><br>


title: DESCRIPTION
content:
The `<b>poetry-help</b>` command refers to the integrated help system of <b>Poetry</b>, the powerful Python dependency management and packaging tool. It is not a standalone executable but rather the functionality accessed through `<b>poetry help</b>` or `<b>poetry --help</b>` from your terminal.<br><br>This system is crucial for navigating <b>Poetry</b>'s extensive capabilities, allowing users to understand how to interact with the tool, manage projects, and troubleshoot issues. When invoked without any arguments, `<b>poetry help</b>` provides a comprehensive list of all available <b>Poetry</b> subcommands, each accompanied by a brief description. This overview helps users quickly identify the command relevant to their task, such as `<b>add</b>` for dependencies, `<b>install</b>` for project setup, or `<b>publish</b>` for distributing packages.<br><br>For more specific guidance, `<b>poetry-help</b>` allows users to query individual subcommands. By executing `<b>poetry help &lt;command&gt;</b>` (e.g., `<b>poetry help install</b>`), the system displays detailed usage instructions, all available options, arguments, and sometimes examples pertinent to that specific command. This granular level of information ensures that users can effectively utilize every feature of <b>Poetry</b>, making it an indispensable resource for both new and experienced Python developers.


title: CAVEATS
content:
The `<b>poetry-help</b>` command is not a standalone executable file in the traditional Linux sense. It is an integral part of the `<b>poetry</b>` command-line interface and must be invoked through `<b>poetry help</b>` or `<b>poetry --help</b>`. Therefore, `<b>poetry</b>` must be installed and accessible in your system's PATH for this help functionality to work. The output of the help system is dynamic and depends on the specific version of <b>Poetry</b> installed, reflecting the commands and options available in that release.


title: TYPES OF HELP OUTPUT
content:
The `<b>poetry help</b>` command provides two main types of output, depending on how it's invoked:<br>1. When used without arguments (`<b>poetry help</b>` or `<b>poetry --help</b>`), it displays a general overview, listing all available <b>Poetry</b> commands, their brief descriptions, and global options.<br>2. When used with a specific subcommand as an argument (e.g., `<b>poetry help add</b>` or `<b>poetry help publish</b>`), it provides detailed usage instructions, all options, arguments, and sometimes examples pertinent to that particular subcommand, offering in-depth guidance for its use.


title: HISTORY
content:
The `<b>poetry-help</b>` system's history is intertwined with the development of <b>Poetry</b> itself, which emerged in late 2017 / early 2018 as a modern solution for Python project management. Built using frameworks that typically offer robust command-line interface capabilities (like Cleo, a port of Symfony Console for Python), <b>Poetry</b>'s help system was designed from the outset to be comprehensive and user-friendly. As <b>Poetry</b> gained popularity and its feature set expanded, the help documentation has continually evolved, incorporating detailed explanations for new commands, options, and functionalities. This iterative improvement underscores <b>Poetry</b>'s commitment to providing clear and accessible self-documentation, making it easier for developers to leverage its powerful tools.


title: TLDR
content:
<b>Display global help</b>`poetry help`<br><b>Display help for a specific command</b>`poetry help [config|show|...]`


title: SYNOPSIS
content:
<b>poetry source</b> <I>command</I> [<I>options</I>] [<I>arguments</I>]<br><br>Commands:<br><b>poetry source add</b> <I>name</I> <I>url</I> [<b>--default</b>|<b>--secondary</b>|<b>--priority</b>]<br><b>poetry source remove</b> <I>name</I><br><b>poetry source list</b><br><b>poetry source show</b> <I>name</I>


title: PARAMETERS
content:
<b><b>add</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a new package source to the project's configuration.<br><br><b><i>name</i> (for <b>add</b>, <b>remove</b>, <b>show</b>)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The unique name identifying the package source.<br><br><b><i>url</i> (for <b>add</b>)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;The URL of the package repository to be added.<br><br><b><b>--default</b> (for <b>add</b>)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Designates this source as the primary default repository for all packages. Only one source can be default.<br><br><b><b>--secondary</b> (for <b>add</b>)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Designates this source as secondary. It is used to find packages only if they are not found in the default source or explicitly specified sources.<br><br><b><b>--priority</b> (for <b>add</b>)</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Designates this source as priority. It is consulted before the default source for packages explicitly marked for this source or if found here first.<br><br><b><b>remove</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes an existing package source by its name from the project's configuration.<br><br><b><b>list</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all currently configured package sources for the project, showing their names and URLs.<br><br><b><b>show</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays detailed information for a specific package source, including its name, URL, and type.<br><br>


title: DESCRIPTION
content:
<b>poetry-source</b> is a subcommand of the <b>Poetry</b> Python dependency management tool, used to manage custom package sources for your project. It allows you to add, remove, list, and show details for package repositories beyond the default PyPI. This is crucial for projects relying on private package indexes, internal PyPI mirrors, or alternative public repositories.<br><br>By configuring sources, you dictate where <b>Poetry</b> looks for packages when resolving and installing dependencies, providing fine-grained control over your project's supply chain. It modifies the <b>pyproject.toml</b> file to persist source configurations, ensuring your project's dependencies are fetched from the correct locations.


title: CAVEATS
content:
<b>poetry-source</b> requires <b>Poetry</b> to be installed and accessible within your environment. Changes made by this command are saved directly to your project's <b>pyproject.toml</b> file, so ensure this file is version-controlled. Misconfiguring sources can lead to dependency resolution issues, where packages are not found or unexpected versions are installed. Understanding the precise order and priority of different source types (default, priority, secondary) is crucial for complex dependency management.


title: SOURCE RESOLUTION ORDER
content:
When <b>Poetry</b> attempts to resolve and install packages, it consults configured sources in a specific order: <i>priority</i> sources are checked first, then the <i>default</i> source, and finally <i>secondary</i> sources. If a package is explicitly configured to come from a specific source (e.g., using `poetry add package --source <name>`), that particular source is used regardless of the general order. This hierarchical approach allows for granular control over where dependencies are fetched.


title: CONFIGURATION STORAGE
content:
All sources configured via <b>poetry-source</b> are stored in the <code>[tool.poetry.source]</code> or <code>[[tool.poetry.source]]</code> sections of your project's <b>pyproject.toml</b> file. This ensures that the source configuration is part of your project's definition, making it portable and easily shareable across different development environments and team members.


title: HISTORY
content:
The <b>poetry-source</b> command has been a fundamental part of <b>Poetry</b> since its early development. <b>Poetry</b> emerged as a modern alternative to traditional Python packaging tools, aiming to provide a more robust and deterministic approach to dependency management. The ability to manage multiple package sources was an essential feature from the start, addressing the common need for private package repositories in enterprise and open-source projects, and evolving with features like source priority and different source types to offer greater flexibility in dependency resolution.


title: TLDR
content:
<b>Add a source configuration</b>`poetry source add [source_name] [source_url]`<br><b>Set the priority of a source</b>`poetry source add --priority [primary|supplemental|explicit] [source_name] [source_url]`<br><b>Display info for all sources</b>`poetry source show`<br><b>Display info for a specific source</b>`poetry source show [source_name]`<br><b>Remove a source from your pyproject.toml file</b>`poetry source remove [source_name]`


title: TLDR
content:
<b>Start the server on a specific port (defaults to 5432)</b>`postgres -p [5433]`<br><b>Set a runtime parameter (short form)</b>`postgres -c [shared_buffers=128MB]`<br><b>Set a runtime parameter (long form)</b>`postgres --[shared-buffers]=[128MB]`<br><b>Start in single-user mode for a specific database (defaults to the user name)</b>`postgres --single -D [path/to/datadir] [my_database]`


title: TLDR
content:
<b>Describe ANSI escape sequences from a string</b>`printf "[\x1b[38;5;4mCiao, \x1b[1;7mBaby.\x1b[0m\n]" | sequin`<br><b>Inspect colorized output from another command (e.g., ls)</b>`ls -l --color=always | sequin`<br><b>Examine a file containing ANSI sequences (e.g., a TUI golden file)</b>`cat [path/to/file.golden] | sequin`<br><b>Execute a command directly within a fake TTY to inspect its output</b>`sequin -- [ls -l go.*]`<br><b>Highlight raw ANSI sequences inline for easier reading</b>`git -c status.color=always status -sb | sequin -r`


title: SYNOPSIS
content:
<I>No standard synopsis can be provided as <b>tgcloud</b> is not a recognized Linux command. If it exists, its syntax would depend entirely on its custom implementation.</I>


title: PARAMETERS
content:
<b><I>N/A</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;<I>No standard parameters are defined for this non-existent command. Any parameters would be entirely custom to its specific implementation.</I><br><br>


title: DESCRIPTION
content:
The command <b>tgcloud</b> is not a standard Linux command found in common distributions like Ubuntu, Debian, Fedora, or RHEL, nor does it have an official man page.<br>This suggests several possibilities for its existence:<br>1.  It could be a <I>custom-developed script or program</I> specific to a particular organization, project, or user.<br>2.  It might be an <I>alias</I> defined in a user's shell configuration (e.g., .bashrc, .zshrc) that points to another command or a more complex script.<br>3.  It could be a <I>typo</I> for a similar-sounding, legitimate command.<br>4.  It might belong to a <I>highly specialized or proprietary software package</I> that is not widely distributed or publicly documented.<br>Without specific context or access to its source code, its exact functionality, syntax, parameters, and historical usage cannot be determined. Users encountering this command should investigate its origin within their specific environment.


title: CAVEATS
content:
<I>Users encountering <b>tgcloud</b> should be aware that it is not a natively supported or widely documented Linux command.<br>Its behavior, security implications, and stability are entirely dependent on its specific, custom implementation.<br>It is crucial to verify its origin and functionality within the environment where it is found, by checking shell aliases (e.g., <code>alias tgcloud</code>), searching for custom scripts in <code>PATH</code> directories, or consulting internal documentation if it is part of an organizational setup.</I>


title: HOW TO INVESTIGATE A NON-STANDARD COMMAND
content:
If you encounter a command like <b>tgcloud</b> and need to understand its function, you can use the following shell commands to investigate its nature:<br><ul><li><code><I>type tgcloud</I></code>: This command will tell you if it's an alias, function, built-in, or an executable file.<br><li><code><I>which tgcloud</I></code>: If it's an executable, this will show its full path.<br><li><code><I>alias tgcloud</I></code>: If it's an alias, this will show what command it's an alias for.</ul><br>If it's a script, examining its contents (e.g., <code><I>cat $(which tgcloud)</I></code>) can reveal its purpose and syntax.


title: HISTORY
content:
<I>No public history or development timeline exists for <b>tgcloud</b> due to its non-standard status. Its genesis and evolution would be specific to its creator, project, or organizational context, rather than a publicly tracked Linux utility.</I>


title: TLDR
content:
<b>Upload a file to a chat with a caption</b>`tgcloud [[-m|--mode]] upload [[-n|--name]] [session_name] [[-u|--username]] [chat_id] [[-p|--path]] [path_of_the_file] [[-c|--caption]] [caption]`<br><b>Download a file from a chat and store it in path/to/store with a caption</b>`tgcloud [[-m|--mode]] download [[-n|--name]] [session_name] [[-u|--username]] [chat_id] [[-p|--path]] [path/to/store] [[-c|--caption]] [caption]`


title: PARAMETERS
content:
<b>-u, --user</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies that the target entity is a user. Followed by a user ID or @username.<br><br><b>-c, --chat</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies that the target entity is a chat (group, supergroup, or private chat). Followed by a chat ID.<br><br><b>-C, --channel</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies that the target entity is a channel. Followed by a channel ID or @channelusername.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays more detailed and extensive information about the specified entity.<br><br><b>-j, --json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the information in JSON format for easier programmatic parsing, if supported by the specific implementation.<br><br><b>-m, --message</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>(Less common)</i> Specifies a message ID to retrieve message-specific information.<br><br>


title: DESCRIPTION
content:
The <b>tginfo</b> command, though <i>not a standard Linux utility</i>, historically refers to a tool found within certain specialized or deprecated Telegram command-line interfaces (e.g., <code>tg-cli</code>). Its primary purpose is to fetch and display detailed information about various Telegram entities, such as users, chats (private chats, groups, supergroups), and channels. It serves as a diagnostic or informational resource for developers and advanced users who interact with the Telegram API directly from the terminal. The output typically includes unique IDs, names, types, status, and other relevant metadata. The exact availability, functionality, and syntax of <b>tginfo</b> are entirely dependent on the specific Telegram client or API wrapper it's part of, as it is not part of the core GNU/Linux utilities.


title: CAVEATS
content:
<b>tginfo</b> is <b>not a standard Linux command</b>. Its presence and functionality are exclusive to specific, often third-party or historical, Telegram command-line clients (like the largely deprecated <code>tg-cli</code>). Users should verify if such a command is installed and available in their particular environment. Modern Telegram interaction typically relies on official applications, Telegram Desktop, or API libraries (like TDLib), rather than a standalone <b>tginfo</b> utility.


title: USAGE CONTEXT
content:
If you encounter a system or script using <b>tginfo</b>, it likely indicates a reliance on an older Telegram command-line client or a custom wrapper around the Telegram API. Ensure the underlying client is properly configured and authenticated with your Telegram account for <b>tginfo</b> to function correctly.


title: HISTORY
content:
The concept of a <b>tginfo</b> command rose to prominence with the advent of early, unofficial command-line Telegram clients, most notably <code>tg-cli</code>. These clients provided a way to interact with the Telegram network directly from the terminal before official command-line tools or robust API libraries were widely available. <b>tginfo</b> was a crucial utility within these environments, enabling users to inspect profiles, chat details, and channel information. As Telegram's API matured and official developer tools became prevalent, the reliance on such specific, often community-maintained, tools like <code>tg-cli</code> and its included commands diminished. Modern Telegram development primarily uses official API wrappers and SDKs rather than a standalone <b>tginfo</b> command.


title: TLDR
content:
<b>Search for all files inside a Telegram conversation based on their filename or caption</b>`tginfo [[-n|--name]] [session_name] [[-u|--username]] [chat_id] [[-s|--search]] "[query]"`<br><b>Get info for all media inside a Telegram chat</b>`tginfo [[-n|--name]] [session_name] [[-u|--username]] [chat_id]`


title: SYNOPSIS
content:
<b>tgsend</b> [<i>OPTIONS</i>] <i>&lt;message_text&gt;</i><br><b>tgsend</b> --chatid <i>&lt;chat_id&gt;</i> --token <i>&lt;bot_token&gt;</i> <i>&lt;message_text&gt;</i><br><b>tgsend</b> --file <i>&lt;file_path&gt;</i> --chatid <i>&lt;chat_id&gt;</i> --token <i>&lt;bot_token&gt;</i> [--caption <i>&lt;caption_text&gt;</i>]


title: PARAMETERS
content:
<b><i>&lt;message_text&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The actual text content to be sent to the Telegram chat. This is often the primary argument when sending a text message.<br><br><b>--token <i>&lt;bot_token&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the unique API token for your Telegram bot. This token is crucial for authenticating your requests with the Telegram Bot API.<br><br><b>--chatid <i>&lt;chat_id&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the target identifier for the message. This can be a user's ID, a group chat ID, or a channel username (e.g., <i>@mychannel</i>).<br><br><b>--file <i>&lt;file_path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends a local file (e.g., photo, document, video) instead of a plain text message. The file will be uploaded to Telegram.<br><br><b>--caption <i>&lt;caption_text&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Provides a text caption for a file sent using the <i>--file</i> option.<br><br><b>--parse-mode <i>&lt;mode&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the parse mode for the message text. Common modes include <i>MarkdownV2</i> or <i>HTML</i>, allowing for rich text formatting.<br><br><b>--disable-notification</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sends the message silently without triggering a sound notification on the recipient's device.<br><br><b>--disable-web-page-preview</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables link previews for URLs included in the message text.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief usage message and available options for the <i>tgsend</i> command.<br><br>


title: DESCRIPTION
content:
<i>tgsend</i> is a command-line utility, most commonly implemented as a shell script, designed to send messages to Telegram chats or channels. It leverages the Telegram Bot API to deliver text messages, and often files, directly from a Linux terminal. This utility is particularly useful for integrating Telegram notifications into automated scripts, cron jobs, or system monitoring alerts, allowing for real-time communication of system events or data without requiring a graphical user interface. It provides a simple, programmatic way to interact with Telegram, enabling seamless integration into various system automation workflows.


title: CAVEATS
content:
The <i>tgsend</i> command is not a standard, built-in Linux utility. Its implementation varies widely, typically being a custom shell script leveraging <i>curl</i> and the Telegram Bot API. Users must obtain a bot token from Telegram's BotFather and know the target chat ID. Bot tokens should be handled securely, preferably not hardcoded in publicly accessible scripts. It requires internet connectivity to communicate with Telegram's servers.


title: SETUP REQUIREMENTS
content:
To use <i>tgsend</i>, you need to:<br>1. Create a new bot via Telegram's BotFather to obtain your unique <i>&lt;bot_token&gt;</i>.<br>2. Get the <i>&lt;chat_id&gt;</i> of the user, group, or channel you want to send messages to. For a user, simply send a message to your bot and then access the Telegram Bot API endpoint <i>https://api.telegram.org/bot&lt;bot_token&gt;/getUpdates</i> (replace <i>&lt;bot_token&gt;</i> with yours) to find the <i>chat_id</i>.


title: EXAMPLE USAGE
content:
Send a simple text message:<br><b>tgsend</b> --token <i>"YOUR_BOT_TOKEN"</i> --chatid <i>"YOUR_CHAT_ID"</i> <i>"Hello from my Linux server!"</i><br><br>Send a message with Markdown formatting:<br><b>tgsend</b> --token <i>"YOUR_BOT_TOKEN"</i> --chatid <i>"YOUR_CHAT_ID"</i> --parse-mode <i>MarkdownV2</i> <i>"*Important*: Server alert! CPU usage is at _90%_."</i><br><br>Send a file with a caption:<br><b>tgsend</b> --token <i>"YOUR_BOT_TOKEN"</i> --chatid <i>"YOUR_CHAT_ID"</i> --file <i>/var/log/syslog</i> --caption <i>"Latest syslog file"</i>


title: HISTORY
content:
The <i>tgsend</i> command, in its various forms, emerged as a popular, community-driven solution following the introduction of the Telegram Bot API. As system administrators and developers sought ways to integrate real-time notifications into their automation pipelines, custom shell scripts mimicking a command-line interface for Telegram became prevalent. Its development is decentralized, with numerous custom implementations evolving to meet specific needs for sending messages, files, and other bot API interactions directly from the terminal or automated scripts.


title: TLDR
content:
<b>Send a message to a chat</b>`tgsend [[-n|--name]] [session_name] [[-u|--username]] [chat_id] "[message]"`<br><b>Send a message to chat with silent notification</b>`tgsend [[-n|--name]] [session_name] [[-u|--username]] [chat_id] --silent "[message]"`


title: SYNOPSIS
content:
<B>tgutil</B> <I>action</I> [<I>options</I>]<br><br>Common actions and their usage:<br>  <B>tgutil</B> create --group-name <I>GROUP_NAME</I> [--parent-group <I>PARENT_GROUP</I>]<br>  <B>tgutil</B> delete --group-name <I>GROUP_NAME</I> [--recursive]<br>  <B>tgutil</B> list [--recursive]<br>  <B>tgutil</B> add-thing --group-name <I>GROUP_NAME</I> --thing-name <I>THING_NAME</I><br>  <B>tgutil</B> remove-thing --group-name <I>GROUP_NAME</I> --thing-name <I>THING_NAME</I>


title: PARAMETERS
content:
<b><I>action</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The operation to perform. Common actions include <B>create</B>, <B>delete</B>, <B>list</B>, <B>add-thing</B>, and <B>remove-thing</B>.<br><br><b>--group-name <I>GROUP_NAME</I>, -g <I>GROUP_NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the AWS IoT Thing Group to operate on.<br><br><b>--thing-name <I>THING_NAME</I>, -t <I>THING_NAME</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Used with <B>add-thing</B> or <B>remove-thing</B> to specify the name of the AWS IoT Thing.<br><br><b>--parent-group <I>PARENT_GROUP</I>, -p <I>PARENT_GROUP</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. Specifies the parent group when creating a nested Thing Group.<br><br><b>--recursive, -r</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. For <B>delete</B> action, deletes a group and all its child groups and associated things. For <B>list</B> action, lists groups hierarchically.<br><br><b>--region <I>AWS_REGION</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. Specifies the AWS region to interact with (e.g., <I>us-east-1</I>). Overrides default configured region.<br><br><b>--profile <I>AWS_PROFILE</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. Specifies the AWS CLI profile to use for authentication. Overrides default configured profile.<br><br>


title: DESCRIPTION
content:
The <B>tgutil</B> command is a non-standard, custom-built utility often found in development or DevOps environments for managing <I>AWS IoT Thing Groups</I>. It's typically implemented as a wrapper script (e.g., shell script or Python) around the official <B>AWS Command Line Interface (CLI)</B> or <B>AWS SDK</B> calls. Its primary purpose is to simplify and streamline common operations related to <I>Thing Groups</I> within the <I>AWS IoT service</I>, such as creating, deleting, listing, and associating/disassociating <I>Things</I> with groups.<br><br>While not part of a standard Linux distribution, <B>tgutil</B> aims to provide a more intuitive and concise syntax for these tasks, reducing the verbosity often associated with direct <B>AWS CLI</B> commands. This makes it particularly useful for scripting, automation in <I>CI/CD pipelines</I>, and local development, allowing users to interact with <I>AWS IoT Thing Groups</I> more productively. It generally relies on pre-configured AWS credentials and network connectivity to the AWS cloud.


title: CAVEATS
content:
The <B>tgutil</B> command is <I>not a standard Linux utility</I> and is not typically found in default operating system installations. Its existence and specific implementation vary widely; it is often a custom script or a part of a larger, proprietary toolkit. Therefore, its exact syntax, options, and behavior might differ significantly depending on where it was obtained or how it was developed. It generally requires the <B>AWS CLI</B> to be installed and configured with appropriate credentials.


title: DEPENDENCIES
content:
Successful execution of <B>tgutil</B> typically relies on the <B>AWS CLI</B> being installed and configured on the system. Network connectivity to the AWS service endpoints is also required. Depending on the implementation, it might also depend on scripting runtimes like <I>Python</I> or <I>Bash</I>.


title: EXIT STATUS
content:
Like most command-line utilities, <B>tgutil</B> usually returns an exit status of <B>0</B> upon successful completion of an operation. A non-zero exit status indicates an error, which could be due to invalid arguments, authentication failures, network issues, or AWS service errors. The specific error codes might vary by implementation.


title: HISTORY
content:
As <B>tgutil</B> is not a standard command, it lacks a formal historical record. Its emergence reflects a common pattern in cloud development: the creation of convenience wrappers around powerful but often verbose cloud provider CLIs. Developers and organizations often create such utilities to streamline repetitive tasks, enhance readability of scripts, and enforce consistent operational procedures, particularly when managing resources like <I>AWS IoT Thing Groups</I> that are frequently manipulated in automated deployments or maintenance routines.


title: TLDR
content:
<b>Edit the last text message on a chat with new text</b>`tgutil [[-n|--name]] [session_name] [[-u|--username]] [chat_id] [[-m|--mode]] edit --text "[current_text]" --newtext "[new_text]"`<br><b>Edit all text messages that contain current_text with new_text</b>`tgutil [[-n|--name]] [session_name] [[-u|--username]] [chat_id] [[-m|--mode]] editall --text "[current_text]" --newtext "[new_text]"`<br><b>Delete the last text message on a chat with search value</b>`tgutil [[-n|--name]] [session_name] [[-u|--username]] [chat_id] [[-m|--mode]] delete --text "[current_text]"`<br><b>Delete all messages containing the query value</b>`tgutil [[-n|--name]] [session_name] [[-u|--username]] [chat_id] [[-m|--mode]] deleteall --text "[query]"`


title: SYNOPSIS
content:
<b>vagrant destroy</b> [<i>options</i>] [<i>name|id</i>]<br><br><i>Common options:</i><br><b>  --force</b>, <b>-f</b>


title: PARAMETERS
content:
<b><b>--force</b>, <b>-f</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips the confirmation prompt, destroying the virtual machine(s) immediately. Use with extreme caution as this action is irreversible.<br><br>


title: DESCRIPTION
content:
The <b>vagrant destroy</b> command is used to destroy all resources created for a specific Vagrant environment, effectively deleting the associated virtual machine. This command is crucial for cleaning up development environments, freeing up disk space, and resetting a project's VM state. When executed, Vagrant will prompt for confirmation before proceeding, as this action is irreversible and will lead to permanent data loss on the virtual machine's disk. It removes the virtual machine from the provider (e.g., VirtualBox, VMware), deletes its associated disk images, and cleans up any network interfaces or shared folders created by Vagrant. It's a fundamental part of the Vagrant lifecycle, often used after a project is completed or when a fresh start is required. While the virtual machine itself is destroyed, the <i>Vagrantfile</i> and any project source code on the host machine remain untouched, allowing for a fresh <b>vagrant up</b> to recreate the environment easily.


title: CAVEATS
content:
Using <b>vagrant destroy</b> is an <i>irreversible</i> action that results in <i>permanent data loss</i> for the virtual machine. Any unsaved work, configurations, or databases within the VM will be lost. It is not a backup mechanism. Ensure all necessary data is backed up or synchronized before running this command. It only destroys resources managed by Vagrant; external resources or host-side files remain untouched.


title: MULTI-VM ENVIRONMENTS
content:
In a <i>multi-VM Vagrantfile</i>, you can specify a particular virtual machine to destroy by providing its <i>name</i> or <i>ID</i> as an argument (e.g., <b>vagrant destroy web</b> or <b>vagrant destroy 1234567</b>). If no name or ID is specified in a multi-VM environment, Vagrant will prompt to destroy all defined virtual machines within the project.


title: WHAT IS REMOVED / WHAT REMAINS
content:
The <b>vagrant destroy</b> command removes the virtual machine instance from the chosen provider (e.g., VirtualBox, VMware, KVM) and deletes its associated virtual disk image files from your host system. It cleans up any Vagrant-specific network configurations or shared folder mounts. However, it <i>does not</i> delete the local <i>Vagrantfile</i>, the <i>.vagrant</i> directory (which contains Vagrant's state and data), or any source code directories on your host machine. This allows for easy recreation of the environment using a subsequent <b>vagrant up</b> command.


title: HISTORY
content:
Vagrant, developed by Mitchell Hashimoto, emerged as a popular tool in the early 2010s to simplify the creation and management of reproducible development environments. The <b>destroy</b> command has been a core component of Vagrant's lifecycle management since its early versions, providing a straightforward way to clean up virtual machine resources. Its design reflects Vagrant's philosophy of making environment setup and teardown efficient and predictable, crucial for modern development workflows where environments are often ephemeral.


title: TLDR
content:
<b>Destroy the currently running machine</b>`vagrant destroy`<br><b>Target a machine by name or ID</b>`vagrant destroy [name|id]`<br><b>Do not ask for confirmation before destroying</b>`vagrant destroy [[-f|--force]]`<br><b>Shut down the machine gracefully</b>`vagrant destroy [[-g|--graceful]]`


title: PARAMETERS
content:
<b><i>vm-name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a particular virtual machine to reload. If omitted, Vagrant will attempt to reload all defined machines in the <i>Vagrantfile</i>.<br><br><b><b>--no-provision</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips the provisioning step. The machine will restart, but provisioners will not be re-run.<br><br><b><b>--provision-with</b> <i>x,y,z</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies which provisioners to run. You can specify a comma-separated list of provisioner names (as defined in your <i>Vagrantfile</i>).<br><br><b><b>-p</b>, <b>--provision</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the provisioning step to run, even if the machine has already been provisioned before. This is the default behavior for <b>reload</b>.<br><br>


title: DESCRIPTION
content:
The <b>vagrant reload</b> command is used to restart a Vagrant machine, applying any configuration changes that have been made to the <i>Vagrantfile</i> since the last <b>vagrant up</b> or <b>vagrant provision</b>. It essentially performs a <b>vagrant halt</b> followed by a <b>vagrant up</b>, but with an added provisioning step by default.<br><br>This command is particularly useful when you have modified machine-level configurations in your <i>Vagrantfile</i>, such as network settings (e.g., forwarded ports, private networks), memory allocation, CPU count, or other provider-specific settings that require a machine restart to take effect. By default, it also re-runs the provisioners, ensuring the guest OS is in the desired state, which can be skipped using the <b>--no-provision</b> flag.<br><br><b>vagrant reload</b> provides a convenient and streamlined workflow, saving users from manually executing <b>vagrant halt</b>, then <b>vagrant up</b>, and potentially <b>vagrant provision</b> separately.


title: CAVEATS
content:
When using <b>vagrant reload</b>, be aware that it performs a hard restart of the VM. Any in-memory state or running processes not configured to persist will be lost.<br><br>If extensive provisioning is configured, the command can take a significant amount of time to complete. Always review your <i>Vagrantfile</i> for changes before reloading, especially those related to network configurations which might lead to new IP addresses or connectivity issues if not correctly managed.


title: WHEN TO USE <B>VAGRANT RELOAD</B>
content:
Use <b>vagrant reload</b> primarily after making changes to machine-level settings in your <i>Vagrantfile</i>, such as network configurations (e.g., private_network, forwarded_port), resource allocations (e.g., config.vm.memory, config.vm.cpus), or provider-specific settings. It's also useful if you need to re-run your provisioners on a running machine, especially if previous provisioning failed or if your provisioning scripts have been updated.


title: DIFFERENCE FROM <B>VAGRANT HALT</B> + <B>VAGRANT UP</B>
content:
While <b>vagrant reload</b> internally performs a halt and then an up, its key distinction is that it <i>always runs provisioners by default</i> (unless <b>--no-provision</b> is used). In contrast, <b>vagrant up</b> will only run provisioners if the machine is being started for the first time or if forced with <b>--provision</b> after an explicit <b>vagrant halt</b>.


title: HISTORY
content:
The <b>vagrant reload</b> command has been a fundamental part of Vagrant since its early versions, evolving alongside the platform's capabilities. Its introduction addressed the common development workflow need to apply <i>Vagrantfile</i> configuration changes that demand a machine restart (e.g., memory, network interfaces) without resorting to the more disruptive <b>vagrant destroy</b> and <b>vagrant up</b> cycle. Its default behavior of also running provisioners makes it a go-to command for ensuring the machine's software environment is up-to-date after core configuration adjustments, streamlining the iteration process for developers.


title: TLDR
content:
<b>Reload the currently running machine</b>`vagrant reload`<br><b>Target a machine by name or ID</b>`vagrant reload [name|id]`<br><b>Force the provisioners to run</b>`vagrant reload --provision`


title: SYNOPSIS
content:
<B>vagrant status</B> [<I>vm-name</I>] [<I>options</I>]<br><br><I>Common Vagrant Options:</I><br>--debug<br>--machine-readable<br>--no-color<br>--parallel<br>--provider <I>&lt;name&gt;</I><br>--timestamp


title: PARAMETERS
content:
<b><I>vm-name</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. Specifies a particular virtual machine to query. If omitted, the status of all defined machines in the <I>Vagrantfile</I> will be displayed.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose debug output for troubleshooting Vagrant operations.<br><br><b>--machine-readable</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Formats the output for easier parsing by other programs or scripts.<br><br><b>--no-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables colorful output, useful for scripts or terminals that don't support ANSI escape codes.<br><br><b>--parallel</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Executes actions in parallel across multiple machines when applicable (less direct impact on <I>status</I> but a global option).<br><br><b>--provider <I>&lt;name&gt;</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces Vagrant to use a specific provider (e.g., 'virtualbox', 'vmware_fusion') for the operation.<br><br><b>--timestamp</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prepends a timestamp to all log output, aiding in chronological analysis of events.<br><br>


title: DESCRIPTION
content:
The <I>vagrant status</I> command provides an overview of the current state of Vagrant-managed virtual machines within a project. When executed in a directory containing a <I>Vagrantfile</I>, it lists each defined VM and its corresponding status, such as <B>running</B>, <B>saved</B>, <B>poweroff</B>, or <B>not created</B>. This command is fundamental for monitoring the lifecycle of development environments, allowing users to quickly ascertain if a machine is active, suspended, or if it needs to be brought up. It's an indispensable tool for debugging and managing complex multi-machine Vagrant setups, offering immediate feedback on the health and operational status of your virtual infrastructure.


title: CAVEATS
content:
The <I>vagrant status</I> command requires a <I>Vagrantfile</I> to be present in the current directory or a parent directory to function correctly. It reports the state as known to Vagrant; external manipulation of the VM (e.g., directly via VirtualBox GUI) might cause its reported status to temporarily differ from the actual state until Vagrant re-synchronizes. It does not provide real-time resource utilization metrics.


title: INTERPRETING STATUS OUTPUT
content:
The command typically reports statuses like:<br><b>running</b>: The VM is currently powered on and operating.<br><b>saved</b>: The VM's state has been saved (suspended) to disk, consuming no CPU/RAM.<br><b>poweroff</b>: The VM is powered off, but its disk images still exist.<br><b>not created</b>: The VM has been defined in the <I>Vagrantfile</I> but has not yet been provisioned or brought up.<br><b>aborted</b>: The VM's state is unknown or corrupted, often requiring a <I>vagrant destroy</I> and <I>vagrant up</I>.


title: GLOBAL STATUS
content:
For managing multiple Vagrant environments across different directories, the <I>vagrant global-status</I> command provides a similar status overview for all active or recently active Vagrant machines on the host system, regardless of the current working directory.


title: HISTORY
content:
The <I>vagrant status</I> command has been a core component of Vagrant since its early days, shortly after its initial public release around 2010. As Vagrant evolved to simplify the creation and management of reproducible development environments, the need for a quick and reliable way to check the state of virtual machines became paramount. This command serves as a foundational inquiry into the operational readiness of a Vagrant environment, remaining consistent in its purpose despite numerous feature additions and architectural changes to Vagrant itself.


title: SEE ALSO
content:
vagrant up, vagrant halt, vagrant suspend, vagrant resume, vagrant destroy, vagrant ssh, vagrant global-status


title: TLDR
content:
<b>View status of the machines in the current directory</b>`vagrant status`<br><b>Target a machine by name or ID</b>`vagrant status [name|id]`


title: PARAMETERS
content:
<b>--force, -f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the suspension of the machine, even if there are problems or errors encountered during the process. This can be useful in situations where a clean suspension isn't possible due to an unstable state.<br><br><b>[name]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of a specific machine to suspend in a multi-machine Vagrant environment. If omitted, Vagrant will attempt to suspend all currently running machines defined in the `Vagrantfile`.<br><br>


title: DESCRIPTION
content:
The `vagrant suspend` command saves the current running state of a Vagrant virtual machine to disk. This is analogous to putting a computer into hibernation or sleep mode. When a machine is suspended, its memory contents, CPU state, and device states are written to persistent storage, allowing the machine to be resumed later exactly where it left off, without the need for a full boot sequence. This is particularly useful for quickly freeing up system resources without losing work or context, enabling developers to switch between projects or conserve battery life on laptops.<br><br>Unlike `vagrant halt`, which performs a graceful shutdown of the guest operating system, `suspend` preserves the exact live state, making startup much faster upon <i>vagrant resume</i>. However, it requires disk space to store this state and can sometimes be less robust than a full shutdown and boot if the environment is unstable.


title: CAVEATS
content:
<b>Disk Space Usage:</b> Suspending a machine requires disk space on the host system, typically equivalent to the machine's allocated RAM, to store its saved state. Ensure sufficient free space.<br><b>Provider Compatibility:</b> The reliability and performance of suspension can vary significantly between different virtualization providers (e.g., VirtualBox, VMware) and guest operating systems.<br><b>Potential for Corruption:</b> In rare cases, especially with complex or unstable guest environments, suspending and resuming can lead to minor state corruption or unexpected behavior within the guest OS.<br><b>Network Interruptions:</b> Upon resuming a suspended machine, network connections inside the guest may need to be re-established, which can cause brief service interruptions.


title: HOW IT WORKS
content:
When `vagrant suspend` is executed, it delegates the actual suspension process to the configured virtualization provider (e.g., VirtualBox, VMware, Hyper-V). The provider then captures the entire current memory and CPU state of the virtual machine, along with the state of its virtual devices, and writes this information to a special 'saved state' file on the host system's disk. This file allows the VM to be later restored to that exact point in time, bypassing the need for a full boot sequence.


title: MULTI-MACHINE ENVIRONMENTS
content:
In `Vagrantfile` configurations that define multiple virtual machines, invoking `vagrant suspend` without specifying a machine name will prompt Vagrant to attempt to suspend all currently running machines defined within that `Vagrantfile`. To target a specific machine, simply provide its assigned name as an argument, for example, `vagrant suspend webserver`.


title: HISTORY
content:
The `suspend` command has been a fundamental component of Vagrant since its early versions, reflecting the developer's need for efficient lifecycle management of development environments. Its inclusion underscores the importance of quick context switching and resource optimization, akin to hibernation features in host operating systems. The command's implementation relies on the underlying virtualization provider's capabilities, evolving as these providers enhance their state-saving mechanisms and stability.


title: TLDR
content:
<b>Suspend the currently running machine</b>`vagrant suspend`<br><b>Target a machine by name or ID</b>`vagrant suspend [name|id]`


title: PARAMETERS
content:
<b>add <I>ITEM</I>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds one or more items to the wishlist. Items can be quoted if they contain spaces.<br><br><b>list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays all items currently in the wishlist, optionally with details.<br><br><b>remove <I>ID</I>|<I>ITEM</I>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes items by their numerical ID or by matching text from the wishlist.<br><br><b>clear</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes all items from the wishlist. Requires confirmation.<br><br><b>mark <I>ID</I>|<I>ITEM</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Marks an item (e.g., as 'purchased' or 'obtained').<br><br><b>-f, --file <I>PATH</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify an alternative file to store the wishlist data.<br><br><b>-p, --priority <I>LEVEL</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Assigns a priority level (e.g., 1-5) to an item upon addition.<br><br><b>-s, --show-marked</b><br>&nbsp;&nbsp;&nbsp;&nbsp;When listing, also show items that have been marked (e.g., as purchased).<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the command.<br><br>


title: DESCRIPTION
content:
The command <b><I>wishlist</I></b> is NOT a standard Linux utility. This analysis describes a <I>hypothetical</I> command that would provide a simple, text-based interface for maintaining a list of desired items or tasks. Users could add new items, view existing ones, remove completed or unwanted entries, and perhaps prioritize or categorize them. This conceptual command would likely store its data in a plain text file, adhering to the Unix philosophy of simple, composable tools. While not a standard utility, the concept facilitates personal organization directly from the terminal, leveraging common command-line patterns for list manipulation and aiming for quick interaction without requiring complex GUI applications.


title: CAVEATS
content:
The command <b><I>wishlist</I></b> is NOT a standard Linux command or utility. The information provided here describes a conceptual command based on common CLI patterns for managing lists. Users typically implement such functionality using shell scripts, aliases, or by leveraging existing text manipulation tools.


title: IMPLEMENTATION CONSIDERATIONS
content:
A hypothetical <b><I>wishlist</I></b> command would typically store its data in a plain text file (e.g., <code>~/.wishlist</code>). Each line might represent an item, optionally prefixed with a status or ID. Basic operations like adding would involve appending to the file, while removing or marking would involve reading, modifying, and rewriting the file, often using temporary files for atomic updates.


title: EXTENDING FUNCTIONALITY
content:
Beyond basic add/list/remove, a robust <b><I>wishlist</I></b> tool could incorporate features like due dates, categories, links to online stores, or even integration with external services. These extensions would likely be implemented through additional command options, specific data formatting within the wishlist file, or by piping output to other commands.


title: HISTORY
content:
As a standalone, standard Linux command, <b><I>wishlist</I></b> has no official history or development. However, the concept of maintaining personal wish lists or to-do lists using simple text files and command-line tools is as old as the Unix philosophy itself. Many users create custom shell scripts or leverage existing utilities to manage such lists, predating the rise of dedicated GUI applications for personal organization. The idea reflects a common need for lightweight, scriptable personal data management.


title: TLDR
content:
<b>Explore SSH servers listed in your ~/.ssh/config file (local mode)</b>`wishlist`<br><b>Start Wishlist in server mode to provide remote access</b>`wishlist [[s|serve]]`<br><b>Use a custom configuration file</b>`wishlist [[-c|--config]] [path/to/config.yaml]`<br><b>Discover SSH endpoints using Zeroconf (mDNS/Bonjour)</b>`wishlist --zeroconf.enabled`<br><b>Discover SSH nodes from DNS SRV records</b>`wishlist --srv.domain [example.com]`<br><b>Discover SSH nodes from a Tailscale tailnet</b>`wishlist --tailscale.net=[tailnet_name] --tailscale.key=[tskey-api-abc123]`


title: SYNOPSIS
content:
<b><i>tv</i></b> [options] &lt;file_path&gt;<br><i>Note: This synopsis is based on the common usage pattern of similar utilities like `<b><i>ttv</i></b>` (tmux TV), <br>which `<b><i>tv</i></b>` might alias or refer to. The exact syntax can vary if `<b><i>tv</i></b>` is a different custom script or alias.</i>


title: PARAMETERS
content:
<b>-p</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pause playback upon starting.<br><br><b>-r &lt;fps&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the playback framerate in frames per second (e.g., -r 15).<br><br><b>-s &lt;scale&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the output scaling factor (e.g., -s 0.5 for half size).<br><br><b>-a</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Attempt to preserve the actual aspect ratio, rather than forcing 2:1 character aspect.<br><br><b>-f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force playback even if a <b><i>tmux</i></b> session is not detected (use with caution).<br><br><b>-c</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loop the media playback continuously.<br><br><b>-d</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable dithered color output for potentially smoother gradients.<br><br><b>-x</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use extended ANSI colors (256 colors) for richer color representation.<br><br><b>-g</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force grayscale output.<br><br><b>-u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use Unicode block characters for a higher-resolution, block-based display.<br><br><b>-w &lt;width&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a fixed output width for the display.<br><br><b>-h &lt;height&gt;</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a fixed output height for the display.<br><br>


title: DESCRIPTION
content:
The <b><i>tv</i></b> command is not a standard, pre-installed utility in most Linux distributions. <br>Its behavior is typically user-defined, often existing as a shell <b><i>alias</i></b> or a custom script within a user's environment. <br>When encountered, <b><i>tv</i></b> might be an abbreviation or a misremembered reference to a specific tool. <br>One prominent project that closely aligns with the concept of "TV" in a terminal environment is <br><b><i>ttv</i></b> (tmux TV). This analysis focuses on the functionality provided by <b><i>ttv</i></b>, which is a shell script designed to render <br>video files, animated GIFs, or still images directly within a <b><i>tmux</i></b> terminal multiplexer session. <br>It leverages tools like <b><i>ffmpeg</i></b> to decode media and then displays frames as ASCII or Unicode characters. <br>Therefore, if you encounter a `tv` command, it is most likely a custom shortcut to a media player <br>(like `mpv` or `vlc`) or, more specifically, to the <b><i>ttv</i></b> script for terminal-based media display. <br>Without context, its exact function cannot be definitively determined.


title: CAVEATS
content:
The `<b><i>tv</i></b>` command is not part of standard Linux utilities; its existence and functionality are entirely dependent on user configuration or third-party scripts. <br>The functionality described herein largely pertains to the `<b><i>ttv</i></b>` (tmux TV) script, which requires: <br>1. A running <b><i>tmux</i></b> session for optimal performance and display. <br>2. The <b><i>ffmpeg</i></b> multimedia framework to decode video and image files. <br>3. A terminal emulator with good ANSI/Unicode support. <br>Without these prerequisites, the `<b><i>ttv</i></b>` script (and thus any `<b><i>tv</i></b>` alias pointing to it) may not function correctly or at all. <br>Performance can vary significantly based on terminal capabilities, system resources, and media file complexity.


title: CHECKING FOR A `<B><I>TV</I></B>` ALIAS OR SCRIPT
content:
To determine what `<b><i>tv</i></b>` does on your system, you can use: <br>`<b><i>type tv</i></b>` or `<b><i>which tv</i></b>`. <br>If it's an alias, `<b><i>type</i></b>` will show its definition. <br>If it's a script, `<b><i>which</i></b>` will show its path, and you can inspect the script content (`<b><i>cat $(which tv)</i></b>`). <br>If neither command returns anything, `<b><i>tv</i></b>` is not defined in your current shell's PATH or aliases.


title: `<B><I>TTV</I></B>` INSTALLATION AND USAGE
content:
The `<b><i>ttv</i></b>` script typically involves cloning its Git repository and placing the script in your `<b><i>PATH</i></b>`. <br>It also requires `<b><i>ffmpeg</i></b>` to be installed. <br>Basic usage would be `<b><i>ttv video.mp4</i></b>` or `<b><i>tv video.mp4</i></b>` if aliased. <br>Ensure your terminal supports the character sets (`<b><i>LANG</i></b>` environment variable) and color depths <br>(`<b><i>TERM</i></b>` environment variable) that `<b><i>ttv</i></b>` utilizes for best results.


title: HISTORY
content:
As `<b><i>tv</i></b>` is not a standard command, it lacks a formal development history. <br>However, the concept of displaying multimedia in a terminal, which `<b><i>tv</i></b>` might represent (specifically via `<b><i>ttv</i></b>`), <br>has roots in ASCII art and character-based graphics that predate modern graphical interfaces. <br>The `<b><i>ttv</i></b>` script itself emerged from the desire to watch videos or animated content within a `<b><i>tmux</i></b>` session, <br>a popular environment for developers and system administrators. <br>It leverages existing robust tools like `<b><i>ffmpeg</i></b>`, integrating them to achieve terminal-native multimedia playback, <br>offering a unique way to consume media without leaving the command line environment.


title: TLDR
content:
<b>Launch with the default channel</b>`tv`<br><b>Open a specific channel</b>`tv [files|env|git-repos|...]`<br><b>List all available channels</b>`tv list-channels`<br><b>Fuzzy-pick from lines piped on stdin</b>`[command] | tv`<br><b>Pipe and show a live preview for each entry</b>`[command] | tv --preview '[preview_command]'`<br><b>Build a picker from commands (source + preview)</b>`tv --source-command '[source_command]' --preview-command '[preview_command]' --preview-size [70]`<br><b>Update and install community-maintained channels</b>`tv update-channels`


title: PARAMETERS
content:
<b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show this help message and exit.<br><br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Report all output as JSON. Useful for programmatic parsing.<br><br><br><b>--all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show all notices, including those already read.<br><br><br><b>--unread</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show only unread notices. This is the default behavior if no other options are specified.<br><br><br><b>--no-read-mark</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not mark notices as read after displaying them.<br><br><br><b>--clear</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Clear all stored notices or mark them as read. This option only works if notices are shown.<br><br><br>


title: DESCRIPTION
content:
The <i>conda notices</i> command provides a direct channel for the Conda project to communicate important information to its users. This includes security advisories, significant feature updates, upcoming changes, and other announcements relevant to the Conda ecosystem. By using this command, users can stay informed about the latest developments without waiting for an environment update or manual news checks. It allows users to view both current and historical notices, offering flexibility in how they consume this information, and preventing important updates from being missed. The command helps maintain awareness of the Conda platform's health and evolution.


title: CAVEATS
content:
<ul><li>Requires an active internet connection to fetch the latest notices from the Conda servers.</li><li>Notices are typically marked as read after display by default, which can be overridden using the <i>--no-read-mark</i> option.</li><li>The <i>--clear</i> option marks notices as read, effectively clearing their 'unread' status, rather than permanently deleting the notice content from the source.</li></ul>


title: HISTORY
content:
The <i>conda notices</i> feature was introduced to provide a more reliable and centralized method for communicating critical information directly to users via the command line interface. This initiative ensures that users who frequently interact with Conda are promptly informed of important updates, such as security patches, breaking changes, or significant feature announcements, without having to actively seek out news on external platforms or wait for new `conda` releases.


title: SYNOPSIS
content:
<I>confettysh</I> [OPTIONS]<br><br><i>Note: As 'confettysh' is not a standard command, its exact syntax and options are entirely implementation-dependent. The synopsis above represents a common hypothetical usage.</i>


title: PARAMETERS
content:
<b>-n <NUMBER></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the approximate <I>number of confetti particles</I> to display. Higher numbers typically result in a denser confetti effect.<br><br><b>-d <SECONDS></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the <I>duration</I> in seconds for which the confetti animation should run before clearing. A value like '0' might indicate a brief, instant burst.<br><br><b>-c <COLORS></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the <I>colors</I> to be used for the confetti. This can be a comma-separated list of color names (e.g., 'red,green,blue') or a keyword like 'random' for varied colors.<br><br><b>-s <SPEED></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls the <I>speed</I> at which the confetti falls. Options might include 'slow', 'normal', or 'fast' to adjust animation pace.<br><br><b>--delay <MILLISECONDS></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds an initial <I>delay</I> before the confetti animation begins, which can be useful for timing with other events or command outputs.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief <I>help message</I> detailing the command's usage and available options, if implemented.<br><br>


title: DESCRIPTION
content:
The <b>confettysh</b> command is not a standard Linux utility, but rather a playful and <I>cosmetic</I> script typically implemented by users or included in specific terminal environments to add visual flair.<br><br>When executed, it displays a shower of colorful 'confetti' characters across the terminal screen, often after a command completes or simply upon invocation. Its primary purpose is to inject a sense of fun, celebration, or whimsy into the command-line interface, transforming a normally text-driven environment into something more visually engaging.<br><br>Implementations vary widely, ranging from simple bash scripts that print random characters with ANSI color codes to more sophisticated Python or Node.js applications utilizing ncurses or other terminal manipulation libraries. As it's not part of core GNU/Linux distributions, its availability and exact behavior are entirely dependent on whether a user has installed or created such a script. It serves no functional purpose beyond visual amusement.


title: CAVEATS
content:
<b>confettysh</b> is <I>not a standard Linux command</I> and therefore its availability, behavior, and options will vary drastically depending on the specific implementation a user has installed or created.<br><br>It may require a terminal emulator with <I>true color support</I> or specific character rendering capabilities for optimal visual effect. Running it in a very basic terminal might result in broken or non-colorful output. While generally harmless, overly complex implementations could potentially consume system resources, though this is rare for simple confetti scripts. Users should be aware that installing arbitrary scripts from the internet always carries a slight security risk.


title: INSTALLATION AND USAGE
content:
As <b>confettysh</b> is typically a custom script, installation usually involves downloading a script file (e.g., `confettysh.sh` or `confettysh.py`), making it executable (`chmod +x confettysh.sh`), and placing it in a directory within your system's PATH (e.g., `/usr/local/bin` or `~/bin`).<br><br>Users often integrate it into their shell's configuration files (like `.bashrc` or `.zshrc`) to trigger automatically, for instance, after a successful command execution (e.g., using a `PROMPT_COMMAND` hook or a custom shell function).


title: CUSTOMIZATION POTENTIAL
content:
Due to its script-based nature, <b>confettysh</b> offers immense <I>customization potential</I>. Users can easily open the script in a text editor and modify aspects like the character set used for confetti, the colors, the animation logic, the fall speed, or even integrate it with system events (e.g., celebrating a successful `git push`). This flexibility is a core reason for its appeal in the customization-focused Linux community.


title: HISTORY
content:
The concept of 'confettysh' doesn't have a formal development history like standard Unix commands. Instead, it emerged organically within the open-source community as a fun, <I>novelty script</I> for terminal personalization.<br><br>Inspired by visual effects in GUI applications or the desire to add more personality to the command line, various developers and enthusiasts began creating simple scripts (often in Bash, Python, or even Perl) to produce colorful, animated text patterns. These scripts gained popularity through code-sharing platforms, personal blogs, and terminal customization communities.<br><br>While there's no single 'official' confettysh project, it represents a category of playful terminal 'eye candy' that evolved from individual creativity rather than a structured development effort.


title: SYNOPSIS
content:
<b>ip</b> [ <i>OPTIONS</i> ] <b>link show</b> [ <i>DEVICE</i> ] [ <b>-s</b> | <b>-stats</b> ] [ <b>-s</b> | <b>-stats</b> ]<br><i>Example:</i> <b>ip -s link show eth0</b><br><i>Example (more detailed):</i> <b>ip -s -s link show</b>


title: PARAMETERS
content:
<b>-s, -stats</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display statistics for the network interface(s). This is the primary option that enables the 'ip-stats' output.<br><br><b>-s -s</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display more detailed statistics, often including additional error counters like FIFO, frame, compressed, carrier, and collisions.<br><br><b>DEVICE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the network interface (e.g., eth0, enp0s3) for which to show statistics. If omitted, statistics for all interfaces are displayed.<br><br>


title: DESCRIPTION
content:
The <b>ip-stats</b> command is not a standalone utility but typically refers to the functionality provided by the <b>ip link show</b> command with the <b>-s</b> (statistics) option. This combination allows users to view detailed network interface statistics on Linux systems. It provides crucial information about the health and performance of network adapters, including received (RX) and transmitted (TX) bytes, packets, errors, dropped packets, FIFO errors, frame errors, compressed packets, carrier errors, and collisions.<br><br>These statistics are invaluable for network troubleshooting, identifying bottlenecks, monitoring network traffic, and understanding interface activity. By examining these counters, administrators can diagnose issues like faulty cables, overloaded interfaces, or misconfigured network devices. The output helps in differentiating between software-related packet drops and hardware-related errors.


title: CAVEATS
content:
The term <b>ip-stats</b> itself does not correspond to a standalone executable command in standard Linux distributions; it refers to a specific output mode of the <b>ip link show</b> command.<br>The displayed statistics are per-interface and do not provide global IP layer protocol statistics (like those found in <b>netstat -s</b>).<br>Counters reset upon system reboot or when a network interface is brought down and then up again.<br>In extremely high traffic environments, the accuracy of some counters might be subject to kernel limitations or update frequencies.


title: BASIC VS. DETAILED STATISTICS
content:
Using a single <b>-s</b> (or <b>-stats</b>) option provides fundamental statistics like total bytes and packets, along with basic error and drop counts. Doubling the option, <b>-s -s</b>, extends this output to include more granular error types such as FIFO, frame, compressed, carrier, and collisions, offering a deeper insight into potential hardware or link layer issues. The availability and exact meaning of these extended counters can vary slightly between kernel versions and network adapter drivers.


title: HISTORY
content:
The functionality to display network interface statistics, as implemented within the <b>ip link show</b> command, is a core component of the <b>iproute2</b> utilities. <b>iproute2</b> was developed by Alexey Kuznetsov and has progressively replaced the older <b>net-tools</b> suite (which included commands like <b>ifconfig</b>, <b>route</b>, and <b>netstat</b>) as the preferred method for network configuration and monitoring on Linux. This shift began in the late 1990s and has seen <b>iproute2</b> become the standard in modern distributions due to its more robust and flexible design, better support for advanced networking features, and integration with the Linux kernel's networking stack.


title: SYNOPSIS
content:
<b>pg_combinebackup</b> [<i>option</i>...] <<i>old_base_backup_directory</i>> <<i>incremental_backup_directory</i>...> <<i>new_base_backup_directory</i>>


title: PARAMETERS
content:
<b><b>-d</b>, <b>--debug</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug output for detailed information about the operation.<br><br><b><b>-o</b>, <b>--overwrite</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows the <I>new_base_backup_directory</I> to exist. If it exists, its contents will be emptied before the combined backup is written.<br><br><b><b>--no-sync</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;By default, <i>pg_combinebackup</i> will try to sync all files to disk. This option disables that, which can be faster but is less safe if the system crashes.<br><br><b><b>--progress</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows progress information during the backup combination process.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs a simulation of the combination process without actually creating the new backup, showing what would be done.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables verbose output for more detailed status messages.<br><br><b><b>-V</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints the <i>pg_combinebackup</i> version and exits.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows help about <i>pg_combinebackup</i> command line arguments and exits.<br><br><b><I>old_base_backup_directory</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to the initial, full base backup directory that serves as the starting point for the combination.<br><br><b><I>incremental_backup_directory</I>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more paths to incremental backup directories, which must be specified in chronological order. These contain the changes to be applied.<br><br><b><I>new_base_backup_directory</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path where the newly consolidated base backup will be created. This directory must not exist unless <b>--overwrite</b> is specified.<br><br>


title: DESCRIPTION
content:
<i>pg_combinebackup</i> is a utility for PostgreSQL that consolidates an existing base backup with one or more subsequent incremental backups into a new, up-to-date base backup. This process effectively merges the changes captured by the incremental backups into the original full backup, creating a fresh, consolidated base backup. The primary benefit is streamlining the recovery process by reducing the number of backups that need to be applied during a restore operation, thereby improving the Recovery Time Objective (RTO). It operates on physical file-level backups, not logical dumps, and does not alter the original backups, but rather creates a new one at the specified destination. This command is a crucial tool for managing backup chains, making them more manageable and efficient over time, especially in environments utilizing PostgreSQL's native incremental backup features introduced in recent versions.


title: CAVEATS
content:
Requires a full base backup as the initial input.<br>All intermediate incremental backups in the chain must be provided in chronological order to successfully create the new base backup.<br>The target directory (<I>new_base_backup_directory</I>) must not exist, unless the <b>--overwrite</b> option is used, in which case it will be emptied.<br>This utility is designed for physical file-level backups of a PostgreSQL data directory, not for logical backups generated by <i>pg_dump</i>.<br>The operation can be I/O intensive, especially with large backups or many incremental steps.


title: BACKUP STRATEGY INTEGRATION
content:
<i>pg_combinebackup</i> is a key component in an advanced PostgreSQL backup strategy involving incremental backups. Instead of constantly performing full base backups, which can be resource-intensive, an organization can take a full base backup once, then periodically take incremental backups. Over time, the chain of incremental backups can become long, increasing restore times. <i>pg_combinebackup</i> allows for 'rolling up' these increments into a fresh base backup, shortening the backup chain and ensuring faster restores without needing to take a brand new full backup from a running server.


title: HISTORY
content:
<i>pg_combinebackup</i> was officially introduced in <b>PostgreSQL 15</b>. Its development addressed a long-standing need for native, robust incremental backup management within the PostgreSQL ecosystem. Prior to its inclusion, users often relied on file-system level tools (like <i>rsync</i> or block-level snapshots) or third-party backup solutions to achieve similar incremental backup and consolidation functionalities. This command significantly enhances PostgreSQL's built-in backup and recovery capabilities, making it easier to manage complex backup strategies and reduce recovery times.


title: PARAMETERS
content:
<b>-d, --dbname=DBNAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connect to the database specified by <I>DBNAME</I>.<br><br><b>-f, --file=FILE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Write the streamed output to <I>FILE</I> instead of standard output.<br><br><b>-h, --host=HOSTNAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Database server host name or directory for Unix-domain socket.<br><br><b>-o, --option=LSOPTION</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Pass an option <I>LSOPTION</I> to the logical decoding plugin. Can be used multiple times.<br><br><b>-p, --port=PORT</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Database server port number.<br><br><b>-P, --plugin=PLUGIN</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use the specified logical decoding <I>PLUGIN</I> (e.g., <I>test_decoding</I>).<br><br><b>-s, --startpos=LSN</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Start streaming at the specified Log Sequence Number (LSN).<br><br><b>-S, --slot=SLOTNAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Use the replication slot named <I>SLOTNAME</I>. Creates it if it doesn't exist (unless --if-not-exists is used).<br><br><b>-U, --username=USERNAME</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Connect as the specified database user <I>USERNAME</I>.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable verbose output, showing more detail on operations.<br><br><b>-W, --password</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force <I>pg_recvlogical</I> to prompt for a password before connecting.<br><br><b>-X, --setting=SETTING</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set a run-time parameter <I>SETTING</I> for this session.<br><br><b>-Z, --compress=COMPRESSION_METHOD</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compress the replication stream using the specified method (e.g., gzip, zstd).<br><br><b>-w, --no-wait</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not wait for connection to be established; fail immediately if it can't connect.<br><br><b>--endpos=LSN</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Stop streaming once the specified LSN (Log Sequence Number) is reached.<br><br><b>--if-not-exists</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not error if the replication slot already exists when attempting to create it.<br><br><b>--no-loop</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exit after receiving one complete file of output; do not stream continuously.<br><br><b>--no-sync</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not sync output files to disk (faster but less crash-safe).<br><br><b>--status-interval=INTERVAL</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Send status updates to the server every <I>INTERVAL</I> seconds (default 10s).<br><br><b>--synchronous</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Request synchronous replication from the server.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show <I>pg_recvlogical</I> version information, then exit.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show help message, then exit.<br><br>


title: DESCRIPTION
content:
<i>pg_recvlogical</i> is a powerful PostgreSQL utility designed to stream real-time database changes using the logical replication protocol.<br>It works by connecting to a PostgreSQL server and consuming the Write-Ahead Log (WAL) through a specified <I>replication slot</I>.<br>The WAL content is then transformed into a readable format using a server-side <I>logical decoding plugin</I> (e.g., <I>test_decoding</I>, <I>wal2json</I>).<br>This allows external applications to receive continuous, structured data about transactions, enabling various use cases like Change Data Capture (CDC), data integration, auditing, and building custom data pipelines. <br>It can create, manage, and utilize replication slots, streaming the decoded output to standard output or a file.


title: CAVEATS
content:
Using <I>pg_recvlogical</I> requires the PostgreSQL server's <b>wal_level</b> to be set to <b>logical</b>.<br>A <I>replication slot</I> is critical; if not properly managed (e.g., consumer fails), it can lead to excessive WAL retention and disk space issues on the server.<br>The output format is entirely determined by the <I>logical decoding plugin</I> used, which must be installed and loaded on the PostgreSQL server.<br>Network connectivity and appropriate database permissions are necessary for the client to connect and stream data.


title: PREREQUISITES
content:
To effectively use <I>pg_recvlogical</I>, the PostgreSQL server must have its <b>wal_level</b> parameter set to <b>logical</b> in the <b>postgresql.conf</b> file. Additionally, a specific <I>logical decoding plugin</I> (e.g., <I>test_decoding</I>, <I>wal2json</I>) must be installed on the server and loaded into the database that the replication slot is associated with.


title: REPLICATION SLOTS
content:
<b>Replication slots</b> are server-side objects that ensure the PostgreSQL server retains all necessary WAL segments until they have been successfully consumed by all connected consumers.<br>This mechanism is vital for preventing data loss and ensuring continuous logical replication. However, if a consumer stops reading from a slot, the server will continue to accumulate WAL, potentially leading to significant disk space consumption. It is crucial to monitor slot activity and drop unused slots promptly.


title: HISTORY
content:
<I>pg_recvlogical</I> was introduced with <b>PostgreSQL 9.4</b>, accompanying the native support for logical decoding.<br>This release marked a significant advancement in PostgreSQL's capabilities for Change Data Capture (CDC) and flexible data integration, providing a standardized and robust mechanism to extract and transform WAL data, forming the basis for many modern data pipeline solutions.


title: PARAMETERS
content:
<b><b>sequin</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches the <b>Sequin</b> graphical user interface application without loading a specific file.<br><br><br><b><b>sequin</b> <i>filename</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Launches <b>Sequin</b> and attempts to open the specified <i>filename</i>. Typically, this would be an existing <i>.sqn</i> (Sequin flat file) or <i>.fsa</i> (FASTA) file for editing or viewing.<br><br><br><b><b>-help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a brief help message detailing available command-line usage information for the application.<br><br><br><b><b>-version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the version information of the <b>Sequin</b> application to the console.<br><br><br>


title: DESCRIPTION
content:
The NCBI <b>Sequin</b> is a standalone software application developed by the National Center for Biotechnology Information (NCBI) for preparing and submitting sequence data to the GenBank, EMBL, and DDBJ sequence databases. It provides a comprehensive graphical user interface (GUI) environment for annotating, editing, and validating DNA and protein sequence records before submission. Users can input raw sequence data, add feature annotations (such as genes, coding regions, mRNA, etc.), correct errors, and ensure the data meets submission standards. <b>Sequin</b> plays a critical role in the biological research community by facilitating the deposition of new sequence discoveries, making them publicly available for researchers worldwide. While primarily a GUI tool, it can be invoked from the Linux command line to launch the application or open specific files.


title: CAVEATS
content:
<b>Sequin</b> is primarily a graphical user interface (GUI) application designed for interactive data preparation. It is not a command-line utility for automated script processing like many standard Linux commands (e.g., <b>grep</b>, <b>awk</b>). Its command-line options are limited mainly to launching the application or opening files, and it does not offer extensive command-line functionality for batch processing. For programmatic submissions or automated annotation, other NCBI tools like <b>tbl2asn</b> are often more appropriate. Installation typically involves downloading and extracting a distribution, rather than being part of standard Linux package repositories.


title: SUPPORTED FILE FORMATS
content:
<b>Sequin</b> primarily works with FASTA (<i>.fsa</i>) format for raw sequence input and generates its own native <i>.sqn</i> (Sequin flat file) format for saved submissions. It can also import and export other common bioinformatics formats to some extent, facilitating data exchange within the scientific community.


title: SUBMISSION PIPELINE INTEGRATION
content:
Once a sequence record is prepared, validated, and annotated in <b>Sequin</b>, the application guides the user through the final steps of submitting the data directly to the NCBI. The submitted data then undergoes further review and processing before being accessioned into GenBank, EMBL, or DDBJ, making it publicly available.


title: HISTORY
content:
Developed by the National Center for Biotechnology Information (NCBI), <b>Sequin</b> was introduced to address the growing need for a user-friendly tool to facilitate the submission of biological sequence data to GenBank. Over the years, it has undergone several revisions to accommodate changes in data submission standards, add new annotation features, and improve user experience. Its development paralleled the exponential growth of genomic sequencing, becoming a cornerstone tool for researchers to share their sequence discoveries with the scientific community. While newer web-based submission methods exist, <b>Sequin</b> remains a robust option, particularly for complex submissions and for those who prefer a desktop application.


title: SYNOPSIS
content:
<B>systemctl-revert</B> [<I>OPTIONS</I>] [<I>UNIT...</I>]<BR><BR><I>Note: This synopsis represents a hypothetical structure for a conceptual revert command, as no standard systemctl-revert command exists universally.</I>


title: PARAMETERS
content:
<b>--unit <UNIT></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hypothetically specifies a particular Systemd unit to revert its state or configuration. This could involve disabling, masking, or stopping the unit.<br><br><b>--last-boot</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Conceivably attempts to revert systemd's state to what it was during the last successful boot, possibly by restoring configuration or unit states from a specific boot environment.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hypothetically shows what actions would be performed without actually making any changes, useful for testing the revert operation.<br><br><b>--all</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Conceptually reverts all recent systemd-related changes, which would be a highly complex operation requiring robust state tracking.<br><br><b>--force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Hypothetically forces the revert operation, overriding potential warnings or checks.<br><br>


title: DESCRIPTION
content:
The command <B>systemctl-revert</B> is <I>not a standard, universally available subcommand of systemctl</I> or a standalone utility across all Linux distributions. Instead, it generally refers to a <B>conceptual operation</B> or a custom script designed to undo or revert changes made to the system's state or Systemd unit configurations. This is typically done for troubleshooting, recovery from a faulty update, or to roll back undesired configuration changes.<BR><BR>While a specific <B>systemctl-revert</B> command might exist in certain distribution-specific recovery environments (e.g., related to <B>dracut</B> or initramfs regeneration), the act of "reverting" systemctl actions often involves a combination of manual steps: disabling or stopping problematic units, editing configuration files, using bootloader options to revert to a previous kernel or snapshot, or employing more comprehensive system rollback utilities like <B>Snapper</B> (for Btrfs/ZFS filesystems) or system backup/restore solutions.<BR><BR>Its primary purpose, whether as a script or a conceptual process, is to restore a system to a known good state, mitigating issues introduced by recent systemd-related modifications. Users should be aware that a direct, unified <B>systemctl-revert</B> command for general use is uncommon.


title: CAVEATS
content:
The most significant caveat is that <B>systemctl-revert</B> is <I>not a standard Linux command</I>. Any implementation would be custom, distribution-specific, or a conceptual wrapper around other tools.<BR><BR><ul><li><B>No Universal Implementation:</B> Users should not expect this command to be available by default on their system.</li><li><B>Varying Functionality:</B> If it exists as a script, its actual functionality, options, and scope will vary wildly.</li><li><B>Risk of Instability:</B> Improperly reverting system changes can lead to an unbootable system or further instability. Always back up critical data before attempting significant system state changes.</li><li><B>Dependency Management:</B> Reverting one unit might have unintended consequences on dependent units, which a simple revert script might not handle gracefully.</li></ul>


title: ACHIEVING SYSTEM REVERSION
content:
Since a direct <B>systemctl-revert</B> is uncommon, achieving system reversion often involves:<BR><ul><li><B>Manual Configuration Rollback:</B> Editing `/etc/systemd/system/*.service` files or `systemctl` overrides.</li><li><B>Bootloader Options:</B> Selecting an older kernel version or a previous boot environment (e.g., via <B>GRUB</B> menu).</li><li><B>Filesystem Snapshots:</B> Using tools like <B>Snapper</B> (for Btrfs/ZFS) to revert the entire filesystem to a previous snapshot.</li><li><B>Distribution-Specific Tools:</B> Some distributions provide specialized recovery tools or scripts that may incorporate 'revert' functionality in specific contexts, such as initramfs regeneration or atomic updates.</li><li><B>Backup and Restore:</B> Utilizing full system backups to restore to a known good state.</li></ul>


title: HISTORY
content:
The concept of "reverting" system configuration changes has been a long-standing need in system administration, particularly for recovery from bad updates or misconfigurations. While <B>systemctl</B> itself provides powerful tools for managing individual units, it lacks a built-in, comprehensive rollback mechanism for the entire systemd state or configuration directory. The idea behind a <B>systemctl-revert</B> command likely stems from this gap, with administrators and distribution maintainers developing ad-hoc solutions or integrating with broader system snapshot/rollback tools to achieve this functionality. Its 'history' is therefore more about the evolution of system recovery techniques than a single command's development.


title: SYNOPSIS
content:
<b>valheim_server.x86_64</b> <br>  <b>-name</b> <I>"Server Name"</I> <br>  <b>-world</b> <I>"WorldName"</I> <br>  <b>-password</b> <I>"MyPassword"</I> <br>  [<b>-port</b> <I>2456</I>] <br>  [<b>-public</b> <I>1|0</I>] <br>  [<b>-savedir</b> <I>"/path/to/saves"</I>] <br>  [<b>-Nographics</b>] <br>  [<I>...</I>]


title: PARAMETERS
content:
<b><b>-name</b> <I>"Server Name"</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the public name of the Valheim server visible in the game's server browser.<br><br><b><b>-world</b> <I>"WorldName"</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the world file to load or create. This determines the save game associated with the server.<br><br><b><b>-password</b> <I>"MyPassword"</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the password required for players to join the server. It must be at least 5 characters long and cannot contain the server name or world name.<br><br><b><b>-port</b> <I>PortNumber</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the UDP port the server will listen on. Default is 2456. Other required ports (e.g., 2457, 2458) are automatically derived.<br><br><b><b>-public</b> <I>1|0</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Determines if the server is publicly listed (1) or private (0). Private servers are only joinable via direct IP address.<br><br><b><b>-savedir</b> <I>"/path/to/saves"</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative directory for world and character save files. Defaults to a location within the server installation or user's home directory.<br><br><b><b>-Nographics</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs the server without a graphical interface, which is standard for dedicated servers to reduce resource usage.<br><br><b><b>-preset</b> <I>DifficultyPreset</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial difficulty preset for the world (e.g., 'casual', 'easy', 'normal', 'hard', 'hardcore', 'veryhard').<br><br><b><b>-queryport</b> <I>PortNumber</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the server query port, typically used by server browsers and monitoring tools. Defaults to the main port + 1 (e.g., 2457 if main port is 2456).<br><br>


title: DESCRIPTION
content:
The term <b>valheim</b> on Linux typically refers to the executable for the <I>Valheim Dedicated Server</I>, a popular open-world survival game. Unlike standard Linux utilities, <b>valheim</b> is not a pre-installed command but an application specific to running a game server instance. This server allows players to host their own persistent worlds for cooperative gameplay. It is usually installed via <I>SteamCMD</I> and launched from its installation directory, often through a shell script (e.g., <I>start_server.sh</I>). The underlying executable, commonly named <I>valheim_server.x86_64</I>, processes various command-line arguments to configure the server's name, world, password, port, and other operational settings. Running a dedicated server provides a stable and consistent environment for players, independent of any single player's game client.


title: CAVEATS
content:
The 'valheim' command is not a standard Linux utility; it refers to the executable of the Valheim Dedicated Server application. It requires manual installation, typically through <I>SteamCMD</I>. The server executable is often launched via a wrapper shell script (e.g., <I>start_server.sh</I>) which sets up the environment and passes the command-line arguments. Firewall rules must be configured to allow incoming connections on the specified server ports.


title: INSTALLATION AND EXECUTION
content:
The Valheim Dedicated Server is typically installed using <I>SteamCMD</I> with the command: <br> <I>steamcmd +login anonymous +app_update 896660 validate +quit</I>. <br> After installation, the server is usually started using a provided shell script, often modified to include desired command-line parameters. For example: <br> <I>./valheim_server.x86_64 -name "My Valheim Server" -world "MyWorld" -password "secret"</I>


title: PORT REQUIREMENTS
content:
The Valheim server requires three consecutive UDP ports to be open on the firewall: the main <I>Game Port</I> (default 2456), the <I>Query Port</I> (default 2457), and the <I>Server List Port</I> (default 2458). If you set <I>-port 1234</I>, then ports 1234, 1235, and 1236 must be open.


title: HISTORY
content:
Valheim, developed by Iron Gate Studio and published by Coffee Stain Publishing, was released in early access in February 2021. The dedicated server component was made available shortly after, allowing players to host persistent worlds for their communities. Its development has seen continuous updates to both the game and server functionalities, adapting to community feedback and new content releases.


title: SYNOPSIS
content:
The `ventoy` command is typically invoked via a script like <i>Ventoy2Disk.sh</i>.<br><br><b><i>Ventoy2Disk.sh</i></b> [<i>OPTION</i>]... <i>/dev/sdX</i><br><b><i>Ventoy2Disk.sh</i></b> -l<br><b><i>Ventoy2Disk.sh</i></b> -v


title: PARAMETERS
content:
<b>-l, --list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists all available USB devices detected by the system, useful for identifying the target drive.<br><br><b>-i, --install</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs Ventoy to the specified device (e.g., <i>/dev/sdb</i>). <b>Warning: all data on the target device will be lost.</b><br><br><b>-u, --update</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Updates an existing Ventoy installation on the specified device. User data in the first partition is usually preserved, but the Ventoy core files are refreshed.<br><br><b>-r SIZE, --reserve SIZE</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reserves a specified amount of space (e.g., <i>-r 32M</i> for 32MB) at the end of the Ventoy disk. This space will be unallocated or can be used for a separate data partition.<br><br><b>-g, --gpt</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the use of GPT (GUID Partition Table) partition style for the Ventoy drive. The default is MBR.<br><br><b>-M, --mbr</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the use of MBR (Master Boot Record) partition style for the Ventoy drive. This is typically the default.<br><br><b>-s, --secure</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables Secure Boot support for the Ventoy installation. May require manual enrollment of MOK (Machine Owner Key) on some systems.<br><br><b>-F, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Proceeds with installation or update without requesting user confirmation. Use with extreme caution.<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the current Ventoy version number.<br><br>


title: DESCRIPTION
content:
Ventoy is an open-source tool designed to create a bootable USB drive without the need to format the drive repeatedly. Unlike traditional methods where each ISO requires a separate drive or re-formatting, Ventoy allows you to simply copy multiple ISO, WIM, IMG, VHD(x), or EFI files directly to the USB drive after installation. When booted, Ventoy presents a menu of all detected bootable files, letting you choose which one to start. This significantly streamlines the process of testing various operating systems, installing different Linux distributions, or using multiple utility disks from a single portable device. It supports both MBR and GPT partition styles, UEFI and Legacy BIOS booting, and offers a straightforward command-line interface for installation and updates on Linux systems, alongside a graphical user interface for ease of use. Its key advantage lies in its "boot-from-file" approach, eliminating the extraction or burning process for each image.


title: CAVEATS
content:
<b>Data Loss:</b> Installing Ventoy to a drive will irrevocably erase all existing data on that drive. Always double-check the target device (e.g., <i>/dev/sdb</i>) before proceeding.<br><b>Device Naming:</b> Ensure you correctly identify the target USB device (e.g., <i>/dev/sdb</i>, <i>/dev/sdc</i>) as using the wrong device name can lead to data loss on a system drive.<br><b>Secure Boot:</b> While Ventoy supports Secure Boot, some systems might require manual enrollment of Ventoy's MOK (Machine Owner Key) or temporarily disabling Secure Boot if issues arise.<br><b>Performance:</b> The boot speed can depend on the USB drive's speed and the size/type of the ISO files. For optimal performance, use a fast USB 3.0/3.1 drive.


title: COMPATIBILITY
content:
Ventoy supports an extremely wide range of bootable files including ISO, WIM, IMG, VHD(x), and EFI files. It's compatible with over 1100 different operating system images, covering most Linux distributions, Windows installers, and various utility disks.


title: PERSISTENT STORAGE
content:
Ventoy itself doesn't offer persistent storage for the OS images by default. If you need persistence (e.g., to save changes made to a live Linux OS), you typically need to create an additional data partition on the Ventoy drive and use a distribution that supports persistence on that partition, or utilize Ventoy's official persistence plugin feature which allows creating a persistence image file.


title: HISTORY
content:
Ventoy was first released in April 2020 by LongPao and quickly gained popularity due to its innovative "boot-from-file" approach. Before Ventoy, users typically relied on tools like <i>Rufus</i> (Windows) or <i>dd</i> (Linux) which required writing a single ISO to a USB, necessitating reformatting for each new image. Ventoy revolutionized this by creating a persistent boot environment on the USB drive, allowing users to simply copy and paste multiple ISOs without reformatting. This simplification addressed a common pain point for IT professionals, system administrators, and enthusiasts, cementing its place as a go-to tool for multi-boot USB creation. Its development continues with regular updates adding support for new bootable formats and addressing compatibility issues.


title: PARAMETERS
content:
<b><i>&lt;CRATE_NAMES&gt;</i>...</b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more names of the Rust crates (binaries) to install.<br><br><b>--install-dir <i>&lt;DIR&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the directory where the binaries should be installed (defaults to <code>~/.cargo/bin</code>).<br><br><b>--bin-dir <i>&lt;DIR&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Alias for <b>--install-dir</b>.<br><br><b>--force, -f</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force installation, overwriting any existing binaries without prompting.<br><br><b>--no-confirm</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not prompt for confirmation; assume 'yes' to all questions.<br><br><b>--version <i>&lt;VERSION_CONSTRAINT&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify a version constraint for the crate to install (e.g., <code>1.2.3</code>, <code>^1.0</code>).<br><br><b>--git <i>&lt;URL&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Install from a specified Git repository URL.<br><br><b>--tag <i>&lt;TAG&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;When installing from Git, specify a release tag to use.<br><br><b>--path <i>&lt;PATH&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Install from a local path, typically used for local development.<br><br><b>--force-compile</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Force compilation from source using <b>cargo install</b>, even if a pre-built binary is found.<br><br><b>--no-fallback</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not fall back to <b>cargo install</b> if <b>binstall</b> fails to find or install a pre-built binary.<br><br><b>--crates-io</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Always attempt to fetch assets directly from crates.io release metadata first.<br><br><b>--debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable debug logging for more verbose output during installation.<br><br><b>--quiet, -q</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress most output, showing only errors.<br><br><b>--help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a help message for <b>cargo-binstall</b>.<br><br><b>--version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display the version of <b>cargo-binstall</b> itself.<br><br>


title: DESCRIPTION
content:
<b>cargo-binstall</b> is a subcommand for Rust's package manager, Cargo, designed to accelerate the installation of Rust binaries. Unlike the standard <b>cargo install</b>, which compiles crates from source, <b>cargo-binstall</b> prioritizes downloading pre-built executables. It intelligently scans well-known locations, such as GitHub release assets or crates.io metadata, for binaries compatible with your system architecture.<br><br>If a pre-built binary is found, it's downloaded, verified (where possible), and installed directly into your <code>~/.cargo/bin</code> directory, significantly reducing installation time by bypassing the compilation step. This is particularly beneficial for frequently used tools, CI/CD pipelines, or environments where compile times are a bottleneck. If <b>cargo-binstall</b> cannot locate a suitable pre-built binary, it gracefully falls back to using <b>cargo install</b> to compile and install the crate from source, ensuring that the desired tool is eventually installed, albeit potentially slower. It dramatically improves the user experience for installing many common Rust development tools.


title: CAVEATS
content:
<i>cargo-binstall</i>'s effectiveness largely depends on whether crate maintainers provide pre-built binaries for their projects. Not all Rust projects offer these, in which case it will fall back to slower compilation. <br><br>Downloading and executing binaries from external sources (like GitHub releases) carries inherent security risks. Users should always be mindful of the source and trust the maintainers of the software they install. <br><br>Pre-built binaries must also be compatible with your operating system and architecture; if none are found, compilation will be the only option.


title: INSTALLATION
content:
To use <i>cargo-binstall</i>, you must first install it using the standard <i>cargo install</i> command: <br><code>cargo install binstall</code><br>This command compiles and installs <i>cargo-binstall</i> itself, making the <code>cargo binstall</code> subcommand available.


title: CONFIGURATION
content:
<i>cargo-binstall</i> can be configured via your Cargo configuration file, typically located at <code>~/.cargo/config.toml</code>. You can define default behaviors, such as always assuming 'yes' to prompts or setting preferred installation directories, under a <code>[binstall]</code> section. For example: <br><code>[binstall]</code><br><code>assume-yes = true</code>


title: HISTORY
content:
<i>cargo-binstall</i> emerged as a community-driven solution to a common pain point in the Rust ecosystem: the often slow compilation times associated with installing command-line tools via <i>cargo install</i>. It was designed to leverage the growing trend of Rust project maintainers providing pre-built binaries in their GitHub releases or similar platforms. First appearing around 2021, its development was motivated by a desire to provide a much faster, "npm-like" installation experience for common Rust tools, particularly beneficial for continuous integration (CI) environments and quick developer setups, making the Rust development workflow more efficient.


title: SYNOPSIS
content:
<i><b>cli4</b> [options] [arguments]</i><br><br><b>Note:</b> This is a generic synopsis for a command-line interface. Since <i><b>cli4</b></i> is not a standard Linux command, its actual syntax, options, and arguments would depend entirely on its specific implementation (e.g., if it's a custom script or part of a particular software package).


title: PARAMETERS
content:
<b>N/A</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i><b>cli4</b></i> is not a standard Linux command, and therefore its specific options and arguments cannot be provided. If it's a custom script or application-specific tool, its parameters would be defined by that specific implementation.<br><br>


title: DESCRIPTION
content:
The command <i><b>cli4</b></i> is not a recognized or standard utility found in most mainstream Linux distributions. Unlike commands such as <i><b>ls</b></i>, <i><b>grep</b></i>, or <i><b>ip</b></i>, there is no universally adopted program named <i><b>cli4</b></i> within the core Linux toolkit or common package repositories.<br><br>It is highly probable that <i><b>cli4</b></i> refers to one of the following:<br><br>1. <b>A typo:</b> The user might have intended to type a different, standard command.<br>2. <b>An application-specific CLI:</b> Many software applications provide their own command-line interfaces. <i><b>cli4</b></i> could be a component of a particular software package not bundled with standard Linux, possibly related to a version '4' or IPv4.<br>3. <b>A custom script or alias:</b> A user or system administrator may have created a script or an alias named <i><b>cli4</b></i> for specific tasks on a particular system.<br><br>Without further context, it is impossible to provide precise details about its functionality, as it does not correspond to a general-purpose Linux command.


title: CAVEATS
content:
The primary caveat is that <i><b>cli4</b></i> is not a standard or documented command in typical Linux environments. Attempting to execute it without it being specifically defined on your system will likely result in a 'command not found' error. Users should verify its existence and purpose within their specific environment.


title: <I><B>UNDERSTANDING CLIS</B></I>
content:
A Command-Line Interface (CLI) is a text-based interface used to operate software and operating systems. Users type commands at a prompt, and the system executes them. Standard Linux commands are CLIs. If <i><b>cli4</b></i> exists on your system, it functions as a CLI specific to its defined purpose. To learn more about a command on your system, use the <i><b>man</b></i> command (e.g., <i><b>man ls</b></i>) or refer to the documentation of the specific application it belongs to.


title: HISTORY
content:
As <i><b>cli4</b></i> is not a standard Linux command, it does not possess a documented history within the development of the Linux operating system or its common utilities. Any history related to a command named <i><b>cli4</b></i> would be specific to the custom application, script, or environment where it might be defined or used.


title: PARAMETERS
content:
<b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates code for C++ compatibility. This option ensures the output is more suitable for C++ compilers.<br><br><b><b>-C</b> <I>option</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets compatibility mode. Common options include <i>INFORMIX</i> and <i>ORACLE</i>, which adjust syntax and behavior to match those environments.<br><br><b><b>-D</b> <I>macro</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines a C preprocessor macro. This is equivalent to adding <i>#define macro</i> at the beginning of the input file.<br><br><b><b>-g</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates debugging information. This can assist in tracing issues within the generated C code.<br><br><b><b>-I</b> <I>directory</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds <i>directory</i> to the search path for include files referenced by <i>EXEC SQL INCLUDE</i>.<br><br><b><b>-i</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Parses <i>EXEC SQL INCLUDE</i> statements and includes their content directly.<br><br><b><b>-l</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates <i>#line</i> directives in the output file, aiding in debugging by mapping errors back to the original <i>.pgc</i> file.<br><br><b><b>-o</b> <I>outputfile</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the output C file. If not provided, <b>ecpg</b> derives it from the input filename (e.g., <i>input.pgc</i> becomes <i>input.c</i>).<br><br><b><b>-t</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables autocommit mode. Each SQL statement will be committed automatically upon successful execution.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints verbose information during processing, useful for understanding <b>ecpg</b>'s actions.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays a help message with command-line options and exits.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs the <b>ecpg</b> version information and exits.<br><br><b><b>-r</b> <I>option</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables specific Informix compatibility options, such as <i>no_indicator</i> for handling NULL values without indicator variables.<br><br><b><b>-E</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents <b>ecpg</b> from performing its own C preprocessor processing on the input file, allowing external preprocessors.<br><br><b><b>-G</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses global variables for connection information, which can simplify multi-connection scenarios.<br><br><b><b>-N</b> <I>count</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum number of connections that can be active simultaneously (only when <b>-G</b> is used).<br><br><b><b>-P</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preserves comments from the input <i>.pgc</i> file in the generated <i>.c</i> file.<br><br><b><b>-S</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables strict mode, which enforces stricter SQL syntax checking and may reject non-standard constructs.<br><br><b><b>-b</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables enhanced handling for <i>BYTEA</i> (binary string) data types, particularly for compatibility.<br><br>


title: DESCRIPTION
content:
The <b>ecpg</b> command is an embedded SQL preprocessor for C programs. It allows developers to embed SQL statements directly within C source code, which are then translated into C function calls by <b>ecpg</b>. This simplifies the process of interacting with PostgreSQL databases from C applications by handling the intricacies of database connection, query execution, and result retrieval.<br><br>The preprocessor takes one or more <i>.pgc</i> source files as input, containing SQL statements prefixed with <i>EXEC SQL</i>, and generates corresponding <i>.c</i> files. These generated C files can then be compiled using a standard C compiler (like <i>gcc</i>) and linked against the <i>libecpg</i> library to produce an executable application. <b>ecpg</b> supports various SQL features, including DML, DDL, transaction management, and prepares statements, making it a powerful tool for building robust database applications in C.


title: CAVEATS
content:
When using <b>ecpg</b>, it's crucial to correctly link the compiled C code with the <i>libecpg</i> library; otherwise, runtime errors will occur due to unresolved symbols. Error handling in embedded SQL typically relies on checking the <i>SQLSTATE</i> or <i>SQLCODE</i> variables after each <i>EXEC SQL</i> statement, which requires careful implementation. Mixing C and SQL control flow can sometimes be complex, and understanding the generated C code is beneficial for advanced debugging. Compatibility modes (e.g., <i>INFORMIX</i>, <i>ORACLE</i>) can introduce subtle behavioral differences from pure PostgreSQL SQL, potentially impacting portability.


title: TYPICAL USAGE FLOW
content:
A common development workflow involves writing C code with embedded SQL in a <i>.pgc</i> file. This file is then processed by <b>ecpg</b> to generate a standard <i>.c</i> file. Subsequently, the generated <i>.c</i> file is compiled using a C compiler (e.g., <i>gcc -c generated.c</i>) and linked with the <i>libecpg</i> library and other necessary libraries (e.g., <i>gcc -o myapp generated.o -lecpg -lpq</i>) to produce the final executable application.


title: EMBEDDED SQL SYNTAX
content:
All SQL statements intended for processing by <b>ecpg</b> must be prefixed with <i>EXEC SQL</i> and terminated by a semicolon. For example:<br><i><br>EXEC SQL CONNECT TO 'dbname' USER 'user' PASSWORD 'pass';<br>EXEC SQL SELECT column INTO :c_variable FROM table WHERE id = :c_id_variable;<br>EXEC SQL DISCONNECT ALL;</i><br><br>C host variables used in SQL statements are indicated by a colon prefix (e.g., <i>:c_variable</i>).


title: HISTORY
content:
The <b>ecpg</b> preprocessor has been a part of the PostgreSQL project for many years, providing a direct and convenient way for C developers to integrate database operations into their applications. Its development has focused on maintaining compatibility with various embedded SQL standards and popular database client interfaces (like Informix ESQL/C), while continuously adapting to new PostgreSQL features and C language standards. It represents an alternative to direct API programming with <i>libpq</i>, offering a higher-level abstraction for SQL operations directly within the source code, appealing to developers familiar with embedded SQL paradigms from other database systems.


title: SYNOPSIS
content:
<b>mkvpropedit</b> [<i>global options</i>] <i>&lt;filename&gt;</i> [<i>&lt;edit specifier&gt;</i> [<i>&lt;action/property&gt;</i> ...]] ...<br><br><i>&lt;edit specifier&gt;</i> examples:<br>&nbsp;&nbsp;&nbsp;&nbsp;<b>--edit</b> <i>segment</i><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>--edit</b> <i>track:&lt;number|type:number|UID&gt;</i><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>--edit</b> <i>attachment:&lt;number|filename|MIME type&gt;</i><br><br><i>&lt;action/property&gt;</i> examples:<br>&nbsp;&nbsp;&nbsp;&nbsp;<b>--set</b> <i>&lt;property&gt;=&lt;value&gt;</i><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>--delete</b> <i>&lt;property&gt;</i><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>--add-attachment</b> <i>&lt;file&gt;</i><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>--replace-attachment</b> <i>&lt;file&gt;</i><br>&nbsp;&nbsp;&nbsp;&nbsp;<b>--delete-attachment</b>


title: PARAMETERS
content:
<b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show usage information and exit.<br><br><b><b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show version information and exit.<br><br><b><b>-v</b>, <b>--verbose</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Be more verbose and show important Matroska elements as they're read.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppress all warnings and status output. Only errors will be printed.<br><br><b><b>--ui-language</b> <i>&lt;language_code&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the language for the user interface messages.<br><br><b><b>--debug</b> <i>&lt;topic&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Turn on debugging for a specific topic.<br><br><b><b>--engage</b> <i>&lt;feature&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Engage a special feature. Use with caution.<br><br><b><b>--output-charset</b> <i>&lt;charset&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the charset to use for output messages.<br><br><b><b>--redirect-output</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Redirect all output to a file.<br><br><b><b>--edit</b> <i>segment</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects the segment information section for editing. Properties like <i>title</i> and <i>segment-uid</i> can be set here.<br><br><b><b>--edit</b> <i>track:&lt;number|type:number|UID&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects a track for editing. <i>number</i> is the track ID (1-based for the GUI, 0-based for internal Matroska structure). <i>type:number</i> specifies a track by type (e.g., <i>video:1</i>). <i>UID</i> specifies a track by its unique ID.<br><br><b><b>--edit</b> <i>attachment:&lt;number|filename|MIME type&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Selects an attachment for editing. <i>number</i> is the 1-based index, <i>filename</i> is the attached file's name, <i>MIME type</i> is the attachment's MIME type.<br><br><b><b>--set</b> <i>&lt;property&gt;=&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the value of a property. This action follows an <i>--edit</i> specifier. Examples of properties include <i>title</i>, <i>language</i>, <i>name</i>, <i>default-track</i>.<br><br><b><b>--delete</b> <i>&lt;property&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete a property. This action follows an <i>--edit</i> specifier. Examples include <i>title</i>, <i>segment-uid</i>, <i>track-name</i>.<br><br><b><b>--add-attachment</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add the specified file as an attachment. This action follows an <i>--edit segment</i> specifier.<br><br><b><b>--replace-attachment</b> <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Replace an existing attachment with the content of the specified file. This action follows an <i>--edit attachment:X</i> specifier.<br><br><b><b>--delete-attachment</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete an attachment. This action follows an <i>--edit attachment:X</i> specifier to delete a specific attachment. When used after <i>--edit segment</i>, it deletes all attachments.<br><br><b><b>--delete-chapters</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Delete all chapters from the file. This action follows an <i>--edit segment</i> specifier.<br><br>


title: DESCRIPTION
content:
<i>mkvpropedit</i> is a powerful command-line tool from the <i>mkvtoolnix</i> suite designed for modifying properties of existing Matroska (MKV) files without needing to re-mux the entire file. This is particularly useful for large files where re-muxing would be time-consuming. It allows users to make various changes, including setting the global file title, altering segment UIDs, adding, replacing, or deleting attachments, and extensively modifying individual track properties such as language, name, default/forced flags, and even codec private data. Unlike <i>mkvmerge</i> which creates new MKV files, <i>mkvpropedit</i> directly modifies the input file in-place, making it an efficient solution for post-processing and metadata management of Matroska containers.


title: CAVEATS
content:
Using <i>mkvpropedit</i> modifies the Matroska file directly. Incorrect usage can lead to file corruption or unplayable files. Always back up your files before making changes. Some properties, especially related to codec private data, require precise knowledge of the Matroska specification and the codec in question; arbitrary changes can render tracks unplayable. It does not re-encode or re-mux entire audio/video streams, only modifies metadata and specific data structures within the Matroska container.


title: PROPERTY NAMES
content:
Property names (e.g., <i>title</i>, <i>language</i>, <i>default-track</i>) generally correspond to the elements found in the Matroska specification or the output of <i>mkvinfo</i>. Many track properties can be shortened, e.g., <i>track-name</i> can be simply <i>name</i> when operating on a track.


title: TRACK SPECIFICATION
content:
Tracks can be specified by their 0-based Matroska track ID (e.g., <i>track:0</i>), their 1-based number as shown by <i>mkvinfo</i> (e.g., <i>track:1</i>), by type and number (e.g., <i>track:audio:2</i>), or by their unique ID (e.g., <i>track:0xDEADBEEF</i>).


title: HISTORY
content:
<i>mkvpropedit</i> is an integral part of the <i>mkvtoolnix</i> suite, developed primarily by Moritz Bunkus. It was introduced to address the growing need for modifying existing Matroska files without the overhead of a full re-mux, which can be inefficient for simple metadata changes on large files. Its development has focused on providing granular control over segment, track, and attachment properties, evolving to support a wide range of modifications and becoming a crucial tool for Matroska file post-production and management.


title: PARAMETERS
content:
<b><b>-D</b> <I>directory</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the file system location of the database configuration files and data cluster.<br><br><b><b>-d</b> <I>level</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the debugging verbosity level. Higher levels provide more detailed log output.<br><br><b><b>-c</b> <I>name</I>=<I>value</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a run-time configuration parameter, overriding settings in <b>postgresql.conf</b>.<br><br><b><b>-p</b> <I>port</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the TCP/IP port number on which the server will listen for client connections.<br><br><b><b>-i</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables TCP/IP connections. Deprecated in favor of the <b>listen_addresses</b> configuration parameter.<br><br><b><b>-N</b> <I>max_connections</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the maximum number of client connections allowed to the server.<br><br><b><b>-k</b> <I>directory</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the directory for the Unix-domain socket, overriding the default.<br><br><b><b>-h</b> <I>hostname</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the TCP/IP address(es) on which the server will listen. Use '*' or '0.0.0.0' for all available.<br><br><b><b>-l</b> <I>filename</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Appends all server log output to the specified file instead of standard error.<br><br><b><b>-o</b> "<I>options</I>"</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Passes the specified options directly to all server processes (backends).<br><br><b><b>-F</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables <b>fsync</b> calls for performance, but risks data corruption on crashes. Not recommended for production.<br><br><b><b>-S</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables <b>synchronous_commit</b> for performance, but risks data loss on crashes.<br><br><b><b>--single</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Starts the server in single-user mode, useful for recovery or emergency administration tasks.<br><br><b><b>--name</b>=<I>value</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Long form of <b>-c</b>; sets a run-time configuration parameter.<br><br>


title: DESCRIPTION
content:
The <b>postgres</b> command is the main executable for the PostgreSQL database server. It is typically started by the <b>pg_ctl</b> utility or by system service managers like <b>systemd</b> rather than being invoked directly by a user. When run, it initializes and manages the database system, listens for client connections, and executes SQL queries.<br><br>It manages individual connection processes, shared memory, and performs critical background tasks such as writing Write-Ahead Log records and managing checkpoints. Direct invocation is usually reserved for debugging, single-user mode operations, or specific configuration tests.


title: CAVEATS
content:
<I>Direct Invocation</I>: Running <b>postgres</b> directly is generally not recommended for production environments. It lacks proper process management, logging rotation, and automatic restart capabilities typically provided by <b>pg_ctl</b> or system service managers.<br><br><I>Data Directory</I>: Always ensure the specified data directory (<b>-D</b>) is correct and owned by the PostgreSQL user to prevent startup failures or data corruption.<br><br><I>Resource Management</I>: Improper configuration of resource parameters like <b>max_connections</b> or <b>shared_buffers</b> can severely impact performance or stability.<br><br><I>Security</I>: Listening on insecure addresses or ports, or with insufficient authentication settings, can expose your database to unauthorized access.


title: CONFIGURATION FILES
content:
The <b>postgres</b> server reads its primary configuration from <b>postgresql.conf</b>, located within the data directory. This file contains most adjustable parameters controlling server behavior, resource usage, and security.


title: ENVIRONMENT VARIABLES
content:
Several environment variables, such as <b>PGDATA</b> (to specify the data directory), <b>PGPORT</b> (for the listening port), and <b>PGOPTIONS</b> (for additional server options), can influence the server's behavior upon startup.


title: HISTORY
content:
PostgreSQL's roots trace back to the Ingres project at UC Berkeley in the 1970s. The <b>postgres</b> project, initiated by Michael Stonebraker, aimed to address limitations of Ingres and began in 1986, with its first public release in 1989. The <b>postgres</b> server executable has been the core of the system since its inception, evolving significantly in features, performance, and stability over decades of open-source development. The project was renamed PostgreSQL in 1996 to better reflect its SQL capabilities.


title: SYNOPSIS
content:
<code>ShooterGameServer <I>MAP_NAME</I>?listen?Port=<I>PORT</I>?QueryPort=<I>Q_PORT</I>[options] -server -log</code>


title: PARAMETERS
content:
<b><code><I>MAP_NAME</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the map to load (e.g., TheIsland, Aberration, Extinction, Fjordur). This is the first argument without a preceding dash.<br><br><b><code>?listen</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Required argument to indicate the server should listen for incoming connections.<br><br><b><code>?Port=<I>PORT</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the primary game port (default: 7777). Used by players to connect to the server.<br><br><b><code>?QueryPort=<I>Q_PORT</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the Steam query port (default: 27015). Used by Steam to list the server in the server browser.<br><br><b><code>?RCONPort=<I>R_PORT</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the RCON (Remote Console) port for administrative commands (default: 27020).<br><br><b><code>?SessionName=<I>SERVER_NAME</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the name of the server as it appears in the in-game server list.<br><br><b><code>?ServerPassword=<I>PASSWORD</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a password for players to join the server.<br><br><b><code>?ServerAdminPassword=<I>ADMIN_PASSWORD</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the password for in-game administrators to use commands.<br><br><b><code>?MaxPlayers=<I>NUM</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the maximum number of players that can join the server.<br><br><b><code>?AltSaveDirectoryName=<I>NAME</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternative directory name for save files, useful for multiple server instances.<br><br><b><code>?GameModIds=<I>ID1,ID2</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;A comma-separated list of Steam Workshop Mod IDs to load on the server.<br><br><b><code>-server</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Indicates that the application should run as a dedicated server instance.<br><br><b><code>-log</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables logging of server output to the console and/or a log file.<br><br><b><code>-NoTransferFromFiltering</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows item, dino, and character transfers from other servers without filtering.<br><br><b><code>-multihome=<I>IP_ADDRESS</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Binds the server to a specific IP address on the host machine.<br><br><b><code>-crossplay</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables cross-play compatibility between Steam and Epic Games Store clients.<br><br><b><code>-epiconly</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Restricts server access to Epic Games Store clients only.<br><br><b><code>-PublicIP=<I>IP_ADDRESS</I></code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces the server to advertise a specific public IP address, useful behind NAT.<br><br><b><code>-PreventHibernation</code></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents parts of the map from 'hibernating' (unloading) when no players are nearby, affecting resource spawns and dino behavior.<br><br>


title: DESCRIPTION
content:
The <b>Ark: Survival Evolved Dedicated Server</b> application allows users to host their own persistent game worlds for the popular survival game ARK: Survival Evolved. Unlike playing the game client, this command-line tool runs a server instance without a graphical interface, managing game logic, player connections, and world state. It's essential for players who wish to create private servers for friends, communities, or for those who need more control over game settings than official servers provide. <br>The server handles aspects such as dinosaur spawning, resource regeneration, player data, and mod integration, enabling a customizable multiplayer experience. It's a resource-intensive application, typically run on dedicated hardware or virtual machines.


title: CAVEATS
content:
The <b>Ark: Survival Evolved Dedicated Server</b> is not a standard Linux command-line utility. It's an application provided by the game developers, typically managed through SteamCMD. Configuration extends beyond command-line parameters to specific `.ini` files (<code>GameUserSettings.ini</code> and <code>Game.ini</code>) for detailed gameplay adjustments. It requires significant CPU, RAM, and storage resources, especially with multiple players and mods. Updates are managed externally via SteamCMD, not through traditional Linux package managers.


title: CONFIGURATION FILES
content:
Beyond command-line arguments, many server settings are controlled via <code>.ini</code> files located in the server's configuration directory, typically <code><I>server_root</I>/ShooterGame/Saved/Config/LinuxServer/</code>.<br><ul><li><b>GameUserSettings.ini:</b> Contains settings like server name, passwords, difficulty, XP rates, harvest rates, and administrator settings.</li><li><b>Game.ini:</b> Contains more advanced gameplay overrides, dino spawning rules, and specific mod configurations.</li></ul>These files offer extensive customization options not available directly through command-line parameters.


title: INSTALLATION
content:
The ARK Dedicated Server is typically installed using <a href='https://developer.valvesoftware.com/wiki/SteamCMD' target='_blank'>SteamCMD</a>. The process involves installing SteamCMD itself, then using it to anonymously download the dedicated server application. For example: <br><code>steamcmd +login anonymous +force_install_dir /path/to/ark/server +app_update 376030 validate +quit</code><br>This ensures the server files are downloaded and kept up-to-date.


title: HISTORY
content:
ARK: Survival Evolved was first released in early access in 2015, with Linux support for both the client and dedicated server shortly thereafter. The dedicated server has evolved alongside the game, with new maps and features often requiring updates to the server application and its command-line parameters. Its core `ShooterGameServer` executable (based on Unreal Engine) has remained the central component, with ongoing adjustments to support game balance, performance, and anti-cheat measures. The command-line interface has been consistently the primary method for Linux users to launch and configure their server instances, offering granular control over the game environment.


title: SEE ALSO
content:
steamcmd(1) - Steam Command Line Utility for game server installation and updates., screen(1) - A full-screen window manager that multiplexes a physical terminal., tmux(1) - A terminal multiplexer, similar to screen, for running processes in detachable sessions., systemctl(1) - Control the systemd system and service manager (for running server as a service).


title: TLDR
content:
<b>Start the server with a specific map</b>`[path/to/ShooterGameServer] [TheIsland]`<br><b>Start the server with a specific session name, server password, and admin password</b>`[path/to/ShooterGameServer] [TheIsland]?SessionName=[session_name]?ServerPassword=[server_password]?ServerAdminPassword=[admin_password]`<br><b>Start the server with a specific port and set a maximum player count</b>`[path/to/ShooterGameServer] [TheIsland]?Port=[7777]?MaxPlayers=[1..70]`<br><b>Enable PvE and disabling PvP</b>`[path/to/ShooterGameServer] [TheIsland]?ServerPVE=true`<br><b>Set a multiplier to scale the server difficulty, affecting the maximum level of wild creatures</b>`[path/to/ShooterGameServer] [TheIsland]?DifficultyOffset=[1.0]`<br><b>Enable a specific event</b>`[path/to/ShooterGameServer] [TheIsland] -ActiveEvent=[Summer]`<br><b>Enable automatic mod downloading, installation, and updating (Steam only)</b>`[path/to/ShooterGameServer] [TheIsland] -automanagedmods`<br><b>Enable crossplay between Steam and Epic Games Store</b>`[path/to/ShooterGameServer] [TheIsland] -crossplay -PublicIPForEpic=[ip_address]`


title: TLDR
content:
<b>Show a graphical tree of the current directory</b>`dutree`<br><b>Show a specific directory</b>`dutree [path/to/directory]`<br><b>Aggregate items smaller than a number of KB (or M for MB, or G for GB)</b>`dutree --aggr [number]K`<br><b>Show subdirectories up to the specified depth (default is 1)</b>`dutree --depth [depth]`<br><b>Skip directories for a fast local overview</b>`dutree --files-only`<br><b>Exclude hidden files</b>`dutree --no-hidden`


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>-v</b>, <b>--version</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Shows version information about `hyprpicker` and exits.<br><br><b><b>-s</b>, <b>--splash</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates or forces the display of a magnifying glass splash screen during color selection, aiding in precise pixel picking.<br><br><b><b>-f</b> <I>format</I>, <b>--format</b> <I>format</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the desired output format for the picked color. Common options include <i>hex</i> (default), <i>rgb</i>, <i>hsl</i>, <i>hsv</i>, and <i>cmyk</i>.<br><br><b><b>-a</b>, <b>--autocopy</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically copies the selected color value to the system clipboard upon picking.<br><br><b><b>-r</b>, <b>--raw</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs only the pure color value without any descriptive prefixes or trailing newline characters, making it ideal for scripting.<br><br><b><b>-z</b> <I>factor</I>, <b>--zoom</b> <I>factor</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the zoom level for the picker cursor. For example, <i>-z 4</i> would zoom in 4x.<br><br><b><b>-p</b> <I>digits</I>, <b>--precision</b> <I>digits</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Defines the number of decimal places for floating-point color values (e.g., for RGB or HSL channels).<br><br><b><b>--</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Signals the end of command-line options, useful if a color format or other argument could be mistaken for an option.<br><br>


title: DESCRIPTION
content:
`hyprpicker` is a lightweight and efficient color picker tool specifically designed for Wayland environments, with strong ties to the Hyprland compositor. It enables users to effortlessly select any color visible on their screen and retrieve its value in various common formats.<br><br>The utility is known for its speed and simplicity, often displaying a magnifying glass (`--splash`) to aid in precise pixel selection. Its primary function is to provide a quick way for developers, designers, or anyone needing a specific color code to grab it directly from their display, supporting output formats like hexadecimal, RGB, HSL, HSV, and CMYK. It also offers convenient features such as automatically copying the selected color to the clipboard and raw output for scripting purposes.


title: CAVEATS
content:
<ul><li>Primarily designed for Wayland compositors. While some efforts might exist for Xorg compatibility via `grim`/`slurp` emulators, its native and most robust functionality is on Wayland.</li><li>Requires a Wayland compositor that implements the `wlr-screencopy-v1` and `wlr-data-control-v1` protocols for screen grabbing and clipboard access respectively.</li><li>Color profile management is usually left to the compositor; `hyprpicker` simply reports the raw pixel color.</li></ul>


title: USAGE EXAMPLES
content:
To pick a color and print it in hexadecimal (default):<br><b><pre>hyprpicker</pre></b><br><br>To pick a color and copy it directly to the clipboard:<br><b><pre>hyprpicker -a</pre></b><br><br>To get the color in RGB format:<br><b><pre>hyprpicker -f rgb</pre></b><br><br>To get a zoomed-in picker and output raw hex for scripting:<br><b><pre>hyprpicker -z 4 -r</pre></b>


title: WAYLAND INTEGRATION
content:
As a Wayland-native application, `hyprpicker` leverages Wayland protocols for screen content access and clipboard functionality. This ensures secure and efficient operation within modern Wayland desktop environments, adhering to the Wayland philosophy of explicit permissions and client isolation. It typically works out-of-the-box on `wlroots`-based compositors like Hyprland, Sway, and Wayfire.


title: HISTORY
content:
`hyprpicker` emerged as part of the Hyprland ecosystem, a dynamic tiling Wayland compositor. Its development was driven by the need for a native, fast, and minimalist color picker that integrates seamlessly with Wayland's security model and protocols, specifically `wlroots` based environments. Before `hyprpicker`, Wayland users often relied on less integrated solutions or lacked a native tool, especially given the difficulties of screen grabbing on Wayland compared to Xorg. It quickly became a go-to utility for Hyprland users and gained popularity in other `wlroots`-based Wayland setups due to its efficiency and straightforward functionality.


title: TLDR
content:
<b>Pick a color in the default (hex) format</b>`hyprpicker`<br><b>Pick a color and output in a specific format</b>`hyprpicker [[-f|--format]] [hex|rgb|hsl|hsv|cmyk]`<br><b>Copy the picked color to the clipboard</b>`hyprpicker [[-a|--autocopy]]`<br><b>Disable colored output (print plain text only)</b>`hyprpicker [[-n|--no-fancy]]`<br><b>Store the picked color in a shell variable</b>`[color]=$(hyprpicker [[-f|--format]] [hex])`<br><b>Display help</b>`hyprpicker [[-h|--help]]`


title: SYNOPSIS
content:
`mhwd-gpu [options]`<br><br><I>Examples of common GPU-related operations (utilizing underlying mhwd functionality):</I><br><B>List installed GPU drivers:</B><br>`mhwd-gpu -l`<br><br><B>List all available GPU drivers:</B><br>`mhwd-gpu -l -a`<br><br><B>Install a specific proprietary GPU driver (e.g., video-nvidia):</B><br>`sudo mhwd-gpu -i video-nvidia`<br><br><B>Remove an installed GPU driver (e.g., video-nvidia):</B><br>`sudo mhwd-gpu -r video-nvidia`<br><br><B>Auto-install recommended proprietary GPU drivers:</B><br>`sudo mhwd-gpu -a pci nonfree 0300`<br><I>Note:</I> This command typically relies on the broader `mhwd` utility, with `mhwd-gpu` acting as a conceptual or legacy alias/wrapper for GPU-specific operations.


title: PARAMETERS
content:
<b>-l, --list</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Lists installed GPU drivers. Use with `-a` to show all available drivers for detection.<br><br><b>-i, --install <driver_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs the specified GPU driver. Requires root privileges. E.g., `video-nvidia`.<br><br><b>-r, --remove <driver_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Removes the specified installed GPU driver. Requires root privileges.<br><br><b>-a, --auto [pci|usb] [free|nonfree] [class_id]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically installs recommended drivers based on detected hardware. For GPUs, typical arguments are `pci nonfree 0300`.<br><br><b>--setxorg <driver_name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Configures Xorg to use the specified GPU driver. Often used internally or for troubleshooting Xorg display issues.<br><br><b>-f, --force</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces an operation (e.g., installation or removal), potentially overriding warnings or existing configurations.<br><br><b>--force-reload</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces a reload of the mhwd configuration cache, useful after system updates or driver changes.<br><br><b>-h, --help</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the help message with available options for mhwd-gpu (or the underlying mhwd).<br><br><b>-v, --version</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays the version information of the mhwd-gpu utility.<br><br>


title: DESCRIPTION
content:
`mhwd-gpu` is a command-line utility for <I>Manjaro Linux</I> users, designed to simplify the management of graphics card drivers. It functions as a specialized interface within the broader <I>Manjaro Hardware Detection (MHWD)</I> framework, focusing specifically on GPU-related operations. This tool allows users to easily <B>list</B> currently installed and available drivers, <B>install</B> specific proprietary or open-source drivers, and <B>remove</B> existing ones. It abstracts away the complexities of manual driver installation, Xorg configuration, and dependency resolution, making it straightforward to switch between different driver versions or to set up the correct drivers after system installation. `mhwd-gpu` primarily supports NVIDIA, AMD, and Intel graphics hardware, ensuring users can achieve optimal performance and stability with minimal manual intervention. While `mhwd` is the general hardware detection tool, `mhwd-gpu` can be thought of as the GPU-centric component or an alias for GPU-specific `mhwd` commands.


title: CAVEATS
content:
`mhwd-gpu` (and the broader `mhwd` framework) is designed for and primarily functions within <I>Manjaro Linux</I>. Using these commands on other distributions may lead to unexpected behavior, system instability, or breakage. Always back up your system before making significant driver changes, especially when dealing with proprietary graphics drivers. Incorrect driver installations can result in a black screen, unbootable system, or an unstable graphical environment. It's recommended to understand the specific driver you are installing and its compatibility with your kernel and hardware before proceeding.


title: DRIVER TYPES
content:
Manjaro distinguishes between <I>free (open-source)</I> and <I>nonfree (proprietary)</I> drivers. Open-source drivers (e.g., `video-linux`, `video-modesetting`) are generally pre-installed and offer broad compatibility. Proprietary drivers (e.g., `video-nvidia`, `video-amd-gpu-pro`) often provide better performance for gaming and professional applications but can be more sensitive to kernel updates and require more careful management.


title: XORG CONFIGURATION
content:
After driver installation or removal, `mhwd-gpu` (or `mhwd`) typically manages the Xorg configuration files (e.g., `/etc/X11/xorg.conf.d/`) to ensure the correct driver is loaded by the display server. Manual intervention in these files is rarely needed, as the tool automates the process, unless troubleshooting complex issues or custom setups.


title: HISTORY
content:
`mhwd-gpu` is an integral component of the <I>Manjaro Hardware Detection (MHWD)</I> project, developed to simplify hardware and driver management for Manjaro Linux users. Since Manjaro aims to provide an accessible and user-friendly Arch Linux-based distribution, tools like `mhwd-gpu` were crucial for abstracting the often complex process of installing and configuring graphics drivers, particularly proprietary NVIDIA and AMD drivers. Its development focused on ensuring a smooth out-of-the-box experience and easy driver switching, making Manjaro a popular choice for users who need robust hardware support without manual configuration hassles. Historically, it might have existed as a more distinct script, but its functionality is now tightly integrated or aliased within the main `mhwd` command.


title: TLDR
content:
<b>Show current Xorg configuration path</b>`mhwd-gpu --status`<br><b>Check if Xorg configuration has a valid symlink</b>`mhwd-gpu --check`<br><b>Set a custom Xorg configuration for an Nvidia GPU</b>`sudo mhwd-gpu --setmod nvidia --setxorg /[path/to/nvidia.conf]`<br><b>Set a custom Xorg configuration for an AMD GPU</b>`sudo mhwd-gpu --setmod [catalyst|ati] --setxorg /[path/to/amdgpu.conf]`<br><b>Display help</b>`mhwd-gpu --help`


title: TLDR
content:
<b>Start the server with default settings</b>`[path/to/PalServer.sh]`<br><b>Start the server with a specific port and set a maximum player count</b>`[path/to/PalServer.sh] -port=[8211] -players=[1..32]`<br><b>Start a public lobby server</b>`[path/to/PalServer.sh] -publiclobby`<br><b>Start the server with performance optimizations for multi-threaded CPUs</b>`[path/to/PalServer.sh] -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS`<br><b>Start the server with a specific public IP and port for community servers</b>`[path/to/PalServer.sh] -publicip=[ip_address] -publicport=[port]`


title: SYNOPSIS
content:
<B>bun install</B> [<I>packages...</I>] [<I>options</I>]<br><B>bun i</B> [<I>packages...</I>] [<I>options</I>]


title: PARAMETERS
content:
<b><I>packages...</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optional. Specifies individual packages to install. If omitted, installs all dependencies listed in <I>package.json</I>.<br><br><b><I>--production</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs only production dependencies, excluding <I>devDependencies</I>.<br><br><b><I>--dev</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs only development dependencies, excluding <I>dependencies</I>.<br><br><b><I>--frozen</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ensures the lockfile (<I>bun.lockb</I>) matches the <I>package.json</I> exactly, failing if a discrepancy is found. Useful for CI/CD environments.<br><br><b><I>--dry-run</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs all necessary checks and calculations but does not write any files to disk.<br><br><b><I>--force</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces re-download of packages, even if they are already in the cache, and rebuilds project dependencies.<br><br><b><I>--no-save</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents installed packages from being added to the <I>package.json</I> dependencies (e.g., <I>dependencies</I>, <I>devDependencies</I>).<br><br><b><I>--save-exact</I>, <I>-E</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs packages with an exact version, instead of using a caret (<I>^</I>) or tilde (<I>~</I>) range.<br><br><b><I>--global</I>, <I>-g</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs a package globally on the system (often in <I>~/.bun/install/global</I>).<br><br><b><I>--workspace</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Limits the installation to a specific workspace in a monorepo.<br><br><b><I>--silent</I>, <I>-s</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses progress output and most logs, showing only errors.<br><br>


title: DESCRIPTION
content:
<B>bun-i</B> is commonly understood as a shorthand or alias for the <B>bun install</B> command, much like <I>npm i</I> or <I>yarn i</I> are for their respective package managers. While <B>bun-i</B> itself is not a standalone Linux command or a direct part of the <I>bun</I> executable's top-level flags, it effectively refers to the operation of installing project dependencies using the <I>Bun</I> JavaScript runtime. <br><br><I>Bun</I> is an incredibly fast, all-in-one JavaScript runtime designed to be a drop-in replacement for Node.js. Its <B>install</B> command (invoked as <B>bun install</B> or <B>bun i</B>) is optimized for speed, performing dependency resolution and installation significantly faster than traditional package managers like npm or Yarn. It reads <I>package.json</I> files, resolves dependencies, and populates the <I>node_modules</I> directory with the required packages, also generating a <I>bun.lockb</I> lockfile for reproducible builds. It supports various package sources, including npm registry, git repositories, and local paths.


title: CAVEATS
content:
The term <B>bun-i</B> is not a standard, executable command on its own. It's an informal reference or common alias for <B>bun install</B> or <B>bun i</B>. <I>Bun</I> itself is a relatively new runtime; while highly performant, it may have compatibility quirks with older Node.js projects or specific native modules. It's actively under development, so breaking changes or new features can occur rapidly.


title: INTERPRETATION OF 'BUN-I'
content:
It's important to clarify that <B>bun-i</B> is not an actual executable command name. Rather, it's a phonetic or stylistic interpretation of <B>bun i</B>, which is the common, shorter alias for <B>bun install</B>. When users refer to <B>bun-i</B>, they almost universally mean the dependency installation functionality provided by the <I>Bun</I> runtime.


title: LOCKFILE (<I>BUN.LOCKB</I>)
content:
Unlike <I>package-lock.json</I> or <I>yarn.lock</I>, <I>Bun</I> uses a binary lockfile called <I>bun.lockb</I>. This file is optimized for speed and efficiency, contributing to <I>Bun</I>'s rapid installation times and ensuring reproducible builds by precisely locking down the versions of all dependencies.


title: HISTORY
content:
The <I>Bun</I> runtime, created by Jarred Sumner, was publicly launched in 2022, with its <B>install</B> command being a core feature from the outset. Its development has focused on modern JavaScript tooling, aiming to replace Node.js, npm, Yarn, webpack, and other tools with a single, highly optimized, and integrated platform written in Zig. The <B>bun install</B> command quickly gained traction due to its unparalleled speed in installing dependencies, which is a common bottleneck in JavaScript development workflows. The shorthand <B>bun i</B> (and by extension, the informal <B>bun-i</B>) naturally emerged, mirroring patterns from other package managers like <I>npm i</I>.


title: PARAMETERS
content:
<b><i>&lt;packages...&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Optionally specify one or more packages to install. If no packages are specified, <b>bun install</b> installs all dependencies listed in <b>package.json</b>.<br><br><b><b>--frozen-lockfile</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Ensures the <b>bun.lockb</b> lockfile is up-to-date with <b>package.json</b> and does not allow any modifications to it. Fails if the lockfile is out of sync or missing.<br><br><b><b>--production</b>, <b>-P</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs only production dependencies, omitting <b>devDependencies</b>.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Performs all actions without actually writing files to disk, showing what would happen.<br><br><b><b>--offline</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs packages from the local Bun cache only, without attempting network requests.<br><br><b><b>--no-scripts</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents the execution of <b>preinstall</b>, <b>install</b>, and <b>postinstall</b> lifecycle scripts defined in <b>package.json</b>.<br><br><b><b>--loglevel</b> <i>&lt;level&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets the verbosity of Bun's output (e.g., <i>info</i>, <i>warn</i>, <i>error</i>, <i>silent</i>).<br><br><b><b>--global</b>, <b>-g</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Installs the specified package globally on the system, making its executables available in the PATH.<br><br>


title: DESCRIPTION
content:
<b>bun install</b> is the command used within the Bun JavaScript runtime to install project dependencies. It functions similarly to `npm install` or `yarn install`, reading the <b>package.json</b> file to determine required packages and their versions.<br><br>A core distinguishing feature of <b>bun install</b> is its exceptional speed, often completing installations significantly faster than traditional package managers due to its native implementation, use of system calls, and efficient caching. When executed, it downloads and places packages into the <b>node_modules</b> directory and generates a <b>bun.lockb</b> lockfile to ensure reproducible builds. This command is crucial for setting up a JavaScript or TypeScript project managed by Bun, ensuring all necessary libraries are available for development and execution. It leverages Bun's built-in bundler and runtime capabilities for a cohesive and high-performance development experience.


title: CAVEATS
content:
Requires the Bun runtime to be installed on the system.<br>The <b>bun.lockb</b> file format is unique to Bun and is not directly compatible with <b>package-lock.json</b> or <b>yarn.lock</b>. While Bun aims for broad compatibility, some highly customized or older Node.js scripts and packages might exhibit different behaviors or require specific polyfills.<br>Performance benefits are most noticeable on larger projects with many dependencies or during frequent re-installations.


title: LOCKFILE
content:
<b>bun install</b> generates and utilizes a binary lockfile named <b>bun.lockb</b>. This file ensures deterministic installs by recording the exact dependency tree and cryptographic hashes of installed packages. Unlike text-based lockfiles (like <b>package-lock.json</b>), <b>bun.lockb</b> is a binary format optimized for Bun's internal operations, contributing to its speed.


title: CACHING
content:
Bun employs an aggressive caching strategy for downloaded packages. When you run <b>bun install</b>, it first checks its global cache for required packages. If a package is found in the cache, it's used directly, significantly reducing network requests and installation times for subsequent projects or clean installs.


title: NODE_MODULES
content:
Similar to other Node.js package managers, <b>bun install</b> places project dependencies into a <b>node_modules</b> directory at the root of your project. This directory structure is compatible with the Node.js module resolution algorithm, allowing seamless integration with existing JavaScript and TypeScript projects.


title: HISTORY
content:
<b>bun install</b> is a foundational command within the Bun JavaScript runtime, first introduced to the public as part of Bun's initial alpha and beta releases. Developed by Jarred Sumner, Bun's primary goal was to offer a significantly faster, all-in-one toolkit for JavaScript development, including a runtime, bundler, and package manager. The <b>install</b> command was designed from the outset to be a high-performance, drop-in replacement for existing package managers like npm and Yarn, aiming to address common developer frustrations with slow dependency installation times. Its stable 1.0 release in September 2023 solidified its position as a robust and speed-optimized option for managing project dependencies.


title: TLDR
content:
<b>Install all dependencies listed in package.json</b>`bun [[i|install]]`<br><b>Install a single package (this is an alias for bun add)</b>`bun [[i|install]] [package_name]@[version]`<br><b>Install a package globally</b>`bun [[i|install]] [[-g|--global]] [package_name]`<br><b>Install only production dependencies (skips devDependencies)</b>`bun [[i|install]] --production`<br><b>Install dependencies exactly from the bun.lockb lockfile (frozen lockfile)</b>`bun [[i|install]] --frozen-lockfile`<br><b>Force re-download all packages from the registry, ignoring the cache</b>`bun [[i|install]] [[-f|--force]]`


title: SYNOPSIS
content:
<br><b>bun run</b> <i>[script_name]</i> <i>[--]</i> <i>[arguments...]</i><br><b>bun run</b> <i>&lt;file_path&gt;</i> <i>[--]</i> <i>[arguments...]</i><br><b>bun run</b> <i>&lt;command&gt;</i> <i>[--]</i> <i>[arguments...]</i>


title: PARAMETERS
content:
<b><i>script_name</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of a script defined in the <i>"scripts"</i> section of your <i>package.json</i> file.<br><br><b><i>&lt;file_path&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The path to a <i>.js</i>, <i>.ts</i>, <i>.jsx</i>, or <i>.tsx</i> file to execute directly.<br><br><b><i>&lt;command&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An executable command found within the <i>node_modules/.bin</i> directory, run without needing its full path.<br><br><b><i>--</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional separator. Arguments following this will be passed directly to the script or file being executed, not to <b>bun run</b> itself.<br><br><b><i>[arguments...]</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Additional arguments that are passed directly to the script or file being executed, either after the script name/file path or after the <i>--</i> separator.<br><br>


title: DESCRIPTION
content:
<i>bun run</i> is the command-line utility within the <b>Bun JavaScript runtime</b> designed for executing scripts defined in a project's <i>package.json</i> file, or for running arbitrary JavaScript and TypeScript files. It serves a similar purpose to <i>npm run</i> or <i>yarn run</i>, but leverages Bun's native performance, resulting in significantly faster script execution. It automatically finds and executes binaries located in <i>node_modules/.bin</i>, simplifying development workflows. Bun is an all-in-one toolkit aiming to replace Node.js, npm, webpack, and other tools, offering a complete and optimized environment for web development. <i>bun run</i> is a core component, enabling seamless integration with existing projects while benefiting from Bun's speed and efficiency.


title: CAVEATS
content:
Bun must be installed and configured on your system for <b>bun run</b> to function. While largely compatible, its behavior might differ in subtle ways from <i>npm run</i> or <i>yarn run</i> in specific environments or with complex shell scripts. Bun is still actively developed, and its CLI and runtime characteristics may evolve.


title: AUTOMATIC BINARIES
content:
<b>bun run</b> intelligently resolves and executes command-line tools installed as dependencies (e.g., <i>webpack</i>, <i>eslint</i>) that are located in the <i>node_modules/.bin</i> directory. This means you can run <b>bun run eslint</b> without explicitly writing <i>./node_modules/.bin/eslint</i>.


title: PASSING ARGUMENTS TO SCRIPTS
content:
To pass arguments to the script being executed, place them after the script name or file path. If an argument might be misinterpreted by <b>bun run</b> (e.g., it starts with <i>-</i>), use the <i>--</i> separator:<br><i>bun run my-script -- --some-flag --value</i>


title: HISTORY
content:
Bun was initially developed by Jarred Sumner and publicly launched in 2022, rapidly gaining attention for its focus on speed and 'all-in-one' philosophy. <b>bun run</b> was a foundational component of its CLI from the outset, designed to offer a familiar script execution interface while leveraging Bun's native, highly optimized runtime. Its development is ongoing, with frequent updates improving compatibility and performance across various platforms.


title: TLDR
content:
<b>Run a script defined in package.json</b>`bun run [script_name]`<br><b>Run a JavaScript or TypeScript file directly</b>`bun run [path/to/file.ts]`<br><b>Run a file in "watch" mode (restarts automatically when the file changes)</b>`bun run --watch [path/to/file.ts]`<br><b>Run a file using a specific configuration file</b>`bun run --config [path/to/bunfig.toml] [path/to/file.ts]`


title: PARAMETERS
content:
<b>--watch</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Watches for file changes</i> and automatically re-runs tests.<br><br><b>--only</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs only tests marked with <b>.only()</b>.<br><br><b>--skip</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips tests marked with <b>.skip()</b>.<br><br><b>--coverage</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Collects test coverage</i> information during execution.<br><br><b>--hot</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables hot module reloading for tests (<i>experimental</i>).<br><br><b>--bail</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Exits immediately</i> after the first test failure.<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Outputs test results in <i>JSON format</i>.<br><br><b>--filter <b>&lt;pattern&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs tests whose filenames or paths match the provided <i>regex pattern</i>.<br><br><b>--setup <b>&lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies a <i>setup file</i> to run before all tests.<br><br><b>--timeout <b>&lt;ms&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a <i>global timeout</i> in milliseconds for each test.<br><br><b>--update-snapshots, -u</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Updates all failing snapshots</i> during the test run.<br><br><b>--silent</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Suppresses all test output to the console.<br><br><b>--no-file-cache</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Disables Bun's built-in file caching for this run.<br><br><b>--color, --no-color</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces or disables <i>colored output</i>.<br><br><b>--env-file <b>&lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Loads environment variables from a specified <i>.env file</i>.<br><br><b>--inspect, --inspect-brk</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables <i>Node.js compatible debugger</i> for tests.<br><br><b>--config <b>&lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Uses a custom <i>bunfig.toml configuration file</i>.<br><br><b>--preload <b>&lt;file&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Preloads a module before any tests run.<br><br><b>--condition <b>&lt;condition&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds a <i>condition</i> for conditional exports resolution.<br><br><b>--dry-run</b><br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Resolves test files</i> but does not execute them.<br><br><b>--rerun-each</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reruns each test case individually (useful for isolating side effects).<br><br><b>--verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prints more <i>detailed output</i> during the test run.<br><br><b>--test-name-pattern <b>&lt;pattern&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Filters tests by their <i>test name</i> (e.g., <b>describe</b> or <b>it</b> block titles).<br><br><b>--test-root <b>&lt;dir&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the <i>root directory</i> where test files are located.<br><br><b>--jsx, --jsx-factory <b>&lt;factory&gt;</b>, --jsx-fragment <b>&lt;fragment&gt;</b>, --jsx-import-source <b>&lt;source&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Options for <i>JSX compilation</i>.<br><br><b>[files...]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;A list of <i>specific test files or directories</i> to run. If omitted, Bun will discover tests in the project.<br><br>


title: DESCRIPTION
content:
<b>bun test</b> is the built-in, incredibly fast test runner for the Bun JavaScript runtime. Designed for speed and compatibility, it allows developers to execute unit and integration tests for their JavaScript and TypeScript projects without needing external test runners like Jest or Vitest. It supports a familiar API, including <i>describe</i>, <i>it</i>, <i>expect</i>, and <i>mock</i> functions, making migration from other frameworks straightforward. Leveraging Bun's native performance, <b>bun test</b> offers significant speed improvements, especially in large codebases, by avoiding the overhead of Node.js and other traditional test environments.


title: CAVEATS
content:
<b>bun test</b> is <i>not a standalone Linux utility</i>. It requires the <b>Bun runtime</b> to be installed and available in your system's PATH. It is designed exclusively for testing JavaScript and TypeScript projects and will not execute tests written for other languages or environments. Its feature set is rapidly evolving, so behavior and options might change between Bun versions.


title: JEST/VITEST COMPATIBLE API
content:
<b>bun test</b> offers a testing API that is largely compatible with popular test runners like Jest and Vitest. This includes global functions like <i>describe()</i>, <i>it()</i>, <i>test()</i>, <i>expect()</i>, <i>beforeEach()</i>, <i>afterEach()</i>, and <i>mock()</i>. This compatibility greatly simplifies migration for existing projects.


title: PERFORMANCE BENEFITS
content:
Due to Bun being written in Zig and its highly optimized internals, <b>bun test</b> significantly outperforms Node.js-based test runners. It uses a custom JavaScript engine (JavaScriptCore from WebKit) and avoids the overhead of transpilation and module resolution found in other solutions, leading to much faster test execution times, especially in large projects.


title: HISTORY
content:
The <b>bun test</b> command was introduced as a core feature early in Bun's development lifecycle, reflecting its creator's (Jarred Sumner) vision for a complete, all-in-one JavaScript runtime. From its initial public release, Bun aimed to integrate common developer tools, including a test runner, bundler, and package manager, directly into the runtime itself. This integrated approach, coupled with its highly optimized architecture written in Zig, allowed <b>bun test</b> to offer unprecedented performance for JavaScript and TypeScript testing, quickly gaining traction within the web development community for its speed and familiar API.


title: TLDR
content:
<b>Run all test files found in the project</b>`bun test`<br><b>Run a specific test file or directory</b>`bun test [path/to/file.test.ts]`<br><b>Run tests in "watch" mode (re-runs automatically on file changes)</b>`bun test --watch`<br><b>Run tests and generate a code coverage report</b>`bun test --coverage`


title: PARAMETERS
content:
<b><b>-o</b> <I>file</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the output file name for the executable, object file, or library.<br><br><b><b>-c</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Compile or assemble the source files, but do not link. Produces object files (<i>.o</i>).<br><br><b><b>-I</b> <I>dir</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add the specified directory to the list of directories to be searched for header files.<br><br><b><b>-L</b> <I>dir</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Add the specified directory to the list of directories to be searched for libraries.<br><br><b><b>-l</b><I>library</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Link with the specified library. For example, <b>-lm</b> links with the math library.<br><br><b><b>-D</b><I>macro[=def]</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Define a preprocessor macro. Equivalent to <i>#define macro def</i> in source code.<br><br><b><b>-O</b>[<I>level</I>]</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Set the optimization level. Common levels include <b>-O0</b> (no optimization), <b>-O1</b>, <b>-O2</b>, <b>-O3</b> (more aggressive optimization), and <b>-Os</b> (optimize for size).<br><br><b><b>-std=</b><I>standard</I></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the C++ standard to compile against, e.g., <b>c++11</b>, <b>c++17</b>, <b>c++20</b>.<br><br><b><b>-Wall</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable most common compiler warning messages.<br><br><b><b>-Wextra</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enable additional compiler warning messages not covered by <b>-Wall</b>.<br><br><b><b>-g</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include debugging information in the compiled output, useful for debuggers like GDB.<br><br><b><b>-v</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Print the commands executed by the compiler driver and show version information.<br><br>


title: DESCRIPTION
content:
The <b>c++</b> command on Linux systems typically acts as a convenient frontend or alias to the system's default C++ compiler, most commonly <i>g++</i> (GNU C++ Compiler) or sometimes <i>clang++</i> (Clang C++ Compiler).<br><br>It is used to compile C++ source code files into executable programs, object files, or shared libraries. The compilation process involves several stages: preprocessing (handling directives like #include), compilation (translating C++ code into assembly), assembly (converting assembly into machine code/object files), and linking (combining object files and libraries into an executable or shared library).<br><br>By using the <b>c++</b> command, developers can invoke the underlying C++ compiler with various options to control optimization levels, include directories, library linking, warning messages, debugging information, and the C++ standard to be used, simplifying the build process for C++ projects.


title: CAVEATS
content:
The exact behavior and available options of the <b>c++</b> command depend entirely on the underlying compiler it invokes (e.g., <i>g++</i> or <i>clang++</i>). It is often a symbolic link, and its configuration can vary between Linux distributions. Users should be aware of the specific compiler version and implementation being used for complex projects, especially when dealing with compiler-specific extensions or warnings.


title: DEFAULT BEHAVIOR
content:
When invoked without specific output options, <b>c++</b> will attempt to compile and link all specified source files, producing an executable named <i>a.out</i> in the current directory. This default is often overridden using the <b>-o</b> option.


title: PREPROCESSING
content:
The <b>c++</b> command implicitly performs preprocessing. To see only the preprocessed output of a source file, one can use the <b>-E</b> option, which prints the result to standard output.


title: HISTORY
content:
The concept of a C++ compiler emerged with the development of the C++ language itself in the early 1980s. The GNU Project's <i>g++</i> compiler, part of the GNU Compiler Collection (GCC), became widely adopted on Linux and other Unix-like systems, providing a free and open-source implementation. Later, Clang, an LLVM-based compiler, gained prominence as an alternative. The <b>c++</b> command serves as a convenient, generic invocation point for whichever C++ compiler is configured as the system default, often being a symlink to either <i>g++</i> or <i>clang++</i>, ensuring consistency across different compiler installations and simplifying build scripts.


title: SYNOPSIS
content:
<b>conda update</b> [<i>options</i>] [<i>package_spec</i> ...]<br><br><i>Common usage patterns:</i><br><b>conda update</b> <i>package_name</i><br><b>conda update --all</b><br><b>conda update -n</b> <i>environment_name</i> <b>--all</b><br><b>conda update conda</b>


title: PARAMETERS
content:
<b><b>-n</b> <i>ENV</i>, <b>--name</b> <i>ENV</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the name of the environment to update instead of the current active environment.<br><br><b><b>-c</b> <i>CHANNEL</i>, <b>--channel</b> <i>CHANNEL</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the channel from which to search for packages. Use multiple times for multiple channels. Channel order matters.<br><br><b><b>--all</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Update all packages in the current environment to their latest compatible versions.<br><br><b><b>--override-channels</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not search default channels or channels specified in .condarc. Only use channels passed via <b>-c</b>.<br><br><b><b>--strict-channel-priority</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enforce strict channel priority. Packages from lower priority channels are only considered if a package cannot be found in a higher priority channel.<br><br><b><b>--dry-run</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Only display what would have been done without actually performing the update.<br><br><b><b>--yes</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not ask for confirmation before performing the update operation.<br><br><b><b>--force-reinstall</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Reinstall all packages, even if they appear to be already installed and up-to-date.<br><br><b><b>--no-deps</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not update dependencies; only update the specified packages.<br><br><b><b>--update-deps</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Update dependencies where applicable. This is the default behavior when updating specified packages.<br><br><b><b>--prune</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Remove packages that are no longer needed or explicitly installed as dependencies but now have no dependent packages.<br><br><b><b>--json</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Report all output as JSON. Useful for programmatic parsing.<br><br><b><b>-q</b>, <b>--quiet</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Do not display progress indicators or other informational messages.<br><br>


title: DESCRIPTION
content:
The <b>conda update</b> command is a core utility within the Conda package, dependency, and environment management system. While often referred to conceptually as "conda-update," the command is typically invoked as <b>conda update</b> (without a hyphen). It is used to update one or more specified packages to the latest available version that is consistent with other packages in the environment. If no specific packages are named, <b>conda update</b> will attempt to update all packages in the current environment to their latest compatible versions. <br><br>This command is also vital for updating the Conda package manager itself (e.g., <b>conda update conda</b>) or for performing comprehensive updates on a specific named environment (e.g., <b>conda update -n myenv --all</b>). It intelligently resolves dependencies to ensure that all updated packages remain compatible within the environment, thereby preventing conflicts and maintaining a stable operational state. It is an indispensable tool for keeping Conda installations and their managed environments up-to-date and functional.


title: CAVEATS
content:
Using <b>conda update --all</b> can sometimes lead to an environment that is not fully resolvable or might unintentionally downgrade certain packages if channel priorities are not observed. Always consider using it with <b>--dry-run</b> first. It's highly recommended to update Conda itself using <b>conda update conda</b> before updating other packages or environments, as newer Conda versions often contain critical bug fixes and performance improvements. Be mindful of channel order and `strict_channel_priority` settings, as they dictate how packages are resolved and installed.


title: UPDATING CONDA ITSELF
content:
To update the Conda package manager itself to the latest version, use the command: <b>conda update conda</b>. This is a crucial first step and is often recommended before performing other updates to ensure you benefit from the latest features, bug fixes, and security patches in the package manager.


title: DIFFERENCE: UPDATE VS. UPGRADE
content:
While many Linux package managers use the term 'upgrade' (e.g., <i>apt upgrade</i>, <i>yum upgrade</i>) for updating installed packages, Conda uses 'update'. Despite the different terminology, the core functionality is analogous: to bring installed packages, or the entire environment, to their latest compatible versions according to specified channels and priorities.


title: HISTORY
content:
The <b>conda</b> package manager was originally developed by Continuum Analytics (now Anaconda, Inc.) and first released in 2012. It was designed to address the complex challenges of dependency management and environment isolation, particularly for Python, R, and other data science languages, which traditional system package managers often struggled with. The <b>conda update</b> command has been a fundamental component of the Conda ecosystem since its early versions, providing a robust and intelligent mechanism for maintaining up-to-date and stable computational environments. Its development has continuously evolved alongside Conda itself, incorporating advanced features such as improved dependency resolution algorithms, enhanced channel priority management, and support for a growing array of package formats.


title: TLDR
content:
<b>Update all packages in the current environment</b>`conda update [[--all|--update-all]]`<br><b>Update a specific package in the current environment</b>`conda update [package_name]`<br><b>Update conda itself in the base environment</b>`conda update [[-n|--name]] base conda`<br><b>Update packages while ignoring pinned packages</b>`conda update --no-pin`<br><b>Update packages in offline mode</b>`conda update --offline`


title: PARAMETERS
content:
<b>-o <output_file></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the name of the output C/C++ file. If not provided, it defaults to the input file name with a <i>.c</i> or <i>.cpp</i> extension.<br><br><b>--embed</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Embeds the Python interpreter into the generated C file, making it a standalone executable. Useful for distributing Cython applications without requiring a separate Python installation.<br><br><b>-a, --annotate</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates an annotated HTML file, showing the compiled C code alongside the original Cython code. This is invaluable for debugging and understanding performance bottlenecks by highlighting areas that interact with the Python interpreter.<br><br><b>--cplus</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates C++ code instead of C code. This is necessary when integrating with C++ libraries or using C++ features within Cython.<br><br><b>-D, --debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Enables debug facilities in the generated code, which can be useful during development to trace execution or inspect variables.<br><br><b>-v, --verbose</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Increases the verbosity of the output, showing more information about the compilation process.<br><br><b>--gdb</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Generates extra debugging information for GDB (GNU Debugger) to allow debugging the generated C code with GDB.<br><br><b>--no-docstrings</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Strips docstrings from the compiled module. This can slightly reduce the size of the compiled extension module.<br><br><b>--cleanup <level></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls the level of cleanup for temporary C files after compilation. Higher levels perform more aggressive cleanup.<br><br>


title: DESCRIPTION
content:
The <b>cython</b> command-line tool is the primary interface for compiling <I>Cython</I> source files (with a <i>.pyx</i> extension) into C or C++ code. Cython itself is a superset of the Python language, allowing developers to write C extensions for Python using Python-like syntax, optionally adding static type declarations for significant performance improvements. This generated C/C++ code can then be compiled by a standard C/C++ compiler (like GCC or Clang) into a Python extension module (a <i>.so</i> file on Linux, or a <i>.pyd</i> on Windows).<br><br>The <b>cython</b> command handles the crucial transpilation step, translating the high-level Cython code into low-level C/C++ that can be directly compiled into machine code. This process enables Python programs to achieve near-C performance, especially for computationally intensive tasks, while still benefiting from Python's ease of use and rich ecosystem. It also facilitates easy interaction with existing C, C++, or Fortran libraries.


title: CAVEATS
content:
While <b>cython</b> automates the C/C++ generation, it does not handle the subsequent C/C++ compilation. This step requires a suitable C/C++ compiler (such as <b>GCC</b>, <b>Clang</b>, or <b>MSVC</b>) to be installed and configured on your system. Furthermore, achieving significant performance improvements often requires careful use of static type declarations within your Cython code; simply compiling Python code with Cython might not yield substantial speedups. For complex projects, it's generally recommended to integrate Cython into a build system like <I>setuptools</I> via a <I>setup.py</I> script, rather than calling the <b>cython</b> command directly, as build systems manage dependencies and compilation flags more effectively.


title: TYPICAL WORKFLOW
content:
The typical workflow involves creating a <i>.pyx</i> file containing your Cython code. You then use the <b>cython</b> command to convert this <i>.pyx</i> file into a <i>.c</i> or <i>.cpp</i> file. Finally, this generated C/C++ file is compiled using a standard C/C++ compiler into a shared library (e.g., <i>.so</i> on Linux) that can be imported directly into Python as a module. For example: <br><code>cython my_module.pyx</code><br><code>gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/path/to/python/include -o my_module.so my_module.c</code>


title: INTEGRATION WITH BUILD SYSTEMS
content:
For larger projects, direct calls to the <b>cython</b> command are often replaced by integration with build systems like <I>setuptools</I>. A <i>setup.py</i> script can be configured to automatically find <i>.pyx</i> files, run the <b>cython</b> transpiler, and then compile the resulting C/C++ files, simplifying the build process and dependency management. This is the recommended approach for distributing Cython-based Python packages.


title: HISTORY
content:
Cython originated as a fork of the <I>Pyrex</I> project, created by Greg Ewing. It was developed to address limitations in Pyrex, particularly with its integration with C++. The project saw significant growth and adoption, especially within the scientific Python community, providing a robust tool for creating high-performance Python extensions. Over the years, it has continuously evolved, adding support for newer Python versions, advanced type annotations, and better integration with C/C++ features, solidifying its position as a cornerstone for bridging Python's flexibility with C's speed.


title: TLDR
content:
<b>Compile into C code</b>`cython [path/to/file]`<br><b>Compile into C++ code</b>`cython --cplus [path/to/file]`<br><b>Specify an output file</b>`cython [[-o|--output-file]] [path/to/output_file] [path/to/file]`<br><b>Display version</b>`cython [[-V|--version]]`


title: PARAMETERS
content:
<b><i>REVISION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The commit to duplicate. If not specified, the command defaults to duplicating the working copy commit (the current commit in your workspace).<br><br><b><b>--insert-after</b> <i>REVISION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Make the duplicated commit a child of the specified <i>REVISION</i>. If the specified <i>REVISION</i> has multiple parents, the new commit will be inserted between <i>REVISION</i> and its parents, effectively re-parenting <i>REVISION</i>'s children to the duplicated commit.<br><br><b><b>--to</b> <i>REVISION</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specify the parent(s) of the new duplicated commit. If this option is not provided, the new commit will inherit the same parents as the original <i>REVISION</i>. This option can be used multiple times to assign multiple parents, creating a merge commit.<br><br><b><b>--rebase</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Automatically rebase all descendants of the original commit onto the newly duplicated commit. This is an extremely powerful option for replacing an old commit with a new version, as it ensures that the history remains coherent and subsequent changes build upon the updated commit.<br><br><b><b>--stats</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Show diff statistics for the changes introduced by the duplicated commit, compared to its parents.<br><br><b><b>--color</b> <i>MODE</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Control when to use color in the output. <i>MODE</i> can be <code>always</code>, <code>auto</code> (default), or <code>never</code>.<br><br><b><b>-h</b>, <b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Display a short summary of available options and usage (<b>-h</b>) or a more detailed help message (<b>--help</b>).<br><br>


title: DESCRIPTION
content:
The <b>jj-duplicate</b> command creates a new commit that is an exact replica of an existing commit. This operation is fundamental in <i>Jujutsu (jj)</i>, a modern version control system designed for flexible history manipulation. Unlike modifying an existing commit, <b>jj-duplicate</b> generates an entirely new commit object with a unique identifier, preserving the original's contents (tree, message, author, committer).<br><br>It's particularly useful for scenarios where you need to create an alternative version of a commit without altering the original, experiment with changes based on an existing commit, or effectively 'move' the content of a commit to a different part of your project's history. When combined with the <code>--rebase</code> option, it can be used to seamlessly replace an old commit with a new, duplicated one, automatically moving any subsequent commits to build on top of the new duplicate.


title: CAVEATS
content:
Using <b>jj-duplicate</b> creates a new commit, leaving the original commit intact in the history graph. If you intend to logically 'replace' a commit, it's often used in conjunction with <b>--rebase</b> to move subsequent commits to build on the new duplicate. The original commit can then be <b>abandoned</b> if no longer needed. Always understand the implications of history manipulation, especially when working with shared repositories, as pushing duplicated commits might require careful coordination.


title: KEY USE CASES
content:
Here are some common scenarios for <b>jj-duplicate</b>:<br>1. <b>Re-parenting Commits:</b> Change the parent(s) of a commit by duplicating it with the <b>--to</b> option.<br>2. <b>Creating Alternatives:</b> Generate a new commit with identical content to an existing one for experimental modifications without touching the original.<br>3. <b>Replacing Obsolete Commits:</b> Use <b>jj duplicate --rebase</b> to effectively 'update' an old commit in your history, ensuring all subsequent commits now build upon the new version.<br>4. <b>Isolating Changes:</b> Copy changes from one part of your repository's history to another without needing to interact with branches directly.


title: HISTORY
content:
The <b>jj-duplicate</b> command is an integral part of <i>Jujutsu (jj)</i>, a next-generation version control system developed to address limitations and complexities found in traditional VCS like Git. <i>Jujutsu</i> was initially created by Google engineers with a focus on a more intuitive and flexible command-line experience, built around a mutable history graph concept. <b>jj-duplicate</b> reflects this philosophy by providing a straightforward way to copy commit contents, simplifying operations that might involve more manual steps or workarounds in other systems. Its design allows for easy history rewriting and exploration, aligning with <i>Jujutsu</i>'s goal of making complex VCS operations more accessible.


title: TLDR
content:
<b>Duplicate the current revision onto its existing parent</b>`jj duplicate`<br><b>Duplicate a specific revision onto its existing parent</b>`jj duplicate [revset]`<br><b>Duplicate a revision onto a different parent</b>`jj duplicate --destination [dest_revset] [revset]`<br><b>Duplicate a revision and insert it **after** other revision(s)</b>`jj duplicate --insert-after [after_revset] [revset]`<br><b>Duplicate a revision and insert it **before** other revision(s)</b>`jj duplicate --insert-before [before_revset] [revset]`<br><b>Duplicate onto multiple parents (creates a merge commit)</b>`jj duplicate --destination [destination1] --destination [destination2] [revset]`<br><b>Duplicate multiple revisions</b>`jj duplicate [revset1 revset2 ...]`


title: PARAMETERS
content:
<b><b>approve</b> <i><name></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Approves a specific Certificate Signing Request (CSR) by its name. This action signals to the Kubernetes certificate controller to issue a certificate based on the request.<br><br><b><b>deny</b> <i><name></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Denies a specific Certificate Signing Request (CSR) by its name. This prevents the Kubernetes certificate controller from issuing a certificate for the request.<br><br><b><b>--help</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Displays help information for the <b>kubectl certificate</b> command or its subcommands.<br><br><b><b>--dry-run</b>=<i><strategy></i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;If specified, only print the object that would be sent without actually performing the action. Useful for testing commands without making changes. Possible values include <i>client</i>, <i>server</i>, or <i>none</i>.<br><br>


title: DESCRIPTION
content:
The `kubectl certificate` command is used to manage Certificate Signing Request (CSR) resources within a Kubernetes cluster. CSRs are a fundamental mechanism in Kubernetes for requesting X.509 certificates, primarily used by components like Kubelets for secure communication or by users/applications to obtain client certificates. This command provides subcommands to interact with these requests, allowing administrators to review, approve, or deny them.<br><br>When a component or user requests a certificate, a CSR object is created in the cluster. Administrators can then list these CSRs, inspect their details, and decide whether to sign the requested certificate (approve) or reject it (deny). Approving a CSR typically results in the Kubernetes certificate controller signing the request and issuing the certificate, which is then made available to the requester. Denying a CSR rejects the request, preventing the issuance of a certificate. This process is crucial for maintaining the security posture of a Kubernetes environment by controlling who can obtain valid certificates.


title: CAVEATS
content:
Requires appropriate RBAC permissions (e.g., verbs <i>approve</i> or <i>deny</i> on <i>certificatesigningrequests</i>).<br>The <i><name></i> argument must exactly match an existing Certificate Signing Request.<br>Approving a CSR does not immediately generate a certificate visible to the user; it signals the controller. The controller then signs the request and updates the CSR status with the issued certificate.


title: RBAC PERMISSIONS
content:
Managing CSRs requires specific Role-Based Access Control (RBAC) permissions. Users or service accounts need <i>approve</i> or <i>deny</i> verbs on the <i>certificatesigningrequests</i> resource within the <i>certificates.k8s.io</i> API group to use these subcommands successfully. Without these permissions, the commands will fail with authorization errors.


title: CSR STATUS AND CERTIFICATE RETRIEVAL
content:
After a CSR is approved, its <i>status.conditions</i> field is updated. Once the Kubernetes certificate controller processes the approved request, it adds the signed certificate to the <i>status.certificate</i> field of the CSR object. The requester can then retrieve this signed certificate, typically using <b>kubectl get csr <i>&lt;name&gt;</i> -o jsonpath='{.status.certificate}' | base64 --decode</b>.


title: CERTIFICATE LIFETIME AND RENEWAL
content:
The certificates issued via CSRs often have a specific validity period. It's essential to consider certificate rotation and renewal strategies. While <b>kubectl certificate</b> handles approval, renewal processes typically involve creating new CSRs and repeating the approval workflow.


title: HISTORY
content:
The `certificate` subcommand was introduced early in Kubernetes' development to manage `certificates.k8s.io` API resources, which are central to the cluster's internal security model. As Kubernetes matured, the Certificate Signing Request (CSR) API became the standard method for managing x509 certificates within the cluster, enabling secure communication for components like Kubelets and allowing external services to obtain trusted certificates. The <b>approve</b> and <b>deny</b> subcommands provide administrative control over this crucial security workflow, evolving with the increasing demand for automated and secure certificate management in cloud-native environments.


title: TLDR
content:
<b>Approve a certificate signing request by name</b>`kubectl certificate approve [csr_name]`<br><b>Deny a certificate signing request by name</b>`kubectl certificate deny [csr_name]`<br><b>Approve a certificate signing request defined in a manifest file</b>`kubectl certificate approve --filename [path/to/csr.yaml]`<br><b>Deny a certificate signing request defined in a manifest file</b>`kubectl certificate deny --filename [path/to/csr.yaml]`<br><b>Force reapproval of a certificate signing request that was previously denied</b>`kubectl certificate approve --force [csr_name]`


title: SYNOPSIS
content:
<b>mvn</b> [<i>&lt;options&gt;</i>] <b>deploy</b><br><b>mvn</b> [<i>&lt;options&gt;</i>] <b>deploy</b> -DaltDeploymentRepository=<i>&lt;id&gt;</i>::<i>&lt;layout&gt;</i>::<i>&lt;URL&gt;</i><br><b>mvn</b> [<i>&lt;options&gt;</i>] <b>deploy</b> -Dmaven.deploy.skip=true


title: PARAMETERS
content:
<b>-D<i>&lt;property&gt;</i>=<i>&lt;value&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Sets a system property or Maven property. This is commonly used to pass configuration to the deploy plugin, such as skipping deployment or specifying an alternative repository. Examples include <B>-Dmaven.deploy.skip=true</B> to prevent deployment, or <B>-DaltDeploymentRepository=...</B> for an alternative target.<br><br><b>-P <i>&lt;profiles&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Activates one or more build profiles by their IDs. Profiles can contain specific configurations for deployment, such as repository URLs or plugin versions, allowing flexible deployment strategies.<br><br><b>-f <i>&lt;file&gt;</i>, --file <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternate path for the project's POM file. By default, Maven looks for <I>pom.xml</I> in the current directory.<br><br><b>-B, --batch-mode</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Runs Maven in non-interactive (batch) mode. This is highly recommended for CI/CD environments where user input is not possible, preventing Maven from prompting for any information.<br><br><b>-U, --update-snapshots</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Forces a check for updated releases and snapshots from remote repositories. This ensures that the build uses the latest versions of dependencies, which can be critical before deploying.<br><br><b>--settings <i>&lt;file&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies an alternate path for the user settings file (<I>settings.xml</I>). This is useful for providing different repository credentials or mirror configurations for specific deployment scenarios without altering the default settings.<br><br><b>-X, --debug</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces execution debug output. In verbose mode, Maven provides detailed information about plugin execution, classpath, and configuration, which is invaluable for troubleshooting deployment issues.<br><br><b>-e, --errors</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Produces execution error messages. This option provides a more detailed stack trace for errors, which can help diagnose problems during the deployment process.<br><br><b>-N, --non-recursive</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Prevents Maven from recursing into sub-projects in a multi-module build. This deploys only the current project's artifacts.<br><br>


title: DESCRIPTION
content:
The term "mvn-deploy" is not a standard standalone Linux command. Instead, it refers to the <I>deploy</I> goal within the Maven build lifecycle, executed via the main <I>mvn</I> command (i.e., <B>mvn deploy</B>). This goal is responsible for taking the built project artifacts (like JARs, WARs, POMs, etc.) and copying them to a remote repository. This is a crucial step in continuous integration and continuous deployment (CI/CD) pipelines, making artifacts available for other projects to consume or for final deployment to production environments.<br><br>When you run <B>mvn deploy</B>, Maven typically performs the following sequence:<br><br><I>1. Compile:</I> Compiles the project source code.<br><I>2. Test:</I> Runs unit tests.<br><I>3. Package:</I> Packages the compiled code into a distributable format (e.g., JAR, WAR).<br><I>4. Install:</I> Installs the artifact into the local Maven repository, making it available for local projects.<br><I>5. Deploy:</I> Finally, it uploads the artifact to the configured remote repository. This repository is typically defined in the project's <I>pom.xml</I> within the <I>&lt;distributionManagement&gt;</I> section and secured with credentials in the user's <I>settings.xml</I> file.


title: CAVEATS
content:
Deployment requires careful configuration of Maven's <I>pom.xml</I> and <I>settings.xml</I> files. The <I>&lt;distributionManagement&gt;</I> section in <I>pom.xml</I> defines the target repositories, while the <I>&lt;servers&gt;</I> section in <I>settings.xml</I> stores the authentication credentials. Storing credentials directly in <I>settings.xml</I> should be done with caution; Maven supports encrypting passwords using its master password feature.<br><br>Network connectivity and appropriate write permissions on the remote repository are essential for successful deployment. Deploying release artifacts multiple times to the same repository can sometimes lead to issues if the repository does not support overwrites or if unique versioning is enforced. Snapshot deployments, however, are typically designed to be overwritten.


title: CONFIGURATION (POM.XML AND SETTINGS.XML)
content:
For <B>mvn deploy</B> to work, two key configuration files are critical. The <I>pom.xml</I> specifies the remote repositories where artifacts should be deployed using the <I>&lt;distributionManagement&gt;</I> section. This section defines <I>&lt;repository&gt;</I> for releases and <I>&lt;snapshotRepository&gt;</I> for snapshots, each with an ID and URL. The <I>settings.xml</I> file (typically in <I>~/.m2/settings.xml</I> or specified via <B>--settings</B>) then provides the authentication credentials for these repository IDs within its <I>&lt;servers&gt;</I> section. The server ID in <I>settings.xml</I> must match the repository ID in <I>pom.xml</I> for Maven to find the correct credentials.


title: MAVEN BUILD LIFECYCLE INTEGRATION
content:
The <B>deploy</B> goal is the final phase in Maven's standard build lifecycle. When you execute <B>mvn deploy</B>, Maven automatically executes all preceding phases in the default lifecycle up to <B>deploy</B>. This includes <B>validate</B>, <B>compile</B>, <B>test</B>, <B>package</B>, and <B>install</B>. This ensures that the project is fully built, tested, packaged, and installed locally before its artifacts are pushed to the remote repository, guaranteeing that only valid and ready-to-use artifacts are published.


title: ALTERNATIVE DEPLOYMENT REPOSITORY
content:
While the primary deployment repository is configured in the <I>pom.xml</I>, Maven allows specifying an alternative deployment target using system properties. For example, <B>-DaltDeploymentRepository=<i>&lt;id&gt;</i>::<i>&lt;layout&gt;</i>::<i>&lt;URL&gt;</i></B> can be used to override the default repository for a specific deployment. This is particularly useful in CI/CD environments where artifacts might need to be deployed to different staging or release repositories based on the build's context, without modifying the <I>pom.xml</I>.


title: HISTORY
content:
The <B>deploy</B> goal has been a fundamental part of the Apache Maven build lifecycle since its early days (circa 2004). Its core purpose, to publish project artifacts to remote repositories, has remained consistent. As continuous integration and delivery practices evolved, the <B>deploy</B> goal became a cornerstone for automated build systems like Jenkins, GitLab CI, and GitHub Actions, enabling seamless artifact sharing and management across development teams and stages. Its stability and robust configuration options have made it the de-facto standard for Java project artifact publication.


title: TLDR
content:
<b>Copy the final artifact into the remote repository configured in the settings.xml file</b>`mvn deploy`<br><b>Copy an artifact, that is not built using Maven to the remote repository</b>`mvn deploy:deploy-file [[-D|--define]] url=[URLOfTheRemoteRepository] [[-D|--define]] repositoryId=[ServerIdFromSettingsXML] [[-D|--define]] file=[FileToBeDeployed]`


title: TLDR
content:
<b>Run all lifecycle phases up to generate-sources</b>`mvn generate-sources`<br><b>Run the next phase to generate resources</b>`mvn generate-resources`<br><b>Clean and regenerate sources</b>`mvn clean generate-sources`


title: PARAMETERS
content:
<b><b>-Didea.downloadSources=true|false</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs the plugin to download source JARs for project dependencies. Defaults to <I>true</I>.<br><br><b><b>-Didea.downloadJavadocs=true|false</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Instructs the plugin to download Javadoc JARs for project dependencies. Defaults to <I>false</I>.<br><br><b><b>-Didea.jdk.name=&lt;name&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Specifies the JDK name to be used in the generated IntelliJ IDEA project configuration. This should match a JDK configured in IntelliJ IDEA.<br><br><b><b>-Didea.module.name=&lt;name&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Allows overriding the default module name derived from the Maven artifact ID.<br><br><b><b>-Didea.skip=true</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Skips the execution of the <I>idea:idea</I> goal. Useful for conditional builds.<br><br><b><b>-Didea.excludeFolder=&lt;path&gt;</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Adds additional directories to be excluded from the IDEA module. Can be used multiple times.<br><br><b><b>-Didea.resolveDependencies=true|false</b></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Controls whether Maven dependencies should be resolved and added to the IDEA module classpath. Defaults to <I>true</I>.<br><br>


title: DESCRIPTION
content:
The command 'mvn-idea' is not a standard Linux command but rather a common shorthand or an alias for executing the Maven 'idea:idea' goal. This goal is provided by the <I>maven-idea-plugin</I>, which was historically used to generate <I>.iml</I> module files, <I>.ipr</I> project files, and <I>.iws</I> workspace files for IntelliJ IDEA from a Maven project's <I>pom.xml</I>.<br><br>While still functional, the direct use of 'mvn idea:idea' has largely become obsolete with modern versions of IntelliJ IDEA (version 9.0 and later). These IDEs can directly import Maven <I>pom.xml</I> files, automatically configuring project modules, dependencies, and run configurations without the need for manual generation via a Maven plugin. Therefore, 'mvn-idea' or 'mvn idea:idea' is primarily relevant in legacy projects, specific build scenarios that require explicit project file generation, or when encountering older documentation.


title: CAVEATS
content:
<b>1. Not a Standard Command:</b> 'mvn-idea' is not a native Linux command or a standard Maven goal. It typically refers to the Maven 'idea:idea' goal or a custom script/alias.<br><br><b>2. Largely Obsolete:</b> Modern IntelliJ IDEA versions (since 9.0) can directly import Maven <I>pom.xml</I> files, making the explicit generation of IDEA project files via 'mvn idea:idea' largely unnecessary for new projects or typical development workflows.<br><br><b>3. Plugin Dependency:</b> The functionality relies on the <I>maven-idea-plugin</I> being configured in the project's <I>pom.xml</I> (or available as a globally installed plugin).


title: MODERN APPROACH TO MAVEN IN INTELLIJ IDEA
content:
For most current development, simply open IntelliJ IDEA and select 'Open' or 'Import Project'. Navigate to your Maven project's root directory and select the <I>pom.xml</I> file. IntelliJ IDEA will automatically detect it as a Maven project and configure all necessary modules, dependencies, and settings, including downloading sources and Javadocs based on its own settings.


title: CUSTOM SCRIPT OR ALIAS EXAMPLE
content:
A user might have defined 'mvn-idea' as an alias in their shell configuration (e.g., <I>~/.bashrc</I> or <I>~/.zshrc</I>). For instance, an alias could be:<br><br><I>alias mvn-idea='mvn idea:idea -Didea.downloadSources=true -Didea.downloadJavadocs=true'</I><br><br>This allows for a quicker invocation of the desired Maven goal with specific default options without typing the full command each time.


title: HISTORY
content:
The <I>maven-idea-plugin</I> emerged during the early days of Maven and IntelliJ IDEA integration, providing a way to generate IDE-specific project files from a Maven project structure. This was crucial when IDEs lacked sophisticated built-in support for directly importing and understanding Maven's <I>pom.xml</I>.<br><br>As IntelliJ IDEA evolved, its native Maven integration became robust, capable of directly parsing <I>pom.xml</I> files to create project configurations on the fly. This significantly reduced the need for the <I>maven-idea-plugin</I> and its 'idea:idea' goal, leading to its diminished usage in favor of direct IDE import. Today, it is mostly used for maintaining older projects or in specific enterprise environments with strict build processes.


title: TLDR
content:
<b>Generate all IntelliJ IDEA project files</b>`mvn idea:idea`<br><b>Generate only the project (.ipr) file</b>`mvn idea:project`<br><b>Generate only the workspace (.iws) file</b>`mvn idea:workspace`<br><b>Generate only module (.iml) files</b>`mvn idea:module`<br><b>Delete all generated project files</b>`mvn idea:clean`


title: PARAMETERS
content:
<b><package-spec></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more package specifications (e.g., <I>package-name</I>, <I>package-name@version</I>) to explain their presence in the dependency tree. If omitted, it will attempt to explain the entire tree (though this is typically handled by <I>npm ls</I>).<br><br><b>--json</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Output the dependency explanation as a <I>JSON</I> object. This format is ideal for programmatic parsing and integration into other tools.<br><br><b>--workspace=<workspace-name></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the command in the context of a specific named <I>workspace</I> within a monorepo. This limits the explanation to dependencies relevant to that particular workspace.<br><br><b>--workspaces</b><br>&nbsp;&nbsp;&nbsp;&nbsp;Run the command in the context of <I>all</I> configured workspaces in the current project. This is useful for understanding dependencies across an entire monorepo setup.<br><br><b>--include=<type></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Include specified <I>dependency types</I> (e.g., <I>dev</I>, <I>optional</I>, <I>peer</I>, <I>build</I>) when tracing the dependency path. By default, <I>npm explain</I> usually considers all common dependency types.<br><br><b>--omit=<type></b><br>&nbsp;&nbsp;&nbsp;&nbsp;Exclude specified <I>dependency types</I> (e.g., <I>dev</I>, <I>optional</I>, <I>peer</I>, <I>build</I>) from the dependency explanation. This helps narrow down the focus to specific types of dependencies.<br><br>


title: DESCRIPTION
content:
The <I>npm explain</I> command is a powerful diagnostic tool designed to help developers understand the precise reasons why a particular package is present within their project's <I>node_modules</I> dependency tree. It acts as a dependency tracer, providing a detailed path or paths from the root project or other parent dependencies that ultimately led to the installation of the specified package.<br><br>This command is an invaluable resource for debugging complex dependency graphs, resolving version conflicts, or simply gaining clarity on the origin of an unexpected package. It essentially answers the question, "Why is this package here?" by inspecting the resolved dependency tree represented by your <I>node_modules</I> directory and <I>package-lock.json</I> file. It's often used when encountering issues like "phantom dependencies" or when trying to optimize bundle sizes. <I>npm explain</I> is also aliased as <I>npm why-depends</I>, reinforcing its core purpose of explaining dependency relationships within your project.


title: CAVEATS
content:
The output for deeply nested or highly interconnected dependencies can be very verbose and complex to parse manually. It relies on an existing <I>node_modules</I> directory and/or a <I>package-lock.json</I> file to derive its information; without these, its utility is limited. A package might be depended upon by multiple paths, leading to a comprehensive but potentially overwhelming explanation.


title: UNDERSTANDING OUTPUT
content:
The typical output of <I>npm explain</I> begins by identifying the package and its installed version. It then lists one or more paths that lead to this package's installation, often showing the immediate parent dependency and the type of dependency (e.g., <I>dependencies</I>, <I>devDependencies</I>, <I>peerDependencies</I>). For example, it might show: <br><br><I>some-package@1.0.0<br>node_modules/some-package<br>  <I>another-package@2.0.0</I> (depends on <I>some-package</I>)<br>  <I>root-project@1.0.0</I> (devDependency of <I>some-package</I>)<br></I><br>This allows developers to trace the exact lineage of any package in their project.


title: RESOLVING CONFLICTS AND DEBUGGING
content:
When faced with unexpected package versions, duplicate installations, or issues stemming from dependency conflicts, <I>npm explain</I> is a first-line debugging tool. By running <I>npm explain <package-name></I>, you can identify which parent packages are demanding different versions of a dependency, helping you to understand the conflict and formulate a resolution strategy (e.g., updating a parent dependency, using <I>overrides</I>). It's also crucial for identifying 'phantom dependencies'—packages that are present in <I>node_modules</I> but not explicitly declared in your <I>package.json</I>, often due to transitive dependencies.


title: HISTORY
content:
The <B>npm explain</B> command was officially introduced with <B>npm v7</B>. Before its introduction, similar functionality was partially available through commands like <I>npm ls</I> with specific options, or via <I>npm why-depends</I>, which <B>npm explain</B> eventually superseded and now serves as an alias for. Its development aimed to provide a more dedicated and user-friendly interface for understanding complex dependency relationships, especially in light of the more robust peer dependency resolution mechanism introduced in <B>npm v7</B>.


title: TLDR
content:
<b>Explain why a specific package is installed</b>`npm explain [package_name]`<br><b>Show explanation in JSON format</b>`npm explain [package_name] --json`<br><b>Include peer dependencies in the explanation</b>`npm explain [package_name] --include peer`<br><b>Limit explanation depth to 2 levels deep</b>`npm explain [package_name] --depth 2`


title: SYNOPSIS
content:
<b>npm explore</b> <i>&lt;package-name&gt;</i>[<i>@&lt;version&gt;</i>] [<b>--</b> <i>&lt;command&gt;</i>]


title: PARAMETERS
content:
<b><i>&lt;package-name&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The name of the installed package to explore. This package must be present in the local `node_modules`.<br><br><b><i>@&lt;version&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;An optional version specifier for the package. If omitted, the locally installed version will be used.<br><br><b><b>--</b> <i>&lt;command&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;The command to execute within the package's directory. If this option is not provided, an interactive shell will be opened instead.<br><br>


title: DESCRIPTION
content:
The <b>npm explore</b> command provides a convenient way to navigate into an installed Node.js package's directory, either to inspect its contents or execute commands within its context. When invoked, it temporarily changes the current working directory to the root of the specified package. This is particularly useful for debugging, examining the source code, or making temporary modifications to a package without globally modifying your project's `node_modules` structure.<br><br>If a command is provided after <b>--</b>, <b>npm explore</b> executes that command within the package's directory and then reverts to the original working directory. If no command is specified, it opens an interactive shell (e.g., `bash`, `sh`, or `cmd`) inside the package's directory, allowing for manual exploration and execution of multiple commands. This temporary environment is invaluable for quick tests or deep dives into package internals.


title: CAVEATS
content:
The changes made during an <b>npm explore</b> session are temporary and local to the package's directory. They are not persisted if you were to reinstall or update the package. This command requires the specified package to be already installed in your `node_modules` (or globally, if navigating manually). There is no explicit `--global` flag for <b>npm explore</b> itself; to explore a globally installed package, you would typically `cd` into the global `node_modules` directory first, often located using `npm root -g`.


title: INTERACTIVE MODE
content:
If no command is specified after <b>--</b>, <b>npm explore</b> will open an interactive shell (e.g., `bash`, `sh`, or `cmd.exe` depending on your system) directly within the specified package's directory. This allows you to browse files, run tests, or execute arbitrary commands within that package's context. To exit this interactive session and return to your original working directory, simply type `exit` in the shell.


title: EXAMPLES
content:
<b>1. Open an interactive shell in a package:</b><br><br><i>npm explore lodash</i><br><br><b>2. Run a command inside a package's directory:</b><br><br><i>npm explore express -- npm test</i><br><br><b>3. List files in a package:</b><br><br><i>npm explore react -- ls -la</i>


title: HISTORY
content:
The <b>npm explore</b> command has been a part of npm's utility set for a considerable time, serving as one of the earlier mechanisms for direct interaction with installed package files. While newer commands like <b>npm exec</b> offer more streamlined ways to run package binaries, <b>npm explore</b> retains its unique value for interactive inspection and debugging directly within a package's source tree, particularly when an interactive shell is desired. Its usage has shifted from a primary tool for executing package scripts to a niche but powerful debugging and exploration utility.


title: TLDR
content:
<b>Browse an installed package</b>`npm explore [package_name]`<br><b>Browse a package and run a command inside it</b>`npm explore [package_name] -- [command]`


title: SYNOPSIS
content:
<b>npm help search</b> <i>&lt;search terms&gt;</i><br><b>npm-help-search</b> <i>&lt;search terms&gt;</i>


title: PARAMETERS
content:
<b><i>&lt;search terms&gt;</i></b><br>&nbsp;&nbsp;&nbsp;&nbsp;One or more words or phrases to search for within the npm documentation. The search is performed against the titles and content of the available help topics.<br><br>


title: DESCRIPTION
content:
<i>npm-help-search</i> is a utility provided by the Node Package Manager (npm) that allows users to quickly find documentation topics related to specific keywords or phrases. When invoked, it searches through the local npm documentation installed on your system. This command is particularly useful for developers who need to look up information about npm commands, configuration options, or specific functionalities without leaving their terminal or resorting to external web searches. It acts as an efficient way to navigate the extensive npm help system offline. The search is typically case-insensitive and can match partial words, providing flexibility in finding relevant information. It's an indispensable tool for maintaining productivity when working with npm.


