解决screen Cannot open your terminal '/dev/pts/1'问题
转载于:http://urchin.blog.51cto.com/4356076/1153322
问题描述:
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 Cannot open your terminal '/dev/pts/1'问题的更多相关文章
- Cannot open your terminal '/dev/pts/4' - please check.
使用screen命令的时候出现了下面的错误 Cannot open your terminal '/dev/pts/4' - please check. 可以使用script命令来记录这个终端会话, ...
- /dev/tty 与 /dev/pts
打开3个bash会话窗口 [root@server1 fd]# cd /proc/7489/fd[root@server1 fd]# ll总用量 0lrwx------ 1 root root 6 ...
- centos单用户 救援 运行级别 yum,单用户模式,救援模式,inittab :启动级别 e2fsck wetty mingetty 物理终端 /dev/console 虚拟终端 /dev/tty(0,6) 模拟终端 /dev/pts/# grub-md5-crypt 给grub加密码 initrd 第二节课
centos单用户 救援 运行级别 yum,单用户模式,救援模式,inittab :启动级别 e2fsck wetty mingetty 物理终端 /dev/console 虚拟终端 /d ...
- 解决Homestead yarn , npm run dev, 命令报错问题!
解决Homestead yarn , npm run dev, 命令报错问题! 2018年06月01日 11:50:51 偶尔发发颠 阅读数:1654 版权声明:本文为博主原创,未经博主同意,不 ...
- 仅仅需一步教你解决Win10下Android Studio terminal无法使用的问题
Android Studio集成和加入了一些有用的工具.当中一个便是terminal. 在Windows平台下Android Studio中的terminal在原理上实际使用的是window中的cmd ...
- 解决 screen 连接不上,提示“There is no screen to be resumed matching 18352.” 的问题
当你挂起screen,下次想重新连上screen时,有时会出现screen session的状态为Attached但是却连不上的情况,比如我想重新进入session id 为18352的screen, ...
- 完美解决VMware Workstation : Could not open /dev/vmmon: No such file or directory
root@tiger:/usr/bin# cd /etc/init.d root@tiger:/usr/bin# sudo mv /usr/lib/vmware/modules/binary /usr ...
- linux下的守护进程
关于守护进程,在此会介绍一下几种: 1.screen 2.supervisord(python) 一:Screen 开始使用Screen 简单来说,Screen是一个可以在多个进程之间多路复用一个物理 ...
- in a devstack Openstack env, how to start a service, such as aodh-listener
in terminal, when start the service, the service will run in this terminal, and if kill this termina ...
随机推荐
- JAVA GUI学习 - JDialog模式、非模式窗口组件学习
/** * JDilog学习笔记 * @author Wfei * */ public class JDialogKnow extends JFrame { JDialog jDialog; JBut ...
- python下异常处理
1.python下异常如何处理: #encoding=utf-8 """ python遇到异常,程序直接运行 try: "判断有可能抛出异常的代码" ...
- python下使用protobuf
python解决ImportError: No module named google.protobuf 关于protocol buffer的优点,就过多涉及:如果涉及到数据传输和解析,使用pb会比自 ...
- 使用VS创建WebPart部件,并部署到SP(待修改)
http://www.cnblogs.com/mingmingruyuedlut/archive/2012/12/02/2789488.html
- Oracle查询数据中占用空间最大的表
--第一步,查询istaudit数据库文件ID,文件路径 select file#,name from v$datafile where lower(name) like '%istaudit.dbf ...
- thinkphp小技巧
if(IS_POST) _404("页面不存在",U("index")) //如果不是POST提交,则跳转到index.debug模 ...
- 如何查看.Net源代码vs版本号以及C#项目中各文件的含义
查看.Net源代码vs版本号以及C#项目中各文件的含义 用记事本打开vs项目的.sln文件. 第2行就是这个源代码包的开发软件vs版本号了 注意了,如果是vs2003的sln文件通常没有这行,可以判断 ...
- JS拖动DIV布局
方法一: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- Tortoisegit 记住用户名和密码
Tortoisegit 记住用户名和密码方法: [Windows系统] 当你配置好git后,在 C:\Documents and Settings\Administrator\ 目录下有一个 .gi ...
- [LeetCode]题解(python):018-4Sum
题目来源: https://leetcode.com/problems/4sum/ 题意分析: 这道题目和3Sum的题目类似,找出所有的4个数,使得这4个数等于target. 题目思路: 这道题做法和 ...