Я читал, что перенаправление вывода в файл с фиксированным именем в /tmp
может быть угрозой безопасности, потому что, если злоумышленник (или недовольный) замечает, что файл /tmp/tmpfileformyscript.tmp
создается, когда я запускаю свой скрипт (даже если у него нет доступа на чтение к моему скрипт), например, он может создать символическую ссылку, ln -s ~wildcard/.bashrc /tmp/tmpfileformyscript.tmp
которая заставит меня уничтожить .bashrc
файл при запуске скрипта.
Так что вместо этого я могу использовать что-то вроде filename="tmpfile.tmp.$RANDOM" ; echo outputtext > "$filename"
.
Тем не менее, я хотел бы иногда использовать tmp-файл для кэширования, и в этом случае я хотел бы знать, соответствует ли tmpfile.tmp. * Что-нибудь в /tmp
этом файле, и если да, то использовать этот файл, а не создавать новый. К сожалению, test
и эквивалент [ -f filename ]
не поддерживает глобализацию файлов, насколько я могу судить.
Таким образом, мой вопрос состоит из двух частей:
- Как я могу безопасно создать временный файл? Это
"predictablename.$RANDOM"
приемлемая практика или есть лучший (более безопасный, простой) способ? - Как я могу легко получить доступ к файлу и / или установить его существование позже, проверяя
predictablename
?
источник
$TMPDIR
и~/.cache
это именно то, что мне нужно. После некоторых дальнейших размышлений я понял, что единственная причина, по которой я хотел этого, - это/tmp
разбиение на разделы - чтобы кеш не мог заполнить/home
раздел. Но для этого варианта использования это действительно не проблема, поэтому подкаталог полностью~/.cache
соответствует моим потребностям и позволяет избежать проблем с безопасностью.mktemp
недоступно в AIX или в оболочке Git в Windows. Похоже,file.$RANDOM$RANDOM
это портативное решение.$RANDOM$RANDOM
Должно увеличить пространство до 2 ^ 32, предполагая Баш случайных результаты являются независимыми и не слабыми.mktemp был разработан для этого. Со страницы руководства:
mktemp создаст файл или выйдет с ненулевым статусом выхода. Логическое или (||) гарантирует, что скрипт завершится, если mktemp не сможет создать файл. После этой команды вы можете быть уверены, что файл доступен. Нет необходимости проверять это снова. Единственное, что вам может понадобиться добавить - это очистка файла в конце вашего скрипта.
И, возможно, также, когда сценарий завершается сигналом. Нужно это или нет - это то, что вы должны решить.
И то, и другое можно сделать с помощью
trap
команды.источник
$RANDOM
. Но затем часть 2 моего вопроса - как я могу получить доступ к этому файлу позже или проверить, существует ли он уже при последующем запуске сценария? (Для реализации очень простого кэша.)