你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Linux 系统中重定向的常见用法

[复制链接]
gaosmile 发布时间:2020-7-27 19:48

相信大家平时都会有需要复制粘贴数据的时候,如果是打开文件进行复制粘贴,就不可避免的需要较多的鼠标与键盘的操作,就会比较繁琐。那么有没有可以省掉这些繁琐操作的复制粘贴的方法呢?

答案是肯定的,那就是重定向。重定向是一种高效的方法,无需大量的鼠标与键盘操作就可以完成数据的转移。重定向可以分为输入重定向以及输出重定向这两种类型。由于所有程序都有输入或者输出,因此输入和输出的重定向是任何编程语言或脚本语言都自带的功能。

每当你与计算机交互时,重定向就必然会发生。学会使用重定向,不仅可以让你与计算机更好地交互,还可以提高你的工作效率,因此,请让我为你讲解 Linux 系统中重定向的常见用法:


Linux 中的数据流



谈到 Linux 的重定向,就不得不提以下这3种数据流:

  • 输入信息会从 stdin 中读取(标准输入,通常是键盘或鼠标)。
  • 输出信息会被输出到 stdout (标准输出,一个文本文件或者数据流)。
  • 错误信息会被输出到 stderr。

了解了这些数据流的存在,在你使用 Shell 时,你就可以更好地控制数据的流向了。

在 Linux 系统中,标准输入,标准输出以及标准错误都作为文件存在。你可以在 /dev目录下看到它们:


  1. $ ls /dev/std*
  2. /dev/stderr  /dev/stdin  /dev/stdout
复制代码

重定向输出



在 Linux 系统中,使用 > 字符表示重定向输出。例如,将 ls 命令的输出重定向到一个文件中:


  1. $ ls > list.txt
复制代码


执行以上命令后,屏幕上并不会显示 ls 命令的输出信息,因为输出信息已经被重定向至 list.txt 文件中了。

除此之外,重定向还有许多用途,它还可以用于复制文件的内容,而且不限于复制文本文件,二进制文件也可以复制:


  1. $ cat image.png > picture.png
复制代码


如果你想要将一个文件的内容复制到另一个文件的末尾,你只需将 > 字符换成 >>字符串即可,像这样:

  1. <font style="background-color:rgb(255, 255, 255)"><font face="Tahoma"><font color="black">
  2. $ cat lxlinux >> alvi</font></font></font>
复制代码

重定向输入



与重定向输出相反,重定向输入使用的是 < 字符。

输入重定向可以将输入信息重定向至命令中作为参数使用。该功能可能比较少用,但是,当命令需要一个参数列表时,而这些参数都存在一个文件中,然后你想快速地将它们从文件中复制粘贴到终端,这时这个功能就能派上用场了。

例如,package.list 里记录了你需要安装的包的列表,而你想要快速地安装所有的包,只需执行以下这一条命令,就能一次性安装 package.list 里的所有包:


  1. $ sudo dnf install $(<package.list)
复制代码


输入重定向的常见用法是 Here-document (简称 Here-doc) 以及 Here-string 。

Here-doc 将输入的文本块重定向至标准输入流,直至遇到特殊的文件结束标记符为止(文件结束标记符可以是任意的唯一的字符串,但大部分人都默认使用 EOF)。

你可以尝试在终端输入以下命令(直到第二个 EOF 字符串结束):


  1. $ cat << EOF
  2. > alvin
  3. > lxlinux.net
  4. > EOF
复制代码


预期的输出应该是这样的:

  1. <font style="background-color:rgb(255, 255, 255)"><font face="Tahoma"><font color="black">
  2. alvin
  3. lxlinux.net</font></font></font>
复制代码

Here-doc 是 Bash 脚本编写者们将多行文本转储到文件或屏幕上的常用技巧。

Here-string 与 Here-doc 相似,但是它只有一个字符串,或者几个被引号括起来的字符串:


  1. $ cat <<< alvin
  2. alvin
  3. $ cat <<< "alvin lxlinux.net"
  4. alvin lxlinux.net
复制代码

重定向错误信息



错误信息默认会进入叫 stderr 的流,使用 2> 可以对其进行重定向。例如,将错误信息重定向到名为 output.log 的文件中:

  1. <font style="background-color:rgb(255, 255, 255)"><font face="Tahoma"><font color="black">
  2. $ ls /nope 2> output.log</font></font></font>
复制代码

重定向数据至 /dev/null



就像标准输入、标准输出以及标准错误一样,在 Linux 文件系统中,空,也存在一个文件与之对应,它叫做 null ,放在 /dev 目录下。为了方便读,人们经常省略斜杠,直接把他读作 dev null 。

/dev/null 并不保存数据,被写入 /dev/null 的数据最终都会丢失,就像被丢进虚空中一样。因此,你可以使用重定向将不需要的数据输送到 /dev/null 。例如,find 命令的输出往往很冗长,而且在搜索文件时还经常会报告权限冲突的错误,像这样:


  1. $ find ~ -type f
  2. /home/seth/actual.file
  3. find: `/home/seth/foggy': Permission denied
  4. find: `/home/seth/groggy': Permission denied
  5. find: `/home/seth/soggy': Permission denied
  6. /home/seth/zzz.file
复制代码


这时,你就可以将错误信息重定向到 /dev/null ,以过滤掉不必要的信息,像这样:


  1. $ find ~ -type f 2> /dev/null
  2. /home/seth/actual.file
  3. /home/seth/zzz.file
复制代码


善用重定向



在 Bash 中,重定向是转移数据的一种高效方法。你可能并不会总是使用重定向,但是学会如何使用重定向,在你需要的时候可以让你省掉许多不必要的复制粘贴操作,因此也节省了许多操作鼠标与键盘的时间。请不要执着于复制粘贴了,使用重定向可以提高你的工作效率,难道,它不香吗?

最后,希望本文的内容对你的工作有所帮助,如果你还对 Linux 系统中的重定向有疑问,请留言告诉我呗!


收藏 评论0 发布时间:2020-7-27 19:48

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版