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