Mengapa pengalihan 'skrip' ke / dev / null / memungkinkan 'layar' bekerja sementara dituntut sebagai pengguna lain?

37

Saya dituntut menjadi pengguna untuk menjalankan skrip berjalan lama tertentu. Saya ingin menggunakan layar tetapi saya mendapat pesan kesalahan "Tidak dapat membuka terminal Anda '/ dev / pts / 4' - silakan periksa."

Jadi saya mencari di Google dan menemukan posting forum yang diperintahkan untuk dijalankan $ script '/dev/null/'. Saya melakukannya dan kemudian saya bisa menyaring.

Mengapa ini bekerja? Apa yang su lakukan sehingga layar tidak dapat berjalan sebagai pengguna yang dituntut? Mengapa mengarahkan ulang 'skrip' ke / dev / null melakukan hal yang dicegah? Apakah menggunakan skrip untuk menulis log sebagai pengguna asli ke suatu tempat?

Ichorus
sumber
2
Cleaner akan dijalankan sudari dalam sesi layar.
justarobert
@ hanya tidak, jika Anda ingin beberapa pengguna dapat melampirkan ke layar yang sama untuk akun yang menjalankan layanan / batch-script.
Ashley

Jawaban:

41

Nah, secara teknis Anda tidak mengarahkan apa pun di sini.

Memanggil script /dev/nullhanya membuat scriptsave seluruh naskah dalam /dev/nullyang dalam prakteknya berarti membuang isinya.

Lihat man scriptuntuk detail info dan paket util-linux-ng untuk implementasi ( misc-utils/script.c).

screenSebenarnya ini tidak ada hubungannya . Mengapa ini bekerja memohon scriptmemiliki efek samping membuat pseudo-terminal untuk Anda di /dev/pts/X. Dengan cara ini Anda tidak harus melakukannya sendiri, dan layar tidak akan memiliki masalah izin - jika Anda sudari pengguna A ke pengguna B , dengan secara langsung memohon screenAnda mencoba mengambil kepemilikan terminal pseudo pengguna A. Ini tidak akan berhasil kecuali Anda root . Itu sebabnya Anda melihat pesan kesalahan.

Karol J. Piczak
sumber
6

Untuk mengeluarkan langsung ke jendela terminal Anda, program yang berjalan harus dapat menulis ke terminal pengendali Anda. Jika Anda menggunakan xterm atau ssh atau koneksi virtual lainnya (bukan terminal langsung yang terhubung langsung) terminal pengendali Anda adalah pseudo tty (pty).

Kaset Anda diatur dengan izin tertulis hanya untuk Anda saat Anda masuk, jika tidak, pengguna lain dapat mencoret-coret layar Anda (atau membacanya). Jadi ketika Anda su ke pengguna lain (dan pengguna itu bukan root), pengguna itu tidak memiliki akses ke pty yang mendasarinya.

Namun, I / O yang lebih kompleks seperti layar memerlukan akses langsung ke pty untuk bekerja, ini ajaib untuk mengendalikan seluruh layar Anda. Saat itulah Anda mengalami masalah dengan orang yang menjalankan perintah tidak memiliki akses yang tepat ke terminal pengendali.

Mengarahkan skrip ke / dev / null menyebabkan layar tidak mencoba menulis ke terminal pengendali, sehingga tidak mengenai masalah izin.

Phil Hollenback
sumber
2
Jadi bagaimana saya bisa melihat layar apa yang menulis jika masuk ke / dev / null? Saya cukup yakin saya salah paham dan tidak benar-benar pergi ke / dev / null, tapi kemana perginya?
user63623
"it", artinya keluaran layar, tidak masuk ke /dev/null. Pertama: naskah mencatat sesi Anda (lihat manual ini), dan Anda tidak perlu sama sekali: sehingga yang masuk ke / dev / null. Tapi itu tidak memiliki efek samping: itu membuat terminal semu, dan sekarang Anda menggunakan ini, dan layar dapat menulis ke yang satu ini.
Nanne