Резервное копирование для syslog / dmesg / message в другую папку

У меня есть задание, в котором мне требуется резервное копирование файлов /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

Однако он создает эти файлы на рабочем столе, но файлы сообщений и 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
1
задан 26 March 2014 в 07:24

2 ответа

У вас, скорее всего, нет прав на чтение для /var/log/{dmesg,syslog,message}. Поэтому, несмотря на то, что у вас есть файлы, созданные на вашем дестбопе, они будут пустыми, поскольку ничего не было прочитано, но попытка записи была сделана в файл (тот, который был создан на вашем рабочем столе).

Итак, у вас есть два варианта:

Получить разрешения на чтение для /var/log/{dmesg,syslog,message} следующим образом:
sudo usermod -a -G adm $USER #adm is the group name which owns /var/log/syslog
Использовать sudo для чтения (проще для разового чтения):
sudo cat /var/log/dmesg >> /home/administrator/Desktop/dmesg
4
ответ дан 24 May 2018 в 10:25

Ваша проблема заключается в следующих строках вашего скрипта:

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

Неудивительно, что это точно строки 7,8 и 9, которые жалуются на bash.

2] Эти команды пытаются удалить содержимое этих трех файлов журнала в /var/log, но поскольку они принадлежат root и у вас нет доступа на запись, вы получаете сообщение об ошибке. Хорошо! Я предполагаю, что вы не хотите очищать свои системные журналы.

Помните, что > перезаписывает содержимое файла, вам нужно >> - Good to Это. В любом случае вы никогда не должны изменять эти файлы, они используются системой, и нет абсолютно никаких причин, по которым вы захотите их перезаписать. Даже если вы это делаете, есть гораздо более простые способы сделать это, например rm file или даже просто > file.

Чистым способом сделать все это будет использование logrotate. 6]

4
ответ дан 24 May 2018 в 10:25
  • 1
    Мне нужно также очистить каждый файл журнала с помощью сценария – Zenkarus 25 March 2014 в 22:58
  • 2
    @Zenkarus действительно? Они хотят, чтобы вы пустые файлы с /var/log? Weird. Ну, используйте rm или >/var/log/filename, но запустите с sudo. Более чистым способом для всего этого будет logrotate . – terdon♦ 25 March 2014 в 23:01
  • 3
    Да, это одно из требований моего задания. Спасибо вам за помощь. – Zenkarus 27 March 2014 в 07:45

Другие вопросы по тегам:

Похожие вопросы: