梁杰s的博客

学习,记录,分享


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

screen窗口命令使用

发表于 2016-10-05 | 分类于 Linux | 评论数: | 阅读次数:
本文字数: 3k | 阅读时长 ≈ 5 分钟

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

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

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

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

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。

GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

会话恢复

只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。

多窗口

在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。

会话共享

Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

GNU’s Screen 官方站点:http://www.gnu.org/software/screen/

三、安装
一个命令:yum install screen -y (centOS等)
apt-get install screen -y (Ubuntu等)

四、语法

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

参数说明

-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参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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 ? -> 显示所有键绑定信息

C-a c -> 创建一个新的运行shell的窗口并切换到该窗口

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 -> 显示所有窗口列表

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 选定的内容贴上

MySQL数据库的备份和导入

发表于 2016-10-05 | 分类于 Linux | 评论数: | 阅读次数:
本文字数: 2.4k | 阅读时长 ≈ 4 分钟

在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。

阅读全文 »

Linux自动备份

发表于 2016-10-05 | 分类于 Linux | 评论数: | 阅读次数:
本文字数: 1.5k | 阅读时长 ≈ 3 分钟

☆☆☆一、每日自动备份网站数据及数据库上传FTP☆☆☆

这个方式,主要是一个脚本(包含压缩网站数据及数据库,上传),然后用cron命令每天在指定时间段运行,下面请看脚本代码(脚本内信息需自行设定)

#!/bin/bash

#以下信息请自行修改

MYSQL_USER=root #mysql用户名
MYSQL_PASS=123456 #mysql密码
MAIL_TO=admin@zrblog.net #数据库发送到的邮箱
FTP_USER=zrblog #ftp用户名
FTP_PASS=123456 #ftp密码
FTP_IP=... #ftp地址
FTP_backup=zrblog-backup #ftp上存放备份文件的目录,这个要自己得ftp上面建的
WEB_DATA=/home/wwwroot #要备份的网站数据

#以上信息自行修改

#定义数据库的名字和旧数据库的名字
DataBakName=Data_$(date +”%Y%m%d”).tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz
OldData=Data_$(date -d -5day +”%Y%m%d”).tar.gz
OldWeb=Web_$(date -d -5day +”%Y%m%d”).tar.gz

#删除本地3天前的数据
rm -rf /home/backup/Data_$(date -d -3day +”%Y%m%d”).tar.gz /home/backup/Web_$(date -d -3day +”%Y%m%d”).tar.gz
cd /home/backup

#导出数据库,一个数据库一个压缩文件
for db in /usr/local/mysql/bin/mysql -u$MYSQL\_USER -p$MYSQL\_PASS -B -N -e ‘SHOW DATABASES’ | xargs; do
(/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 – > ${db}.sql.gz)
done

#压缩数据库文件为一个文件
tar zcf /home/backup/$DataBakName /home/backup/.sql.gz
rm -rf /home/backup/
.sql.gz

#发送数据库到Email,如果数据库压缩后太大,请注释这行

#echo “主题:数据库备份” | mutt -a /home/backup/$DataBakName -s “内容:数据库备份” $MAIL_TO

#压缩网站数据
tar zcf /home/backup/$WebBakName $WEB_DATA

#上传到FTP空间,删除FTP空间5天前的数据
ftp -v -n $FTP_IP << END
user $FTP_USER $FTP_PASS
type binary
cd $FTP_backup
delete $OldData
delete $OldWeb
put $DataBakName
put $WebBakName
bye
END

Linux初学者需要知道的

发表于 2016-10-05 | 分类于 Linux | 评论数: | 阅读次数:
本文字数: 1.7k | 阅读时长 ≈ 3 分钟

作为一个刚入门的Liunx爱好者,必须了解的Liunx基础知识有哪些?

1、Linux的文件系统

Unix的文件系统管理是极具特色的。NFS、UFS、TMPFS、VFS、PROC等各类文件系统均承担不同角色。Unix将硬盘、打印机等字符设备和块设备都以文件的方式管理起来,对这些设备的操作就如同访问一个文件。

阅读全文 »

Linux之劫持rm命令实现安全删除和屏蔽删除

发表于 2016-10-05 | 分类于 Linux | 评论数: | 阅读次数:
本文字数: 2.5k | 阅读时长 ≈ 5 分钟

摘要 我认为Linux上这是一个必须添加的功能,必须屏蔽rm / 、rm / 、rm -rf / 、rm -rf /,不怕恶意去执行就怕无意中招让自己gg了 还是一键脚本吧

阅读全文 »

3大虚拟化技术介绍

发表于 2016-10-03 | 分类于 Linux | 评论数: | 阅读次数:
本文字数: 1k | 阅读时长 ≈ 2 分钟

Openvz介绍

OpenVZ是基于Linux内核和作业系统的操作系统级虚拟化技术。OpenVZ允许物理服务器运行多个操作系统,被称虚拟专用服务器(VPS,Virtual Private Server)或虚拟环境(VE, Virtual Environment)。

阅读全文 »

WP-AUTOPOST-PRO破解版

发表于 2016-08-16 | 分类于 PHP源码 | 评论数: | 阅读次数:
本文字数: 148 | 阅读时长 ≈ 1 分钟

wordpress采集插件,本地测试了下的确不错,支持定向采集,支持通配符匹配、或CSS选择器精确采集任何内容,支持采集正文分页内容,和dedecms的采集差不多,非常适合新手使用,wp-autopost破解版,下面来张插件界面截图。

阅读全文 »

简单的验证码识别

发表于 2016-08-16 | 分类于 PHP日记 | 评论数: | 阅读次数:
本文字数: 3.7k | 阅读时长 ≈ 7 分钟

我直接贴代码了,发现验证码识别已经可以克服各种干扰,包括discuz系统的那种彩色,字体大小倾斜度位置都不一样的验证码都可以识别,而且准确度非常高。

阅读全文 »

PDO->query() 查询数据记录并返回查询结果

发表于 2015-10-19 | 分类于 PHP日记 | 评论数: | 阅读次数:
本文字数: 188 | 阅读时长 ≈ 1 分钟

PDO->query()用于查询数据记录并返回查询结果。
语法:PDO->query( string statement )
例子:

1
2
3
4
query("set character set 'gbk'"); //查询数据 
$sql = "SELECT * FROM user";
$sth = $db->query($sql);
$db = null; ?>

[代码]PHP随机生成字符串

发表于 2015-10-10 | 分类于 PHP日记 | 评论数: | 阅读次数:
本文字数: 480 | 阅读时长 ≈ 1 分钟
1
2
3
4
5
6
7
8
9
10
11
12
<?php
function code($num =16){
$char =Array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9');
$i= 0;
while($i < $num){
$rand = mt_rand(0,61);
$key .= $char\["$rand"\];

$i++;
}
return $key;
}
1
2
//使用方法  
//$a = code(3); 3为随机码个数,可改为任意数字,不填则默认16位
1234…6

梁杰s

Computer Program

53 日志
9 分类
5 标签
GitHub
友情链接
  • wishosting
© 2015 — 2019 梁杰s | 121k | 3:39
由 Hexo 强力驱动 v3.7.1
|
主题 — NexT.Gemini
粤ICP备18103370号
0%