Меня уговорили запустить конкретный долго работающий скрипт. Я хотел использовать screen, но получил сообщение об ошибке «Не удается открыть терминал '/ dev / pts / 4' - проверьте».
Итак, я погуглил и наткнулся на сообщение на форуме, в котором предлагалось запустить $ script '/dev/null/'
. Я так и сделал, и тогда я смог отсеять.
Почему это работает? Что делает su, что экран не может работать от имени пользователя su'ed? Почему перенаправление «скрипта» на / dev / null предотвращается в противном случае? Использует ли он сценарий для записи журнала в качестве исходного пользователя?
Ну, технически вы здесь ничего не перенаправляете.
Вызов script /dev/null
просто делает script
спасти все машинопись в /dev/null
что на практике означает отказ от содержимого.
Видеть man script
для подробной информации и util-linux-ng пакет для внедрения (misc-utils/script.c
).
Это не имеет ничего общего с screen
фактически. Почему это работает, вызывает script
имеет побочный эффект создания для вас псевдотерминала на /dev/pts/X
. Таким образом, вам не придется делать это самостоятельно, и у экрана не будет проблем с разрешениями - если вы su
от пользователя А пользователю B, напрямую вызывая screen
вы пытаетесь завладеть пользователем Апсевдотерминал. Это не удастся, если вы корень. Вот почему вы видите сообщение об ошибке.
Для вывода непосредственно в окно вашего терминала запущенная программа должна иметь возможность писать в ваш управляющий терминал. Если вы используете xterm или ssh или какое-либо другое виртуальное соединение (в отличие от реального живого напрямую подключенного терминала), вашим управляющим терминалом является псевдо tty (pty).
Ваш pty настроен с разрешением на запись только для вас, когда вы входите в систему, в противном случае другие пользователи могут рисовать на вашем дисплее (или читать его). Таким образом, когда вы выполняете su другому пользователю (и этот пользователь не является root), этот пользователь не имеет доступа к базовому pty.
Однако более сложный ввод-вывод, такой как экран, требует прямого доступа к pty, чтобы управлять всем экраном. Это когда вы сталкиваетесь с проблемами, когда человек, выполняющий команду, не имеет надлежащего доступа к управляющему терминалу.
Перенаправление скрипта на / dev / null заставляет screen не пытаться писать на управляющий терминал, поэтому проблема с разрешением не возникает.