Подтвердить что ты не робот

Команда не найдена при использовании sudo ulimit

Я использовал ubuntu 12.04, на котором я запускал ulimit -n, он показывает 1024, Я хочу увеличить лимит открытого файла с 1024 до 65535, поэтому я попробовал следующую команду:

sudo ulimit -n 65535

но я получаю следующую ошибку:

sudo: ulimit: command not found

Как увеличить ограничение файла с 1024 до 65535? Любая помощь будет оценена.

4b9b3361

Ответ 1

ulimit - это оболочка, встроенная как cd, а не отдельная программа. sudo ищет исполняемый файл, но нет ulimit двоичного кода, поэтому вы получаете сообщение об ошибке. Вам нужно запустить его в оболочке.

Однако, хотя вам нужно быть root, чтобы повысить лимит до 65535, вы, вероятно, не хотите запускать свою программу как root. Поэтому после того, как вы поднимете лимит, вы должны вернуться к текущему пользователю.

Для этого запустите:

sudo sh -c "ulimit -n 65535 && exec su $LOGNAME"

и вы получите новую оболочку без привилегий root, но с повышенным лимитом. exec заставляет новую оболочку заменять процесс привилегиями sudo, поэтому после выхода из этой оболочки вы случайно не станете снова root.

Ответ 2

Мне приходилось иметь дело с такими проблемами в прошлом. Поскольку нет механизма setuid для сценариев оболочки (потому что это небезопасно), я обнаружил, что писать простой C-обертку с помощью setuid достаточно, а затем использовать системный вызов для изменения ulimits запущенного процесса до удаления привилегий и выполнения вашей оболочки script.