Если необходимо записать некоторые временные файлы, которые только длятся пока сценарий, или приложение работает, используйте каталог, обозначенный TMPDIR
переменная среды, или если та переменная не определяется, /tmp
.
/tmp
очищен во время начальной загрузки в некоторых системах (иногда, это находится даже в RAM, например, по умолчанию на Солярисе, и на некоторых установках Linux), таким образом, это не может использоваться для файлов, которые должны пережить сбой питания или перезагрузку. /var/tmp
может использоваться для файлов, которые должны пережить перезагрузку, но это может время от времени чиститься системным администратором. Если Ваше приложение должно сохранить файлы на постоянной основе, запишите им где-нибудь в корневом каталоге пользователя (в ~/.programmingnoobsapp
или ~/.cache/programmingnoobsapp
) или под /var/lib/programmingnoobsapp
или /var/cache/programmingnoobsapp
.
Отметьте это /tmp
совместно используется всеми пользователями, таким образом, необходимо принять меры предосторожности при создании файла там. Необходимо выбрать имя файла, которое еще не существует, и необходимо бояться позволять состояние состязания, где другой процесс создает файл перед Вами с различными полномочиями, которые могли быть дырой в системе безопасности (если другой процесс работает как другой пользователь, это могло бы затем получить доступ и изменить данные Вашего процесса). Используйте mktemp
команда для создания файла в /tmp
или /var/tmp
. По умолчанию, mktemp
создает файл в $TMPDIR
, или /tmp
если TMPDIR
сброшен, который обычно является правильным местом. Если необходимо использовать несколько временных файлов, или даже если Вам нужен единственный, я рекомендую создать каталог для всех Ваших временных файлов с mktemp -d
и удаление его в конце Вашего сценария.
#!/bin/sh
tmp_root=
trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP
tmp_root=$(mktemp -d)
tmpfile1=$tmp_root/file1
tmpfile2=$tmp_root/file2
…
Самое простое исправление - это загрузка с Live CD, затем монтирование локального диска и редактирование или возврат к старому файлу sudoers
.
Загрузка с живого CD
Найдите свой раздел /
. Откройте терминал и запустите lsblk
или sudo fdisk -l
или blkid
и определите ваш корневой (/
) раздел. Для данного примера, я буду считать, что это /dev/sda1
.
Разместите ваш корневой раздел во временное место
sudo mkdir /foo.
sudo mount /dev/sda /foo
Теперь, когда раздел смонтирован, проверьте каталог /foo/etc
. Вероятно, у вас есть файл с именем /etc/sudoers~
, который является резервной копией файла sudoers
. Если да, то это, вероятно, решит все проблемы:
sudo cp /foo/etc/sudoers~ /foo/etc/sudoers
Если это не сработает, просто отредактируйте файл и верните изменения как можно лучше (или добавьте его в свой вопрос, и мы поможем вам с ним справиться). Если вы ввели строки с синтаксической ошибкой, удалите их или прокомментируйте, добавив #
в начале. Если вы удалили строку, которая дала вам sudo полномочия, вероятно, это было так (где sudo
- это группа, в которой находится ваш пользователь, т.е. ваше имя пользователя упоминается в строке в /etc/group
, которая начинается с sudo:
)
%sudo ALL=(ALL:ALL) ALL
Вытащите компакт-диск и перезагрузитесь.