首页 > 系统相关 >Linux I/O重定向与管道

Linux I/O重定向与管道

时间:2023-11-28 14:24:50浏览次数:35  
标签:输出 重定向 文件 命令 管道 Linux 输入

在生产环境中,每天凌晨需要备份数据库,这时工作人员会编写一个简单的脚本创建计划任务,把脚本执行结果放到一个或几个文件中以便第二天查看,这个过程就叫重定向。在使用"ps aux"命令时,为了快速找到所需要信息,经常使用grep命令进行过滤,此时就需要使用管道符。

I/O重定向

      I/O运行一个程序时 , 需要从某个位置读取输入信息 , 然后 cpu 处理, 最后将输出显示到屏幕或文件进程通过文件描述符的编号通道来获取输入并输出。

     Linux I/O重定向可以定义为,更改从命令读取输入到命令发送输出的方式。你可以重定向命令的输入和输出。对于重定向符号,可以是<、> 或者 | 。

     I/O重定向中的标准流

     Bash shell在I/O重定向中有三个标准流:

标准输入(stdin):stdin流编号为stdin(0)。bash shell从stdin获取输入。默认情况下,键盘用作输入。
标准输出(stdout):stdout流编号为stdout(1)。bash shell将输出发送到stdout。输出将显示。
标准错误(stderr):stderr流编号为stderr(2)。bash shell向stderr发送错误消息。显示错误消息。

     重定向到文件

     每个流都使用重定向命令。单括号'>'或双括号'>>'可用于重定向标准输出。如果目标文件不存在,将创建一个具有相同名称的新文件。

     覆盖:带有单括号“>”的命令将覆盖现有的文件内容。

>:标准输出
<:标准输入
2>:标准错误

     注意:写“1>”或“>”和“0<”或“<”是一回事。但对于stderr,必须编写“2>”。

用法:
cat > <fileName>

输入重定向

    输入重定向是指把命令的标准输入改变为指定的文件(包括设备文件),使命令从该文件中而不是从键盘中获取输入。输入重定向主要用于改变那些需要大量标准输入的命令的输入源。输入重定向的格式为:

命令 < 文件

    当提交这样的一个命令行时,Shell首先断开键盘与命令的stdin之间的关联,将指定的文件关联到stdin,然后运行命令。这样,该命令就会从这个文件中读取标准输入信息。

【例1】输入重定向的应用。

[root@localhost ~]# cat file
This is Linux world.
[root@localhost ~]# cat < file
This is Linux world.

输出重定向

    输出重定向是指把命令的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到文件中。很多情况下都可以使用输出重定向功能。输出重定向的一般形式为:

标准输出重定向:命令 > 文件
附加输出重定向:命令 >> 文件

    标准输出重定向就是将命令的标准输出保存到一个文件中,当提交这样的一个命令行时,Shell首先断开命令的标准输出stdout与屏幕之间的关联,找到指定的文件(若该文件不存在就新建一个),然后将这个文件关联到命令的标准输出上。随后Shel启动该命令运行。这样,该命令产生的所有标准输出信息都将写入这个文件中,而不是显示在屏幕上。

    附加输出重定向与标准输出重定向相似,只是当指定的文件存在时,标准输出重定向的做法是先将文件清空,再将命令的输出信息写入,而附加输出重定向则是保留文件内原有的内容,将命令的输出附加在后面。

【例2】输出重定向的应用。

[root@localhost ~]# echo "this is Linux world!" > file
[root@localhost ~]# cat file
this is Linux world!
[root@localhost ~]# echo "this is not Linux world!" > file
[root@localhost ~]# cat file
this is not Linux world!
[root@localhost ~]# echo "this is Linux world!" >> file
[root@localhost ~]# cat file
this is not Linux world!
this is Linux world!

 进程管道

      管道实际上也是一种重定向,重定向字符控制输出到文件,管道控制输出到其他程序。

管道命令

      管道的作用是把上一个进程的输出作为下一个进程的输入,利用管道可以把若干个命令连接在一起。

1. 基础管道(|)

管道允许将一个命令的输出传递给另一个命令的输入,实现多个命令协同工作。例如:

$ command1 | command2

这将command1的输出作为command2的输入。

2. 管道和grep命令

结合管道和grep命令,可以更灵活地进行文本搜索和过滤。例如:

$ cat file.txt | grep "pattern"

这将显示file.txt中包含特定模式的行。

常用选项:

  • -i:忽略大小写进行匹配。
  • -v:反向查找,只打印不匹配的行。
  • -n:显示匹配行的行号。
  • -r:递归查找子目录中的文件。
  • -l:只打印匹配的文件名。
  • -c:只打印匹配的行数。

2. 管道和awk/sed命令

使用管道结合awksed等文本处理工具,可以实现复杂的文本操作。例如:

$ cat data.txt | awk '{print $1}' | sed 's/old/new/'

这将从data.txt中提取第一列,然后用sed替换文本。

标签:输出,重定向,文件,命令,管道,Linux,输入
From: https://www.cnblogs.com/zhanglan123/p/17861883.html

相关文章

  • 我对linux的学习计划
     对于现在的我来说,现在还没有明确的从业方向,还在慢慢的摸索过程中,但无论以后做什么工作都需要不断的学习,对于计算机行业来说,新技术不断涌现,保持学习的态度,及时了解新的发展和趋势,不断更新自己的知识和技能。 千里之行,始于足下。任何东西基础是必须的。万丈高楼平地起,再高的大......
  • Linux 05
    第五章进程管理本章学习目标:1.了解进程的基本概念2.掌握查看进程的基本方法3.熟悉信号控制进程4.了解进程优先级原理5.了解作业控制一、初识进程1.1进程是已启动的可执行程序的运行实例。进程有一下组成部分。①已分配内存的地址空间。②安全属性,包括所有权凭据和特权......
  • Linux第八次博客
     这次博客主要还是讲存储管理,将前面没有讲清楚的地方和后面没讲的一起讲完了。 补充内容告诉了我们硬盘机和一些其他的dev表达式,如:IDE硬盘机为/dev/hd[a-d],SCSI/SATA/U盘硬盘机为/dev/sd[a-p],控制台为/dev/console,内存/dev/random。 随后就讲到创建系统文件,在终端输入mkf......
  • Linux文件查找,打包压缩及解压
    1.文件查找1.1which命令:which命令的功能是用于查找命令文件,能够快速搜索二进制程序所对应的位置。如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个which命令就太合适了。语法格式:which[参数]文件参......
  • linux提权
    LinuxPrivilegeEscalation机器信息收集拿到一个立足点可以执行简单命令后,对机器的一些信息收集hostname:主机名在某些情况下,它可以提供有关目标系统在企业网络中的角色的信息(例如用于生产SQL服务器的SQL-PROD-01)uname-a:linux内核版本等信息,对提权有用提供有关内核版本......
  • Linux解压文件指令
    一、ZIP解压1、把文件解压到当前目录下unzip文件名.zip2、如果要把文件解压到指定的目录下,需要用到-d参数。unzip-d目录文件名.zip3、解压的时候,有时候不想覆盖已经存在的文件,那么可以加上-n参数unzip-n文件名.zipunzip-n-d目录文件名.zip压缩的话同理:zip文件夹......
  • Linux系统中文件的管理
    1.文件目录与路径(1)所有文件都在根目录(/)下,用户可以使用ls命令查看根目录下的文件。根目录下常见的目录:/bin:里边包含了一般程序工具,用户、管理员、系统都可以调用。/dev:系统设备文件目录,除cpu外的所有的硬件设备都会抽象成特殊的文件放在这里,虚拟设备也放在这里。/etc:包含了大......
  • Linux 04
    第四章文件权限本章学习目标:1.掌握基本权限用法2.掌握高级权限用法一、基本权限UGOU:owner,属主。G:group,属组。O:other,其他用户。r:read(读取),数字设定为4.w:write(写入),数字设定为2.x:execute(执行),数字设定为1.777:可读可写可执行,所有用户所有权限000:三不可。1.1设置文件属性与......
  • 如何更改linux的密码
    众所周知,设密码时笑嘻嘻,找回密码***,每次设置的linux密码最后都只防住了自己,接下来我就讲讲如何改密码Linux修改密码用passwd命令,用root用户运行passwd,passwduser_name可以设置或修改任何用户的密码,普通用户运行passwd只能修改它自己的密码。[root@localhost~]#passwd##修......
  • Linux 问题故障定位的技巧大全
    1.背景有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以,分析问题和踩坑是非常锻炼一个人的成长和提升自我能力。如......