используйте `/run/shm` (ранее `/dev/shm`) в качестве временного каталога

используйте `/run/shm` (ранее `/dev/shm`) в качестве временного каталога

Является ли хорошей практикой создание каталога в /run/shm(ранее /dev/shm) и использование его в качестве временного каталога для приложения?

Предыстория: Я пишу тесты черного ящика для программы, которая делает много всего с файлами и каталогами. Для каждого теста я создаю много файлов и каталогов, затем запускаю программу, затем создаю ожидаемый набор файлов и каталогов, а затем запускаю diff для сравнения. Сейчас у меня около 40 тестов, и они уже занимают более 2 секунд. В надежде ускорить процесс я хочу запустить тесты в каталоге на каком-то RAM-диске.

Исследуя информацию о RAM-диске, я наткнулся навопросс ответом, что можно создать каталог /dev/shmи использовать его как временный каталог. Исследуя еще немного, я наткнулся навики-страницаиз Debian, где говорится, что использовать /dev/shmнапрямую — ошибка. Мне следует использовать shm_*функции. К сожалению, shm_*функции, похоже, недоступны для использования в скрипте оболочки.

Теперь я в замешательстве. Можно или нет использовать /run/shm(ранее /dev/shm) как временный каталог?

решение1

Совершенно нормально использовать какой-либо каталог в, /runесли у вас есть соответствующие права на него. В некоторых современных дистрибутивах /tmpуже есть виртуальная файловая система в памяти или символическая ссылка на каталог внутри /run. Если это ваш случай (вы можете проверить это в /etc/fstab, или набрав mtab), вы можете использовать /tmpв качестве временного каталога.

Также не путайте со статьей из Debian. shm_*функции используются для создания сегментов общей памяти для межпроцессного взаимодействия. С помощью этих функций вы можете совместно использовать фрагмент памяти между двумя или более процессами, чтобы они могли взаимодействовать или совместно использовать одни и те же данные. Процессы имеют сегмент памяти, прикрепленный в их собственном адресном пространстве, и могут читать и писать там как обычно. Ядро занимается сложностью. Эти функции недоступны как функции оболочки (и не будут очень полезны в контексте оболочки). Для получения дополнительной информации см. man 7 shm_overview. Суть статьи в том, что ни одна программа не должна напрямую управлять псевдофайлами, представляющими общие сегменты, а вместо этого использовать соответствующие функции для создания, присоединения и удаления сегментов общей памяти.

Связанный контент