Согласно документации ядра , /proc/sys/file-max
это максимальное, общее, глобальное количество файловых дескрипторов, которое ядро выделит перед запуском. Это ограничение ядра, а не вашего текущего пользователя. Таким образом, вы можете открыть 590432 при условии, что вы один в режиме ожидания (однопользовательский режим, демоны не запущены).
Обратите внимание, что документация устарела: файл был proc/sys/fs/file-max
в течение длительного времени. Спасибо Martin Jambon за указание на это.
О разнице между мягкими и жесткими пределами можно узнать здесь, на SE . Вы можете повышать или понижать мягкое ограничение как обычный пользователь, при условии, что вы не превышаете жесткое ограничение. Вы также можете снизить жесткий лимит (но вы не можете повысить его снова для этого процесса). Как суперпользователь, вы можете поднимать и опускать как жесткие, так и мягкие ограничения. Схема двойного ограничения используется для обеспечения соблюдения системных политик, но также позволяет обычным пользователям устанавливать временные ограничения для себя, а затем изменять их.
Обратите внимание, что если вы попытаетесь снизить жесткий предел ниже мягкого (и вы не являетесь суперпользователем), вы EINVAL
вернетесь (неверный аргумент).
Итак, в вашем конкретном случае ulimit
(что совпадает с ulimit -Sf
) говорится, что у вас нет мягкого ограничения на размер файлов, записываемых оболочкой и ее подпроцессами . (это, вероятно, хорошая идея в большинстве случаев)
Ваш другой вызов ulimit -Hn
сообщает об -n
ограничении (максимальное количество дескрипторов открытых файлов), а не об -f
ограничении, поэтому мягкий предел кажется выше жесткого ограничения. Если вы войдете, ulimit -Hf
вы также получите «безлимитный».
/proc/sys/fs/file-max
.