sudo与stdbuf位置差异及Shell重定向作用范围技术咨询
Bash重定向与命令解析相关问题
问题背景
运行以下命令时发现部分日志丢失:
root@janux-spr1:/home/tw12/redis_research/dpdk-framework/dpdk-rx# { sudo ./dpdk-rx -l 3-5 -a 0000:18:00.1 -- -m 0 -d 0 -l 1 -i 500; } &> test.log; cat test.log
输出结果:
EAL: Detected CPU lcores: 32 EAL: Detected NUMA nodes: 1 EAL: Detected shared linkage of DPDK EAL: Multi-process socket /var/run/dpdk/rte/mp_socket EAL: Selected IOVA mode 'PA' EAL: VFIO support initialized EAL: Probe PCI driver: mlx5_pci (15b3:101b) device: 0000:18:00.1 (socket 0) mlx5_common: DevX read access NIC register=0X9055 failed errno=121 status=0x3 syndrome=0x54e3a9 TELEMETRY: No legacy callbacks, legacy socket not created Floating point exception
推测是缓冲问题,添加stdbuf -o0关闭stdout缓冲后,发现stdbuf的位置会影响结果,只有第二种写法能输出完整日志:
第一种写法(日志仍不完整)
root@janux-spr1:/home/tw12/redis_research/dpdk-framework/dpdk-rx# { stdbuf -o0 sudo ./dpdk-rx -l 3-5 -a 0000:18:00.1 -- -m 0 -d 0 -l 1 -i 500; } &> test.log; cat test.log
输出:
EAL: Detected CPU lcores: 32 EAL: Detected NUMA nodes: 1 EAL: Detected shared linkage of DPDK EAL: Multi-process socket /var/run/dpdk/rte/mp_socket EAL: Selected IOVA mode 'PA' EAL: VFIO support initialized EAL: Probe PCI driver: mlx5_pci (15b3:101b) device: 0000:18:00.1 (socket 0) mlx5_common: DevX read access NIC register=0X9055 failed errno=121 status=0x3 syndrome=0x54e3a9 TELEMETRY: No legacy callbacks, legacy socket not created Floating point exception
第二种写法(日志完整)
root@janux-spr1:/home/tw12/redis_research/dpdk-framework/dpdk-rx# { sudo stdbuf -o0 ./dpdk-rx -l 3-5 -a 0000:18:00.1 -- -m 0 -d 0 -l 1 -i 500; } &> test.log; cat test.log
输出:
EAL: Detected CPU lcores: 32 EAL: Detected NUMA nodes: 1 EAL: Detected shared linkage of DPDK EAL: Multi-process socket /var/run/dpdk/rte/mp_socket EAL: Selected IOVA mode 'PA' EAL: VFIO support initialized EAL: Probe PCI driver: mlx5_pci (15b3:101b) device: 0000:18:00.1 (socket 0) mlx5_common: DevX read access NIC register=0X9055 failed errno=121 status=0x3 syndrome=0x54e3a9 TELEMETRY: No legacy callbacks, legacy socket not created 5 EAL arguments used 0 application arguments used ================ Configuration ================ Port: 0 Interval: 500 msec Packet Rate: N/A (no rate limiting) =============================================== RX lcore count: 3 Allocated mbuf pool size 71303168B Init port 0 PCI address: 0000:18:00.1 Set up 2 TX rings (4096 descriptors per ring) Set up 2 RX rings (4096 descriptors per ring) Port 0 MAC: b8 3f d2 59 5f e1 CPU running in 2000 MHz, printing interval is 500ms -- 1000000000 cycles Starting RX Threads -- Main thread NOT treats as RX thread lcore 4 (lcore index 1, RX index 0) starts to receive packets lcore 5 (lcore index 2, RX index 1) starts to receive packets Floating point exception
通用问题
- 重定向的作用范围是什么?重定向和缓冲设置仅作用于所附加的特定命令吗?如果是,那么对于包含多个子命令的组合(如
sudo time XXX或bash -c '')情况如何? - 对于
sudo time XXX > logfile,重定向的是XXX还是整个sudo time XXX?类似的,command1 && command2 > logfile && command3、{command1 && command2} > logfile等场景的重定向规则是什么?
命令解析学习资源
已查阅过单词拆分相关资料,但仍不清楚Bash如何判断某个词是独立命令还是前一个命令的参数,哪里可以系统学习这些知识?
内容的提问来源于stack exchange,提问作者user12815541
相关产品推荐
相关产品推荐

