乐趣区

关于linux:Linux重定向用法详解

大家好,我是良许。

置信大家平时都会有须要复制粘贴数据的时候,如果是关上文件进行复制粘贴,就不可避免的须要较多的鼠标与键盘的操作,就会比拟繁琐。那么有没有能够省掉这些繁琐操作的复制粘贴的办法呢?

答案是必定的,那就是重定向。重定向是一种高效的办法,无需大量的鼠标与键盘操作就能够实现数据的转移。重定向能够分为输出重定向以及输入重定向这两种类型。因为所有程序都有输出或者输入,因而输出和输入的重定向是任何编程语言或脚本语言都自带的性能。

每当你与计算机交互时,重定向就必然会产生。学会应用重定向,不仅能够让你与计算机更好地交互,还能够进步你的工作效率,因而,请让良许为你解说 Linux 零碎中重定向的常见用法:

Linux 中的数据流

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

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

理解了这些数据流的存在,在你应用 Shell 时,你就能够更好地控制数据的流向了。

在 Linux 零碎中,规范输出,规范输入以及规范谬误都作为文件存在。你能够在 /dev 目录下看到它们:

$ ls /dev/std*
/dev/stderr  /dev/stdin  /dev/stdout

重定向输入

在 Linux 零碎中,应用 > 字符示意重定向输入。例如,将 ls 命令的输入重定向到一个文件中:

$ ls > list.txt

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

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

$ cat image.png > picture.png

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

$ cat lxlinux >> alvin

重定向输出

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

输出重定向能够将输出信息重定向至命令中作为参数应用。该性能可能比拟少用,然而,当命令须要一个参数列表时,而这些参数都存在一个文件中,而后你想疾速地将它们从文件中复制粘贴到终端,这时这个性能就能派上用场了。

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

$ sudo dnf install $(<package.list)

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

Here-doc 将输出的文本块重定向至规范输出流,直至遇到非凡的文件完结标记符为止(文件完结标记符能够是任意的惟一的字符串,但大部分人都默认应用 EOF)。

你能够尝试在终端输出以下命令(直到第二个 EOF 字符串完结):

$ cat << EOF
> alvin
> lxlinux.net
> EOF

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

alvin
lxlinux.net

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

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

$ cat <<< alvin
alvin
$ cat <<< "alvin lxlinux.net"
alvin lxlinux.net

重定向错误信息

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

$ ls /nope 2> output.log

重定向数据至 /dev/null

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

/dev/null 并不保留数据,被写入 /dev/null 的数据最终都会失落,就像被丢进虚空中一样。因而,你能够应用重定向将不须要的数据输送到 /dev/null。例如,find 命令的输入往往很简短,而且在搜寻文件时还常常会报告权限抵触的谬误,像这样:

$ find ~ -type f
/home/seth/actual.file
find: `/home/seth/foggy': Permission denied
find: `/home/seth/groggy': Permission denied
find: `/home/seth/soggy': Permission denied
/home/seth/zzz.file

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

$ find ~ -type f 2> /dev/null
/home/seth/actual.file
/home/seth/zzz.file

善用重定向

在 Bash 中,重定向是转移数据的一种高效办法。你可能并不会总是应用重定向,然而学会如何应用重定向,在你须要的时候能够让你省掉许多不必要的复制粘贴操作,因而也节俭了许多操作鼠标与键盘的工夫。请不要执着于复制粘贴了,应用重定向能够进步你的工作效率,难道,它不香吗?

最初,心愿本文的内容对你的工作有所帮忙,如果你还对 Linux 零碎中的重定向有疑难,请留言通知我呗!


最初,最近很多小伙伴找我要 Linux 学习路线图 ,于是我依据本人的教训,利用业余时间熬夜肝了一个月,整顿了一份电子书。无论你是面试还是自我晋升,置信都会对你有帮忙!

收费送给大家,只求大家金指给我点个赞!

电子书 | Linux 开发学习路线图

也心愿有小伙伴能退出我,把这份电子书做得更完满!

有播种?心愿老铁们来个三连击,给更多的人看到这篇文章

举荐浏览:

  • 干货 | 程序员进阶架构师必备资源免费送
  • 神器 | 反对搜寻的资源网站
退出移动版