当前位置: 首页 > 科技观察

通过重定向在Linux终端任意读写数据

时间:2023-03-19 02:08:27 科技观察

重定向是一种非常高效的数据流转方式,可以帮助你减少大量的鼠标键盘操作。输入和输出重定向是任何编程或脚本语言的自然特征。严格来说,数据重定向是在您使用计算机时自然发生的。输入从stdin(标准输入,通常是您的键盘或鼠标)读取,输入被发送到stdout(标准输出,一段文本或数据流),最后错误消息被发送到stderr。如果您使用像Bash或Zsh这样的shell,了解这些数据流可以让您更好地控制信息的去向。标准输入、标准输出和标准错误都存在于Linux文件系统中。您可以在/dev中看到它:$ls/dev/std*/dev/stderr@/dev/stdin@/dev/stdout@您可能无法直接使用它们,但可以将它们视为可以在其中使用的元位置传递数据,会很有帮助。重定向的基础很简单:使用一些>符号来重定向输出,使用其他一些<符号来重定向输入。重定向输出将ls命令的输出写入文件:$ls>list.txt你不能像往常一样看到ls的输出,因为它们没有发送到屏幕,而是写入了文件list.txt,这个功能非常有用,事实上,您甚至可以用它来将一个文件的内容复制到另一个文件。不一定是文本文件,你也可以对二进制数据使用重定向:$catimage.png>picture.png(你可能想知道为什么要这样做,有时它对文件权限信息是间接有??用的。)重定向输入你也可以重定向输入“到”一个命令。可以说,它不如重定向输出有用,因为许多命令已经被硬编码为仅从您的参数中获取输入。但是,如果一个命令需要一系列参数,而你将这些参数写在一个文件中,并想快速“复制粘贴”到终端(除非你不想复制粘贴),它可以提供帮助。$sudodnfinstall$(foo>bar>baz>EOFoutput:foobarbaz这个技巧经常被用Bash编写脚本的人使用,替换行文本被写一次全部保存到一个文件或打印到屏幕上。只要您没有忘记末尾的文件结束标记,这就是为您节省大量繁琐的echo或printf语句的好方法。嵌入字符串类似于嵌入文档,但它只包含一个字符串(或用引号包裹的几个字符串,也会被视为字符串)$cat<<<"foobarbaz"foobarbazredirectionerror的信息错误信息流称为stderr,由2>实现。以下命令将错误消息定向到output.log文件:$ls/nope2>output.log将数据发送到/dev/null由于标准输入、标准输出和错误输出都有自己的位置,“empty”也是应该在Linux文件系统中占有一席之地。没错,它叫null,它位于/dev,经常使用的人懒得说“slashdevslashnull”,所以干脆就叫它“devnull”。通过重定向,您可以将数据发送到/dev/null。比如find命令经常会输出很多具体信息,当搜索文件遇到权限冲突时,会详细报告:$find~-typef/home/seth/actual.filefind:`/home/seth/foggy':权限被拒绝find:`/home/seth/groggy':权限被拒绝find:`/home/seth/soggy':权限被拒绝/home/seth/zzz.filefind命令将这些视为错误,因此您可以重定向到/dev/null:$find~-typef2>;/dev/null/home/seth/actual.file/home/seth/zzz.file使用重定向在Bash中,重定向是传输数据的有用方式。你可能不经常使用重定向,但学习如何使用它可以让你在打开文件、复制和粘贴数据等方面节省很多不必要的时间,这些都需要移动鼠标和大量的击键。不要做这种浪费时间的事情。使用重定向并享受生活。