Команда не найдена при использовании sudo ulimit
Я использовал ubuntu 12.04, на котором я запускал ulimit -n, он показывает 1024,
Я хочу увеличить лимит открытого файла с 1024 до 65535, поэтому я попробовал следующую команду:
sudo ulimit -n 65535
но я получаю следующую ошибку:
sudo: ulimit: command not found
Как увеличить ограничение файла с 1024 до 65535? Любая помощь будет оценена.
Ответы
Ответ 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.