AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 464361
Accepted
TheMeaningfulEngineer
TheMeaningfulEngineer
Asked: 2018-08-24 02:42:57 +0800 CST2018-08-24 02:42:57 +0800 CST 2018-08-24 02:42:57 +0800 CST

检查 /dev/log

  • 772

/dev/log是系统日志记录的默认条目。在 systemd 实现的情况下(本例),它是指向任何/run/systemd/journal/dev-log. 它曾经是 syslog 守护进程处理的 unix 套接字的接收端。

~$ echo "hello" > /dev/log 
bash: /dev/log: No such device or address
~$ fuser /dev/log
~$ ls -la /dev/log 
lrwxrwxrwx 1 root root 28 Aug 23 07:13 /dev/log -> /run/systemd/journal/dev-log

当您尝试写入时弹出错误的说明是什么,为什么没有进程保存该文件(从fuser /dev/log空输出?

日志记录确实在系统上正常工作。

~$ logger test
~$ journalctl --since=-1m
-- Logs begin at Thu 2018-05-24 04:23:46 CEST, end at Thu 2018-08-23 13:07:25 CEST. --
Aug 23 13:07:24 alan-N551JM alan[12962]: test

扩展评论建议

~$ sudo fuser /dev/log 
/run/systemd/journal/dev-log:     1   311
~$ ls -lL /dev/log
srw-rw-rw- 1 root root 0 Aug 23 07:13 /dev/log
linux systemd
  • 3 3 个回答
  • 22190 Views

3 个回答

  • Voted
  1. andcoz
    2018-08-28T05:18:35+08:002018-08-28T05:18:35+08:00

    我将评论总结为完整的答案。请注意,@MarkPlotnick是第一个指出正确解决方案的人。

    正如您在ls -lL输出中看到的那样,您链接的文件是一个套接字,不是常规文件或管道。

    ~$ ls -lL /dev/log
    srw-rw-rw- 1 root root 0 Aug 23 07:13 /dev/log
    

    查看输出的第一个字符。这s意味着该文件是一个套接字。

    您不能使用(或,AFIK,任何其他 shell)的重定向机制>在bash套接字中写入,因为 shell 将尝试打开文件并且open不支持套接字。有关详细信息,请参阅man open。

    您必须使用连接到套接字的程序。有关详细信息,请参阅man 连接。

    例如,您可以使用netcator socat(请参阅如何通过 Debian Squeeze 上的 shell 与 Unix 域套接字通信?)。

    为了完整起见,您可以在管道上使用重定向。

    ~$ mkfifo /tmp/fifo
    ~$ ls -l /tmp/fifo
    prw-rw-rw- 1 root root 0 27 ago 15.04 /tmp/fifo
    ~$ echo "hello" > /tmp/fifo
    

    查看ls输出的第一个字符。这p意味着该文件是一个管道。

    • 13
  2. Best Answer
    lukemassa
    2020-09-06T12:57:29+08:002020-09-06T12:57:29+08:00

    要向接受的(正确)答案添加一些附加信息,您可以/dev/log通过这样写入来查看其只是 UNIX 套接字的程度:

    lmassa@lmassa-dev:~$ echo 'This is a test!!' | nc -u -U /dev/log 
    lmassa@lmassa-dev:~$ sudo tail -1 /var/log/messages
    Sep  5 16:50:33 lmassa-dev journal: This is a test!!
    

    在我的系统上,你可以看到 journald 进程正在监听这个套接字:

    lmassa@lmassa-dev:~$ sudo lsof | grep '/dev/log'
    systemd       1                 root   29u     unix 0xffff89cdf7dd3740       0t0       1445 /dev/log
    systemd-j   564                 root    5u     unix 0xffff89cdf7dd3740       0t0       1445 /dev/log
    

    它收到了我的消息并用它做了它的事情:(即附加到 /var/log/messages 文件)。

    请注意,由于 journald 所使用的 syslog 协议需要数据报(想想 UDP),而不是流(想想 TCP),如果你只是尝试直接写入套接字,nc你会在 syscall 中看到一个错误(并且没有日志显示) .

    相比:

    lmassa@lmassa-dev:~$ echo 'This is a test!!' | strace nc -u -U /dev/log 2>&1 | grep connect -B10 | egrep '^(socket|connect)'
    socket(AF_UNIX, SOCK_DGRAM, 0)          = 4
    connect(4, {sa_family=AF_UNIX, sun_path="/dev/log"}, 10) = 0
    
    lmassa@lmassa-dev:~$ echo 'This is a test!!' | strace nc  -U /dev/log 2>&1 | grep connect -B10 | egrep '^(socket|connect)'
    socket(AF_UNIX, SOCK_STREAM, 0)         = 3
    connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 10) = -1 EPROTOTYPE (Protocol wrong type for socket)
    

    请注意,为了清楚起见,我省略了一些系统调用。这里重要的一点是,第一个调用指定了 SOCK_DGRAM,这是 /dev/log 套接字所期望的(因为这是/dev/log最初创建套接字的方式),而第二个调用没有,所以我们得到了一个错误。

    • 10
  3. Gerard H. Pille
    2018-08-24T02:46:07+08:002018-08-24T02:46:07+08:00

    您应该验证 /run/systemd/journal/dev-log、它的权限以及谁在使用它。你正在检查一个链接。

    • -2

相关问题

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve