vim 多窗口操作

一、打开文件

  1. vim  index.html index.php a.txt  :打开3个文件

2. vim -o index.html index.php a.txt :  水平分割打开3个文件  -O 垂直分割

  1. vim -p index.html index.php a.txt : 打开3个文件,有tab选项卡,tab卡第一个文件名为当前打开的文件

二、基本命令

:e# 或 Ctrl+ˆ      编辑上一个文档,用于两个文档相互交换编辑时使用。?# 代表的是编辑前一次编辑的文档

:n          编辑下一个文档。

:2n        编辑下两个文档。

:N          编辑上一个文档。注意,该方法只能用于同时打开多个文档。

:b          文档名或编号      移至该文档。

Ctrl+6    下一个文件

:bn         下一个文件

:bp        上一个文件

:f          或者 ctrl+g     :  显示当前文件的基本信息

:f         文档名         改变编辑中的文档名。(file) ,  保存后生成一个新文件, 原来文件内容不变

三、多窗口下

(1) :ls    查看打开的文件

  1.  %a  正在编辑的文件,  #a 上次编辑的文件的文件  a 正常

  2.  后面一个有一个 + 号,表示有修改,没有保存

(2) 切换窗口

  1.  ctrl+w w   依次切换窗口

  2.  ctrl+w  上下左右   hjkl   切换窗口

  3.  ctrl +w   HJKL  可以移动窗口

(3) 关闭窗口

  1. 多窗口下面 :

:q 关闭单个窗口

:qa 关闭所有窗口

  1. ctrl + w  q  : 关闭所处分屏

  2. :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)

:!command        在执行的命令前加上!,如!ls ,!ls -a
 r  !command       将command命令的执行结果插入到文本当前行的下一行
 3  !command      将文本中第三行的内容输入到命令command中进行处理,并将第三行的内容替换为命令的执行结果
:1,3   !command    将文本中第一行到第三行的内容输入到命令command中进行处理,并将第一行到第三行的内容替换为命令的执行结果
 3  w !command      将文本中第三行的内容输入到命令command中进行处理,不改变当前编辑文件的内容.

:1,3  w  !command    将文本中第一行到第三行的内容输入到命令command中进行处理,不改变当前编辑文件的内容

vim的基本操作

vim的基本操作

基本操作

移动光标的方法

  1. 光标
  • h 或 向左箭头键(←) :光标向左移动一个字符

  • j 或 向下箭头键(↓) :光标向下移动一个字符

  • k 或 向上箭头键(↑) :光标向上移动一个字符

  • l 或 向右箭头键(→) : 光标向右移动一个字符

    • : 光标移动到非空格符的下一列
  • 光标移动到非空格符的上一列

  • n<space> : 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动20 个字符距离。

  • 0 或功能键[Home] : 这是数字『 0 』:移动到这一行的最前面字符处 (常用)

  • ^ : 移动到这一行的开始的字符处

  • $ 或功能键[End] : 移动到这一行的最后面字符处(常用)

  1. 翻页
  • [Ctrl] + [f] : 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)

  • [Ctrl] + [b] : 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)

  • [Ctrl] + [d] : 屏幕『向下』移动半页

  • [Ctrl] + [u] : 屏幕『向上』移动半页

  1. 页面光标
  • H : 光标移动到这个屏幕的最上方那一行的第一个字符

  • M : 光标移动到这个屏幕的中央那一行的第一个字符

  • L : 光标移动到这个屏幕的最下方那一行的第一个字符

  • G : 移动到这个档案的最后一行(常用)

  • nG : n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)

  • 移动到这个档案的第一行,相当于 1G 啊! (常用)

搜索与取代

  1. 搜索
  • /word: 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻vbird 这个字符串,就输入 /vbird 即可! (常用)

  • ?word : 向光标之上寻找一个字符串名称为 word 的字符串。

  • n : 这个 n 是英文按键。代表『重复前一个搜寻的动作』。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!

  • N : 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。

  1. 替换
  • :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) 是否需要取代!(常用)

删除、复制与贴上

  1. 删除
  • x, X : 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)

  • nx : n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。

  • dd : 删除游标所在的那一整列(常用)

  • ndd : n 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用)

  • dnG [x] : 删除光标所在到第n行之间的所有数据

  • dG : 删除光标所在到最后一行的所有数据

  • d$ : 删除游标所在处,到该行的最后一个字符

  1. 复制和粘贴
  • yy : 复制游标所在的那一行(常用)

  • nyy : n 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用)

  • ynG : 复制光标所在列到第一列的所有数据

  • yG : 复制光标所在列到最后一列的所有数据

  • y0 : 复制光标所在的那个字符到该行行首的所有数据

  • y$ : 复制光标所在的那个字符到该行行尾的所有数据

  • p, P : p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)

  1. 其他指令
  • J : 将光标所在列与下一列的数据结合成同一列

  • c : 重复删除多个数据,例如向下删除 10 行,[ 10cj ]

  • u : 复原前一个动作。(常用)

  • [Ctrl]+r : 重做上一个动作。(常用)

一般模式切换到编辑模式的可用的按钮说明

  1. 进入插入或取代的编辑模式
  • 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] : 退出编辑模式,回到一般模式中(常用)

指令列模式的可用的按钮说明

  1. 指令列的储存、离开等指令
  • :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 输出的档案信息!

  1. vim 环境的变更
  • set nu : 显示行号,设定之后,会在每一行的前缀显示该行的行号

  • set nonu : 与 set nu 相反,为取消行号!

tips

  1. 特别注意,在 vi 中,『数字』是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到 第几个什么什么的意思。举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前~那我 要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。

额外功能

区块选择

  1. v : 字符选择,会将光标经过的地方反白选择!

  2. V : 行选择,会将光标经过的行反白选择!

  3. [Ctrl]+v : 区块选择,可以用长方形的方式选择资料

  4. y : 将反白的地方复制起来

  5. d : 将反白的地方删除

多档案编辑的按键

  1. :n : 编辑下一个档案

  2. :N : 编辑上一个档案

  3. :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 啊!

环境设置与记录

记录

  1. vim 环境设定与记录: ~/.vimrc, ~/.viminfo

vim 的环境设定参数

  1. 环境设置
  • :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 喔!试看看,会有不同的样式呢!

  1. vim的默认配置一般 在 /etc/vimrc 里面,但一般在 ~/.vimrc (如果没有的话,可以自行建立)里面设置自定义个性化设置

  2. 出现乱码

  • 你的 Linux 系统默认支持的语系数据:这与 /etc/sysconfig/i18n 有关;

  • 你的终端界面 (bash) 的语系: 这与 LANG 这个变数有关;

  • 你的档案原本的编码;

  • 开启终端机的软件,例如在 GNOME 底下的窗口接口。

DOS 与 Linux 的断行字符

  1. 区别
  • linux断行符 : $ (LF)

  • window 断行符 :^M$ (CR/LF)

  1. 系统换行问题
  • Dos和windows: 采用回车+换行CR/LF表示下一行.

  • UNIX/Linux : 采用换行符LF表示下一行.

  • MAC OS : 采用回车符CR表示下一行.

  1. dos2unix unix2dos : dos和linux文档转化

  2. iconv : 编码转化

  • iconv –list : 查看系统支持的编码方式

linux screen

一、背景

系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

二、简介

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

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

  • 会话恢复
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
  • 多窗口
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。
  • 会话共享
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页。

linux tree 命令

tree

中文解释:tree
功能说明:以树状图列出目录的内容。
语  法:tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录…]
补充说明:执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件。
参  数:
 -a   显示所有文件和目录。
 -A   使用ASNI绘图字符显示树状图而非以ASCII字符组合。
 -C   在文件和目录清单加上色彩,便于区分各种类型。
 -d   显示目录名称而非内容。
 -D   列出文件或目录的更改时间。
 -f   在每个文件或目录之前,显示完整的相对路径名称。
 -F   在执行文件,目录,Socket,符号连接,管道名称名称,各自加上”*”,”/”,”=”,”@”,”|”号。
 -g   列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
 -i   不以阶梯状列出文件或目录名称。
 -I<范本样式>   不显示符合范本样式的文件或目录名称。
 -l   如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
 -n   不在文件和目录清单加上色彩。
 -N   直接列出文件和目录名称,包括控制字符。
 -p   列出权限标示。
 -P<范本样式>   只显示符合范本样式的文件或目录名称。
 -q   用”?”号取代控制字符,列出文件和目录名称。
 -s   列出文件或目录大小。
 -t   用文件和目录的更改时间排序。
 -u   列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
 -x   将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。

 

然后看我遇到的情况:

tree -L
提示: tree: Missing argument to -L option
然后tree -L 1
显示一级目录和文件
tree -L 1 -d
只显示一级目录
所以我们可以用tree -L 1 -d这个显示该目录下的一级目录

linux命令行编辑快捷键

ctrl + ? 撤消前一次输入

ctrl + c 另起一行

ctrl + r 输入单词搜索历史命令

ctrl + u 删除光标前面所有字符相当于VIM里d shift+^

ctrl + k 删除光标后面所有字符相当于VIM里d shift+$

删除
ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dl
ctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dh
ctrl + k 删除光标后面所有字符相当于VIM里d shift+$
ctrl + u 删除光标前面所有字符相当于VIM里d shift+^
ctrl + w 删除光标前一个单词相当于VIM里db
ctrl + y 恢复ctrl+u上次执行时删除的字符
ctrl + ? 撤消前一次输入
alt + r 撤消前一次动作
alt + d 删除光标所在位置的后单词

移动
ctrl + a 将光标移动到命令行开头相当于VIM里shift+^
ctrl + e 将光标移动到命令行结尾处相当于VIM里shift+$
ctrl + f 光标向后移动一个字符相当于VIM里l
ctrl + b 光标向前移动一个字符相当于VIM里h
ctrl + 方向键左键 光标移动到前一个单词开头
ctrl + 方向键右键 光标移动到后一个单词结尾
ctrl + x 在上次光标所在字符和当前光标所在字符之间跳转
alt + f 跳到光标所在位置单词尾部

替换
ctrl + t 将光标当前字符与前面一个字符替换
alt + t 交换两个光标当前所处位置单词和光标前一个单词
alt + u 把光标当前位置单词变为大写
alt + l 把光标当前位置单词变为小写
alt + c 把光标当前位置单词头一个字母变为大写
^oldstr^newstr 替换前一次命令中字符串

历史命令编辑
ctrl + p 返回上一次输入命令字符
ctrl + r 输入单词搜索历史命令
alt + p 输入字符查找与字符相接近的历史命令
alt + > 返回上一次执行命令

其它
ctrl + s 锁住终端
ctrl + q 解锁终端
ctrl + l 清屏相当于命令clear
ctrl + c 另起一行
ctrl + i 类似TAB健补全功能
ctrl + o 重复执行命令
alt + 数字键 操作的次数

Linux查看系统配置常用命令

 

# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量 资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载 磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况 网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息 进程
# ps -ef # 查看所有进程
# top # 实时显示进程状态 用户
# w # 查看活动用户
# id # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户

# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务 服务
# chkconfig –list # 列出所有系统服务
# chkconfig –list | grep on # 列出所有启动的系统服务 程序
# rpm -qa # 查看所有安装的软件包

linux添加环境变量的方法总结

linux添加环境变量的方法总结
linux对环境变量有无双引号、或者变量用不用{}括起来并不敏感,小小的看了下profile文件,似乎系统如果发现变量没有引号,会自动加上。
但变量前必须加$符号,类似于perl
  www.2cto.com
三种添加环境变量的方法,在fedora使用jena时都试过了:
1、直接使用export命令:
比如:
export PATH=$PATH:/home/lm/apache-jena-2.7.4/bin
export CLASSPATH=.:/home/liaomeng/apache-jena-2.7.4/lib
命令export可以查看各个系统变量和路径,发现系统变量中PATH中多了设置的路径,增加了CLASSPATH变量,则设置成功
也可单个变量输出查看:
echo $CLASSPATH
echo $PATH
2. 修改/etc/profile文件
在/etc/profile文件末尾添加:
export JENAROOT=/home/liaomeng/apache-jena-2.7.4
export PATH=$JENAROOT/bin:$PATH             ##在已有的PATH变量前面添加jena路径,其中的冒号为分隔符
export CLASSPATH=.:$JENAROOT/lib/jena-core-2.7.4.jar        ##使用*.jar好像不好使,试了很多次,如果有多个jar包需要添加,也用冒号分隔
  www.2cto.com
source /etc/profile使修改生效,不必重启系统
有人说也可以在/etc/profile.d/文件夹中添加个sh文件,/etc/profile文件似乎会自动读取/etc/profile.d/文件夹中的各个脚本文件,我还没试过。
另外需要注意:
CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的致命错误。
在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。
软件越装越多,环境变量越添越多,为了避免造成混乱,所以建议所有语句都添加在文件结尾,按软件的安装顺序添加。
3. 修改主目录下的隐藏文件./bashrc
修改方式与修改/etc/profile文件相同
source .bashrc使修改生效

 linux中查找命令find、locate、whereis、which、type区别

1.find
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。与查询数据库(/var/lib/locatedb)文件不同,find查找磁盘空间

find的使用格式如下:

$ find <指定目录> <指定条件> <指定动作>

– <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。

– <指定条件>: 所要搜索的文件的特征。

– <指定动作>: 对搜索结果进行特定的处理。

如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

find的使用实例:

$ find . -name ‘my*’

搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。

$ find . -name ‘my*’ -ls

搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。

$ find . -type f -mmin -10

搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。

2. locate

Java代码

locate命令其实是”find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

locate命令的使用实例:

$ locate /etc/sh

搜索etc目录下所有以sh开头的文件。

$ locate ~/m

搜索用户主目录下,所有以m开头的文件。

$ locate -i ~/m

搜索用户主目录下,所有以m开头的文件,并且忽略大小写。

3. whereis

Java代码

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。同locate一样,查询数据库(/var/lib/locatedb)文件

whereis命令的使用实例:

$ whereis grep

4. which

Java代码

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

which命令的使用实例:

$ which grep

5. type

Java代码

type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。

type命令的使用实例:

$ type cd

系统会提示,cd是shell的自带命令(build-in)。

$ type grep

系统会提示,grep是一个外部命令,并显示该命令的路径。

$ type -p grep

加上-p参数后,就相当于which命令

linux下解压命令大全

.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName

.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
———————————————
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName

.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
———————————————
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知

.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
———————————————
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z

解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
———————————————
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
———————————————
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
———————————————
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName
———————————————
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
———————————————
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf –
———————————————
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解压:sEx x FileName.*
压缩:sEx a FileName.* FileName

sEx只是调用相关程序,本身并无压缩、解压功能,请注意!

gzip 命令
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。

语法:gzip [选项] 压缩(解压缩)的文件名该命令的各选项含义如下:

-c 将输出写到标准输出上,并保留原有文件。-d 将压缩文件解压。-l 对每个压缩文件,显示下列字段:     压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名字-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。-t 测试,检查压缩文件是否完整。-v 对每一个压缩和解压的文件,显示文件名和压缩比。-num 用指定的数字 num 调整压缩的速度,-1 或 –fast 表示最快压缩方法(低压缩比),-9 或–best表示最慢压缩方法(高压缩比)。系统缺省值为 6。指令实例:

gzip *% 把当前目录下的每个文件压缩成 .gz 文件。gzip -dv *% 把当前目录下每个压缩的文件解压,并列出详细的信息。gzip -l *% 详细显示例1中每个压缩的文件的信息,并不解压。gzip usr.tar% 压缩 tar 备份文件 usr.tar,此时压缩文件的扩展名为.tar.gz。