Резервное копирование 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
3
задан 26 March 2014 в 05:24

3 ответа

Я подозреваю, что у Вас просто нет доступа к ним от пользователя, который запускает этот скрипт. Посмотрите на принадлежности файла:

$ 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

Вы могли читать из этих файлов, если бы у Вас был пользователь в adm группа, но Вы не смогли бы записать. Первый пользователь в системе обычно является членом adm группа, но если Ваш ~/Desktop копии пусты, я предположил бы, что Ваш пользователь не (сверьтесь groups команда). У Вас действительно есть несколько опций.

  • Вы могли или посмотреть на добавление полномочий ACL для Вашего пользователя. Они являются отдельными от стандартных полномочий и добавления, что явный доступ для чтения-записи к Вашему пользователю действительно не влияет ни на что больше. Который хорош.

    sudo apt-get install acl
    sudo setfacl -m u:$USER:rw /var/log/{dmesg,syslog,message}
    

    Этому, возможно, понадобилась бы перезагрузка для взятия. Вы, возможно, даже должны были бы изменить свой fstab. Я не имею, но ACLs, кажется, работают хорошо здесь, таким образом, я предполагаю, что это больше не требуется.

  • Вы могли изменить полномочия Unix на файле. Самый безопасный способ сделать это состоял бы в том, чтобы добавить Вашего пользователя к adm группа и затем включить запись группы на тех файлах:

    sudo usermod -a -G adm $USER
    sudo chmod g+w /var/log/{dmesg,syslog,message}
    

    Необходимо будет выйти и зайти снова для наблюдения эффекта.

  • Или Вы могли позволить кому-либо читать и записать эти файлы. Это могло быть угрозой безопасности, таким образом, я не даю Вам код... Но честно, в то время как возможно, Вы, вероятно, не хотите это.

  • Другая опция просто запускает скрипт как корень с sudo ./scriptname. Оборотная сторона этого - то, что что-либо, что делает этот сценарий, будет сделано как корень. Это включает создающие новые файлы (который >> может, если файл уже не существует), и это может быть болью для пользователя.


И если это не академическое любопытство, и Вы на самом деле пытаетесь получить некоторую работу, сделанную самым лучшим способом, существуют инструменты, которые делают эти вещи для Вас, но лучше. Вы действительно хотите посмотреть на logrotate. Это Цифровое Океанское учебное руководство является самым чистым, которое я могу найти быстро.

8
ответ дан 26 March 2014 в 05:24

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

, Таким образом, у Вас есть две опции:

  1. Получают прочитанные полномочия для /var/log/{dmesg,syslog,message} следующим образом:

    sudo usermod -a -G adm $USER #adm is the group name which owns /var/log/syslog
    
  2. Использование sudo для чтения (легче для одноразового чтения):

    sudo cat /var/log/dmesg >> /home/administrator/Desktop/dmesg
    
0
ответ дан 26 March 2014 в 05:24

Вашей проблемой являются следующие строки Вашего сценария:

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

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

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

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

инструмент для очистки А способ сделать все это должно было бы использовать logrotate вместо этого.

0
ответ дан 26 March 2014 в 05:24

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

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