У меня есть задание, в котором мне требуется резервное копирование файлов /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
У вас, скорее всего, нет прав на чтение для /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
Ваша проблема заключается в следующих строках вашего скрипта:
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]