Чому переадресація «скрипту» на / dev / null / дозволяє «екрану» працювати, коли він поданий до іншого користувача?


37

Мене подали в суд на користувача, щоб запустити певний тривалий сценарій. Я хотів скористатися екраном, але мені надійшло повідомлення про помилку "Неможливо відкрити свій термінал '/ dev / pts / 4' - перевірте."

Тож я погукав і натрапив на форум форуму, який дав вказівку запустити $ script '/dev/null/'. Я це зробив, і тоді я міг екранувати.

Чому це працює? Що робить цей екран не може працювати як користувач, що звернувся до нього? Чому перенаправлення «скрипту» на / dev / null робить те, що запобігається інакше? Чи використовується сценарій для написання журналу як початкового користувача кудись?


2
Очисник повинен запускатися suз сеансу на екрані.
justarobert

@justarobert не, якщо ви хочете, щоб кілька користувачів могли приєднатися до того самого екрану для облікового запису служби / пакетного сценарію.
Ешлі

Відповіді:


41

Ну, технічно ви тут нічого не переспрямовуєте.

Виклик script /dev/nullпросто робить scriptзберегти всю машинопис в /dev/nullякий на практиці означає відкидання вмісту.

Дивіться man scriptна детальну інформацію та Util-Linux-нг пакета для реалізації ( misc-utils/script.c).

Це фактично не має нічого спільного screen. Чому ця робота викликає scriptпобічний ефект створення псевдотерміналу для вас /dev/pts/X. Таким чином, вам не доведеться робити це самостійно, і на екрані не буде проблем з дозволом - якщо ви suвід користувача A до користувача B , безпосередньо посилаючись, screenви намагаєтеся захопити володіння псевдотерміналом користувача A. Це не вдасться, якщо ви не отримаєте корінь . Ось чому ви бачите повідомлення про помилку.


6

Для виводу безпосередньо у вікно вашого терміналу запущена програма повинна мати можливість записувати до вашого керуючого терміналу. Якщо ви використовуєте xterm або ssh або якесь інше віртуальне з'єднання (на відміну від реального прямого підключеного терміналу), ваш керуючий термінал - це псевдотис (pty).

Ваш pty налаштований з дозволом на запис лише для вас, коли ви входите в систему, інакше інші користувачі можуть писати на вашому дисплеї (або читати його). Таким чином, коли ви ставитесь до іншого користувача (а той користувач не є root), він не має доступу до базового pty.

Однак, більш складні введення / виведення, такі як екран, вимагають прямого доступу до pty, щоб це магія контролювати весь ваш екран. Ось тоді у вас виникають проблеми з особою, яка виконує команду, не має належного доступу до керуючого терміналу.

Перенаправлення сценарію на / dev / null призводить до того, що екран не намагається записати в керуючий термінал, тому він не потрапляє на проблему з дозволом.


2
Тож як я можу бачити, який екран пише, якщо він переходить до / dev / null? Я впевнений, що я неправильно зрозумів, і це насправді не переходить до / dev / null, але куди це йде?
user63623

"це", що означає вихід на екран, не йде /dev/null. По-перше: скрипт записує ваш сеанс (див. Manpage), і він вам зовсім не потрібен: так, що йде в / dev / null. Але це не має побічного ефекту: він робить псевдотермінал, і тепер ви використовуєте це, і екран може записувати на цю анверу SSee @ karol-piczak.
Нанна
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.