首页 > 代码库 > 开源软件之screen的第一次使用

开源软件之screen的第一次使用

在网上看到一篇关于linux下屏幕协作的文章,原文如下:


屏幕协作
来自产品工程的高级维护用户 David 打电话说:“为什么我不能在您部署的这些新机器上编译 supercode.c”。
您会问他:“您运行的是什么机器?”
David 答道:“ Posh”。(这个虚够的公司将它的 5 台生产服务器以纪念 Spice Girls 的方式命名)。这下您可以大显身手了,另一台机器由 David 操作:
# su - david
转到 posh:
# ssh posh
到达之后,运行以下代码:
# screen -S foo
然后呼叫 David:
“David,在终端运行命令 # screen -x foo”。
这使您和 David 的会话在 Linux shell 中联接在一起。您可以输入,他也可以输入,但彼此可以看到对方所做的事情。这避免了进入其他层次,而且双方都有相同的控制权。这样做的好处是 David 可以观察到您的故障诊断技巧,并能准确了解如何解决问题。
最后大家都能看到问题所在:David 的编译脚本对一个不在此新服务器上的旧目录进行了硬编码。将它装载后再次编译即可解决问题,然后 David 继续工作。您则可以继续之前的娱乐活动。
关于此技巧需要注意的一点是,双方需要以同一用户登录。screen 命令还可以:实现多个窗口和拆分屏幕。请阅读手册页获取更多相关信息。
对于 screen 会话,我还有最后一个技巧。要从中分离并让它打开,请输入 Ctrl-A D(即按住 Ctrl 键并点击 A 键。然后按 D 键)。
然后通过再次运行 screen -x foo 命令可以重新拼接起来。


转载: http://www.ibm.com/developerworks/cn/linux/l-10sysadtips/index.html 


感觉挺有意思的,于是上网搜了一下screen。下面是下载地址:
下载目录: ftp://ftp.gnu.org/gnu/screen/screen-4.2.1.tar.gz 
其他版本: ftp://ftp.gnu.org/gnu/screen/ 


下载完成之后,ftp到linux的临时目录,解压之后,进入该目录,
安装“三部曲”,过程如下:
[billing_dx@bmcs1 screen-4.2.1]$ ./configure --prefix="/account/work/ymm/usr/local"		#指定安装目录
this is screen version 4.2.1
……
Now please check the pathnames in the Makefile and in the user
configuration section in config.h.
Then type 'make' to make screen. Good luck.


[billing_dx@bmcs1 screen-4.2.1]$ make				#编译
CPP="gcc -E -DETCSCREENRC='"/account/work/ymm/usr/local/etc/screenrc"' -DSCREENENCODINGS='"/account/work/ymm/usr/local/share/screen/utf8encodings"'" srcdir=. sh ./osdef.sh
AWK=gawk CC="gcc -g -O2 -D_GNU_SOURCE" srcdir=. sh ./comm.sh
AWK=gawk srcdir=. sh ./term.sh
……
gcc  -o screen screen.o ansi.o fileio.o mark.o misc.o resize.o socket.o search.o tty.o term.o window.o utmp.o loadav.o putenv.o help.o termcap.o input.o attacher.o pty.o process.o display.o comm.o kmapdef.o acls.o braille.o braille_tsi.o logfile.o layer.o list_generic.o list_display.o list_window.o sched.o teln.o nethack.o encoding.o canvas.o layout.o viewport.o -lcurses  -lelf -lcrypt


[billing_dx@bmcs1 screen-4.2.1]$ make install			#安装
./etc/mkinstalldirs /account/work/ymm/usr/local/bin /account/work/ymm/usr/local/share/screen/utf8encodings
……
termcap entry (./terminfo/screencap) should be installed manually.
You may also want to install ./etc/etcscreenrc in /account/work/ymm/usr/local/etc/screenrc
[billing_dx@bmcs1 screen-4.2.1]$ls /account/work/ymm/usr/local/bin/		#查看生成的文件
screen  screen-4.2.1




安装上面给出的提示,操作如下:
1、使用用户“billing_dx”登录一个终端,执行“screen -S ymm”
2、使用用户“billing_dx”登录一个终端,执行“screen -x ymm”


这样,两个窗口就连接起来了,进行的任何操作都是同步的。


我上网搜了一下screen命令中的这两个参数的含义:
-S sessionname
When creating a new session, this option can be used to specify a meaningful name for the session. This name identifies the session for "screen -list" and "screen -r" actions. It substitutes the default [tty.host] suffix.
#-S 创建一个新的session


-x
Attach to a not detached screen session. (Multi display mode).
#-x连接指定的session



上网搜这些东西的时候,还是使用google比较方便,如果只是使用英文的话,效果可能更好了。例如google里搜索:linux screen man 。


本来想查看screen的用法,但是因为找不到手册文件,所以:
[billing_dx@bmcs1 screen-4.2.1]$man screen
Cannot open the message catalog "man" for locale "utf-8"
(NLSPATH="/usr/share/locale/%l/LC_MESSAGES/%N")


No manual entry for screen
[billing_dx@bmcs1 screen-4.2.1



于是我想到,如果我安装了一个新的软件,而且也想着让别人使用man手册的话,我应该如何去做的问题。


上网搜到,使用“man”命令的时候,我们可以手动的指定到指定的目录查找man手册,这个参数就是“-M”,解释如下:
[billing_dx@bmcs1 screen-4.2.1]$man man
-M  path
       Specify the list of directories to search for man pages.  Separate the directories with colons.
       An empty list is the same as not specifying -M at all.  See SEARCH PATH FOR MANUAL PAGES.



因为安装screen的时候,我们指定了screen的安装目录【./configure --prefix="/account/work/ymm/usr/local"】,所以,最后生成的的可执行文件和相应的说明文档都在该目录下,如下:
[billing_dx@bmcs1 screen-4.2.1]$ls /account/work/ymm/usr/local
bin  share
[billing_dx@bmcs1 screen-4.2.1]$ls /account/work/ymm/usr/local/share/
info  man  screen
[billing_dx@bmcs1 screen-4.2.1]$ls /account/work/ymm/usr/local/share/man
man1
[billing_dx@bmcs1 screen-4.2.1]$




所以,可以手动指定man手册的查询目录,进行查询,如下:
[billing_dx@bmcs1 screen-4.2.1]$man -M /account/work/ymm/usr/local/share/man screen
SCREEN(1)                                                            SCREEN(1)


NAME
       screen - screen manager with VT100/ANSI terminal emulation


SYNOPSIS
       screen [ -options ] [ cmd [ args ] ]
       screen -r [[pid.]tty[.host]]
       screen -r sessionowner/[[pid.]tty[.host]]


DESCRIPTION
……



当然,这种方法应该只是一次性的方法,在《鸟哥的私房菜》中,还有一种一劳永逸的方法:


既然有man page,自然就是因为有一些文件数据,所以才能够以man page读出来啰!那么这些man page的数据 放在哪里呢?不同的distribution通常可能有点差异性,不过,通常是放在/usr/share/man这个目录里头,然而,我们可以透过修改他的man page搜寻路径来改善这个目录的问题!修改/etc/man.config (有的版本为man.conf或manpath.conf)即可啰!至于更多的关于man的讯息你可以使用『 man man 』来查询呦!
转载:  http://linux.vbird.org/linux_basic/0160startlinux.php#manual  


/etc/man.config

这个档案乍看之下好像跟 bash 没相关性,但是对于系统管理员来说, 却也是很重要的一个档案!这的档案的内容『规范了使用 man 的时候, man page 的路径到哪里去寻找!』所以说的简单一点,这个档案规定了下达 man 的时候,该去哪里查看数据的路径设定!

那么什么时候要来修改这个档案呢?如果你是以 tarball 的方式来安装你的数据,那么你的 man page 可能会放置在 /usr/local/softpackage/man 里头,那个 softpackage 是你的套件名称, 这个时候你就得以手动的方式将该路径加到 /etc/man.config 里头,否则使用 man 的时候就会找不到相关的说明档啰。

事实上,这个档案内最重要的其实是 MANPATH 这个变量设定啦! 我们搜寻 man page 时,会依据 MANPATH 的路径去分别搜寻啊!另外,要注意的是, 这个档案在各大不同版本 Linux distributions 中,檔名都不太相同,例如 CentOS 用的是 /etc/man.config ,而 SuSE 用的则是 /etc/manpath.config , 可以利用 [tab] 按键来进行文件名的补齐啦!


转载: http://linux.vbird.org/linux_basic/0320bash.php#man  




因为通过上面方法需要修改“ /etc/man.config ”文件,这就牵扯到了有没有这个权限的问题了。
[billing_dx@bmcs1 screen-4.2.1]$ll  /etc/man.config
-rw-r--r--. 1 root root 4940 Apr  3  2012 /etc/man.config
[billing_dx@bmcs1 screen-4.2.1]$



没有root权限,也就没法进行修改了。不过我感觉,对于我来说,使用“-M”参数,就足够使用到了。


追加:刚才发现,如果我吧man手册所在的目录,添加到PATH环境变量中,还是可以达到直接查询man手册的目的,测试效果如下:
[billing_dx@bmcs1 screen-4.2.1]$man screen
Cannot open the message catalog "man" for locale "utf-8"
(NLSPATH="/usr/share/locale/%l/LC_MESSAGES/%N")


No manual entry for screen
[billing_dx@bmcs1 screen-4.2.1]$ export PATH=$PATH:/account/work/ymm/usr/local/share/man
[billing_dx@bmcs1 screen-4.2.1]$man screen
SCREEN(1)                                                            SCREEN(1)


NAME
       screen - screen manager with VT100/ANSI terminal emulation


SYNOPSIS
       screen [ -options ] [ cmd [ args ] ]
       screen -r [[pid.]tty[.host]]
       screen -r sessionowner/[[pid.]tty[.host]]


DESCRIPTION



不过这种把什么东西都添加到环境变量PATH的方式,我想着应该不是太推荐吧。不过,这总归也算是一种方法吧!


如果大家有更好的方法,欢迎指导啊!