Man

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

  • February 26, 2020

我應該如何探索終端中可用的所有命令?我希望能夠瀏覽命令中目前記錄的所有命令/文件,man我該怎麼做?

我列出了 4000 個手冊頁

這是問題的一半。OP 不僅想要:

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

它提供了一個很好的平面命令列表。但是builtins、coreutils、sbin 呢?

他想要的不僅僅是命令:

“所有命令/文件”

許多重要資訊在其他部分:4、5、7 或 8。

沒有起點。沒有包含命令列表的“使用者手冊”。手冊命令列表,命令也只是建構塊。echogcc與很多解釋並排。但是對於新手來說,要找出它們的用途並不容易。(我的榜樣新手只是一個感興趣的 13 歲男孩或女孩)


linux 發行版製作的方式應該是主要的結構名稱:它們自然地將一些命令組合在一起。並且包裹總是有很好的描述。

這是一些來自 systemd 的 man-files 不以“systemd-”開頭

systemd /usr/share/man/man5/udev.conf.5.gz
systemd /usr/share/man/man5/user-runtime-dir@.service.5.gz
systemd /usr/share/man/man5/user.conf.d.5.gz
systemd /usr/share/man/man5/user@.service.5.gz
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(s)、editor(s)。

如果我想了解與 相關的其他命令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 個手冊頁en bloque 好得多


…和系統呼叫

我做了/正在做與我找到的系統呼叫定義類似的事情(使用 find/grep)。


find -exec grep(稍微格式化為兩行):

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

$dlist是可選的,但完整的 Giga ( 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)

“SEE ALSO”很有用,但我想在邏輯組中“SEE ALL”

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,

引用自:https://unix.stackexchange.com/questions/569738