Псевдонимы Bash не загружаются в Debian, но в Mint они загружаются, когда sudo -s

Это то, что объединяет XNU, FreeBSD, TrueOS и OpenBSD. Невозможно снять жесткие и мягкие ограничения дескрипторов открытых файлов. Различные ядра операционной системы, хотя и различаются между собой по точному поведению, просто не позволяют устанавливать ограничения RLIMIT_NOFILES на RLIM_INFINITY с помощью функции setrlimit () .

Это полностью недокументировано во всех из них.

Недокументированное поведение заключается в том, что как мягкие, так и жесткие ограничения для сегмента данных, сегмента стека, максимального количества процессов на пользователя и максимального количества дескрипторов открытых файлов ограничиваются значениями различных sysctl переменные ядра. Детали, например, какая именно переменная ядра является пределом для каждого ограничения, варьируются от операционной системы к операционной системе.

  • В XNU привилегированные процессы не могут устанавливать ограничения дескрипторов открытых файлов выше, чем значение керна .переменная ядра maxfiles ; а непривилегированные процессы не могут устанавливать ограничения для дескрипторов открытых файлов выше, чем значение переменной ядра kern.maxfilesperproc . Вот код.
  • В FreeBSD и TrueOS процессы не могут устанавливать ограничения для дескрипторов открытых файлов выше значения переменной ядра kern.maxfilesperproc . Вот код.
  • В OpenBSD,процессы не могут устанавливать пределы дескрипторов открытых файлов выше, чем значение переменной ядра kern.maxfiles . Вот код.

Во всех шапка молчит. Вызов setrlimit () не возвращает ошибку. Он просто и незаметно устанавливает для ограничения более низкое значение, чем значение, запрошенное программой. (В XNU есть "режим POSIX", в котором возникает ошибка, если кто-то пытается поднять предел soft сверх установленного предела. Но установка предела hard , как вы это делаете, является с молчаливым ограничением, как в других операционных системах.) Если программа пытается отключить принудительное применение ограничения, в этих операционных системах вместо этого происходит то, что ограничение продолжает применяться на уровне значения ограничения.

Строго говоря, это противоречит Единой спецификации Unix, которая требует определенного поведения RLIM_INFINITY и не предусматривает молчаливого отключения этого поведения без возврата ошибки:

Указание RLIM_INFINITY , поскольку любое значение ограничения ресурсов при успешном вызове setrlimit () запрещает принудительное применение этого ограничения ресурсов.

Команда launchctl limit , как сказано в руководстве, является просто способом указания процессу launchd вызвать setrlimit () для установки своего собственного процесса. ограничения ресурсов.Итак, вы видите процесс launchd , который начинается с с неограниченным жестким ограничением на количество открытых файловых дескрипторов, а затем получает конечный предел, значение kern. maxfilesperproc , при первой попытке установить предел жестко открытого файлового дескриптора на неограниченный.

(Примерно то же самое происходит во FreeBSD / TrueOS, с жестким ограничением дескрипторов открытых файлов, когда процесс №1 начинается с высокого уровня, а программа процесса №1 явно переустанавливает жесткий предел на более низкое конечное значение.)

(На самом деле в терминале GNOME есть довольно неприятная ошибка, из-за которой он не может запускать какие-либо сеансы терминала, который может быть запущен в этих операционных системах, если происходит жесткое ограничение дескрипторов открытых файлов, которое процесс сервера терминала GNOME изначально наследует от своего родителя. быть выше, чем текущее значение kern.maxfiles / kern.maxfilesperproc . Авторы Терминала GNOME решили, что не удалось установить жесткое ограничение на то же значение, которое было Первоначальное чтение является фатальной ошибкой , без учета того факта, что терминал GNOME тем временем запускал поведение XNU / BSD, которое незаметно понижает жесткое ограничение, в результате чего их код в конечном итоге пытается поднять ] это, что является основанием для отказа д.)

10240 - это просто скомпилированное начальное значение переменной ядра kern.maxfilesperproc в XNU. Однако не все совсем так просто.При начальной загрузке системы, когда находится в «режиме производительности сервера», XNU вместо этого инициализирует эту переменную до 75000-кратного значения масштабирования .

1
08.04.2019, 09:08
1 ответ

Вам необходимо создать файл .bash_alias в правильном файле инициализации оболочки. Файл инициализации зависит от того, как запускается оболочка. И вызов его через ssh и на локальном компьютере отличается. Но затем повторный вызов с помощью sudo -s делает его одинаковым на обеих машинах, поскольку запускает интерактивную корневую оболочку без входа в систему. Но чтобы получить те же псевдонимы, вам нужны те же определения.

Если вы придерживаетесь sudo -s , достаточно указать источник вашего файла .bash_aliases в пользовательском ssh .bashrc . Так что достаточно добавить эту строку в ~ / .bashrc :

. ~/.bash_aliases

Обратите внимание, что псевдоним lll работает на вашем Mint до того, как вы sudo -s и это не будет делать этого в Debian, потому что это сеанс ssh, поэтому оболочка входа в систему, в то время как в Mint она просто интерактивна. Если вы хотите, чтобы псевдонимы были доступны прямо сейчас в ssh Debian, вам нужно будет добавить другой источник в ваш файл .profile .

Это довольно запутанно, и чтобы получить полную картину, вам нужно немного прочитать и узнать о входе в систему и интерактивных оболочках. В man bash есть все. Вы можете взглянуть на этот ответ , чтобы понять, о чем идет речь. Не пропускайте комментарии под этим ответом!

1
27.01.2020, 23:46

Теги

Похожие вопросы