Есть способ запускать команды в Linux без кеширования результата, то есть:
nocache cat big_file.txt
Есть ли способ сделать этот режим без кеширования автоматическим? Что-то вроде глобальной настройки.
Проблема: у меня есть много скриптов от поставщиков, которые используют cp
или find
или другие стандартные команды, и я не хочу, чтобы они загромождали мой кеш.
Мне бы очень хотелось отговорить это делать, поскольку это может закончиться столь же разрушительно. По сути, теперь вы заставите намного больше ввода-вывода, что вполне может (в зависимости от вашей настройки) в конечном итоге конкурировать с mysql для ввода-вывода, что было бы так же плохо.
Если вам действительно необходимо, сделайте обертки для cp / find / etc в отдельном каталоге и сначала поместите их в PATH для среды выполнения скриптов поставщика. Т.е.
mkdir /opt/evil
echo -en "#! /bin/bash\nexec nocache /bin/cp \"\${@}\"\n" >/opt/evil/cp
chmod a+x /opt/evil/cp
# repeat for find and any other things you want to be run with nocache
export PATH=/opt/evil:${PATH}
vendor-script.sh
Кроме того, если вы используете InnoDB, IIRC выполняет собственное внутрипроцессное кэширование и не полагается (так сильно) на кеш страниц Linux.
Даже если вам не нужно об этом беспокоиться, вы можете удалить кэшированные файлы в памяти, если хотите, просто введите эту команду как root
sync && echo 3 > /proc/sys/vm/drop_caches
Вот вы можете найти больше информации.
РЕДАКТИРОВАТЬ: следуя ссылке, если вы откроете 4, Linux полностью отключит кеширование файлов, что вы ищете.
Если я правильно понимаю ссылку alphamikevictor, повторение «4» в drop_caches отключает только сообщения журнала, но не кеши.
Можно добавить псевдоним к ~ / .bashrc для различных команд. Например:
псевдоним cp = 'nocache cp'
(при условии, что ваша оболочка - это bash.)
То же самое можно поместить в /etc/bash.bashrc, чтобы повлиять на всех пользователей bash в системе.