[Linux] Linux指令汇总(持续更新中...)

写在前面:

  以前真心没有玩过Linux系统,总感觉整天摆弄Linux的同学都是大牛。如今,在公司里实习需要远程登录Linux服务器,所有的代码都要在开发板上完成,所以被逼无奈也不得不定下心来好好学学Linux系统的各种操作。我现在用的远程登录软件是PuTTY,所以简单总结一下常用的PuTTY指令,方便以后进行查阅。

1. PuTTY介绍

  随着Linux在服务器端应用的普及,Linux系统管理越来越依赖于远程。在各种远程登录工具中,PuTTY是出色的工具之一。PuTTY是一个免费的、Windows 32平台下的telnet、rlogin和ssh客户端,但是功能丝毫不逊色于商业的telnet类工具。

  用它来远程管理Linux十分好用,其主要优点如下:
  • 完全免费;
  • 在Windows系统下运行的都非常好;
  • 全面支持ssh1和ssh2;
  • 绿色软件,无需安装,下载后在桌面建个快捷方式即可使用;
  • 体积很小,仅0.5MB(0.63 版本),下载地址:请点这里
  • 操作简单,所有的操作都在一个控制面板中实现。

2. PuTTY设置

  使用Putty连接Linux VPS完全详细教程请见:PuTTY中文站

3. Linux常用操作指令介绍

  在介绍Linux的操作指令之前,先简单的介绍一下shell(这里可不是说的shell排序哦)。

  什么是shell?操作系统与外部最主要的接口就叫做shell。也许这不是很好理解,举个简单的例子。最常见的cmd命令行,这是windows操作系统下的一个shell。说白了,我对shell的理解是:shell是指开发者提供给客户的接口,方便客户更好的使用他们的虚拟主机服务。shell分为两类:图形界面shell和命令行式的shell。本文中主要涉及PuTTY中命令行式的shell。

3.1 基本指令篇

  1)-ls 列出当前文件夹下所有内容

    $ls -o 列出当前文件夹中所有内容,含详细信息,但不列出group

    $ls -l 同上,含group信息

    $ls -a 列出当前文件夹中所有内容,包含以”.”开头的文件

    $ls -t 按更改时间排序

    $ls -v 按版本先后排序

    注:其实这么多,最常用的还是ls指令。

  2)-cd [dir] 进入文件夹

  3)-pwd 显示当前路径

  4)-mkdir [dir] 新建文件夹

  5)-rm [file] 删除文件/文件夹

    $rm -f [file] 强行删除,忽略不存在的文件,无提示

    $rm -r [file] 递归删除所有内容

    $rm -rf [file] 删除目录

  6)-cp 拷贝

    $cp [options] [source] [destination] ——其中[options]为:-f(强行拷贝)或-r(递归拷贝)

  7)-mv 重命名或移动

    $mv [options] [source] [destination]——其中[options]为:-f(强行移动/重命名), -i(移动/重命名前尝试), -u(更新)

    例如:$mv wwwroot/cgi-bin . 将/cgi-bin目录移动到当前目录下(注意当前目录表示为“.”)

       $mv cronfile.txt myfile.txt 将cronfile.txt重命名为myfile.txt

  8) -vim 打开文件(红色标记的为常用指令)

    $vim [file] 打开一个文件,其中file可以为单个文件也可以为多个文件

    vim模式:

      正常模式(按Esc或Ctrl+[进入) 左下角显示文件名或为空
      插入模式(按i键进入) 左下角显示--INSERT--
      可视模式(按r键进入) 左下角显示--VISUAL--

    vim导航:

      % 括号匹配

    vim查找命令:

      /text  查找text,按n健查找下一个,按N健查找前一个。

      ?text  查找text,反向查找,按n健查找下一个,按N健查找前一个。

      vim中有一些特殊字符在查找时需要转义  .*[]^%/?~$

      vim查找特殊字符(二合字母):用命令:digraphs可以查看可用的二合字母列表,不过输出不是很好阅读。可以用:h  digraph-table查看另一个更好阅读的列表,并且该列表对二合字母进行了分类,该命令相当于直接打开了vim的digraph.txt文档。

      :set ignorecase  忽略大小写的查找

      :set noignorecase  不忽略大小写的查找

      查找很长的词,键入麻烦,可以将光标移动到该词上,按*或#键即可以该单词进行搜索,相当于/搜索。而#命令相当于?搜索。

      :set hlsearch  高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配。

      :set nohlsearch  关闭高亮搜索显示

      :nohlsearch  关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。

      :set incsearch  逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。

      :set wrapscan  重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。

    vim撤销命令:

      u 撤销(Undo)
      U 撤销对整行的操作
      Ctrl + r 重做(Redo),即撤销的撤销。

    vim退出命令:

      :wq 保存并退出

      ZZ 保存并退出

      :q! 强制退出并忽略所有更改

      :e! 放弃所有修改,并打开原来文件

    vim窗口分割命令:

      :split 水平分割窗口

      :vsplit 垂直分割窗口

    vim在窗口间游走:

      在gvim或vim中,在窗口中移动其实非常简单,因为gvim已默认支持鼠标点击来换编辑窗口,而vim中,则可以打开mouse选项,

      :set mouse=a 为命令、输入、导航都激活鼠标的使用

      我们知道vim的特色就是可以脱离鼠标而工作,所以可以使用vim提供的全套导航命令,在会话中快速而准确的移动编辑窗口。

       按住Ctrl + W,然后再加上h, j, k, l,分别表示向左、下、上、右移动窗口

      Ctrl + w + h:向左移动窗口

      Ctrl + w + j: 向下移动窗口

      Ctrl + w + k: 向上移动窗口

      Ctrl + w + l: 向右移动窗口

      Ctrl + w + w:这个命令会在所有窗口中循环移动

      Ctrl + w + t:移动到最左上角的窗口

      Ctrl + w + b:移动到最右下角的窗口

      Ctrl + w + p:移动到前一个访问的窗口

    vim移动窗口:

       vim中有两种移动窗口方式,一种只是简单地在屏幕上切换窗口,尺寸维持不变;另一种则是改变窗口的实际布局,还会调整尺寸,以填充它移动的位置。

       移动窗口本身(轮换或交换):

       Ctrl + w + r:向右或向下方交换窗口,而Ctrl + w + R则和它方向相反。光标会随着窗口而移动

       Ctrl + w + x:交换同列或同行的窗口的位置。vim默认交换当前窗口的与它下一个窗口的位置,如果下方没有窗口,则试着与上一个窗口交换位置。亦可在此命令前加上数量,与制定的窗口交换位置。

      移动窗口并改变其布局:

      注:下面的第三个字母都是大写,按玩Ctrl + w之后,按shif + 相应的字母。后面用^代替Ctrl

      Ctrl + w + K :移动当前窗口至屏幕顶端,并占用全部宽度

       ^WJ: 移动窗口至屏幕底端,并占用全部宽度

       ^WH:移动窗口至屏幕左端,并占用全部高度

       ^WL:移动窗口至屏幕右端,并占用全部高度

      ^WT :移动窗口至屏新的现有分页

    调整窗口尺寸:

      改变当前窗口的尺寸,同时当然也会影响到其他窗口。在gvim和vim中,可以用鼠标点击窗口的顶部白色条并窗口直接调整尺寸。也可以直接用命令,调整尺寸命令也是以Ctrl + W开头:

       Ctrl + W + =  :让所有窗口调整至相同尺寸(平均划分)

       Ctrl + W + -:将当前窗口的高度减少一行,也可在ex命令中,:resize -4明确指定减少的尺寸

       Ctrl + W + +:将当前窗口的高度增加一行。同样在ex命令中,:resize +n 明确指定增加尺寸

       Ctrl + W + < :将当前窗口的宽度减少

       Ctrl + W + > :将当前窗口的宽度增加

       Ctrl + W + |:将当前窗口的宽度调到最大,也可他哦你通过ex命令:vertical resize n明确指定改变宽度

    更多vim命令:    

      :qall 意思很明显"quit all"3. 如果这些窗口中有被修改又没保存的,Vim 就不会退出. 光标也会自动被定位到该窗口中. 这样你可以用":write"来保存修改, 或用":quit!"放弃这些改动.

      :wall 来保存所有被修改的窗口. 命令意为"write all"1. 但实际上, 它只会存盘那些改动过的. Vim很清楚重写一遍完全没有改变的文件毫无意义.

      :wqall 这个命令将保存所有被修改的文件然后退出Vim.

      :qall! 慎用! 这一丢可就再也回不来了!为每一个文件打开一个窗口。

    更加详细的vim指令可以参见:

      vim命令合集

      Linux文件查看/编辑方法介绍

  9)窗口控制命令

    Ctrl+a c 先同时按住Ctrl+a,释放后再按c,创建新窗口;

    Ctrl+a n 循环向前切换窗口;

    Ctrl+a p 循环向后切换窗口;

      Ctrl+a 1 切换到窗口1(输入不同的数字可切换任意窗口)

    Ctrl+a A(大写) 重命名窗口

    Ctrl+a K(大写) 或者exit:关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)

    Ctrl+a [ : 查看窗口历史缓存信息

  10)cat命令

    cat file1.txt 显示 file1.txt 文件的内容; 
    cat file1.txt file2.txt 显示 file1.txt 和file2.txt 文件的内容; 
    cat -n file1.txt 显示 file1.txt 文件的内容同时显示行号;

  11)压缩与解压tar.gz

    压缩命令:

    命令格式:tar  -zcvf   压缩文件名.tar.gz   被压缩文件名

  可先切换到当前目录下。压缩文件名和被压缩文件名都可加入路径。

    解压缩命令:

    命令格式:tar  -zxvf   压缩文件名.tar.gz

    解压缩后的文件只能放在当前的目录。

  12)Linux时间表示

    由常规时间转Linux字符串:
      date -d "2015-07-01 00:01:00" +%s
      输出:1435680060
    由Linux字符串解码出常规时间:
      date -d@1435680060
      输出:Wed Jul  1 00:01:00 CST 2015

3.2 复制粘贴

    1)从windows中复制,往PuTTY中粘贴
    Step1: windows中复制:直接选中文本,按Ctrl+C;
    Step2: 点鼠标右键在PuTTY中完成粘贴。

   2)从PuTTY中复制,往windows中粘贴
    Step1: PuTTY用鼠标左键选中即已经放到剪贴板;

    Step2: 在windows的其他编辑器或输入栏按Ctrl+V 粘贴。

   3)从PuTTY中复制,往PuTTY中粘贴

    Step1: PuTTY用鼠标左键选中即已经放到剪贴板;

    Step2: 直接点鼠标右键,在PuTTY中粘贴。

  注:putty选择和复制小技巧

   鼠标左键按住拖拉选择,即已经复制。双击鼠标左键,选择复制一个单词,支持中文。双击并在第二次按下时不放,拖动鼠标左键,会按单词选择。鼠标三击,会选择并复制一行。鼠标三击并在最后一击时拖动,会按行选择。按住左Alt,拖动鼠标左键,会选择方块。但putty菜单的windows(窗口)->move hotkey(移动热键)的左Alt+左键拖动应取消。选择完了要补选复制,可以按下中键并拖动。补选方式和此前的选择方式一样,单击的补选是按字母,双击的补选是按单词。三击的补选是按行。窗口选择的补选是窗口选择。

3.3 wget下载工具

  wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

  语法:

  wget(选项)(参数)
  选项:

  -a<日志文件>:在指定的日志文件中记录资料的执行过程;

  -A<后缀名>:指定要下载文件的后缀名,多个后缀名之间使用逗号进行分隔;

  -b:进行后台的方式运行wget;

  -B<连接地址>:设置参考的连接地址的基地地址;

  -c:继续执行上次终端的任务;

  -C<标志>:设置服务器数据块功能标志on为激活,off为关闭,默认值为on;

  -d:调试模式运行指令;

  -D<域名列表>:设置顺着的域名列表,域名之间用“,”分隔;

  -e<指令>:作为文件“.wgetrc”中的一部分执行指定的指令;

  -h:显示指令帮助信息;

  -i<文件>:从指定文件获取要下载的URL地址;

  -l<目录列表>:设置顺着的目录列表,多个目录用“,”分隔;

  -L:仅顺着关联的连接;

  -r:递归下载方式;

  -nc:文件存在时,下载文件不覆盖原有文件;

  -nv:下载时只显示更新和出错信息,不显示指令的详细执行过程;

  -q:不显示指令执行过程;

  -nh:不查询主机名称;

  -v:显示详细执行过程;

  -V:显示版本信息;

  --passive-ftp:使用被动模式PASV连接FTP服务器;

  --follow-ftp:从HTML文件中下载FTP连接文件。

  参数:

  URL:下载指定的URL地址。

  示例:

  1)使用wget下载单个文件:

  wget http://www.linuxde.net/testfile.zip

  该例子是从网络下载一个文件并保存在当前目录,在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。

  2)下载并以不同的文件名保存:

  wget -O wordpress.zip http://www.linuxde.net/download.aspx?id=1080

  wget默认会以最后一个符合/的后面的字符来命令,对于动态链接的下载通常文件名会不正确。

  错误:下面的例子会下载一个文件并以名称download.aspx?id=1080保存:

  wget http://www.linuxde.net/download?id=1

  即使下载的文件是zip格式,它仍然以download.php?id=1080命令。

  正确:为了解决这个问题,我们可以使用参数-O来指定一个文件名:

  wget -O wordpress.zip http://www.linuxde.net/download.aspx?id=1080

  3)wget限速下载:

  wget --limit-rate=300k http://www.linuxde.net/testfile.zip

  当你执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。

  4)使用wget断点续传:

  wget -c http://www.linuxde.net/testfile.zip

  使用wget -c重新启动下载中断的文件,对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。

  5)使用wget后台下载:

  wget -b http://www.linuxde.net/testfile.zip

  Continuing in background, pid 1840.

  Output will be written to `wget-log'.

  对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载,你可以使用以下命令来察看下载进度: tail -f wget-log

  6)伪装代理名称下载:

  wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.linuxde.net/testfile.zip

  有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过--user-agent参数伪装。

  7)测试下载链接:

  当你打算进行定时下载,你应该在预定时间测试下载链接是否有效。我们可以增加--spider参数进行检查。

  wget --spider URL

  如果下载链接正确,将会显示:

  Spider mode enabled.

  Check if remote file exists.

  HTTP request sent, awaiting response... 200 OK

  Length: unspecified [text/html]

  Remote file exists and could contain further links, but recursion is disabled -- not retrieving.

  这保证了下载能在预定的时间进行,但当你给错了一个链接,将会显示如下错误:

  wget --spider url Spider mode enabled.

  Check if remote file exists.

  HTTP request sent, awaiting response...

  404 Not Found Remote file does not exist -- broken link!!!

  你可以在以下几种情况下使用--spider参数:

  • 定时下载之前进行检查 间隔检测网站是否可用
  • 检查网站页面的死链接
  • 增加重试次数:

  wget --tries=40 URL

  如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要,你可以使用--tries增加重试次数。

  8)下载多个文件:

   wget -i filelist.txt

  首先,保存一份下载链接文件:

  cat > filelist.txt url1 url2 url3 url4

  接着使用这个文件和参数-i下载。

  9)下载镜像网站:

   wget --mirror -p --convert-links -P ./LOCAL URL

  下载整个网站到本地。

  --miror开户镜像下载。

  -p下载所有为了html页面显示正常的文件。

  --convert-links下载后,转换成本地的链接。

  -P ./LOCAL保存所有文件和目录到本地指定目录。

  10)过滤指定格式下载:

  wget --reject=gif ur

  下载一个网站,但你不希望下载图片,可以使用这条命令。

  11)把下载信息存入日志文件:

  wget -o download.log URL

  不希望下载信息直接显示在终端而是在一个日志文件,可以使用。

  12)限制总下载文件大小:

  wget -Q5m -i filelist.txt

  当你想要下载的文件超过5M而退出下载,你可以使用。注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。

  下载指定格式文件:

  wget -r -A.pdf url

  13)可以在以下情况使用该功能:

  下载一个网站的所有图片。

  下载一个网站的所有视频。

  下载一个网站的所有PDF文件。

  14)FTP下载:

  wget ftp-url

  wget --ftp-user=USERNAME --ftp-password=PASSWORD url

  可以使用wget来完成ftp链接的下载。 使用wget匿名ftp下载:

  wget ftp-url

  使用wget用户名和密码认证的ftp下载:

  wget --ftp-user=USERNAME --ftp-password=PASSWORD url

  以上内容整理自: http://man.linuxde.net/wget

3.4 screen命令

  3.4.1. 背景

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

  3.4.2 简介

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

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

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

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

  3.4.3 语法

  # 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作业。

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

  3.4.5 使用 screen

  安装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 ~]#

  创建一个新的窗口

  安装完成后,直接敲命令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 将退出该窗口/会话。

  查看窗口和窗口名称

  打开多个窗口后,可以使用快捷键C-a w列出当前所有窗口。如果使用文本终端,这个列表会列在屏幕左下角,如果使用X环境下的终端模拟器,这个列表会列在标题栏里。窗口列表的样子一般是这样:

0$ bash  1-$ bash  2*$ bash  

  这个例子中我开启了三个窗口,其中*号表示当前位于窗口2,-号表示上一次切换窗口时位于窗口1。

  Screen默认会为窗口命名为编号和窗口中运行程序名的组合,上面的例子中窗口都是默认名字。练习了上面查看窗口的方法,你可能就希望各个窗口可以有不同的名字以方便区分了。可以使用快捷键C-a A来为当前窗口重命名,按下快捷键后,Screen会允许你为当前窗口输入新的名字,回车确认。

  会话分离与恢复

  你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个screen窗口编辑/tmp/david.txt文件:

[root@TS-DEV ~]# screen vi /tmp/david.txt

  之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入C-a d,Screen会给出detached提示:

  暂时中断会话

[Linux] Linux指令汇总(持续更新中...)

  半个小时之后回来了,找到该screen会话:

[root@TS-DEV ~]# screen -ls

[Linux] Linux指令汇总(持续更新中...)

  重新连接会话:

[root@TS-DEV ~]# screen -r 12865

  一切都在。

  当然,如果你在另一台机器上没有分离一个Screen会话,就无从恢复会话了。

  这时可以使用下面命令强制将这个会话从它所在的终端分离,转移到新的终端上来:

[Linux] Linux指令汇总(持续更新中...)

  清除dead 会话

  如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:

[Linux] Linux指令汇总(持续更新中...)

  关闭或杀死窗口

  正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。

  如果一个Screen会话中最后一个窗口被关闭了,那么整个Screen会话也就退出了,screen进程会被终止。

  除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,不过个人认为还是快捷键比较方便些。

  screen 高级应用 

  会话共享

  还有一种比较好玩的会话恢复,可以实现会话共享。假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个screen会话,你朋友可以在他的终端上命令:

[root@TS-DEV ~]# screen -x

  这个命令会将你朋友的终端Attach到你的Screen会话上,并且你的终端不会被Detach。这样你就可以和朋友共享同一个会话了,如果你们当前又处于同一个窗口,那就相当于坐在同一个显示器前面,你的操作会同步演示给你朋友,你朋友的操作也会同步演示给你。当然,如果你们切换到这个会话的不同窗口中去,那还是可以分别进行不同的操作的。

  会话锁定与解锁

  Screen允许使用快捷键C-a s锁定会话。锁定以后,再进行任何输入屏幕都不会再有反应了。但是要注意虽然屏幕上看不到反应,但你的输入都会被Screen中的进程接收到。快捷键C-a q可以解锁一个会话。

  也可以使用C-a x锁定会话,不同的是这样锁定之后,会话会被Screen所属用户的密码保护,需要输入密码才能继续访问这个会话。

  发送命令到screen会话

  在Screen会话之外,可以通过screen命令操作一个Screen会话,这也为使用Screen作为脚本程序增加了便利。关于Screen在脚本中的应用超出了入门的范围,这里只看一个例子,体会一下在会话之外对Screen的操作:

[root@TS-DEV ~]# screen -S sandy -X screen ping www.baidu.com

  这个命令在一个叫做sandy的screen会话中创建一个新窗口,并在其中运行ping命令。

  屏幕分割

  现在显示器那么大,将一个屏幕分割成不同区域显示不同的Screen窗口显然是个很酷的事情。可以使用快捷键C-a S将显示器水平分割,Screen 4.00.03版本以后,也支持垂直分屏,快捷键是C-a |。分屏以后,可以使用C-a <tab>在各个区块间切换,每一区块上都可以创建窗口并在其中运行进程。

  可以用C-a X快捷键关闭当前焦点所在的屏幕区块,也可以用C-a Q关闭除当前区块之外其他的所有区块。关闭的区块中的窗口并不会关闭,还可以通过窗口切换找到它。

[Linux] Linux指令汇总(持续更新中...)

  C/P模式和操作

  screen的另一个很强大的功能就是可以在不同窗口之间进行复制粘贴了。使用快捷键C-a <Esc>或者C-a [可以进入copy/paste模式,这个模式下可以像在vi中一样移动光标,并可以使用空格键设置标记。其实在这个模式下有很多类似vi的操作,譬如使用/进行搜索,使用y快速标记一行,使用w快速标记一个单词等。关于C/P模式下的高级操作,其文档的这一部分有比较详细的说明。

  一般情况下,可以移动光标到指定位置,按下空格设置一个开头标记,然后移动光标到结尾位置,按下空格设置第二个标记,同时会将两个标记之间的部分储存在copy/paste buffer中,并退出copy/paste模式。在正常模式下,可以使用快捷键C-a ]将储存在buffer中的内容粘贴到当前窗口。

[Linux] Linux指令汇总(持续更新中...)

  更多screen功能

  同大多数UNIX程序一样,GNU Screen提供了丰富强大的定制功能。你可以在Screen的默认两级配置文件/etc/screenrc和$HOME/.screenrc中指定更多,例如设定screen选项,定制绑定键,设定screen会话自启动窗口,启用多用户模式,定制用户访问权限控制等等。如果你愿意的话,也可以自己指定screen配置文件。

  以多用户功能为例,screen默认是以单用户模式运行的,你需要在配置文件中指定multiuser on 来打开多用户模式,通过acl*(acladd,acldel,aclchg...)命令,你可以灵活配置其他用户访问你的screen会话。更多配置文件内容请参考screen的man页。

3.5 定时启动脚本crontab

  1.作用

  使用crontab命令可以修改crontab配置文件,然后该配置由cron公用程序在适当的时间执行,该命令使用权限是所有用户。

  2.格式
  crontab [-u user] {-l | -r | -e}
  3.主要参数
  -e:执行文字编辑器来设定时程表,内空的文字编辑器是vi
  -r:删除目前的时程表
  -l列出目前的时程表。
  Crontab文件的格式为”M H D m d cmd”。其中,M代表分钟(0~59),H代表小时(0~23),D代表天(1~31),m代表月(1~12),d代表一星期内的天(0~6,0为星期天)。Cmd表示要运行的程序,它被送入sh执行,这个shell只有USER、HOME、SHELL三个环境变量。
  使用cron服务,用server crond status查看cron服务状态,如果没有启动则service crond start启动它,cron服务是一个定时执行的服务,可以通过crontab命令添加或编辑需要定时执行的任务:
  crontab –u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
  crontab –l //列出某个用户cron服务的详细内容
  crontab –r //删除某个用户的cron服务
  crontab –e //编辑某个用户的cron服务
  crontab filename //以filename作为crontab的任务列表文件并载入
  比如说root查看自己的cron设置:crontab –u root –l
  再例如,root想删除fred的cron设置:crontab –u fred –r
  在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab –u root –e
  进入vi编辑模式,编辑的内容一定要符合下面的格式:
  */1   *     *     *     *     ls >>/tmp/ls.txt
  编辑/etc/crontab文件,在末尾加上一行:30 5 * * * root init 6这样就将系统配置为每天早上5点30分自动重新启动。
  crontab 文件中的行由6个字段组成,不同字段间用空格或tab键分隔。前5个字段指定命令要运行的时间
  分钟(0-59)
  小时(0-23)
  日期(1-31)
  月份(1-12)
  星期几(0-6,其中0代表星期日,好像7也代表星期日)
  第6个字段是一个要在适当时间执行的字符串。
  例子:
  #MIN      HOUR     DAY       MONTH  DAYOFWEEK       COMMAND
  #每天早上6点10分
  10    6     *     *     *     date
  #每两个小时
  0     */2   *     *     *     date
  #晚上11点到早上8点之间每两个小时,早上8点
  0     23-7/2,8      *     *     *     date  
  #每个月的4号和每个礼拜一到礼拜三的早上11点
  0     11    4     *     1-3  date
  #1月1日早上4点
  0     4     1     1       *  date
  补充:在使用crontab的时候,要特别注意的是运行脚本中能够访问到的环境变量和当前测试环境中环境变量未必一致,一个比较保险的做法是在运行的脚本程序中自行设置环境变量(export)
  (1)先建一个文件crond.txt如下,每天早上5点36分重新启动
  36      5     *     *     *     reboot
  (2)上传到/opt目录
  (3)运行命令
  crontab /opt/crond.txt
  crontab –l
  让配置文件生效:如果让配置文件生效,还得重新启动cron,切记,既然每个用户下的cron配置文件修改后,也要重新启动cron服务器。
  在Fedora和Redhat中,我们应该用:
  /etc/rc.d/crond restart
  如果让crond在开机时运行,应该改变其运行级别:
  chkconfig –level 35 crond on
  service crond status查看cron服务状态,如果没有启动则service crond start启动它,cron服务是一个定时执行的服务,可以通过crontab命令添加或者编辑需要定时执行的任务

3.6 anacron命令

  如果我们的Linux主机是24全天全年的处于开机状态,我们只需要atd与crond这两个服务即可,如果我们的服务器并非24小时无间断的启动,那么我们就需要anacron的帮助了。

  anacron并不能取代cron去运行某项任务,而是以天为单位或者是在启动后立刻进行anacron的动作,它会去侦测停机期间应该进行但是并没有进行的crontab任务,并将该任务运行一遍后,anacron就会自动停止了。

  anacron会以一天、七天、一个月周期去侦测系统中未进行的crontab任务,因此对于某些特殊的使用环境非常有帮助。anacron会去会去分析现在的时间与时间记录档所记载的上次运行anacron的时间,两者比较厚若发现有差异,也就是在某些时刻没有进行crontab,那么此时anacron就会开始执行未运行的crontab了。所以anacron也是听过crontab来运行的,因此anacron运行的时间通常由两个,一个是系统启动期间运行,一个是写入crontab的排程中,这样才能够在特定时间分析系统未进行的crontab工作。我们可以使用ll  /etc/cron*/*ana*的方式来查看anacron的侦测时间。但是我们仔细分析该文件的话,发现它主要是执行anacron命令。

  anacron命令的语法如下:

  (1)-s开始连续的运行各项工作,会一句时间记录当的数据判断是否进行。

  (2)-f强制进行,而不去判断时间登录档的时间戳。

  (3)-n立即进行未进行的任务,而不延迟等待时间。

  (4)-u仅升级时间记录当的时间戳,不进行任何工作。

  而anacron的配置文件是/etc/anacrontab,而它的很多内容则是在/var/spool/anacron里面保存。

  当anacron下达anacron  -s  cron.daily时,它会有如下的步骤:

  (1)由/etc/anacrontab分析到cron.daily这项工作名称的天数为一天。

  (2)由/var/spool/anacron/cron.daily取出最近一次运行anacron的时间戳。

  (3)把取出的时间戳与当前的时间戳相比较,如果差异超过了一天,那么就准备进行命令。

  (4)若准备进行命令,根据/etc/anacrontab的配置,将延迟65分钟。

  (5)延迟时间后,开始运行后续命令,也就是run-parts  /etc/cron.daily这串命令。

  (6)运行完毕后,anacron程序结束。

  最近无意间发现了两个很好的Linux命令查询网站,很全面很细致,在这里分享给大家:

  1. Linux命令大全

  2. 菜鸟手册:Linux命令大全

上一篇:Web 开发人员和设计师必读文章推荐【系列三十】


下一篇:.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现电子签名功能