LIinux使用VIM掌握输入输出重定向与管道命令的应用

1.使用重定向

重定向就是不使用系统的标准输入端口、标准输出端口或标准错误端口,而进行重新的指定,所以重定向分为输入重定向、输出重定向和错误重定向。通常情况下,重定向到一个文件。在shell中,要实现重定向主要依靠重定向符,即shell是检查命令行中有无重定向符来决定是否需要实施重定向。下表列出了常用的重定向符。

表-重定向符

重定向符

说明

<

实现输入重定向。输入重定向并不经常使用,因为大多数命令都以参数的形式在命令行上指定输人文件的文件名。尽管如此,当使用一个不接受文件名为输入参数的命令,而需要的输入又是在一个已存在的文件中时,就能用输入重定向解决问题

>或>>

实现输出重定向。输出重定向比输人重定向更常用。输出重定向使用户能把一个命令的输出重定向到一个文件中,而不是显示在屏幕上。很多情况下都可以使用这种功能。例如,如果某个命令的输出很多,在屏幕上不能完全显示,即可把它重定向到一个文件中,稍后再用文本编辑器来打开这个文件

2>或2>>

实现错误重定向

&>

同时实现输出重定向和错误重定向

要注意的是,在实际执行命令之前,命令解释程序会自动打开(如果文件不存在,则自动创建)且清空该文件(文中已存在的数据将被删除)。当命令完成时,命令解释程序会正确地关闭该文件,而命令在执行时并不知道它的输出流已被重定向。

下面举几个使用重定向的例子。

  1. 将1s命令生成的/(mp目录的一个清单存到当前目录中的dir文件中。
    [root@RHEL7-1~]# 1s -1 /tmp >dir
  2. 将1s命令生成的/etc 目录的一个清单以追加的方式存到当前目录中的dir文件中。
    [root@RHEL7-1 ~]# 1s -l /etc >>dir
  3. passwd文件的内容作为we命令的输入(wc命令用来计算数字,可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据)。
    [root@RHEL7-1 ~]# wc</etc/passwd
  4. 将命令myprogram的错误信息保存在当前目录下的 err file文件中。
    [root@RHEL7-1~]# myprogram 2>err_file
  5. 将命令myprogram的输出信息和错误信息保存在当前目录下的output fle文件中。
    [root@RHEL7-1~]# myprogram &>output_file
  6. 将命令1s的错误信息保存在当前目录下的er file文件中。
    [root@RHEL7-1 ~]# ls -1 2>err_file
        注意:该命令并没有产生错误信息,但err_file文件中的原文件内容会被清空。

当我们输入重定向符时,命令解释程序会检查目标文件是否存在。如果不存在,命今解释程序将会根据给定的文件名创建一个空文件;如果文件已经存在,命令解释程序则会清除其内容并准备写入命令的输出到结果。这种操作方式表明:当重定向到一个已存在的文件时需要十分小心,数据很容易在用户还没有意识到之前就丢失了。
    Bash输入输出重定向可以通过使用下面选项设置为不覆盖已存在文件:
[root@RHEL7-1~)# set -o noclobber
    这个选项仅用于对当前命令解释程序输入输出进行重定向,而其他程序仍可能覆盖已存在的文件。

  1. /dev/null。
        空设备的一个典型用法是丢弃从ind或grep等命令送来的错误信息:
    [root@RHEL7-1~)# grep delegate /etc/* 2>/dev/null
        上面的grep 命令的含义是M/etc目录下的所有文件中搜索包含字符串“delegate"”的所有行。由于我们是在普通用户的权限下执行该命令,grep 命令是无法打开某些文件的,系统会显示一大堆“未得到允许”的错误提示。通过将错误重定向到空设备,我们可以在屏幕上只得到有用的输出。

    2.使用管道
        许多Linux命令具有过滤特性,即一条命令通过标准输入端口接收一个文件中的数据,命令执行后产生的结果数据又通过标准输出端口送给后一条命令,作为该命令的输入数据。后一条命令也是通过标准输入端口接收输入数据。
        shell提供管道命令“|”将这些命令前后衔接在一起,形成一个管道线。格式为
        命令1|命令2|...|命令n
       管道线中的每一条命令都作为一个单独的进程运行,每一条命令的输出作为下一条命令的输入。由于管道线中的命令总是从左到右顺序执行的,所以管道线是单向的。
       管道线的实现创建了Linux系统管道文件并进行重定向,但是管道不同于/O重定向,输入重定向导致一个程序的标准输人来自某个文件,输出重定向是将一个程序的标准输出写到一个文件中,而管道是直接将一个程序的标准输出与另一个程序的标准输入相连接,不需要经过任何中间文件。
       例如:
    [root@RHEL7-1~]# who >tmpfile
       我们运行命令who来找出谁已经登录进入系统。该命令的输出结果是每个用户对应一行数据,其中包含了一些有用的信息,我们将这些信息保存在临时文件中。
       现在我们运行下面的命令:
    [root@RHEL7-1~]# wc-l <tmpfile
       该命令会统计临时文件的行数,最后的结果是登录进入系统中的用户的人数。
    我们可以将以上两个命令组合起来。
    [root@RHEL7-1~]# who|wc -l
       管道符号告诉命令解释程序将左边的命令(在本例中为who)的标准输出流连接到右边的命令(在本例中为we -1)的标准输入流。现在命令who的输出不经过临时文件就可以直接送到命令we中了。
       下面再举几个使用管道的例子。
  1. 以长格式递归的方式分屏显示/etc目录下的文件和目录列表。
    [root@RHEL7-1 ~]# ls -Rl /etc | more
  2. 分屏显示文本文件/etc/passwd的内容。[root@RHEL7-1 ~]# cat /etc/passwd | more
  3. 统计文本文件/ete/passwd的行数、字数和字符数。[root@RHEL7-1~]# cat /etc/passwd | wo
  4. 查看是否存在john用户账号。
    [root@RHEL7-1 ~]# cat /etc/passwd | grep john
  5. 查看系统是否安装了ssh软件包。
    [root@RHEL7-1~]# rpm -qa | grep ssh
  6. 显示文本文件中的若干行。
    [root@RHEL7-1~]# tail -15 myfile | head -3
       管道仅能操纵命令的标准输出流。如果标准错误输出未重定向,那么任何写入其中的信息都会在终端显示屏幕上显示。管道可用来连接两个以上的命令。由于使用了一种被称为过滤器的服务程序,所以多级管道在Linux中是很普遍的。过滤器只是一段程序,它从自己的标准输入流读入数据,然后写到自己的标准输出流中,这样就能沿着管道过滤数据。在下例中:
    [root@RHEL7-1 ~]# who|grep root| we -1
       who命令的输出结果由grep 命令来处理,而grep命令则过滤掉(丢弃掉)所有不包含字符串“root”的行。这个输出结果经过管道送到命令 wc,而该命令的功能是统计剩余的行数,这些行数与网络用户的人数相对应。
       Linux系统的一个最大的优势就是按照这种方式将一些简单的命令连接起来,形成更复杂的、功能更强的命令。那些标准的服务程序仅仅是一些管道应用的单元模块,在管道中它们的作用更加明显。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我来依次回答你提出的问题。 ### vi/vim 的三种模式 vi/vim 有三种模式:命令模式、插入模式和底行模式。 1. 命令模式:默认模式,可以进行光标移动、文本删除、复制、粘贴等操作。 2. 插入模式:进入插入模式后,可以正常输入文本,按 ESC 键退出插入模式。 3. 底行模式:在命令模式下输入冒号(:)即可进入底行模式,可以进行保存、退出、查找等操作。 ### vi/vim 模式的切换方法 1. 从命令模式切换到插入模式:按下 i、a、o、I、A、O 等键。 2. 从插入模式切换到命令模式:按下 ESC 键。 3. 从命令模式切换到底行模式:输入冒号(:)。 4. 从底行模式切换回命令模式:按下 ESC 键。 ### vi/vim使用方法 1. 打开文件:在命令模式下输入 vi 文件名。 2. 保存文件:在底行模式下输入 :w 保存文件。 3. 退出 vi/vim:在命令模式下输入 :q 退出,或输入 :q! 强制退出。 4. 复制和粘贴:使用 y 和 p 命令。 5. 查找和替换:使用 / 和 :s 命令。 ### shell 环境变量的相关定义及使用方法 环境变量是一种在操作系统使用的变量,用于存储特定的值,例如路径、用户名等信息。在 shell ,可以通过 export 命令定义环境变量,并通过 $ 号来使用环境变量。 例如,设置一个名为 MY_VAR 的环境变量,可以使用以下命令: ``` export MY_VAR="Hello World" ``` 然后可以通过以下方式来使用这个环境变量: ``` echo $MY_VAR ``` ### 输入输出重定向管道使用方法 输入输出重定向是指将命令的输入或输出重定向文件或设备上。可以使用 > 和 >> 来将输出重定向文件,< 来将文件作为输入。例如: ``` ls > file.txt # 将 ls 命令输出保存file.txt 文件 sort < file.txt # 将 file.txt 文件作为 sort 命令的输入 ``` 管道是将一个命令输出作为另一个命令的输入。使用管道符号 | 来连接两个命令。例如: ``` ls | grep "txt" # 将 ls 命令输出作为 grep 命令的输入,查找包含 "txt" 的文件名 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻傻的心动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值