小编Hol*_*ock的帖子

如何使用 tcpdump 捕获所有 UDP 数据包?

我必须捕获从主机 A 发送到主机 B 的任何 UDP 端口的所有 UDP 数据包。以下,如果在主机 B 上运行,则不起作用。

$ sudo tcpdump -i eth0 -SX udp src <hostA>
tcpdump: 'udp' modifier applied to host
Run Code Online (Sandbox Code Playgroud)

实现相同目标的正确命令行是什么?

tcpdump

8
推荐指数
1
解决办法
3万
查看次数

将标准错误输出重定向到 bash 变量

这是一个 C 代码片段,它将导致segfault

// segfault.c

#include <string.h>

int main()
{
    memset((char *)0x0, 1, 100);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

编译它:

gcc segfault.c -o segfault
Run Code Online (Sandbox Code Playgroud)

如果从 bash 执行:

$ ./segfault
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

现在我将调用封装在 bash 脚本中。连续尝试了3次。我想获取变量内的错误输出ret并显示它。

#!/bin/bash

# segfault.sh

ret=`./segfault 2>&1`
echo "1) " $ret
ret=`eval ./segfault 2>&1`
echo "2) " $ret
ret=`eval ./segfault 2>&1 | cat`
echo "3) " $ret
Run Code Online (Sandbox Code Playgroud)

如果我从 bash 执行脚本:

1) 
2) 
3)  ./segfault.sh: line 7: 28814 Segmentation fault (core dumped) ./segfault
Run Code Online (Sandbox Code Playgroud)

显然,只有第三种形式的调用有效。我的问题是,为什么前两种形式不能捕获错误输出?

bash io-redirection stderr

7
推荐指数
1
解决办法
2204
查看次数

如何跟踪 Linux 内核错误?

一个小时的谷歌搜索表明主流Linux 内核错误被记录在两个不同的系统中:

邮件列表

这是 Linux 内核开发讨论和错误报告邮件列表。

邮件列表由许多服务存档,例如

布吉拉

这是 Kernel Tracker 系统(基于 Bugzilla),用于针对主线 Linux 内核(不是分发内核)发布错误。

发行版,例如Ubuntu 有自己的错误跟踪器,可以设置为跟踪上游错误。

我想知道,

  • 两个服务中报告的错误是否已同步回另一个服务?
  • 假设邮件列表和 bugzilla 不是彼此的镜像(它们是独立的并且错误同步),Linux 开发人员如何协调跨服务报告的错误?
  • 由于没有任何错误ID,稍后参考向邮件列表报告的错误是不是很不方便?(我知道可以通过邮寄存档 URL 进行引用,但看起来并不专业 IMO)
  • 是否应该向任何一项服务或同时向两者报告新错误?

linux-kernel bugs bugzilla

5
推荐指数
1
解决办法
865
查看次数

为什么 find 前面有星号(*)时不列出匹配的文件?

在 上Ubuntu 14.04, 64 bit,我已设置/lib/modules/4.2.0-27-generic/kernel/drivers为我的当前目录。我打算搜索所有net作为子字符串存在的文件。如果我使用 的正则表达式进行搜索,则*net*./net返回目录作为搜索结果。但是,如果我指定确切的文件名,那么它只会列出相关的文件(没用,因为我并不总是知道要交叉检查的确切文件名)。

$ find . -name *net* 
./net
$ find . -name *usbnet* 
./net/usb/usbnet.ko
$ pwd
/lib/modules/4.2.0-27-generic/kernel/drivers
Run Code Online (Sandbox Code Playgroud)

我犯了什么错误?

shell find quoting wildcards

4
推荐指数
1
解决办法
5283
查看次数

为什么 irqs_disabled() 是一种不安全的禁用抢占的方法?

在可抢占内核下正确锁定:保持内核代码抢占安全文章说,

但请记住,“禁用 irqs” 是一种根本上不安全的禁用抢占的方式 - 任何将抢占计数减少到 0 的 spin_unlock() 都可能会触发重新调度。一个简单的 printk() 可能会触发重新安排。

如果 IRQ 被禁用,那么该 CPU 内核上的定时器中断也应该被禁用。自然,它应该依次禁用调度程序(抢占)。为什么调用 irqsdisabled() 来禁用抢占是不安全的方法?

此外, printk() 如何触发重新安排?

kernel linux-kernel

3
推荐指数
1
解决办法
2576
查看次数

哪里 '/?' 参数扩展记录?

我遇到了 bash/dash 这个奇怪的参数扩展,我没有找到任何参考。这种扩展叫什么?它在哪里记录?

$ /???
bash: /bin: Is a directory
$ /????
bash: /boot: Is a directory
$ /?????
bash: /cdrom: Is a directory
$ /??????
bash: /libx32: Is a directory
Run Code Online (Sandbox Code Playgroud)

bash dash bash-expansion

0
推荐指数
1
解决办法
43
查看次数