Linux-fuser 以你之姓@ 2021-12-13 00:05 213阅读 0赞 ### Linux-fuser ### 1. 描述 2. 选项 3. EXAMPLES 4. RESTRICTIONS 限制 5. SIGNAL 可用信号 fuser - 使用文件或套接字识别进程 ## 1. 描述 ## fuser使用指定的文件或文件系统显示进程的PID。 在默认显示模式下,每个文件名后跟一个表示访问类型的字母: <table> <tbody> <tr> <td align="left">F….</td> <td align="left">open file for writing. F is omitted in default display mode.</td> <td align="left">打开文件写。 默认显示模式中省略F。</td> </tr> <tr> <td align="left">f….</td> <td align="left">open file. f is omitted in default display mode.</td> <td align="left">打开文件。 默认显示模式中省略f。</td> </tr> <tr> <td align="left">.r…</td> <td align="left">root directory.</td> <td align="left">根目录。</td> </tr> <tr> <td align="left">..c..</td> <td align="left">current directory.</td> <td align="left">当前目录。进程的工作目录</td> </tr> <tr> <td align="left">...e.</td> <td align="left">executable being run.</td> <td align="left">正在运行的可执行</td> </tr> <tr> <td align="left">….m</td> <td align="left">mmap'ed file or shared library.</td> <td align="left">mmap的文件或共享库。</td> </tr> <tr> <td align="left">.</td> <td align="left">Placeholder, omitted in default display mode.</td> <td align="left">占位符,在默认显示模式下省略。</td> </tr> </tbody> </table> 如果未访问任何指定的文件或发生致命错误,fuser 将返回非零返回码。 如果至少找到一个访问权限,则fuser返回零。 要使用TCP和UDP套接字查找进程,必须使用“-n”选项选择相应的名称空间。 默认情况下,fuser将同时查看IPv6和IPv4套接字。 要更改默认行为,请使用-4和-6选项。 套接字可以由本地和远程端口以及远程地址指定。 所有字段都是可选字段,但必须存在缺少字段前面的逗号: \[lcl\_port\]\[,\[rmt\_host\]\[,\[rmt\_port\]\]\] 符号或数字值都可用于IP地址和端口号。 fuser只将PID输出到stdout,其他所有内容都发送到stderr。 ## 2. 选项 ## <table> <tbody> <tr> <td align="left">Option</td> <td align="left">en</td> <td align="left">cn</td> <td align="left">互斥</td> <td align="left">依赖</td> </tr> <tr> <td align="left">-a,--all</td> <td align="left">display unused files too</td> <td align="left">显示命令中指定的所有文件,包含未使用</td> <td align="left">-s</td> <td align="left"> </td> </tr> <tr> <td align="left">-s,--silent</td> <td align="left">silent operation</td> <td align="left">无声的操作. 将忽略-u和-v。</td> <td align="left">-a</td> <td align="left"> </td> </tr> <tr> <td align="left">-v,--verbose</td> <td align="left">verbose output</td> <td align="left">详细输出</td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left">-u,--user</td> <td align="left">display user IDs</td> <td align="left">显示用户ID</td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left"> </td> <td align="left"> </td> <td align="left"> </td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left">-n,--namespace SPACE</td> <td align="left">search in this name space (file, udp, or tcp)</td> <td align="left">在此名称空间中搜索(默认文件,也可udp或tcp)</td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left">-4,--ipv4</td> <td align="left">search IPv4 sockets only</td> <td align="left">仅搜索IPv4套接字, 仅对tcp和udp命名空间有效。</td> <td align="left">-6</td> <td align="left"> </td> </tr> <tr> <td align="left">-6,--ipv6</td> <td align="left">search IPv6 sockets only</td> <td align="left">仅搜索IPv6套接字, 仅对tcp和udp命名空间有效。</td> <td align="left">-4</td> <td align="left"> </td> </tr> <tr> <td align="left"> </td> <td align="left"> </td> <td align="left"> </td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left">-k,--kill</td> <td align="left">kill processes accessing the named file</td> <td align="left">杀死访问该文件的进程。默认发SIGKILL,可用-SIGNAL更改</td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left">-i,--interactive</td> <td align="left">ask before killing (ignored without -k)</td> <td align="left">在杀戮之前询问</td> <td align="left"> </td> <td align="left">-k</td> </tr> <tr> <td align="left">-w,--writeonly</td> <td align="left">kill only processes with write access</td> <td align="left">仅杀死具有写访问权限的进程</td> <td align="left"> </td> <td align="left">-k</td> </tr> <tr> <td align="left">-SIGNAL</td> <td align="left">send this signal instead of SIGKILL</td> <td align="left">发送指定信号而不是SIGKILL</td> <td align="left"> </td> <td align="left">-k</td> </tr> <tr> <td align="left">-l,--list-signals</td> <td align="left">list available signal names</td> <td align="left">列出可用的信号名称</td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left"> </td> <td align="left"> </td> <td align="left"> </td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left">-m,--mount</td> <td align="left">show all processes using the named filesystems or block device</td> <td align="left">使用命名文件系统或块设备显示所有进程</td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left">-M,--ismountpoint</td> <td align="left">fulfill request only if NAME is a mount point</td> <td align="left">仅在NAME是挂载点时才满足请求。如果NAME恰好不是文件系统,它可以防止你杀死机器。</td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left">-I,--inode</td> <td align="left">use always inodes to compare files</td> <td align="left">始终使用inode来比较文件</td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left">-V,--version</td> <td align="left">display version information</td> <td align="left">显示版本信息</td> <td align="left"> </td> <td align="left"> </td> </tr> <tr> <td align="left">-</td> <td align="left">Reset all options and set the signal back to SIGKILL.</td> <td align="left">重置所有选项并将信号设置回SIGKILL。</td> <td align="left"> </td> <td align="left"> </td> </tr> </tbody> </table> ## 3. EXAMPLES ## $ fuser -km /home // kills all processes accessing the file system /home in any way.以任何方式杀死访问文件系统/ home的所有进程。 if fuser -s /dev/ttyS1; then :; else something; fi // invokes something if no other process is using /dev/ttyS1.如果没有其他进程正在使用/dev/ttyS1,则调用一些东西。 $ fuser telnet/tcp // shows all processes at the (local) TELNET port.显示(本地)TELNET端口的所有进程。 $ fuser -v fuser.xls USER PID ACCESS COMMAND /home/toma/fuser.xls: toma 5323 F.... soffice.bin $ sudo fuser -vua /dev/sda10 USER PID ACCESS COMMAND /dev/sda10: root 839 F.... (root)mount.ntfs $ sudo fuser -mvua /dev/sda10 USER PID ACCESS COMMAND /dev/sda10: root kernel mount (root)/run/media/toma/TjOe root 839 F.... (root)mount.ntfs toma 7697 f.... (toma)vlc $ sudo fuser -vun tcp 1080 USER PID ACCESS COMMAND 1080/tcp: root 421 F.... (root)v2\* ## 4. RESTRICTIONS 限制 ## 以相同方式多次访问同一文件或文件系统的进程仅显示一次。 如果在命令行上多次指定了同一个对象,则可能会忽略其中一些条目。 除非以特权运行,否则fuser可能只能收集部分信息。因此,可能未列出属于其他用户的进程打开的文件,并且可执行文件可能仅被分类为映射。 fuser无法报告它没有查看文件描述符表的权限的任何进程。发生此问题的最常见时间是在以非root用户身份运行fuser时查找TCP或UDP套接字。在这种情况下,定影器将报告无法访问。 安装fuser SUID root将避免与部分信息相关的问题,但出于安全和隐私原因可能不合需要。 udp和tcp名称空间,并且无法使用早于1.3.78的内核搜索UNIX域套接字。 内核访问仅使用-v选项显示。 -k选项仅适用于进程。如果用户是内核,fuser将打印一条建议,但除此之外不采取任何措施。 ## 5. SIGNAL 可用信号 ## -SIGNAL 选项可用信号使用 -l 列出 <table> <tbody> <tr> <td align="left">No</td> <td align="left">fuser -l</td> <td align="center"><strong>信号</strong></td> <td align="center"><strong>默认操作</strong></td> <td align="center"><strong>描述</strong></td> </tr> <tr> <td align="right">1</td> <td align="left">HUP</td> <td align="left">SIGHUP</td> <td align="left">终止</td> <td align="left">挂断</td> </tr> <tr> <td align="right">2</td> <td align="left">INT</td> <td align="left">SIGINT</td> <td align="left">终止</td> <td align="left">终端中断信号 'Ctrl C’</td> </tr> <tr> <td align="right">3</td> <td align="left">QUIT</td> <td align="left">SIGQUIT</td> <td align="left">终止(核心转储)</td> <td align="left">终端退出信号 'Ctrl \’</td> </tr> <tr> <td align="right">4</td> <td align="left">ILL</td> <td align="left">SEAL</td> <td align="left">终止(核心转储)</td> <td align="left">非法指令</td> </tr> <tr> <td align="right">5</td> <td align="left">TRAP</td> <td align="left">SIGTRAP</td> <td align="left">终止(核心转储)</td> <td align="left">跟踪/断点陷阱</td> </tr> <tr> <td align="right">6</td> <td align="left">ABRT</td> <td align="left">SIGABRT</td> <td align="left">终止(核心转储)</td> <td align="left">处理中止信号</td> </tr> <tr> <td align="right">7</td> <td align="left">BUS</td> <td align="left">SIGBUS</td> <td align="left">终止(核心转储)</td> <td align="left">访问内存对象的未定义部分</td> </tr> <tr> <td align="right">8</td> <td align="left">FPE</td> <td align="left">SIGFPE</td> <td align="left">终止(核心转储)</td> <td align="left">错误的算术运算</td> </tr> <tr> <td align="right">9</td> <td align="left">KILL</td> <td align="left">SIGKILL</td> <td align="left">终止</td> <td align="left">强制终止(不能被抓住或忽略)</td> </tr> <tr> <td align="right">10</td> <td align="left">USR1</td> <td align="left">SIGUSR1</td> <td align="left">终止</td> <td align="left">用户定义的信号1</td> </tr> <tr> <td align="right">11</td> <td align="left">SEGV</td> <td align="left">SIGSEGV</td> <td align="left">终止(核心转储)</td> <td align="left">无效的内存引用</td> </tr> <tr> <td align="right">12</td> <td align="left">USR2</td> <td align="left">SIGUSR2</td> <td align="left">终止</td> <td align="left">用户定义的信号2</td> </tr> <tr> <td align="right">13</td> <td align="left">PIPE</td> <td align="left">SIGPIPE</td> <td align="left">终止</td> <td align="left">写在没有人阅读的管道上</td> </tr> <tr> <td align="right">14</td> <td align="left">ALRM</td> <td align="left">SIGALRM</td> <td align="left">终止</td> <td align="left">警报</td> </tr> <tr> <td align="right">15</td> <td align="left">TERM</td> <td align="left">SIGTERM</td> <td align="left">终止</td> <td align="left">终止信号</td> </tr> <tr> <td align="right">16</td> <td align="left">STKFLT</td> <td align="left">SIGSTKFLT</td> <td align="left"> </td> <td align="left">堆栈故障</td> </tr> <tr> <td align="right">17</td> <td align="left">CHLD</td> <td align="left">SIGCHLD</td> <td align="left">忽略</td> <td align="left">子进程已终止,停止或继续</td> </tr> <tr> <td align="right">18</td> <td align="left">CONT</td> <td align="left">SIGCONT</td> <td align="left">继续</td> <td align="left">如果停止,继续执行 'fg/bg’</td> </tr> <tr> <td align="right">19</td> <td align="left">STOP</td> <td align="left">SIGSTOP</td> <td align="left">停止</td> <td align="left">停止执行(无法捕获或忽略) ‘Ctrl Z’</td> </tr> <tr> <td align="right">20</td> <td align="left">TSTP</td> <td align="left">SIGTSTP</td> <td align="left">停止</td> <td align="left">终端停止信号 ‘Ctrl Z’</td> </tr> <tr> <td align="right">21</td> <td align="left">TTIN</td> <td align="left">SIGTTIN</td> <td align="left">停止</td> <td align="left">后台进程尝试读取</td> </tr> <tr> <td align="right">22</td> <td align="left">TTOU</td> <td align="left">SIGTTOU</td> <td align="left">停止</td> <td align="left">尝试写入的后台进程</td> </tr> <tr> <td align="right">23</td> <td align="left">URG</td> <td align="left">SIGURG</td> <td align="left">忽略</td> <td align="left">套接字可提供高带宽数据</td> </tr> <tr> <td align="right">24</td> <td align="left">XCPU</td> <td align="left">SIGXCPU</td> <td align="left">终止(核心转储)</td> <td align="left">超出CPU时间限制</td> </tr> <tr> <td align="right">25</td> <td align="left">XFSZ</td> <td align="left">SIGXFSZ</td> <td align="left">终止(核心转储)</td> <td align="left">超出文件大小限制</td> </tr> <tr> <td align="right">26</td> <td align="left">VTALRM</td> <td align="left">SIGVTALRM</td> <td align="left">终止</td> <td align="left">虚拟计时器已过期</td> </tr> <tr> <td align="right">27</td> <td align="left">PROF</td> <td align="left">SIGPROF</td> <td align="left">终止</td> <td align="left">分析计时器已过期</td> </tr> <tr> <td align="right">28</td> <td align="left">WINCH</td> <td align="left">SIGWINCH</td> <td align="left">忽略</td> <td align="left">终端窗口大小已更改</td> </tr> <tr> <td align="right">29</td> <td align="left">POLL</td> <td align="left">SIGPOLL</td> <td align="left">终止</td> <td align="left">可轮询的事件</td> </tr> <tr> <td align="right">30</td> <td align="left">PWR</td> <td align="left">SIGPWR</td> <td align="left"> </td> <td align="left">电源故障</td> </tr> <tr> <td align="right">31</td> <td align="left">SYS</td> <td align="left">SIGSYS</td> <td align="left">终止(核心转储)</td> <td align="left">系统调用错误</td> </tr> </tbody> </table> 默认操作行动解释: 终止 - Terminate 过程异常终止。该过程终止于\_exit()的所有后果,除了wait()和waitpid()可用的状态指示指定信号的异常终止。 终止(核心转储) - Terminate (core dump) 异常终止进程。另外,可能发生实现定义的异常终止动作,例如创建核心文件。 忽略 - Ignore 忽略信号。 停止 - Stop 停止(不终止)该过程。 继续 - Continue 如果停止,继续该过程; 否则,忽略信号。 [https://en.wikipedia.org/wiki/Signal\_(IPC)][https_en.wikipedia.org_wiki_Signal_IPC] Post operation failed. The error message related to this problem was as follows: 博文中含有违规内容: v2\*! 转载于:https://www.cnblogs.com/sztom/p/11082469.html [https_en.wikipedia.org_wiki_Signal_IPC]: https://en.wikipedia.org/wiki/Signal_%28IPC%29
还没有评论,来说两句吧...