laravel其实通过管道模式,经过三组中间件,第一组,系统自带的,设置cookie,验证一类的;第二组是路由定义的中间件,第三组就是控制器定义的中间件,以下是流程
yum install erlang-19.0.4-1.el7.centos.x86_64.rpm
yum install rabbitmq-server-3.6.10-1.el7.noarch.rpm
tip:可以用yum安装,可能版本比较老
/var/lib/rabbitmq
/etc/rabbitmq
, 其中,环境配置文件 /etc/rabbitmq/rabbitmq-env.conf
位置不能变,/etc/rabbitmq/rabbitmq.config
,可以通过环境变量配置 CONFIG_FILE=/usr/local/etc/rabbitmq/rabbitmq
NODE_IP_ADDRESS=127.0.0.1
NODENAME=rabbit-xiaofang
/var/log/rabbitmq
,可以查看插件加载,启动的服务,配置文件在哪,有没有加载配置文件等rabbitmq-plugins enable rabbitmq_managemen
rabbitmq-plugins disable rabbitmq_managemen
访问 http://localhost:15672可以查看web管理界面,
> tips : 从3.4 以后的版本,guest,就只能本机访问了,外部访问不了,推荐添加新的用户和角色,来管理界面[
{rabbit,[
{tcp_listeners, [5672]}
]
}
].
rabbitmqctl add_user admin admin123
rabbitmqctl set_user_tags admin administrator //给用户赋予角色
rabbitmqctl list_user //查看用户
rabbitmqctl list_vhosts
rabbitmqctl add_vhost xiaofang
rabbitmqctl set_permissions -p xiaofang admin '.*' '.*' '.*' // set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
rabbitmqctl list_user_permissions admin //查看某个用户权限
prefetch_count=1 (channel.basic_qos(prefetch_count=1) )
通过这个设置,可以是客户端,同一时间最多处理一个message,这种方法可能会导致queue满。当然,这种情况下你可能需要添加更多的Consumer,或者创建更多的virtualHost来细化你的设计。Type
: exchange类型fanout、direct、topic、header
Durability
: 持久性,这是exchange的可选属性,如果你Durability设置为false,那些当前会话结束的时候,该exchange也会被销毁。 新建一个transient exchangeAuto delete
: 当没有队列或者其他exchange绑定到此exchange的时候,该exchange被销毁。这个很简单就不示例了。Internal
:表示这个exchange不可以被client用来推送消息,仅用来进行exchange和exchange之间的绑定。Durability
和exchange相同,未持久化的队列,服务重启后销毁。Auto delete
: 当没有消费者连接到该队列的时候,队列自动销毁。Exclusive
:使队列成为私有队列,只有当前应用程序可用,当你需要限制队列只有一个消费者,这是很有用的。Message TTL
:在队列自动删除之前可以保留多长时间(对应扩展参数argument “x-expires”)Max length
: 一个队列可以容纳的已准备消息的数量(对应扩展参数argument “x-max-length”) ps:一旦创建了队列和交换机,就不能修改其标志了。例如,如果创建了一个non-durable的队列,然后想把它改变成durable的,唯一的办法就是删除这个队列然后重现创建。Durabillity
: 消息的持久在代码中设置的方法与exchange和queue不同, (DeliveryMode=2)contentType
: 标识消息内容的MIME,例如JSON用application/jsonreplayTo
: 标识回调的queue的地址correlationId
:用于request和response的关联,确保消息的请求和响应的同一性Ready
: 此状态的消息存在于队列中待处理。 – Unacknowledged
: 此状态的消息表示已经在处理未确认。 6.一、打开文件
2. vim -o index.html index.php a.txt : 水平分割打开3个文件 -O 垂直分割
二、基本命令
:e# 或 Ctrl+ˆ 编辑上一个文档,用于两个文档相互交换编辑时使用。?# 代表的是编辑前一次编辑的文档
:n 编辑下一个文档。
:2n 编辑下两个文档。
:N 编辑上一个文档。注意,该方法只能用于同时打开多个文档。
:b 文档名或编号 移至该文档。
Ctrl+6 下一个文件
:bn 下一个文件
:bp 上一个文件
:f 或者 ctrl+g : 显示当前文件的基本信息
:f 文档名 改变编辑中的文档名。(file) , 保存后生成一个新文件, 原来文件内容不变
三、多窗口下
(1) :ls 查看打开的文件
后面一个有一个 + 号,表示有修改,没有保存
(2) 切换窗口
ctrl+w 上下左右 hjkl 切换窗口
ctrl +w HJKL 可以移动窗口
(3) 关闭窗口
:q 关闭单个窗口
:qa 关闭所有窗口
:only 或者 ctrl+w o 取消其他分屏,只保留当前分屏
(4) :e 文件 : 打开一个文件
(5) 新建分屏
:new 文件 : 水平分割,打开文件
:sp(split) 文件 : 水平分割,打开指定文件
:vsp(vsplit) 文件 : 垂直分割,打开指定文件
:sv : 水平分割
:vs : 垂直分割
打开当前文件:
ctrl+w 和 s(split)
ctrl+w 和 v(vsplit)
(6) 改变分屏尺寸的操作了。
ctrl+w 和 < 左
ctrl+w 和 > 右
ctrl+w 和 + 上
ctrl+w 和 – 下
ctrl+w 和 = 恢复均等(
这里顺便简单提一下复制,剪切与粘贴操作命令
yy 复制光标所在行
dd 剪切光标所在行
d0 或者 d^ 删除光标到行开始的内容
d$ 删除光标到行结束的位置
5yy 复制从光标所在行开始计数的下五行文本
5dd 剪切从光标所在行开始计数的下五行文本
v(小写) visual模式,通过上下左右键选择光标“扫过”的所有字符
V (大写) visual line 模式,通过上下键选择光标“扫过”的所有行
ctrl + v visual block 模式,通过上下左右键选择一个矩形文本
y 复制在visual模式, visual line模式和visual block 模式下选择的文本
d 剪切在visual模式, visual line模式和visual block 模式下 选择的文本
p(小写) 粘贴, 粘贴位置为光标所在行的下一行
P(大写) 粘贴, 粘贴位置为光标所在行的上一行
u: 撤销操作
r: 重做操作
提示:
(1) 假若我们通过vim打开了多个文件后,想在不关闭vim的情况下继续打开其他文件,如文件file,可在vim中使用如下命令:
:e file 不会分割窗口
:sp file 将会水平分割窗口
:vsp file 将会垂直分割窗口
(2) vim和shell之间切换
:shell 切换到shell,此时vim在后台运行,在shell中输入命令exit,切换回vim
(3) 在vim中执行shell命令(不切换到shell)
:1,3 w !command 将文本中第一行到第三行的内容输入到命令command中进行处理,不改变当前编辑文件的内容
j 或 向下箭头键(↓) :光标向下移动一个字符
k 或 向上箭头键(↑) :光标向上移动一个字符
l 或 向右箭头键(→) : 光标向右移动一个字符
光标移动到非空格符的上一列
n<space> : 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动20 个字符距离。
0 或功能键[Home] : 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
^ : 移动到这一行的开始的字符处
$ 或功能键[End] : 移动到这一行的最后面字符处(常用)
[Ctrl] + [f] : 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] : 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] : 屏幕『向下』移动半页
[Ctrl] + [u] : 屏幕『向上』移动半页
H : 光标移动到这个屏幕的最上方那一行的第一个字符
M : 光标移动到这个屏幕的中央那一行的第一个字符
L : 光标移动到这个屏幕的最下方那一行的第一个字符
G : 移动到这个档案的最后一行(常用)
nG : n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
移动到这个档案的第一行,相当于 1G 啊! (常用)
/word: 向光标之下
寻找一个名称为 word 的字符串。例如要在档案内搜寻vbird 这个字符串,就输入 /vbird 即可! (常用)
?word : 向光标之上
寻找一个字符串名称为 word 的字符串。
n : 这个 n 是英文按键。代表『重复前一个搜寻的动作』。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N : 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
:n1,n2 s/word1/word2/g
: n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻vbird 并取代为 VBIRD 则:『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g
: 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为word2 !(常用)
:1,$s/word1/word2/gc
: 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
x, X : 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx : n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd : 删除游标所在的那一整列(常用)
ndd : n 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用)
dnG [x] : 删除光标所在到第n行之间的所有数据
dG : 删除光标所在到最后一行的所有数据
d$ : 删除游标所在处,到该行的最后一个字符
yy : 复制游标所在的那一行(常用)
nyy : n 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用)
ynG : 复制光标所在列到第一列的所有数据
yG : 复制光标所在列到最后一列的所有数据
y0 : 复制光标所在的那个字符到该行行首的所有数据
y$ : 复制光标所在的那个字符到该行行尾的所有数据
p, P : p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
J : 将光标所在列与下一列的数据结合成同一列
c : 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u : 复原前一个动作。(常用)
[Ctrl]+r : 重做上一个动作。(常用)
i, I : 进入插入模式(Insert mode):i 为『从目前光标所在处插入』, I 为『在目前所在行的第一个非空格符处开始插入』。 (常用)
a,A : 进入插入模式(Insert mode):a 为『从目前光标所在的下一个字符处开始插入』, A 为『从光标所在行的最后一个字符处开始插入』。(常用)
o,O : 进入插入模式(Insert mode):这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处插入新的一行』; O 为在目前光标所在处的上一行插入新的一行!(常用)
r, R : 进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R 会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
[Esc] : 退出编辑模式,回到一般模式中(常用)
:w : 将编辑的数据写入硬盘档案中(常用)
:w! : 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q : 离开 vi (常用)
:q! : 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
:wq! : 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ : 这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
:w [filename] : 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] : 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] : 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command : 暂时离开 vi 到指令列模式下执行 command 的显示结果!例如『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
set nu : 显示行号,设定之后,会在每一行的前缀显示该行的行号
set nonu : 与 set nu 相反,为取消行号!
v : 字符选择,会将光标经过的地方反白选择!
V : 行选择,会将光标经过的行反白选择!
[Ctrl]+v : 区块选择,可以用长方形的方式选择资料
y : 将反白的地方复制起来
d : 将反白的地方删除
:n : 编辑下一个档案
:N : 编辑上一个档案
:files : 列出目前这个 vim 的开启的所有档案
1 . 多窗口
:sp [filename] : 开启一个新窗口,如果有加 filename, 表示在新窗口开启一个新档案,否则表示两个窗口为同一个档案内容(同步显示)。
[ctrl]+w+ j [ctrl]+w+↓ : 按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按下 j (或向下箭头键),则光标可移动到下方的窗口。
[ctrl]+w+ k [ctrl]+w+↑ : 同上,不过光标移动到上面的窗口。
[ctrl]+w+ q : 其实就是 :q 结束离开啦! 举例来说,如果我想要结束下方的窗口,那么利用 [ctrl]+w+↓ 移动到下方窗口后,按下 :q 即可离开, 也可以按下[ctrl]+w+q 啊!
:set nu :set nonu : 就是设定与取消行号啊!
:set hlsearch :set nohlsearch
: hlsearch 就是 high light search(高亮度搜寻)。 这个就是设定是否将搜寻的字符串反白的设定值。默认值是 hlsearch
:set autoindent :set noautoindent : 是否自动缩排?autoindent 就是自动缩排。
:set backup : 是否自动储存备份档?一般是 nobackup 的, 如果设定 backup 的话,那么当你更动任何一个档案时,则源文件会被另存成一个档名为filename~ 的档案。 举例来说,我们编辑 hosts ,设定 :set backup ,那么当更动 hosts 时,在同目录下,就会产生 hosts~ 文件名的档案,记录原始的 hosts 档案内容
:set ruler : 还记得我们提到的右下角的一些状态栏说明吗? 这个 ruler 就是在显示或不显示该设定值的啦!
:set showmode : 这个则是,是否要显示 –INSERT– 之类的字眼在左下角的状态栏。
:set backspace=(012) : 一般来说, 如果我们按下 i 进入编辑模式后,可以利用退格键(backspace) 来删除任意字符的。 但是,某些 distribution 则不许如此。此时,我们就可以透过 backspace 来设定啰~ 当 backspace 为 2时,就是可以删除任意值;0 或 1 时,仅可删除刚刚输入的字符, 而无法删除原本就已经存在的文字了!
:set all : 显示目前所有的环境参数设定值。
:set : 显示与系统默认值不同的设定参数, 一般来说就是你有自行变动过的设定参数啦!
:syntax on :syntax off : 是否依据程序相关语法显示不同颜色? 举例来说,在编辑一个纯文本档时,如果开头是以 # 开始,那么该行就会变成蓝色。 如果你懂得写程序,那么这个 :syntax on 还会主动的帮你除错呢!但是, 如果你仅是编写纯文本档案,要避免颜色对你的屏幕产生的干扰,则可以取消这个设定。
:set bg=dark :set bg=light : 可用以显示不同的颜色色调,预设是『 light 』。如果你常常发现批注的字体深蓝色实在很不容易看, 那么这里可以设定为 dark 喔!试看看,会有不同的样式呢!
vim的默认配置一般 在 /etc/vimrc
里面,但一般在 ~/.vimrc
(如果没有的话,可以自行建立)里面设置自定义个性化设置
出现乱码
你的 Linux 系统默认支持的语系数据:这与 /etc/sysconfig/i18n 有关;
你的终端界面 (bash) 的语系: 这与 LANG 这个变数有关;
你的档案原本的编码;
开启终端机的软件,例如在 GNOME 底下的窗口接口。
linux断行符 : $ (LF)
window 断行符 :^M$ (CR/LF)
Dos和windows: 采用回车+换行CR/LF表示下一行.
UNIX/Linux : 采用换行符LF表示下一行.
MAC OS : 采用回车符CR表示下一行.
dos2unix unix2dos : dos和linux文档转化
iconv : 编码转化
一、背景
系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。
二、简介
GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。
GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
GNU’s Screen 官方站点:http://www.gnu.org/software/screen/
三、语法
# 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参数
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 选定的内容贴上
五、使用 screen
5.1 安装screen
流行的Linux发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。
[root@TS-DEV ~]# yum install screen [root@TS-DEV ~]# rpm -qa|grep screen screen-4.0.3-4.el5 [root@TS-DEV ~]#
5.2 创建一个新的窗口
安装完成后,直接敲命令screen就可以启动它。但是这样启动的screen会话没有名字,实践上推荐为每个screen会话取一个名字,方便分辨:
[root@TS-DEV ~]# screen -S david
screen启动后,会创建第一个窗口,也就是窗口No. 0,并在其中打开一个系统默认的shell,一般都会是bash。所以你敲入命令screen之后,会立刻又返回到命令提示符,仿佛什么也没有发生似的,其实你已经进入Screen的世界了。当然,也可以在screen命令之后加入你喜欢的参数,使之直接打开你指定的程序,例如:
[root@TS-DEV ~]# screen vi david.txt
screen创建一个执行vi david.txt的单窗口会话,退出vi 将退出该窗口/会话。
5.3 查看窗口和窗口名称
打开多个窗口后,可以使用快捷键C-a w列出当前所有窗口。如果使用文本终端,这个列表会列在屏幕左下角,如果使用X环境下的终端模拟器,这个列表会列在标题栏里。窗口列表的样子一般是这样:
0$ bash 1-$ bash 2*$ bash
这个例子中我开启了三个窗口,其中*号表示当前位于窗口2,-号表示上一次切换窗口时位于窗口1。
Screen默认会为窗口命名为编号和窗口中运行程序名的组合,上面的例子中窗口都是默认名字。练习了上面查看窗口的方法,你可能就希望各个窗口可以有不同的名字以方便区分了。可以使用快捷键C-a A来为当前窗口重命名,按下快捷键后,Screen会允许你为当前窗口输入新的名字,回车确认。
5.4 会话分离与恢复
你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个screen窗口编辑/tmp/david.txt文件:
[root@TS-DEV ~]# screen vi /tmp/david.txt
之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入C-a d
,Screen会给出detached提示:
暂时中断会话
半个小时之后回来了,找到该screen会话:
[root@TS-DEV ~]# screen -ls
重新连接会话:
[root@TS-DEV ~]# screen -r 12865
一切都在。
当然,如果你在另一台机器上没有分离一个Screen会话,就无从恢复会话了。
这时可以使用下面命令强制将这个会话从它所在的终端分离,转移到新的终端上来:
5.5 清除dead 会话
如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:
5.6 关闭或杀死窗口
正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
如果一个Screen会话中最后一个窗口被关闭了,那么整个Screen会话也就退出了,screen进程会被终止。
除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,不过个人认为还是快捷键比较方便些。
六、screen 高级应用
6.1 会话共享
还有一种比较好玩的会话恢复,可以实现会话共享。假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个screen会话,你朋友可以在他的终端上命令:
[root@TS-DEV ~]# screen -x
这个命令会将你朋友的终端Attach到你的Screen会话上,并且你的终端不会被Detach。这样你就可以和朋友共享同一个会话了,如果你们当前又处于同一个窗口,那就相当于坐在同一个显示器前面,你的操作会同步演示给你朋友,你朋友的操作也会同步演示给你。当然,如果你们切换到这个会话的不同窗口中去,那还是可以分别进行不同的操作的。
6.2 会话锁定与解锁
Screen允许使用快捷键C-a s锁定会话。锁定以后,再进行任何输入屏幕都不会再有反应了。但是要注意虽然屏幕上看不到反应,但你的输入都会被Screen中的进程接收到。快捷键C-a q可以解锁一个会话。
也可以使用C-a x锁定会话,不同的是这样锁定之后,会话会被Screen所属用户的密码保护,需要输入密码才能继续访问这个会话。
6.3 发送命令到screen会话
在Screen会话之外,可以通过screen命令操作一个Screen会话,这也为使用Screen作为脚本程序增加了便利。关于Screen在脚本中的应用超出了入门的范围,这里只看一个例子,体会一下在会话之外对Screen的操作:
[root@TS-DEV ~]# screen -S sandy -X screen ping www.baidu.com
这个命令在一个叫做sandy的screen会话中创建一个新窗口,并在其中运行ping命令。
6.4 屏幕分割
现在显示器那么大,将一个屏幕分割成不同区域显示不同的Screen窗口显然是个很酷的事情。可以使用快捷键C-a S将显示器水平分割,Screen 4.00.03版本以后,也支持垂直分屏,快捷键是C-a |。分屏以后,可以使用C-a <tab>在各个区块间切换,每一区块上都可以创建窗口并在其中运行进程。
可以用C-a X快捷键关闭当前焦点所在的屏幕区块,也可以用C-a Q关闭除当前区块之外其他的所有区块。关闭的区块中的窗口并不会关闭,还可以通过窗口切换找到它。
6.5 C/P模式和操作
screen的另一个很强大的功能就是可以在不同窗口之间进行复制粘贴了。使用快捷键C-a <Esc>或者C-a [可以进入copy/paste模式,这个模式下可以像在vi中一样移动光标,并可以使用空格键设置标记。其实在这个模式下有很多类似vi的操作,譬如使用/进行搜索,使用y快速标记一行,使用w快速标记一个单词等。关于C/P模式下的高级操作,其文档的这一部分有比较详细的说明。
一般情况下,可以移动光标到指定位置,按下空格设置一个开头标记,然后移动光标到结尾位置,按下空格设置第二个标记,同时会将两个标记之间的部分储存在copy/paste buffer中,并退出copy/paste模式。在正常模式下,可以使用快捷键C-a ]将储存在buffer中的内容粘贴到当前窗口。
6.6 更多screen功能
同大多数UNIX程序一样,GNU Screen提供了丰富强大的定制功能。你可以在Screen的默认两级配置文件/etc/screenrc和$HOME/.screenrc中指定更多,例如设定screen选项,定制绑定键,设定screen会话自启动窗口,启用多用户模式,定制用户访问权限控制等等。如果你愿意的话,也可以自己指定screen配置文件。
以多用户功能为例,screen默认是以单用户模式运行的,你需要在配置文件中指定multiuser on 来打开多用户模式,通过acl*(acladd,acldel,aclchg…)命令,你可以灵活配置其他用户访问你的screen会话。更多配置文件内容请参考screen的man页。
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | `expr $a + $b` 结果为 30。 |
– | 减法 | `expr $a – $b` 结果为 10。 |
* | 乘法 | `expr $a \* $b` 结果为 200。 |
/ | 除法 | `expr $b / $a` 结果为 2。 |
% | 取余 | `expr $b % $a` 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 true。 |
-ne | 检测两个数是否相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
运算符 | 说明 | 举例 |
---|---|---|
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [ ! false ] 返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否为0,不为0返回 true。 | [ -z $a ] 返回 true。 |
str | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |
操作符 | 说明 | 举例 |
---|---|---|
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-d file | 检测文件是否是目录,如果是,则返回 true。 | [ -d $file ] 返回 false。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | [ -f $file ] 返回 true。 |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 | [ -g $file ] 返回 false。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | [ -k $file ] 返回 false。 |
-p file | 检测文件是否是具名管道,如果是,则返回 true。 | [ -p $file ] 返回 false。 |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | [ -u $file ] 返回 false。 |
-r file | 检测文件是否可读,如果是,则返回 true。 | [ -r $file ] 返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 | [ -w $file ] 返回 true。 |
-x file | 检测文件是否可执行,如果是,则返回 true。 | [ -x $file ] 返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | [ -e $file ] 返回 true。 |
在shell命令终端中,Ctrl+n相当于方向向下的方向键,Ctrl+p相当于方向向上的方向键。 在命令终端中通过它们或者方向键可以实现对历史命令的快速查找。这也是快速输入命令的技巧。 在命令终端中可以通过Ctrl+r 实现快速检索使用过的历史命令。Ctrl+r中r是retrieve中r。 Ctrl+a:光标回到命令行首。 (a:ahead) Ctrl+e:光标回到命令行尾。 (e:end) Ctrl+b:光标向行首移动一个字符。 (b:backwards) Ctrl+ f:光标向行尾移动一个字符。 (f:forwards) Ctrl+w: 删除光标处到行首的字符。 Ctrl+k:删除光标处到行尾的字符。 Ctrl+u:删除整个命令行文本字符。 Ctrl+h:向行首删除一个字符。 Ctrl+d:向行尾删除一个字符。 Ctrl+y::粘贴Ctrl+u,Ctrl+k,Ctrl+w删除的文本。 Ctrl+p: 上一个使用的历史命令。 (p:previous) Ctrl+n: 下一个使用的历史命令。(n:next ) Ctrl+r:快速检索历史命令。(r:retrieve)。 Ctrl+t: 交换光标所在字符和其前的字符。 Ctrl+i:相当于Tab键。 Ctrl+o:相当于Ctrl+m. Ctrl+m:相当Enter键。 其他控制键: Ctrl+s:使终端发呆,静止,可以使快速输出的终端屏幕停下来。 Ctrl+q:退出Ctrl+s引起的发呆。 Ctrl+z:使正在运行在终端的任务,运行于后台。 (可用fg恢复) Ctrl+c:中断终端中正在执行的任务。 Ctrl+d: 在空命令行的情况下可以退出终端。 Ctrl+[ :相当于Esc键。 Esc键:连续按3次显示所有的支持的终端命令。 Tab键:命令、文件名等自动补全功能。
笔记地址 http://doc.xiaofangmoon.com/linux/_book/index.html