this post was submitted on 10 Jul 2024
132 points (97.8% liked)

Linux

48129 readers
429 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

For many, many years now when I want to browse a man page about something I'll type man X into my terminal, substituting X for whatever it is I wish to learn about. Depending on the manual, it's short and therefore easy to find what I want, or I am deep in the woods because I'm trying to find a specific flag that appears many times in a very long document. Woe is me if the flag switch is a bare letter, like x.

And let's say it is x. Now I am searching with /x followed by n n n n n n n n N n n n n n. Obviously I'm not finding the information I want, the search is literal (not fuzzy, nor "whole word"), and even if I find something the manual pager might overshoot me because finding text will move the found line to the top of the terminal, and maybe the information I really want comes one or two lines above.

So... there HAS to be a better way, right? There has to be a modern, fast, easily greppable version to go through a man page. Does it exist?

P.S. I am not talking about summaries like tldr because I typically don't need summaries but actual technical descriptions.

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 44 points 4 months ago* (last edited 4 months ago) (5 children)

Kind of off topic, but you know what would be cool? If you had an 'man explain' command that would define all the flags/args in a command, like:

man explain rsync --append-verify --progress -avz -e "ssh -p 2222" root@$dip:/sdcard/DCIM/Camera newphonepix

Would give you:

rsync - a fast, versatile, remote (and local) file-copying tool
      --append-verify          --append w/old data in file checksum
      --progress               show progress during transfer
      --archive, -a            archive mode is -rlptgoD (no -A,-X,-U,-N,-H)
      --verbose, -v            increase verbosity
      --compress, -z           compress file data during the transfer
      --rsh=COMMAND, -e        specify the remote shell to use 

etc.

[–] [email protected] 11 points 4 months ago

You can just grep the help output

$ rsync --help 2>&1 | grep -E '^ *(--append-verify|--progress|--archive)'
--archive, -a            archive mode is -rlptgoD (no -A,-X,-U,-N,-H)
--append-verify          --append w/old data in file checksum
--progress               show progress during transfer

So it should be possible to create a simple script to do that. Similarly one can output the man document as text to stdout, which in turn can be grepped. I have no grep command at hand to do this in a useful way:

man grep | col -b
[–] [email protected] 9 points 4 months ago

Here's what I get in fish when I start writing a rsync command and hit tab to ask for completions:

❱ rsync --append-verify --progress -avz -
-0  --from0                               (All *from/filter files are delimited by 0s)  --delete                   (Delete files that don’t exist on sender)
-4  --ipv4                                                               (Prefer IPv4)  --delete-after         (Receiver deletes after transfer, not before)
-6  --ipv6                                                               (Prefer IPv6)  --delete-before         (Receiver deletes before transfer (default))
-8  --8-bit-output                          (Leave high-bit chars unescaped in output)  --delete-delay                 (Find deletions during, delete after)
[more lines omitted]
[–] [email protected] 4 points 4 months ago (1 children)

There is a Plugin for Zsh (ohmyzsh) that gives you that right in the shell. I use it all the time and rely on it. Don't have the name on my mind though, sorry.

[–] [email protected] 4 points 4 months ago

Please do tell once you've figured it out.

[–] [email protected] 2 points 4 months ago

Fish does this but is intentionally POSIX noncompliant so you'd wanr to keep the old shell installed if you run other people's script.