解決screen問題

2021-09-01 19:38:50 字數 2230 閱讀 6165

解決screen cannot open your terminal '/dev/pts/1』問題

問題描述:

usera首先登入系統,使用screen開啟了乙個session,然後detach這個視窗。

userb然後登入系統,通過su - usera 變成usera,然後使用screen -r 恢復之前detached視窗,這時系統報如下錯誤:

cannot open your terminal '/dev/pts/1' - please check.

解決方法:

userb在 su - usera以後,執行如下命令即可:

script /dev/null

注意: 有人提到 chmod 777 /dev/pts/1,這麼幹的人真是誤人子弟,雖然這麼做的確能解決這個問題,但是會帶來極大的安全問題!!!

為什麼這條命令能解決問題?

一般人看到上面這裡估計就馬上回去試驗了,但是,等等,你不想知道為什麼這個命令會有作用嗎?它是怎麼起作用的呢?

我們來過一遍整個的操作步驟:

首先,usera登入到系統中,我們使用tty命令檢視一下分配給他的tty,然後看一下這個tty的許可權,然後使用者執行screen命令。

usera@localhost ~ $ ssh usera@remotehost

usera@remotehost ~ $ tty

/dev/pts/1

usera@remotehost ~ $ ls -l /dev/pts/1

crw--w---- 1 usera tty 136, 1 2011-01-09 20:14 /dev/pts/1

usera@remotehost ~ $ screen

我們觀察上邊的輸出,發現usera對於/dev/pts/1具有讀寫許可權,它所在組成員對這個tty具有寫許可權,其他使用者不能訪問這個tty。

然後,userb也登入到系統中,同樣我們使用tty命令檢視一下分配給他的tty,然後看一下這個tty的許可權

userb@localhost ~ $ ssh userb@remotehost

userb@remotehost ~ $ tty

/dev/pts/2

userb@remotehost ~ $ ls -l /dev/pts/2

crw–w---- 1 userb tty 136, 2 2011-01-09 20:20 /dev/pts/2

觀察輸出,userb被分配了/dev/pts/2,也是對於/dev/pts/2具有讀寫許可權,它所在組成員對這個tty具有寫許可權,其他使用者不能訪問這個tty。

然後userb通過su - usera命令變成usera,同樣我們使用tty命令檢視一下分配給他的tty,然後看一下這個tty的許可權

userb@remotehost ~ $ sudo su - usera

[sudo] password for userb:

usera@remotehost ~ $ tty

/dev/pts/2

usera@remotehost ~ $ ls -l /dev/pts/2

crw--w---- 1 userb tty 136, 2 2011-01-09 20:20 /dev/pts/2

aha!! 注意了,我們看到雖然userb已經變成了usera,但是他所使用的tty並沒有改變,仍然是/dev/pts/2。這就是為什麼執行screen命令會報錯的原因了,因為所有命令此時是使用usera帳戶執行的,但是/dev/pts/2的讀寫許可權屬於userb,所以所有試圖控制/dev/pts/2的訪問都被拒絕了!

那麼我們接下來看一下 script /dev/null做了些什麼,使得screen命令能執行呢?

usera@remotehost ~ $ script /dev/null

script started, file is /dev/null

usera@remotehost ~ $ tty

/dev/pts/3

usera@remotehost ~ $ ls -l /dev/pts/3

crw--w---- 1 usera tty 136, 3 2011-01-09 20:36 /dev/pts/3

aha!!! 看到了嗎?我們實際上是得到了乙個新的tty —> /dev/pts/3,因此screen命令能夠執行了,因為 /dev/pts/3這個tty的所有者是usera!

關於screen的乙個問題

這幾天在linux伺服器上跑程式。在perl 檔案中,會相繼呼叫幾個system產生子程序。example.pl chdir home system perl 1.pl system perl 2.pl system perl 3.pl 比如用screen跑著example.pl中的1.pl。我現在...

screen簡單使用

screen可以在乙個物理終端上模擬出多個視窗。最重要的是,可以掛起這些視窗。這樣的話關掉正在執行程式的視窗就變成了可能。1.新建乙個視窗,鍵入命令 screen 這樣就新建了乙個視窗,可以像普通的終端一樣使用。需要退出這個視窗的話可以執行exit命令。視窗是可以巢狀建立的,如果是多層視窗,退出後將...

screen命令整理

screen可以看作視窗管理器的命令列版本,因為它是執行在乙個 linux 終端上。在 screen 中啟動的每乙個會話都有乙個 id。可以切換。它的特性 1 可恢復 在遠端登入 linux 的時候,如果終端長時間沒有動作會被機器強制斷線,一旦終端的通訊中斷,那麼這個會話上的所有內容都會丟失。在 s...