解决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 ...
随机推荐
- hdoj 3062 Party(2-SAT)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3062 思路分析:将问题转换为2-SAT问题,需要注意的是将命题转换为有向图的方法:命题中A1, A2, ...
- Request url 各种属性值
網址:http://localhost:1897/News/Press/Content.aspx/123?id=1#toc Request.ApplicationPath / Request.Phys ...
- Java多线程之非线程安全
在Java多线程中我会重点总结五个如下的技术点: 1.非线程安全是如何出现的 2.synchronized对象监视器为Objec时的使用 3.synchronized对象监视器为Class时的使用 4 ...
- 解决 win10 预览版开始菜单打不开的问题
除了该文章[http://jingyan.baidu.com/article/64d05a025d2668de55f73b9e.html]里面说的解决方法之外,我只加上一点 . 打开本机防火墙,或者调 ...
- sqm(sqlmapGUI) pcat修改版
sqlmap是一款开源的注入工具,支持几乎所有的数据库,支持get/post/cookie注入,支持错误回显注入/盲注,还有其他多种注入方法. 支持代理,指纹识别技术判断数据库 .而sqm(sqlma ...
- linux禁ping和允许ping的方法
一.系统禁止ping [root@linuxzgf ~]# echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all 二.系统允许ping [root@li ...
- 简单的java缓存实现
扫扫关注"茶爸爸"微信公众号 坚持最初的执着,从不曾有半点懈怠,为优秀而努力,为证明自己而活. 提到缓存,不得不提就是缓存算法(淘汰算法),常见算法有LRU.LFU和FIFO等算法 ...
- Selenium2使用vncserver启动firefox
web自动化测试使用Selenium2使用vncserver启动firefox 1st startup vncserver(e.g. vncserver :1). 2nd set DISPLAY(e. ...
- git 解决冲突的办法
在项目中使用git管理,冲突是在所难免的.假设没办法解决冲突,能够试试这个办法. 第一步.对project进行备份,最好是复制到其它目录中 第二步.在cmd命令栏上,进入到project文件夹下.这里 ...
- javascript得知 - js的Date对象函数
js的Date功能很强大.通常使用. 首先获得当前的日期: var CurDate = new Date(); var Year = CurDate.getFullYear(); //年份(四位 例: ...