ZBLOG

不是某个进程的重定向 是所有向console输出的字符的重定向

要将 所有进程 向终端(console)输出的字符全局重定向到文件 /tmp/xxx.txt,需要修改系统的终端或内核级输出配置。以下是几种实现方法:


1. 使用 syslog 系统日志服务

将终端的输出通过 syslog 捕获并写入文件:

# 配置 syslog 捕获控制台输出(需 root)
echo "*.emerg /tmp/xxx.txt" >> /etc/rsyslog.d/console.conf
systemctl restart rsyslog

# 测试:所有 emerg 级别日志会写入文件
logger -p emerg "Test message"

缺点:仅适用于通过 syslog 的日志,非所有终端输出。


2. 重定向 TTY 设备

直接劫持当前虚拟终端(如 tty1)的输出:

# 找到当前终端设备(例如 /dev/tty1)
who | grep $(whoami) | awk '{print $2}'

# 用脚本监听并重定向(需 root)
cat /dev/tty1 > /tmp/xxx.txt &

注意

  • 需要 root 权限。
  • 可能干扰正常终端交互。

3. Kernel Console Redirection

修改内核启动参数,将控制台输出重定向到文件:

# 编辑 GRUB 配置(需 root)
sudo vim /etc/default/grub
# 修改以下行:
GRUB_CMDLINE_LINUX="console=tty0 console=/tmp/xxx.txt"

# 更新 GRUB
sudo update-grub && reboot

限制

  • 仅影响内核启动阶段的输出。
  • /tmp 是临时目录,重启后文件会丢失。

4. Screen/Tmux Session Logging

screentmux 会话中启用自动日志记录:

# Screen方式
screen -L -Logfile /tmp/xxx.txt bash

# Tmux方式
tmux new-session -s logged_session "script -f /tmp/xxx.txt"

5. Systemd Journald (推荐)

通过 journald 捕获所有系统日志并导出到文件:

# (1)查看当前终端关联的 journald unit
journalctl -f _PID=$$ 

# (2)将所有日志持久化到文件(需 root)
mkdir -p /var/log/journal
systemctl restart systemd-journald

# (3)导出全部日志到文件(实时追加)
journalctl -f > /tmp/xxx.txt &

6. FUSE-based Virtual Terminal

使用 FUSE (用户态文件系统)创建虚拟终端设备并劫持数据流:

git clone https://github.com/kernc/logkeys.git && cd logkeys
./configure && make && sudo make install

# (需 root)启动键盘输入记录(包括虚拟终端)
sudo logkeys -s -o /tmp/xxx.txt --no-func-keys 

警告:此方法可能涉及隐私和安全风险!


注意事项

  1. 权限问题:操作 /dev/tty*、内核参数或系统服务通常需要 root
  2. 性能影响:全局重定向可能增加 I/O负载。
  3. 会话隔离:不同用户的终端输出需分别处理。

如果需要更具体的场景说明(如嵌入式系统、特定发行版),可以进一步优化方案!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23493

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?