将 syslog/dmesg/message 备份到不同的文件夹

Zen*_*rus 3 bash backup

我有一项任务,需要将/var/log/dmesg,/var/log/syslog/var/log/message文本文件备份到不同文件夹(如桌面)中。它还会创建一个名为 Execution.txt 的文件来记录 bash 脚本运行时的日期和时间。我确实有这段代码,每次运行时我都写过,它给了我:

./bash.sh: line 7: /var/log/dmesg: Permission denied
./bash.sh: line 8: /var/log/syslog: Permission denied
./bash.sh: line 9: /var/log/message: Permission denied
Run Code Online (Sandbox Code Playgroud)

但是,它确实在桌面上创建了这些文件,但是 message 和 dmesg 文件是空的。我想知道这是正常的还是我做错了什么?下面是我到目前为止编写的代码。任何帮助,将不胜感激。谢谢!

#!/bin/bash

cat /var/log/dmesg l nl >> /home/administrator/Desktop/dmesg
cat /var/log/syslog l nl >> /home/administrator/Desktop/syslog
cat /var/log/message l nl >> /home/administrator/Desktop/message

echo ' ' > /var/log/dmesg
echo ' ' > /var/log/syslog
echo ' ' > /var/log/message

date >> /home/administrator/Desktop/execution.txt
Run Code Online (Sandbox Code Playgroud)

Oli*_*Oli 8

我怀疑您只是无法从运行此脚本的用户那里访问它们。查看文件所有权:

$ ls -l /var/log/{dmesg,syslog,message}
ls: cannot access /var/log/message: No such file or directory
-rw-r----- 1 root   adm 86384 Mar  9 11:12 /var/log/dmesg
-rw-r----- 1 syslog adm 18553 Mar 25 13:25 /var/log/syslog
Run Code Online (Sandbox Code Playgroud)

如果adm组中有用户,则可以读取这些文件,但无法写入。系统上的第一个用户通常是该adm组的成员,但如果您的~/Desktop副本为空,我建议您的用户不是(检查groups命令)。你有几个选择。

  • 您可以查看为您的用户添加 ACL 权限。这些与标准权限分开,向您的用户添加显式读/写访问权限并不会真正影响其他任何内容。这很好。

    sudo apt-get install acl
    sudo setfacl -m u:$USER:rw /var/log/{dmesg,syslog,message}
    
    Run Code Online (Sandbox Code Playgroud)

    这可能需要重新启动才能进行。您甚至可能需要更改 fstab。我没有,但 ACL 在这里似乎可以正常工作,所以我假设不再需要它。

  • 您可以更改文件的 unix 权限。最安全的方法是将您的用户添加到adm组中,然后在这些文件上启用组写入:

    sudo usermod -a -G adm $USER
    sudo chmod g+w /var/log/{dmesg,syslog,message}
    
    Run Code Online (Sandbox Code Playgroud)

    您需要注销并再次登录才能看到效果。

  • 或者您可以让任何人读取和写入这些文件。这可能是一个安全风险,所以我不会给你代码......但老实说,虽然可能,你可能不想要这个。

  • 另一个选项是以 root 身份运行脚本sudo ./scriptname。这样做的缺点是该脚本所做的任何事情都将以 root 身份完成。这包括创建新文件(>>如果文件不存在,则可以创建新文件),这对用户来说可能是一种痛苦。


如果这不是学术上的好奇心,而您实际上是在尝试以最佳方式完成某些工作,那么有一些工具可以为您完成这些工作,但效果更好。你真想看看logrotate。这个Digital Ocean 教程是我能快速找到的最干净的教程