Вы можете изменить свой скрипт и использовать grep
и либо readlink
, либо realpath
для извлечения файлов в нужный подкаталог, например.:
for z in /usr/local/bin/*
do
if [ -h "${z}" ] && readlink -f "${z}" | grep -q '^/home/Steven'
then rm "${z}"
fi
done
Команда readlink -f
возвращает полный путь к файлу, на который указывает символическая ссылка. Команда grep -q '^/home/Steven'
возвращает значение true, если путь начинается с подстроки '/home/Steven', и значение false в противном случае.
Слово предостережения :здесь есть некоторая двусмысленность, связанная с символическими ссылками, которая может повлиять на результат. Команда readlink -f
будет рекурсивно разрешать ссылку, поэтому приведенная выше команда завершится ошибкой, если файл в каталоге /home/Steven
сам по себе является точкой символической ссылки за пределами этого каталога. Если это нежелательное поведение, вы можете вместо этого использовать команду realpath
.
Краткий ответ:Используйте параметры сброса монтирования при монтировании файловых систем или включении подкачки, созданной на устройствах Zram.
Расширенный:При монтировании файловой системы используйте discard
в качестве опции монтирования, вы можете установить опции монтирования с помощью -o
и опции, разделенные ,
, без пробела между ними. Он должен поддерживаться в большинстве файловых систем Linux, я использую его в Btrfs. При обмене используйте -d
при использовании swapon
. Вы также можете в дополнение к этому периодически запускать fstrim
в каталоге, в котором смонтирована файловая система, но из того, что я видел в выводе zramctl
, в этом нет необходимости, и параметр монтирования discard
достаточно хорошо.
Редактировать:На самом деле, после некоторых дополнительных тестов я думаю, что неплохо периодически запускать fstrim
на монтировании Zram. После компиляции Firefox с его каталогом сборки в Zram было использовано около 1,1 ГБ ОЗУ. Не так плохо, как без варианта крепления discard
, но есть возможности для улучшения. Запуск fstrim
на монтировании Zram (, запуск которого занял всего пару секунд ), привел к тому, что использование ОЗУ увеличилось до 400 МБ, что является нормальным. Я бы, вероятно, поместил его в задание cron или после компиляции portage.
Объяснение:Когда файлы удаляются, Zram не удаляет сжатые страницы из памяти, потому что он не уведомляется о том, что пространство больше не используется для данных. Опция discard выполняет сброс при удалении файла. Если вы используете опцию сброса монтирования, Zram будет уведомлен о неиспользуемых страницах и соответствующим образом изменит их размер.