[实践Ok]如果会话窗口被kill,状态转为dead无法连接,可以使用screen -wipe命令清除会话窗口。开机启动screen并在后台运行其他程序,linux screen 命令详解配合tcpdump更好用,bg命令挂起后如何脱离终端继续运行之disown -a,一个终端时得使用它,Gaston爱用。接合vi分屏更棒。screen建立新窗口时更改窗口尺寸。

jackxiang 2008-12-17 20:52 | |
如果会话窗口被kill,状态转为dead无法连接,可以使用screen -wipe命令清除会话窗口:


开机启动screen并在后台运行其他程序:
目的:开机启动后能看到输出日志,方便调试代码:

cat /home/irdcops/shell/starteasyswoole/start.sh



测试执行:
chmod a+x /home/irdcops/shell/starteasyswoole/start.sh
sh /home/irdcops/shell/starteasyswoole/start.sh
#screen  -ls
        3573.easyswoole (Detached)
screen -x 3573


放到开机启动:
vi /etc/rc.local
#开机启动easyswoole
sh /home/irdcops/shell/starteasyswoole/start.sh

screen建立新窗口时更改窗口尺寸:
CentOS 下禁止screen建立新窗口

实践OK来自:https://blog.csdn.net/zbuter/article/details/79520721

时更改窗口尺寸

Xshell或Putty之类的连接到Centos下使用screen时会改变窗口的尺寸,非常烦人,可以通过如下方法修改使其不更改窗口尺寸。

编辑/etc/screenrc或~/.screenrc 加入下面的代码

# Change the xterm initialization string from is2=\E[!p\E[?3;4l\E[4l\E>  
# (This fixes the "Aborted because of window size change" konsole symptoms found  
#  in bug #134198)
termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

来自: https://www.linuxidc.com/Linux/2015-12/126193.htm


screen中rz/sz无效?貌似无解。参考 https://www.wikivs.com/wiki/screen_vs_tmux ,zmodem transfers是screen only的功能。
Sz 卡死怎么办?杀死它:        ps aux|grep screen |grep -v grep|awk '{print "kill -9 " $2}'|sh
安装:
CentOS下安装screen:yum install screen

0、创建screen会话:
screen -S wordname

1、查看当前全部的 screen :
$screen -ls
会显示下面的信息:
[root@localhost uploadPythonTest]# screen -ls
There are screens on:
        20893.test      (Attached)
        21055.jack      (Attached)
其中每一条最前面的就是 screen 的 id

2、连接到 detached 的 screen :
$screen -r 1542  //只能一个终端连接,可以用screen -x test (会话名:如果忘记或者刚开始没有指定会话名,执行screen -ls列出当前的会话列表;),或screen -x 20893观看,事家证明观看终端也能修改,只要一个观看终端用exit退出,其它都灰飞烟灭了。如下:
[root@localhost uploadPythonTest]# screen -ls
There are screens on:
        20893.test      (Attached)
        21055.jack      (Attached)
特殊情况:
[root@iZ25dcp92ckZ multepoolserver]# screen -ls
There are screens on:
        15141.swoole    (Detached)
        2470.swoole     (Detached)
        29718.pts-1.iZ25dcp92ckZ        (Detached)
[root@iZ25dcp92ckZ multepoolserver]# screen -x 15141.swoole  //不能只写:screen -x swoole,因为两个一样的,只是编号不一样,要么写:screen -x 15141也成。screen -r 也是一样的道理。


两人时实看到对方的操作的话可以用 screen命令 相同用户一个再终端输入screen 另一个输入screen -x 然后你们每个人的操作都可以看到对方。
screen -x  jack       或:  screen -x  21055

3、暂时离开从 screen 中退出(但不关闭 screen 进程):
按 Ctrl-A-D,暂时离开,保留screen会话中的任务或程序,当需要临时离开时(会话中的程序不会关闭,仍在运行)可以用快捷键Ctrl+a d(即按住Ctrl,依次再按a,d)

4.恢复会话,恢复screen会话:
当回来时可以再执行执行:screen -r wordname 即可恢复到离开前创建的lnmp会话的工作界面。
如果忘记或者刚开始没有指定会话名,执行screen -ls列出当前的会话列表;

screen -d -r yourname -> 结束当前session并回到yourname这个session
screen -d -r swooleHello //不是在screen或screen里可以直接跳转到另一个screen
5、关闭screen会话:
执行:exit  ,实践发现:无论用screen -x test多少个terminal进行同时操作演示,一旦任意有一个退出,整个就退了了。不想退出得按ctrl + a +d挂起继续干其它事情。

6、远程演示:

首先在服务器上执行screen -S test创建一个screen的会话,观众可以链接到 远程服务器执行screen -x test 这样观众的屏幕上就会出现和演示者同步的内容。

7、常用的快捷键

Ctrl + a c 在当前screen会话中创建窗口
Ctrl + a w 窗口列表
Ctrl + a n 下一个窗口
Ctrl + a p 上一个窗口
Ctrl + a 0-9 在第0个窗口和第9个窗口之间切换
______________________________________________________
Linux让程序后台运行命令之screen与nohup:
http://www.2cto.com/os/201110/109458.html

Linux Screen 超简单用法:
http://www.cnblogs.com/biggates/archive/2013/01/30/2883164.html
______________________________________________________
===Gaston:
ctrl+a c 创建scree
ctrl+a p  上一个scree
ctrl+a n 下一个scree

===
检查是否在screen中:tty
结果应该为:/dev/pts/0
退出:Ctrl+a+d
===
Linux结束screen进程:
linux screen 全部退出 -- 脚本

来自:http://blog.csdn.net/lucktroy/article/details/7704115

以下是自己实践Ok的:
----------------------------------------------------------------------------------------------------------------------
以下都是在screen里面才能有效的快捷键【ctrl-a】:
首先进入scree里后:也就是如输入screen后,如:screen -S jackxiang ,下面的快捷键才能用。
Ctrl-a c              新建 bash screen 终端  【这个也很有用】
Ctrl-a "              列出 【这个最有用,可以列出来选】
Ctrl-a A             重命名  【这个可以用来做一个终端开发时用,结合上面的Ctrl-a "   很好用】
Ctrl-d                 退出当前的screen,如果没有进入screen,该命令失效



进而可以替代上面的 Ctrl-a "  命令,实现快速切换的功能,实践是Ok的。(来自:gastonwu):
ctrl+a c 创建scree
ctrl+a p  上一个scree
ctrl+a n 下一个scree

screen -S name  以name命名的会话  【 这个在一开始就拿好名也会用到】
screen -r name/ID //回到名称为name的会话  【实践有些问题,可能是没用好?这个是用来做一些自己前面自己命名好的name返回】
screen -d -r //可以把一个正在运行的会话抢过来   这种情况是在两人都有用screen的情况下打劫
----------------------------------------------------------------------------------------------------------------------


安装完成后可以直接使用screen相关命令操作
1)screen -ls //列出当前有哪些Screen在运行
2)screen -S name //以name命名的会话
3)screen -r name/ID //回到名称为name的会话
4)
[root@test ~]# screen -ls
抢会话: 2542编号
screen -d -r 2542
抢后: 变为attached
screen -ls
There are screens on:
2542.pts-0.localhost    (Attached)
2728.name       (Attached)


screen -S  jackxiang
screen -ls jackxiang这个自己命名的会话出来了
There are screens on:
2542.pts-0.localhost    (Attached)
2728.name       (Attached)
2851.jackxiang  (Attached)

从另一个终端把这个jackxiang抢过来:
screen -d -r jackxiang //这时这个会话给我抢了,被抢的终端显示:[remote detached],并退出。

tty看下:
root@192.168.137.128:~# tty
/dev/pts/10
Ctrl-a S 新建水平分割窗口(大写S,用shift+s写大写,测试Ok)
Ctrl-a Tab 切换窗口 (测试Ok)
---------------------------------------------------------------------------------------------------------------------------------
比如centos32位的,可以执行以下命令安装:
yum install screen

其实就是虚拟终端,你可以用它创建很多虚拟终端,每个终端可以创建1~10个窗口,每个窗口相当于一个linux shell窗口,可以执行的操作和正常shell完全一样。
终端中的窗口操作】(挂载某个终端)
Ctrl-a c         新建 bash screen 终端
Ctrl-a "         列出
Ctrl-a A         重命名
Ctrl-a n         在当前窗口中切换到下一个 screen 终端
Ctrl-a p         在当前窗口中切换到上一个 screen 终端  
Ctrl-a 空格      窗口切换
Ctrl+a w :窗口列表
Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换
Ctrl+a K(大写) :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)
exit :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)
来自:http://hi.baidu.com/willor/item/3b60db19132035fd65eabfab

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下来自:http://blog.hackroad.com/read.php/573.htm
代码:Ctrl-a c 新建 bash screen 终端
Ctrl-a " 列出
Ctrl-a A 重命名
Ctrl-a n 在当前窗口中切换到下一个 screen 终端
Ctrl-a p 在当前窗口中切换到上一个 screen 终端

Ctrl-a d 断开所有 screen 终端,返回 screen 执行前状态,但 screen 内所有终端的任务都在执行
screen -ls 列出当前用户的所有 screen 实例,包括联接和断开的
screen -R 重新联接到已断开的 screen 实例,如果有多个已断开的 screen 实例,则用 区分

Ctrl-a 进入选择模式
或 Ctrl-u 光标上移一页
或 Ctrl-d 光标下移一页
或 h 光标左移一格
或 j 光标下移一行
或 k 光标上移一行
或 l 光标右移一格
选择开始,选择结束
退出选择模式
Ctrl-a ] 粘贴选择的内容
----------------------------------------------------------------------------------------------------------------------
如果你没有安装有screen,可以到以下网站搜索适合你的系统的RPM包。
http://www.rpmfind.net/linux/rpm2html/search.php?query=screen
我是6.3能找到如下centos的东东,并下载安装是Ok的:
CentOS 6.3 for x86_64  screen-4.0.3-16.el6.x86_64.rpm
CentOS 6.4 for i386  screen-4.0.3-16.el6.i686.rpm
CentOS 6.3 for i386  screen-4.0.3-16.el6.i686.rpm
CentOS 6.4 for x86_64  screen-4.0.3-16.el6.x86_64.rpm

----------------------------------------------------------------------------------------------------------------------
Screen 用法:
#screen
进入新的终端,然后:ctrl+a+p  回到前终端,再:ctrl+a+n到当前运行screen后的终端。
#screen -ls
参考终端情况, 26889.pts-7.vm19        (Detached)
通过:
screen -r 26889;
wget *.iso 很大
关掉终端!

[xiangdong2@vm19 ~]$ screen -ls
There is a screen on:
        26889.pts-7.vm19        (Detached)
1 Socket in /var/run/screen/S-xiangdong2.


screen -r 26889

exit推出挂起的screen...



作用:可以在不同tty之间共享

1. 安装rpm包

查询是否有相关安装包:yum search screen

安装:yum install screen.i386

2. 创建窗口:screen

3. 检查是否在screen中:tty

结果应该为:/dev/pts/0

4. 退出:Ctrl+a+d

5. 查看screen编号:screen -ls

6. 再进入screen:screen -r screen名字

7. 关闭screen:Ctrl+d

---------------------------------------------------------------------------------------------------------------------------------------------
功能说明:

使用telnet或SSH远程登录linux时,如果连接非正常中断,重新连接时,系统将开一个新的session,无法恢复原来的 session.screen命令可以解决这个问题。Screen工具是一个终端多路转接器,在本质上,这意味着你能够使用一个单一的终端窗口运行多终端的应用。

语  法:

screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

补充说明:

screen为多重视窗管理程序。此处所谓的视窗,是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时,才有可能用到screen程序。

参  数:

-A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业离线。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或--list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

常用screen参数:

screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。

C-a ? -> Help,显示简单说明
C-a c -> Create,开启新的 window
C-a n -> Next,切换到下个 window
C-a p -> Previous,前一个 window
C-a 0..9 -> 切换到第 0..9 个window
Ctrl+a [Space] -> 由視窗0循序換到視窗9
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里    每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令則可回去。
C-a w -> Windows,列出已开启的 windows 有那些
C-a t -> Time,显示当前时间,和系统的 load
C-a K -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
    C-b Backward,PageUp
    C-f Forward,PageDown
    H(大写) High,将光标移至左上角
    L Low,将光标移至左下角
    0 移到行首
    $ 行末
    w forward one word,以字为单位往前移
    b backward one word,以字为单位往后移
    Space 第一次按为标记区起点,第二次按为终点
    Esc 结束 copy mode
C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上

A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
#tcpdump host 210.27.48.1
B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用   括号时,一定要
#tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )
C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 210.27.48.1
--EOF

tcpdump host 172.25.*.70  and 172.*.*.30


监听某个端口:
tcpdump tcp port 8080


TCPdump文章:
http://blog.chinaunix.net/u/3477/article_17655.html



让Linux终端中执行的程序在后台运行:
http://soft.chinabyte.com/os/379/12244379.shtml
摘录:
 注:本文试验环境为Red Hat Enterprise Linux AS release 4 (Nahant Update 5),shell为/bin/bash,不同的OS和shell可能命令有些不一样。例如AIX的ksh,没有disown,但是可以使用nohup -p PID来获得disown同样的效果。

  还有一种更加强大的方式是使用screen,首先创建一个断开模式的虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令需要在后台连续执行的时候比较方便:

  $ screen -dmS screen_test

  $ screen -list

  There is a screen on:

  27963.screen_test (Detached)

  1 Socket in /tmp/uscreens/S-jiangfeng.

  $ screen -r screen_test

_______________这个命令的优点在哪?作一些后台短时间调试代码比nohup好用,但一旦调好,nohup可以接手了__________________
【宗师】疾风XX(6752717XX)  15:05:45
上午用花生壳远程登录下载源码...因为网络不稳定,终端掉线,白弄了,卡死了一堆的进程,最终只好重启,远程长时间操作还是加nohup前缀比较保险
【宗师】縌迗涳爧(121953328)  15:06:00
screen
【宗师】疾风XX(6752717XX)  15:06:20
没装
就用nohup吧
【宗师】疾风XX(6752717XX)  15:07:20
用screen可以把掉线的终端重新连上吗...?
我用w命令可以看到
【宗师】縌迗涳爧(121953328)  15:07:50
可以
【宗师】疾风XX(6752717XX)  15:08:30
,那我装一个试试
【少侠】MercurXXX(827201XXX)  15:08:48
nohub是什么
【宗师】疾风XX(6752717XX)  15:08:57
系统默认没有这个,我就没有下载了,nohup
【少侠】MercurXXX(827201XXX)  15:09:36

明白了
【宗师】疾风XX(6752717XX)  15:09:50
将前台命令调入转入后台由init调用,这样终端logout时,命令不会退出
【宗师】疾风XX(6752717XX)  15:10:58
缺点是一旦调入后台,除非它运行完,或者被kill,中途无法再进行操作
【宗师】縌迗涳爧(121953328)  15:11:24
screen可以完美解决
甚至可以多个终端操作一个窗口
【宗师】疾风XX(6752717XX)  15:12:39
嗯,正在看手册...
【宗师】疾风XX(6752717XX)  15:14:41
是比nohup好用




结合vi左右分屏:
1)打开一个文件:vi /etc/passwd   ,这个得是vim才有vnew,所以有:vi /root/.bashrc   alias v='vim'  \n alias vi='vim'
2)命令行下输入冒号后输入vnew /etc/fstab:
:vnew /etc/fstab
3)出现俩窗口,ctrl+w两次按w切换到另一个窗口。
4)光标在某个窗口后,就可以把这个窗口全屏:
    ctrl + w 加 shift加管道符号|,就能全屏。
5)取消全屏:
     ctrl+w 加 =。
注意:ctrl+w 和shift+| 这俩个命令是同时按。 ctrl+w和=是分开有一小间隔。
6)关闭所有: :qa
摘自 ,更多多个文件同时找开的技巧见:http://jackxiang.com/post/1508/  

可以上下分屏: new /erc/profile,然后ctrl加w切换,
不同在放大上下窗口时候是用的ctrl+w 再按shift加_,其实就是那个横杠,表示上下,同理|表示左右。
=等号表恢复左右或上下()上下分左右分都是以=表示。


esc+ .   (点):粘贴最后一次的字符串,在cd /tmp,再用该命令可以vi 用该命令直接会贴上里面的目录,方便快捷。

a 摘手设置分享收藏
vi 與 vim 的指令整理 | Vixual
2015-01-14  panhoy  + 关注献花(0)
  vi 是 unix 家族下最功能強大的文字編輯器,讓用戶只要使用一個鍵盤就可以完成所有的編輯。而 vim 則是 vi 的加強版,甚至在 Windows 上也找得到 vim 的芳蹤。但 vi/vim 眾多的指令卻經常令初學者卻步,它的指令還有分大小寫,以下就是我所整理出來那些令人卻步的指令:
編輯模式
指令說明
*i在游標位置進入編輯模式
I在游標行的第一個非空白字元進入編輯模式
*a在游標位置後進入編輯模式
*A在游標行的最後一個字元進入編輯模式
*o向下新增一行,並進入編輯模式
O向上新增一行,並進入編輯模式
cc刪除游標行,並進入編輯模式
*[ESC]取消指令或退出編輯模式
游標移動
指令說明
*gg移到第一行
*G移到最後一行
*行數 → G移動到第 n 行
0移動到該行最前面
$移動到該行最後面
字數 → [Space]向右移動 n 個字元
*行數 → [Enter]向下移動 n 行
標記與複製
指令說明
*v開始字串標記
*V開始行標記
*v → [Ctrl]-V開始區塊標記
*d刪除標記的內容
*y複製標記的內容
*yy複製游標行
yG複製游標行到最後一行
y1G複製游標行到第一行
y$複製游標處到最後一個字元
y0複製游標處到第一個字元
*p在下一行貼上複製或刪除的內容
P在上一行貼上複製或刪除的內容
*[Ctrl]-R → 0在下一行貼上複製或刪除的內容,適用於編輯模式及指令行
搜尋與取代
指令說明
*/搜尋字串向下搜尋字串
/\c搜尋字串向下搜尋字串,不分大小寫
**將游標移到字串上,直接按 "*" 也可以做向下搜尋
?搜尋字串向上搜尋字串
?\c搜尋字串向上搜尋字串,不分大小寫
*:set ic搜尋時不分大小寫
*:set noic搜尋時要分大小寫
*n繼續下一個搜尋結果
*N繼續上一個搜尋結果
*:起始行,終止行s/搜尋字串/取代字串/gic從第 n 行到第 n 行取代字串 (後面的 g: 整行全部 i: 不分大小寫 c: 詢問)
*:1,$s/搜尋字串/取代字串/gic全部取代字串 (後面的 g: 整行全部 i: 不分大小寫 c: 詢問)
刪除
指令說明
*dd刪除游標行
*行數 → dd刪除 n 行
*dG刪除游標行到最後一行
d1G刪除游標行到第一行
*d$刪除游標處到最後一個字元
d0刪除游標處到第一個字元
檔案功能
指令說明
*:w存檔 (加 ! 表示強制存檔)
*:w 檔案名稱另存新檔
*:wq存檔並退出 vi
:e 檔案名稱編輯其它檔案
*:e!還原至檔案編修前的狀態
:r 檔案名稱讀入檔案內容,並加到游標行的後面
*:n切換到下一個開啟的檔案
*:N切換到上一個開啟的檔案
*:set nu顯示行號
*:set nonu取消行號顯示
*:files列出所有開啟的檔案
視窗分割
指令說明
*:new新增水平視窗
*:new 檔案名稱新增水平視窗,並在新增的視窗載入檔案
*:vnew新增垂直視窗
*:vnew 檔案名稱新增垂直視窗,並在新增的視窗載入檔案
*[Ctrl]-W → [方向鍵]切換視窗
*:only僅保留目前的視窗


——————————————————————————————————————————
disown -a && exit 命令

大多数系统管理员使用screen 命令来控制运行在终端后台的作业。让我们假设一下如果你有一个长期运行的作业并想要将它从终端中脱离,你可以用screen命令来这么做。但是如果你不知道如何使用screen,那么disown可以用来救急。

disown命令可以在后台持续运行任务,即使你关闭了终端会话。disown命令的语法是:

root@tecmint [~]# Command; disown -a && exit

为了在终端中再次脱离一个已经长期运行的任务(译注:可能已经bg运行了,但是并没有脱离终端),使用jobs命令来找出任务号,接着使用disown %n,这里的%n是作业号。为了验证作业确实在运行,使用ps 或者 top 命令。nohup命令也是一个disown命令的替代品。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/1508/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2022-9-8 14:42
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]