Большую популярность на ресурсе Ask Ubuntu снискал весьма странный вопрос пользователя Linux-дистрибутива Ubuntu. По его словам, в некоторых случаях при обновлении системы с помощью sudo apt-get upgrade происходит то, чего он совсем не может ожидать: запуск игры «Dwarf Fortress». История оказалась поучительной…



Полностью вопрос Steven Vascellaro звучит следующим образом:
Когда я запускаю apt-get upgrade на своей машине с Ubuntu 17.04, иногда происходит самопроизвольный запуск Dwarf Fortress.

Это произошло уже по меньшей мере дважды, так что не похоже на какое-то разовое событие. Вдобавок, кажется, что выполнение apt-get upgrade замирает, пока я вручную не выйду из Dwarf Fortress, поэтому скорее всего такое поведение не вызвано чем-то иным, что запущено в то же время.

Консоль в этот момент выводит Unpacking xxx., где xxx — что-то с mysql в названии. Я не знаю точно, какой пакет, потому что сегодня apt-get upgrade обновлял множество пакетов, связанных с MySQL.

Хотел бы узнать, что происходит и как это предотвратить. Спасибо за ваши идеи.

Этих данных оказалось достаточно, чтобы угадать причину такого необычного поведения apt-get. Каковы же ваши идеи?

Разгадка такова…
Бинарный файл игры назван df, что соответствует первым буквам её названия. Поэтому, по первому (и не совсем верному) предположению, когда пользователю стало неудобно каждый раз вызывать её из определённого каталога с ./df, он просто добавил необходимую директорию в начало переменной окружения $PATH (т.е. с приоритетом выше, чем у /bin). Как всем известно, существует одноимённая системная утилита (df) для вывода информации о пространстве, занятом на диске. А дальше всё понятно: происходит, например, проверка (вызовом df) свободного для установки места… но приходится дожидаться окончания игры (и получать неожиданный для себя результат).

Как стало известно из второго и более правильного ответа, даже переменная $PATH не потребовалась, потому что пользователь просто переместил свой df в /usr/local/bin, приоритет у которого уже по умолчанию выше:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 17.04
Release:        17.04
Codename:       zesty
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Большое разнообразие других ответов можно почерпнуть на chat.stackexchange.com или reddit (180+ комментариев). Например:

Какой другой утилитой вы будете проверять использование диска? Dwarf Fortress — правильный инструмент для этого. Дварфы добывают новое дисковое пространство в горах. А вы думали, чем они занимаются?

Однажды я встретил игровой сервер, на котором source был алиасом для запуска сервера Counter-Strike. Из-за этого многие нормальные shell-скрипты вели себя странно.

В комментариях приветствуются описания подобных случаев из вашей богатой админской практики.

Комментарии (17)