Что происходит с данными в подкачке, когда Ваш компьютер в спящем режиме?

Это не работает, потому что перенаправление выполняется оболочкой, не командой, к которой это относится. Но Ваша оболочка не работает как корень, только echo 'text' .

Общий прием, когда у Вас должны быть корневые полномочия записать в файл, но не генерировать данные, должен использовать tee:

echo 'text' | sudo tee -a /file.txt

tee печатает текст к stdout, также. Для отключения звука его так, это ведет себя более подобное для окружения добавления (>>), направьте stdout к /dev/null:

echo 'text' | sudo tee -a /file.txt > /dev/null

Если Вы действительно должны базироваться полномочия генерировать данные, можно выполнить два отдельных sudo команды, или выполненный оболочка внутри sudo и сделайте перенаправление там (осторожный с заключением в кавычки).

sudo echo 'text' | sudo tee -a /file.txt
sudo sh -c 'echo "text" >>/file.txt'

При перезаписи вместо добавления, если Вы привыкли к своей оболочке, отказывающейся усекать существующий файл с > оператор (set -o noclobber), помните, что эта защита не будет применяться. sudo sh -c 'echo >/etc/passwd' и sudo tee /etc/passwd перезапишет /etc/passwd, Вам было бы нужно sudo sh -o noclobber -c 'echo >/etc/passwd' для этого noclobber установка, к которой также будут относиться sh запущенный sudo.

12
17.11.2010, 19:22
1 ответ

Это зависит от реализации спящего режима. Даже при ограничении вопроса Linux реализация развивалась со временем.

Во-первых, полагайте, что часть RAM используется для дисковых кэшей. Это не должно быть перемещено в подкачку, поскольку она может быть перезагружена от диска после системных резюме. В системе с хорошим балансом стоимости/эффективности это типично приблизительно для половины RAM, выделяемой кэшам. (См. также, Почему подкачка использования, когда будет более чем достаточно RAM.) В соответствии с Linux, некоторые ранние реализации сохранили бы всю выделенную память в подкачку, но текущую реализацию (s?) спящего режима пропускают дисковые кэши.

Во-вторых, некоторые системы сжимают память, как она записана в подкачку, которая может сделать точное необходимое количество из подкачки трудно для предсказания. Некоторые версии поддержки спящего режима Linux поддерживали сжатие; я не знаю, делают ли текущие.

То, что можно обычно ожидать, нет ли достаточной области подкачки, - то, что спящий режим перестанет работать: система попытается сохранить (полезное) содержание RAM в подкачку, и как только она обнаруживает, что нет достаточного количества пространства, попытка спящего режима прерывается (обычно с сообщением об ошибке на консоли и в системных журналах). Насколько я знаю, Linux всегда вел себя как это (не, что существует действительно другое разумное поведение).

11
27.01.2020, 19:56
  • 1
    я попробовал это в virtualbox машине и она перестала работать, хотя она не отобразила сообщения пользователю (я попробовал человечностью 10.4). Какому системному журналу сообщили бы об этой ошибке? –  David Oneill 17.11.2010, 19:20
  • 2
    @David: должно определенно быть что-то в /var/log/kern.log. Я не знаю, является ли отсутствие сообщения на консоли причудой этой конкретной версии ядра или преднамеренной конфигурации Ubuntu (я знаю, что они сознательно подавили некоторый другой консольный вывод). –  Gilles 'SO- stop being evil' 17.11.2010, 21:32

Теги

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