2013-07-05 4 views
42

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

sudo ulimit -n 65535 

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

sudo: ulimit: command not found 

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

+1

Вопросы о ** общем вычислительном оборудовании и программном обеспечении ** не относятся к теме для переполнения стека, если они напрямую не связаны с инструментами, используемыми в основном для программирования. Вы можете получить помощь по [Unix & Linux] (http://unix.stackexchange.com). –

+0

Этот вопрос полезен для mongodb, добавил этот тег. – jcollum

+0

Новый вопрос о unix: http://unix.stackexchange.com/questions/81843/sudo-ulimit-command-not-found –

ответ

94

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

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

Чтобы сделать это, выполните команду:

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

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

+0

Незначительная настройка отлично подходит для меня: sudo sh -c "ulimit -u 1000000 && ulimit - n 100000 && exec su $ LOGNAME " – Dasmowenator

+0

Обратите внимание, что это делает один свободный env для пользователя. – user367890

0

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

Смежные вопросы