CLI Database FAQ

Submit command line tools that you find here.
Post Reply
Message
Author
User avatar
vevy
Posts: 752
Joined: Tue Sep 10, 2019 11:17 am

CLI Database FAQ

#1 Post by vevy » Sat May 16, 2020 10:41 am

Still an early draft:

  • General Points:
    • This effort is not perfect. Things will be missed. Mistakes will happen. We just aim to be good enough to be helpful. Let us know if you think we made a mistake!
  • What is CLI, What is it for and How to use it:
See Part 3 of the FAQ below.
  • Purpose:
TLDR: Central home for all the scattered Windows CLI tools, and promote the better ones among them.

Long Version:
Spoiler!   
  • Baseline: gather all the CLI tools that work on Windows (including ports) from around the web that don't have a central repository/directory for users to search.
  • Add quality tools that may be present in an organized repo like Cygwin, MSYS2, etc.
  • Provide a system to promote the better tools in the database so that the user can find what we think are the better tools for a given task when it comes to accuracy, speed, stability, and general dependability.
  • What Is Included:
TLDR: Text-mode programs.

Long Version:
Spoiler!   
  • CLI tools.
  • Useful batch scripts that fulfill a use case. Example: Delete empty directories.
  • Internal shell commands that fulfill a use case. Example: cmd.exe's rename command
  • TUI tools: "GUI" inside a console. Example: Far Manager.
  • Alternative shells/interpreters. Example: NYAGOS, Yori. Note: Alternative consoles/terminals are left to the regular (GUI) database.
  • Shell extensions. Example: Clink.
  • Portable only?:
TLDR: Not a criterion, but is true anyway for many (probably most) tools.

Long Version:
Spoiler!   
  • Many, or perhaps most, CLI tools don't store settings in the first place. There are multiple reasons that could explain this:
    • CLI tools accept options as text commands as part of the command they are launched with.
    • Visual settings (such as font, colors, window size) are handled through the console itself, not the CLI tool itself.
    • There are tool-independent ways to store frequently used settings if the user wants, like environment variables or shell aliases or scripts.
    • Many CLI tools are designed to perform a single or a limited set of functions. See Unix philosophy.
    • A standard concept for CLI tools is the "working directory". This means that the directory the tool is started from is the default folder for reading input files and saving output files.
  • For the tools that do make use of option files, many don't create the file by default, they simply allow the user to store needed options (usually the same options that can be sent through the command line), and then refer the tool to that file through a command line option. For example, Wget or rxrepl.
  • As there is no other centralized directory for CLI tools available for Windows, and since you can take your CLI tools and batch files with you and have things happily work pretty much the same as in your computer, I think it would be more helpful to be as complete as possible while marking those tools that don't are not very portable.
  • Do you vouch for these tools?:
TLDR: Not really!

Long Version:
Spoiler!   
It is very difficult to thoroughly test every tool here. We try to get tools from good sources, but you should always be careful with your files and system and practice safe backup. If you don't trust a tool for whatever reason, don't use it! (And let us know :)).
  • Use any port?:
TLDR: Try not to. Not all ports are equal.

Long Version:
Spoiler!   
Ports are most often volunteered by people other than the original developer. Thus:
  • Some are old and abandoned, thus missing fixes, features, and have vulnerabilities.
  • Some choose to include only certain parts of the original tool to fit their needs or to make the tool light and fast.
  • Some include their own features/fixes to the tool.
In general, you can find fairly faithful and up-to-date Unix ports for Windows in the Cygwin and MSYS2 projects, including many ports not included here (see the "purpose" above for why).

You should also look into Windows Subsystem for Linux, where you can run Linux tools in their native environments, but on Windows!
  • Ignored Old Ports:
TLDR: Old insecure tools. Get latest version instead.

Long Version:
Spoiler!   
Some ports have old tools that are vulnerable or potentially vulnerable to security attacks. These include:
  • Old security tools.
  • Old network-facing tools.
  • Network-facing tools that depend on old libraries (like OpenSSL DLLs) provided with the port.
  • Decompression tools with known vulnerabilities.
These ports are marked as such and ignored as long as they have later versions for Windows available elsewhere, often from the original developer.

While effort is made to mark such tools, things can be missed. In any case, you should always be careful with any sensitive software.
  • Discontinued NOT = bad quality:
Normally, CLI tools are significantly simpler to maintain than GUI tools; and since they tend to be simple and focused on one/few tasks, some are mature and bug-free enough that they may not require further updates in normal circumstances. Some tools from the 1990s still work fine!
  • How to extract: Standard extraction.
Standard extraction: Extract from archive. Add tool and associated DLLs/dependencies into a folder in your PATH environment variable if you want to easily use it from any folder. Open a console window and run "{app}.exe {arguments}". For example, sed.exe --help or cat.exe file.txt.
Last edited by vevy on Wed Oct 14, 2020 1:07 am, edited 34 times in total.
Help make the comprehensive CLI database happen:
                    Vote for filters/badges!

User avatar
vevy
Posts: 752
Joined: Tue Sep 10, 2019 11:17 am

Re: CLI Database FAQ

#2 Post by vevy » Sat May 16, 2020 10:41 am

Part 2 of the FAQ: Database legend and conventions:
  • Title
    • Parent package is between brackets [ ]. For example sdir [Yori].
    • In case of name conflicts (and no parent package to differentiate them), another value like developer's name or source is used between parenthesis ( ). For example mktemp (mktemp.org).
  • Status/Badges
    • Tool: CLI tool.
    • Package:Tool(s) distributed together (e.g. in one file or "package") by the developer. i.e. The "downloadable file", even if it contains only one tool. If it is NOT available as an individual download, it is not a package.
    • Collection: Multiple packages, or tools from different packages; distributed together or considered collectively, usually (but not necessarily) by a third party. Example, Gow or Sysinternals.
    • Unix Port: Tools/packages that are available for Unix-like systems (Linux, BSD, etc) but not available for Windows from (or at least approved by) the original developer.
    • Discontinued: Either officially discontinued or haven't shown signs of activity for years. A rough rule of thumb is ~5 years.
  • Description
Last edited by vevy on Wed Dec 30, 2020 4:50 pm, edited 14 times in total.
Help make the comprehensive CLI database happen:
                    Vote for filters/badges!

User avatar
vevy
Posts: 752
Joined: Tue Sep 10, 2019 11:17 am

Re: CLI Database FAQ

#3 Post by vevy » Sat May 16, 2020 10:44 am

Part 3 of the FAQ:
  • What is CLI:
TBD
  • What are the uses for CLI:
  • A bit of history:
    • Early on in computer history, text was the main way to talk to computers.
    • Also, since computers had limited capabilities for decades, dealing with computers using graphics was not feasible.
    • When graphic user interfaces became possible, developers were used to using text-mode applications. Even when a GUI and CLI/TUI tool were about equal in capabilities, many developers and users found themselves more productive in the command line or just preferred it this way. This carries on till today.
  • There are ways in which a CLI tool could provide a better (or the only) solution to a problem. Here are some ways you may find use in CLI tools (still work-in progress):
    • Inter-process communication. Like piping.
    • Better automation for repetitive tasks.
    • The only tool available.
    • The earlier tool available. Some new advances in computing are applied first through CLI applications.
    • The better tool available (Less mature GUI equivalent).
    • The free option.
  • When NOT to use CLI:
  • You are uncomfortable with the command line. Although it is not for eveyone, you may just be unfamiliar with it like any new skill. Also, there are ways to minimize the use of "typing in a black window" that you can employ.
  • You are afraid you might break something. If you don't know what you are doing and don't want to do something wrong to your system, then try to learn first or experiment in a safer environment like an old machine or a VM.
  • You are typo-prone!
  • The task at hand is more attuned to a GUI application. Some things in photo-editing, for example, can be better done in a GUI application. Also, if you are experimenting with image modification and effects, you probably want to see a live preview of the changes in a GUI. If you know exactly what you want, like resizing all photos in a folder to be 256x256, then you may be better served by CLI tools and batch commands.
  • TBC
Last edited by vevy on Tue Oct 13, 2020 11:18 pm, edited 3 times in total.
Help make the comprehensive CLI database happen:
                    Vote for filters/badges!

User avatar
vevy
Posts: 752
Joined: Tue Sep 10, 2019 11:17 am

Re: CLI Database FAQ

#4 Post by vevy » Sat Aug 29, 2020 3:42 pm

Post 4. Reserved for future expansion.
Help make the comprehensive CLI database happen:
                    Vote for filters/badges!

User avatar
vevy
Posts: 752
Joined: Tue Sep 10, 2019 11:17 am

Re: CLI Database FAQ

#5 Post by vevy » Sat Aug 29, 2020 3:43 pm

Post 5. Reserved for future expansion.
Help make the comprehensive CLI database happen:
                    Vote for filters/badges!

User avatar
lintalist
Posts: 315
Joined: Sat Apr 19, 2014 12:52 am
Contact:

Re: CLI Database FAQ

#6 Post by lintalist » Thu Dec 31, 2020 9:42 am

Just some thoughts:

Not sure about the "package" - wikipedia https://en.wikipedia.org/wiki/Software_package - states "... that provides certain functionality as part of a larger system" and I think that rings more true - when I think of package, I think of additional "things" I can install to make my "main thing" work better e.g. a library for python that allows you to parse html - I don't think the tag is needed here as collection has more meaning (a collection of tools) - perhaps it needs to be replaced/renamed by something else such as "single binary" as that may help people to decide e.g. a single executable youtube-dl.exe is easier to "manage" as a download manager which relies on dozens of files to make it work.

Post Reply