如何查看 man 中的所有条目?

如何查看 man 中的所有条目?

我应该如何探索终端中可用的所有命令?我希望能够浏览man命令中当前记录的所有命令/文档,我该怎么做?

答案1

我列出了 4000 个手册页

这就是问题的一半。 OP想要的不仅是:

]# apropos -s1       
apropos what?
]# apropos -s1 -w \*

它给出了一个很好的简单命令列表。但是内置函数、coreutils、sbin 又如何呢?

他想要的不仅仅是命令:

“所有命令/文档”

许多重要信息位于其他部分:4、5、7 或 8。

没有起点。没有包含命令列表的“用户手册”。手册命令列表,并且命令也只是构建块。echo并且gcc并排有很多解释。但对于新手来说,要弄清楚它们的用途并不是那么容易。 (我的新手榜样只是一个感兴趣的 13 岁男孩 - 或女孩)


Linux 发行版的制作方式应该是主要的结构名称:它们自然地将一些命令组合在一起。而且包总是有很好的描述。

这是一些来自 systemd 的手册文件,不以“systemd-”开头

systemd /usr/share/man/man5/udev.conf.5.gz
systemd /usr/share/man/man5/[email protected]
systemd /usr/share/man/man5/user.conf.d.5.gz
systemd /usr/share/man/man5/[email protected]
systemd /usr/share/man/man5/vconsole.conf.5.gz
systemd /usr/share/man/man7/
systemd /usr/share/man/man7/bootup.7.gz
systemd /usr/share/man/man7/daemon.7.gz
systemd /usr/share/man/man7/file-hierarchy.7.gz
systemd /usr/share/man/man7/hwdb.7.gz
systemd /usr/share/man/man7/kernel-command-line.7.gz
systemd /usr/share/man/man7/sd-boot.7.gz
systemd /usr/share/man/man7/udev.7.gz
systemd /usr/share/man/man8/
systemd /usr/share/man/man8/kernel-install.8.gz

和 man1 部分:

systemd /usr/share/man/man1/
systemd /usr/share/man/man1/bootctl.1.gz
systemd /usr/share/man/man1/busctl.1.gz
systemd /usr/share/man/man1/coredumpctl.1.gz
systemd /usr/share/man/man1/hostnamectl.1.gz
systemd /usr/share/man/man1/init.1.gz
systemd /usr/share/man/man1/journalctl.1.gz
systemd /usr/share/man/man1/localectl.1.gz
systemd /usr/share/man/man1/loginctl.1.gz
systemd /usr/share/man/man1/machinectl.1.gz
systemd /usr/share/man/man1/networkctl.1.gz
systemd /usr/share/man/man1/portablectl.1.gz
systemd /usr/share/man/man1/resolvectl.1.gz
systemd /usr/share/man/man1/systemctl.1.gz
systemd /usr/share/man/man1/timedatectl.1.gz

这是一个独立于内容的紧凑概述。

其他重要的软件包有 coreutils、util-linux、shell、editor。

如果我想了解与 相关的其他命令ps,我可以查看它的包中的其他命令(摘录):

procps-ng /usr/share/man/man1/ps.1.gz
procps-ng /usr/share/man/man1/pwdx.1.gz
procps-ng /usr/share/man/man1/slabtop.1.gz
procps-ng /usr/share/man/man1/tload.1.gz
procps-ng /usr/share/man/man1/top.1.gz

描述是“用于监视系统及其进程的实用程序”,这给了整个团队一个有意义的标题。

20 个软件包,每个软件包有 20 个手册页(平均)比 4000 个手册页要好得多整体


...以及系统调用

我做了/正在做一些与我发现的系统调用定义类似的事情(使用 find/grep)。


find -exec grep(稍微格式化为两行):

]# dlist='kernel mm fs block net ipc security' 
]# find $dlist -name '*.c' -exec grep '^SYSCALL_DEFINE[0-6]' {} +  

$dlist是可选的,但全千兆 ( drivers/!) 第一次会搅动 SSD 几秒钟。

并由重定向通过附加到某个文件,> /tmp/SYSC_06我得到一个列表,我可以按目录、文件名和参数数量对它进行 grep、排序和分组。一些简单的例子如下:


]# grep '(.*write.*,' SYSC_06 

mm/process_vm_access.c:SYSCALL_DEFINE6(process_vm_writev, pid_t, pid,
fs/read_write.c:SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf,
fs/read_write.c:SYSCALL_DEFINE4(pwrite64, unsigned int, fd, const char __user *, buf,
fs/read_write.c:SYSCALL_DEFINE3(writev, unsigned long, fd, const struct iovec __user *, vec,
fs/read_write.c:SYSCALL_DEFINE5(pwritev, unsigned long, fd, const struct iovec __user *, vec,
fs/read_write.c:SYSCALL_DEFINE6(pwritev2, unsigned long, fd, const struct iovec __user *, vec,


]# grep sync SYSC_06

mm/msync.c:SYSCALL_DEFINE3(msync, unsigned long, start, size_t, len, int, flags)
fs/sync.c:SYSCALL_DEFINE0(sync)
fs/sync.c:SYSCALL_DEFINE1(syncfs, int, fd)
fs/sync.c:SYSCALL_DEFINE1(fsync, unsigned int, fd)
fs/sync.c:SYSCALL_DEFINE1(fdatasync, unsigned int, fd)
fs/sync.c:SYSCALL_DEFINE4(sync_file_range, int, fd, loff_t, offset, loff_t, nbytes,
fs/sync.c:SYSCALL_DEFINE4(sync_file_range2, int, fd, unsigned int, flags,

这将更加概括:

fs/sync.c: sync()
fs/sync.c: syncfs(fd)

“另请参阅”很有用,但我想在逻辑组中“查看全部”

man futex有:

另请参见:get_robust_list(2)、restart_syscall(2)、...

但我得到:

]# grep futex SYSC_06 

kernel/futex.c:SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head,
kernel/futex.c:SYSCALL_DEFINE3(get_robust_list, int, pid,
kernel/futex.c:SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,

(这些行不完整......但参见上面......搜索也不精确。)

restart_syscall()仅供“内部使用” - 相当错误的线索。


或者所有带有 6 个参数的系统调用,最小化格式:

]# grep FINE6 SYSC_06 |sed -n 's/(/\t\t/p'

kernel/futex.c:SYSCALL_DEFINE6          futex, u32 __user *, uaddr, int, op, u32, val,
kernel/fork.c:SYSCALL_DEFINE6           clone, unsigned long, clone_flags, unsigned long, newsp,
mm/nommu.c:SYSCALL_DEFINE6              mmap_pgoff, unsigned long, addr, unsigned long, len,
mm/mempolicy.c:SYSCALL_DEFINE6          mbind, unsigned long, start, unsigned long, len,
mm/mmap.c:SYSCALL_DEFINE6               mmap_pgoff, unsigned long, addr, unsigned long, len,
mm/process_vm_access.c:SYSCALL_DEFINE6          process_vm_readv, pid_t, pid, const struct iovec __user *, lvec,
mm/process_vm_access.c:SYSCALL_DEFINE6          process_vm_writev, pid_t, pid,
mm/migrate.c:SYSCALL_DEFINE6            move_pages, pid_t, pid, unsigned long, nr_pages,
fs/eventpoll.c:SYSCALL_DEFINE6          epoll_pwait, int, epfd, struct epoll_event __user *, events,
fs/read_write.c:SYSCALL_DEFINE6         preadv2, unsigned long, fd, const struct iovec __user *, vec,
fs/read_write.c:SYSCALL_DEFINE6         pwritev2, unsigned long, fd, const struct iovec __user *, vec,
fs/read_write.c:SYSCALL_DEFINE6         copy_file_range, int, fd_in, loff_t __user *, off_in,
fs/splice.c:SYSCALL_DEFINE6             splice, int, fd_in, loff_t __user *, off_in,
fs/select.c:SYSCALL_DEFINE6             pselect6, int, n, fd_set __user *, inp, fd_set __user *, outp,
fs/aio.c:SYSCALL_DEFINE6                io_pgetevents,
net/socket.c:SYSCALL_DEFINE6            sendto, int, fd, void __user *, buff, size_t, len,
net/socket.c:SYSCALL_DEFINE6            recvfrom, int, fd, void __user *, ubuf, size_t, size,
ipc/syscall.c:SYSCALL_DEFINE6           ipc, unsigned int, call, int, first, unsigned long, second,

答案2

为什么要查看“所有手册页”?正如其他人所说,典型的桌面安装实际上有数千个。您可以查看手册第 1 节中的“用户命令”(有时也查看第 l 节,用于本地添加/额外官方命令),但这些命令至少有数百个(这里我有 4365 个!)。

想要学习如何有效地使用命令行?查看关于你的 shell(大概是 bash)的教程,有很多关于命令行的使用,查看Unix 命令行备忘单对于基本命令。请注意,shell 具有基本的编程功能,并且存在许多问题将要有一天,当你写出更雄心勃勃的剧本时,你会受到很大的打击。使用一次性命令的编程工具(循环遍历名为 *.pdf 等的所有文件),如果您的脚本经常增长/使用,请考虑用一种合理的脚本语言(如 Python)重写它们。学习如何很好地使用“命令行”文本编辑器,标准是 vi(在 Linux 中通常是 vim,一个扩展版本),但也有 emacs 狂热分子...许多沼泽标准 Unix 命令(grep、more/less) 、 sed)或多或少使用与 vi 使用相同的搜索机制,因此学习如何使用它是一项明智的投资(如果有一天您发现自己陷入了一个陌生的 Unix 系统,vi 将可用)。许多命令通过寻呼机(或多或少)传输大量输出。有一些命令可以处理文本文件(cat、cut、join、sort、split、head、tail)。

对于更专业的任务,您必须查看可用的内容(首先查看apropos某些手册页是否提到了搜索词,并且可能相关),在网络上搜索您的发行版中的任务,然后在绝望的情况在这里问。对于给定的任务,通常会有令人眼花缭乱的各种程序......并且选择必须是个人的(偏好、可用性、标准与否、易用性......)。

答案3

我没有安装 GMP,但我怀疑该软件包不包含它的手册页。

我不清楚为什么您需要手册页而不使用互联网,而您显然可以访问互联网。 GMP 项目文件位于:

https://gmplib.org/manual

有一个 150 页的 PDF,位于:

gmplib.org/gmp-man-6.2.0.pdf

相关内容