Linux中使用screen管理远程会话

  你是不是经常需要ssh或者telent远程登录到Linux服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。还在用nohup吗?那么来看看screen吧,它会给你一个惊喜!

  元凶:SIGHUP信号

  让我们来看看为什么关掉窗口/断开连接会使得正在运行的程序死掉。

  在Linux/Unix中,有这样几个概念:

  • 进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。
  • 会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。
  • 会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。

  根据POSIX.1定义:

  • 挂断信号(SIGHUP)默认的动作是终止程序。
  • 当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。
  • 如果会话期首进程终止,则该信号发送到该会话期前台进程组。
  • 一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。

  因此当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。

  我们来看一个例子。打开两个ssh终端窗口,在其中一个运行top命令:

$ top

  在另一个终端窗口,找到top的进程ID为5180,其父进程ID为5128,即登录shell。

$ ps -ef|grep top
root      5180  5128  0 01:03 pts/0    00:00:02 top
root      5857  3672  0 01:12 pts/2    00:00:00 grep top

继续阅读

使用Prey定位丢失的Linux笔记本

  Prey是一款轻量的应用程序,用于追踪并定位你丢失或被盗的笔记本电脑。Prey跨平台,不但开放源代码,而且完全免费。

  Prey通过定时发送一系列报告帮助你确定笔记本的位置,这些报告包括当前系统的状态,正在运行的应用程序及活动网络链接状态,详细的网络状况以及WIFI信息,当前系统桌面截图;如果你的系统内置摄像头,还可以启动摄像头拍照给你。

  Prey使用远程激活系统,这意味着Prey瞧瞧的运行你的笔记本操作系统后台,而当你需要的时候可以远程控制激活它,激活Prey之后它可以收集上述信息并发送给你自己的Prey网络控制面板或直接发送至你的信箱,而偷机贼永远也不会知道他的行为正在被监控。

  你也许会问"如果偷机贼格式化了我的硬盘那Prey还有作用吗?",这个问题问得好。经验告诉我们偷机贼一般会进入你被盗的笔记本中查看是否有有价值的东西,因此你还是有机会抓到贼的。只要你使用Prey,那么当你的笔记本真正被盗之后,你就有那么哪怕一丁点的希望可以找回来,这不就是Prey的意思所在吗?

  Prey使用WIFI热点确定笔记本的位置。再支持GPS的手机中,Prey可以手机自带的GPS功能定位失窃手机的位置,地图的精度是让人吃惊的准确。

  Prey检查笔记本是否有活动的网络链接并发送信息给你,如果没有活动的网络连接,Prey会检查周围是否有开放的WIFI网络,增加追踪到被丢失的笔记本的可能性。

  轻量是Prey的一大特性,它是使用bash写的,因此几乎不存在任何依赖程序,而只是它的那个模块在工作。因此可以说Prey是一个便携软件,并且可以运行在任何操作系统上。

  Prey基于模块化的设计决定你可以添加/删除/配置Prey的各个模块,Prey是基于模块编写的,每个模块分工不同,因此你可以只是用那些你需要的功能。

  Prey内置超强的报告系统,当前电脑正在运行的程序,最近编辑过的文件,当前活动网络连接,系统运行时长,桌面截图甚至通过笔记本摄像头拍下偷机贼的照片。

继续阅读

Ubuntu10.04 Gnome面板出错啦

  在你安装了Ubuntu10.04之后,如果你的Gnome遇到过以下的问题:

  这可能是由于启动Ubuntu或者停止休眠模式时发生的情况(表现为通知栏附近的东东全部乱了套)。

  你可以在终端里输入一条简单的命令重启Gnome面板就把这个问题解决:

$ killall gnome-panel

  下面是正常情况下的截图:

  之前都是注销或者重启能解决问题的,没想到这么轻易就可以搞定。囧''

vim快捷键速查图

  分享一张vim快捷键速查图,贴在公司工位前,事半功倍哦。

  建议大家收藏一张,绝对有用哈!

Ubuntu10.04使用BURG美化启动界面

  BURG是一个基于GRUB2的工程。它使用新的菜单系统,屏幕布局和热键都可以通过配置文件进行灵活的定制。

  Ubuntu10.04的用户可以在/etc/apt/sources.list软件源列表文件的最后添加如下两行:

deb http://ppa.launchpad.net/bean123ch/burg/ubuntu lucid main
deb-src http://ppa.launchpad.net/bean123ch/burg/ubuntu lucid main

  也可以在/etc/apt/sources.list.d/文件下新建一个burg.list的文件,然后把上面两行添加进去,保存文件。

  接下来就是下载签名文件,不然就会出现NO_PUBKEY警告提示(详见《Ubuntu更新源列表时NO_PUBKEY(找不到公钥)问题的解决方法》),虽然这不是错误,但是也不希望每次更新时都出现这个提示。执行命令:

$ gpg --keyserver keyserver.ubuntu.com --recv 55708F1EE06803C5
$ gpg --export --armor 55708F1EE06803C5 | sudo apt-key add -

  然后更新软件源,安装BURG:

$ sudo apt-get update
$ sudo apt-get install burg burg-common burg-emu burg-pc burg-themes burg-themes-common

  安装完成后要把新的启动代码写到MBR:

$ sudo burg-install "(hd0)"

  跟着就是更新BURG的启动列表:

$ sudo update-burg

  你也可以通过burg-emu模拟启动界面,查看当前的效果。

  等有空再把相关的配置修改方面的心得也跟大家分享一下,不过得等上一段时间了撒~~

Ubuntu终端ssh连接服务器慢的解决方法

  在Ubuntu下用过putty和终端下的ssh来连接服务器,对比起来,我还是更喜欢用原生态的ssh去管理服务器。但是在Ubuntu里用ssh发现一个很大的问题,那就是在连接服务器的时候要用很久的时间,这是一点让我比较无法忍受的地方(RHEL4不存在这个问题)。通过Google,在Ubuntu官方的文档那里找到了这个bug的解决办法,那就是修改/etc/ssh/ssh_config配置文件:

$ sudo vim /etc/ssh/ssh_config

  把里面的GSSAPIAuthentication值修改为no就可以了:

GSSAPIAuthentication no

  保存退出,现在连接登陆的速度就快了很多!其它的Linux发行版如果存在相同的问题,也可以试一个哈。

关于“dc -e xxx”联系方式

  最近浏览博友空间时发现,很多童鞋的联系方式都修改成为"dc -e xxx"的形式,在终端运行一下,才能看到庐山真面目,还真实现了普通童鞋的"非诚勿扰"。

  我也免不了一俗,在对这个神秘的东西进行了一小番研究之后,就写下这篇日志,有需要的就顶一顶哈。

  1、首先,用我的联系方式做为例子:Stupig@foxmail.com,执行以下命令:

$ echo "Stupig@foxmail.com" | xxd -ps -u

  得到:53747570696740666F786D61696C2E636F6D0A

  2、再执行:

$ echo "ibase=16; 53747570696740666F786D61696C2E636F6D0A" | bc

  得到:1861106839103876547709240374441272411159489802,在这串字符串后面加个P就是我博客里面的联系方式啦

$ dc -e 1861106839103876547709240374441272411159489802P
Stupig@foxmail.com

  童鞋们可以试一下撒。

Linux打包命令的使用

  经过一番研究、整理后,充分利用Linux系统本身的命令tar、cpio和compress等来做到打包和压缩,使之充当类似DOS下的压缩软件,同时在Linux系统中亦具有通用性。

  在Linux系统中,是先通过cpio或tar将众多的文件打包成一个文件库后,再用compress将文件库压缩来达到目的的。下面分别以cpio和tar来说明使用的方法和步骤。

  一、cpio

  1、打包文件或目录

  a、含子目录打包:

$ find /usr/lib -print|cpio -o〉/u0/temp1.cpio

  将/usr/lib目录下的文件与子目录打包成一个文件库为/u0/temp1.cpio。

  若通过-o选项来打包整个目录下的所有文件与子目录,常先利用find目录名-print来找出所有文件与子目录的名称,通过管道"|"传给cpio打包。

  b、不含子目录的打包:

$ ls /usr/lib|cpio -o〉/u0/temp1.cpio

  将/usr/lib目录下的文件(不含子目录下的文件)打包成一个文件库为/u0/temp1.cpio。

  c、特定文件打包:

  可利用文本搜索命令grep与管道配合,可以排除或选择特定类型的文件传给cpio打包。例如:

$ ls /usr/lib/*.c|cpio -o〉/u0/temp1.cpio

继续阅读

Ubuntu9.10之后(含)版本重装Win系统后Grub启动菜单的修复

  大家都知道,Microsoft如果以安装盘方式安装完系统,就会强盗般地强制更新了MBR。而如果在这之前有安装了Ubuntu 9.10,那么Ubuntu的Grub启动菜单就会不翼而飞。下面是个人整理的解决办法,供大家参考一下:

  方法一:使用Ubuntu 9.10 LiveCD/LiveDVD/LiveUSB

  1、用Ubuntu的LiveCD、LiveDVD或者LiveUSB启动,进入Ubuntu的Live环境;

  2、进入Ubuntu Live之后,从”应用程序》附件》终端”启动Shell;

  3、下面是在终端内输入的命令列表:

$ sudo -i
$ mount /dev/sdc3 /mnt
$ mount /dev/sdc2 /mnt/boot
$ grub-install –root-directory=/mnt/ /dev/sdc

  如果没有”grub.cfg“文件,请重新创建:

$ mount –bind /proc /mnt/proc
$ mount –bind /dev /mnt/dev
$ mount –bind /sys /mnt/sys
$ chroot /mnt update-grub
$ umount /mnt/sys
$ umount /mnt/dev
$ umount /mnt/proc
$ exit

继续阅读

Ubuntu9.04之前(含)版本重装Win系统后Grub启动菜单的修复

  大家都知道,Microsoft如果以安装盘方式安装完系统,就会强盗般地强制更新了MBR。而如果在这之前有安装了Ubuntu9.04之前版本(包含9.04),那么Ubuntu的Grub启动菜单就会不翼而飞。下面是个人整理的解决办法,供大家参考一下:

  1、用Ubuntu的LiveCD、LiveDVD或者LiveUSB启动,进入Ubuntu的Live环境;

  2、进入Ubuntu Live之后,从”应用程序》附件》终端”启动Shell;

  3、然后以管理员身份进入Grub模式:

$ sudo grub

  4、继续输入以下命令,跟着会出现一些文字提示:

find /boot/grub/stage1

  5、根据上面的文字提示,把下面命令中的x替换:

root (hd0,x)

  6、最后输入下面命令修复Grub菜单:

setup (hd0)
quit

  最后退出Grub,然后退出终端、重启。这样就大功告成了!