Linux学习 重定向 管道 流

news2024/9/25 3:14:27
  1. 重定向 管道 流

    在 Linux 中一个命令的去向可以有 3 个地方:终端、文件、作为另外一个命令的入参。

    而命令一般都是通过键盘输入,然后输出到终端、文件等地方,它的标准用语是 stdin 、 stdout 以及 stderr 。

    标准输入stdin,终端接收键盘输入的命令,会产生两种输出;

    标准输出stdout,终端输出的信息(不包含错误信息);

    标准错误输出stderr ,终端输出的错误信息。

    1. 重定向

      把本来要显示在终端的命令结果,输送到别的地方(到文件中或者作为其他命令的输入)。

    2. 输出重定向 >
      >表示重定向到新的文件,root@hcss-ecs-c2b8:~# ll > /var/test/root_files.txt,它表示将ll命令列出的根目录下所有文件夹信息重定向到/var/test/root_files.txt文件。

      root@hcss-ecs-c2b8:~# ll
      total 124
      drwx------ 10 root root  4096 Sep 24 21:15 ./
      drwxr-xr-x 24 root root  4096 Sep 20 00:12 ../
      drwx------  3 root root  4096 Jul 22  2023 .ansible/
      drwxr-xr-x  2 root root  4096 Jul 22  2023 .ansible_async/
      -rw-r--r--  1 root root  8925 Sep 23 23:45 .bash_history
      -rw-r--r--  1 root root  3144 Jul 22  2023 .bashrc
      drwx------  2 root root  4096 Feb 10  2023 .cache/
      drwxr-xr-x  7 root root  4096 Jul 22  2023 docker-library/
      -rw-r--r--  1 root root 21926 Jul 22  2023 get-docker.sh
      -rw-r--r--  1 root root  1326 Jul 21  2023 githubclone.sh
      -rw-------  1 root root     0 Feb 10  2023 .history
      -rwxr-xr-x  1 root root 15353 Jul 22  2023 HSSInstall*
      drwxr-xr-x  8 root root  4096 Jul 22  2023 library/
      -rw-r--r--  1 root root   161 Jul  9  2019 .profile
      drwx------  4 root root  4096 Jul 22  2023 snap/
      drwx------  2 root root  4096 Sep 19 23:43 .ssh/
      drwxr-xr-x  9 root root  4096 Jul 22  2023 stackhub/
      -rw-------  1 root root 10517 Sep 23 23:23 .viminfo
      -rw-r--r--  1 root root   173 Jul 22  2023 .wget-hsts
      -rw-------  1 root root   118 Sep 24 21:15 .Xauthority
      # 将上述目录重定向到一个文本文件中
      root@hcss-ecs-c2b8:~# ll > /var/test/root_files.txt
      root@hcss-ecs-c2b8:~# cat /var/test/root_files.txt 
      total 124
      drwx------ 10 root root  4096 Sep 24 21:15 ./
      drwxr-xr-x 24 root root  4096 Sep 20 00:12 ../
      drwx------  3 root root  4096 Jul 22  2023 .ansible/
      drwxr-xr-x  2 root root  4096 Jul 22  2023 .ansible_async/
      -rw-r--r--  1 root root  8925 Sep 23 23:45 .bash_history
      -rw-r--r--  1 root root  3144 Jul 22  2023 .bashrc
      drwx------  2 root root  4096 Feb 10  2023 .cache/
      drwxr-xr-x  7 root root  4096 Jul 22  2023 docker-library/
      -rw-r--r--  1 root root 21926 Jul 22  2023 get-docker.sh
      -rw-r--r--  1 root root  1326 Jul 21  2023 githubclone.sh
      -rw-------  1 root root     0 Feb 10  2023 .history
      -rwxr-xr-x  1 root root 15353 Jul 22  2023 HSSInstall*
      drwxr-xr-x  8 root root  4096 Jul 22  2023 library/
      -rw-r--r--  1 root root   161 Jul  9  2019 .profile
      drwx------  4 root root  4096 Jul 22  2023 snap/
      drwx------  2 root root  4096 Sep 19 23:43 .ssh/
      drwxr-xr-x  9 root root  4096 Jul 22  2023 stackhub/
      -rw-------  1 root root 10517 Sep 23 23:23 .viminfo
      -rw-r--r--  1 root root   173 Jul 22  2023 .wget-hsts
      -rw-------  1 root root   118 Sep 24 21:15 .Xauthority
      
      

      这样做的好处是,当我们在启动某项服务或者查询大量信息室,在终端中展示起来很麻烦我们就可以使用重定向到文件的方法,来记录这样大量的信息.

      【注意】使用>要注意,如果输出的文件不存在它会新建一个,如果输出的文件已经存在,则会覆盖。因此执行这个操作要非常小心,以免覆盖其它重要文件。

    3. 输出重定向 >>

      表示重定向到文件末尾,因此它不会像 > 命令这么危险,它是追加到文件的末尾(当然如果文件不存在,也会被创建)。

      # 这里也可以看出 这个重定向命令是会先去创建文件夹,再去输出
      root@hcss-ecs-c2b8:/var/test# ll > files.txt
      root@hcss-ecs-c2b8:/var/test# cat files.txt 
      total 28
      drwxr-xr-x  3 root root 4096 Sep 24 21:24 ./
      drwxr-xr-x 14 root root 4096 Sep 21 08:28 ../
      -rwxr-xr-x  1 root root  628 Sep 23 23:23 compose_file.sh*
      drwxr-xr-x  2 root root 4096 Sep 23 23:25 dir1/
      -rwxr-xr-x  1 root root  473 Sep 22 10:07 file_move.sh*
      -rw-r--r--  1 root root    0 Sep 24 21:24 files.txt
      -rw-r--r--  1 root root 1071 Sep 24 21:16 root_files.txt
      -rw-r--r--  1 root root  987 Sep 23 23:24 test.tar.gz
      # 这里当我们使用>>时,就是进行追加写入了,没有将之前的覆盖掉
      root@hcss-ecs-c2b8:/var/test# ll >> files.txt
      root@hcss-ecs-c2b8:/var/test# cat files.txt 
      total 28
      drwxr-xr-x  3 root root 4096 Sep 24 21:24 ./
      drwxr-xr-x 14 root root 4096 Sep 21 08:28 ../
      -rwxr-xr-x  1 root root  628 Sep 23 23:23 compose_file.sh*
      drwxr-xr-x  2 root root 4096 Sep 23 23:25 dir1/
      -rwxr-xr-x  1 root root  473 Sep 22 10:07 file_move.sh*
      -rw-r--r--  1 root root    0 Sep 24 21:24 files.txt
      -rw-r--r--  1 root root 1071 Sep 24 21:16 root_files.txt
      -rw-r--r--  1 root root  987 Sep 23 23:24 test.tar.gz
      total 32
      drwxr-xr-x  3 root root 4096 Sep 24 21:24 ./
      drwxr-xr-x 14 root root 4096 Sep 21 08:28 ../
      -rwxr-xr-x  1 root root  628 Sep 23 23:23 compose_file.sh*
      drwxr-xr-x  2 root root 4096 Sep 23 23:25 dir1/
      -rwxr-xr-x  1 root root  473 Sep 22 10:07 file_move.sh*
      -rw-r--r--  1 root root  426 Sep 24 21:24 files.txt
      -rw-r--r--  1 root root 1071 Sep 24 21:16 root_files.txt
      -rw-r--r--  1 root root  987 Sep 23 23:24 test.tar.gz
      
      

      当我们每次启动一个服务时,不希望之前服务运行的日志被覆盖掉就可以使用这个重定向到文件尾的方式.

    4. 输出重定向 2> 和 2>>

      刚刚提到过,有两种输出方式,这里介绍第二种,标准错误输出

      当我们输入的命令有无,或者报错的时候,如下

      root@hcss-ecs-c2b8:/var/test# 1
      1: command not found
      root@hcss-ecs-c2b8:/var/test# not_exist_command
      not_exist_command: command not found
      root@hcss-ecs-c2b8:/var/test# ll -asda asdasd
      ls: cannot access 'asdasd': No such file or directory
      root@hcss-ecs-c2b8:/var/test# 
      

      输入错误命令的下一行都会有对应的报错,这个就是标准错误输出

      当我们编写的脚本或者服务出现问题时,我们希望能苟将其记录进一个错误日志error.log的文件之中,我们这样这样来做

      # 查看一个不存在的目录
      root@hcss-ecs-c2b8:/var/test# ll not_exist_dir 2>error.log 
      root@hcss-ecs-c2b8:/var/test# cat error.log 
      ls: cannot access 'qweq': No such file or directory
      root@hcss-ecs-c2b8:/var/test# ll not_exist_dir 2>>error.log 
      root@hcss-ecs-c2b8:/var/test# ll not_exist_dir 2>>error.log 
      root@hcss-ecs-c2b8:/var/test# cat error.log 
      ls: cannot access 'not_exist_dir': No such file or directory
      ls: cannot access 'not_exist_dir': No such file or directory
      
    5. 输出重定向 2>&1

      标准输出和标准错误输出都重定向都一个地方,注意这个无论是追加还是覆盖都只有一个>符号,由标准输出的符号决定输出方式

      # 用cat命令打开一个不存在的文件
      root@hcss-ecs-c2b8:/var/test# cat not_exit_file > res.txt 2>&1
      root@hcss-ecs-c2b8:/var/test# cat res.txt 
      cat: not_exit_file: No such file or directory
      root@hcss-ecs-c2b8:/var/test# cat not_exit_file > res.txt 2>&1
      root@hcss-ecs-c2b8:/var/test# cat res.txt 
      cat: not_exit_file: No such file or directory
      root@hcss-ecs-c2b8:/var/test# cat not_exit_file >> res.txt 2>&1
      root@hcss-ecs-c2b8:/var/test# cat res.txt 
      cat: not_exit_file: No such file or directory
      cat: not_exit_file: No such file or directory
      

      目前为止,我们接触的命令的输入都来自命令的参数,其实命令的输入还可以来自文件或者键盘的输入。

    6. 输入重定向 <

      <符号用于指定命令的输入。
      
      cat < res.txt # 指定命令的输入为 res.txt 
      

      虽然它的运行结果与cat name.csv一样,但是它们的原理却完全不同。

      cat res.txt表示cat命令接收的输入是res.txt文件名,那么要先打开这个文件,然后打印出文件内容。

      cat < res.txt 表示cat命令接收的输入直接是res.txt这个文件的内容,cat命令只负责将其内容打印,打开文件并将文件内容传递给 cat命令的工作则交给终端完成。

    7. 输入重定向 <<

      将键盘的输入重定向为某个命令的输入。

    8. 管道|

      把两个命令连起来使用,一个命令的输出作为另外一个命令的输入,英文是 pipeline,可以想象一个个水管连接起来,管道算是重定向流的一种。

      这里举个简单的例子

      root@hcss-ecs-c2b8:/var/test# ll | grep -E "*.txt"
      -rw-r--r--  1 root root 1278 Sep 24 21:25 files.txt
      -rw-r--r--  1 root root  117 Sep 24 21:33 file.txt
      -rw-r--r--  1 root root   92 Sep 24 21:53 res.txt
      -rw-r--r--  1 root root 1071 Sep 24 21:16 root_files.txt
      -rw-r--r--  1 root root  681 Sep 24 22:06 sort.txt
      # 这里管道符将ll命令的输出作为grep命令的输入并将grep命令的输出重定向到txt_type_files.text文件中
      root@hcss-ecs-c2b8:/var/test# ll | grep -E "*.txt" > txt_type_files.text
      root@hcss-ecs-c2b8:/var/test# cat txt_type_files.text 
      -rw-r--r--  1 root root 1278 Sep 24 21:25 files.txt
      -rw-r--r--  1 root root  117 Sep 24 21:33 file.txt
      -rw-r--r--  1 root root   92 Sep 24 21:53 res.txt
      -rw-r--r--  1 root root 1071 Sep 24 21:16 root_files.txt
      -rw-r--r--  1 root root  681 Sep 24 22:06 sort.txt
      -rw-r--r--  1 root root    0 Sep 24 22:10 txt_type_files.text
      
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2162245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是unix中的fork函数?

一、前言 在本专栏之前的文档中已经介绍过unix进程环境相关的概念了&#xff0c;本文将开始介绍unix中一个进程如何创建出新进程&#xff0c;主要是通过fork函数来实现此功能。本文将包含如下内容&#xff1a; 1.fork函数简介 2.父进程与子进程的特征 3.如何使用fork创建新进程…

依赖不对应导致java文件不能正常显示

项目中若出现非正常显示的java文件&#xff0c;检查下是否依赖版本不对应。&#xff08;前提必须是maven项目&#xff09;

网络原理(4)——网络层(IP)、数据链路层

1. IP 协议 基本概念&#xff1a; 主机&#xff1a;配有 IP 地址&#xff0c;但是不进行路由控制的设备 路由器&#xff1a;即配有 IP 地址&#xff0c;又能进行路由控制 节点&#xff1a;主机和路由器的统称 IP 协议报头格式 1) 4 位版本&#xff1a;实际上只有两个取值&…

通义灵码AI 程序员正式发布:写代码谁还动手啊

虽然见不到面 但你已深潜我心 前几天&#xff0c;在 2024 年的杭州云栖大会上&#xff0c;随着通义大模型能力的全面提升&#xff0c;阿里云通义灵码这位中国的首位 AI 程序员也迎来重大的升级。 一年前这位 AI 程序员还只能完成基础的编程任务&#xff0c;到现在可以做到几…

Leetcode 543. 124. 二叉树的直径 树形dp C++实现

问题&#xff1a;Leetcode 543. 二叉树的直径&#xff08;边权型&#xff09; 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之…

探索未来:MultiOn,AI的下一个革命

文章目录 探索未来&#xff1a;MultiOn&#xff0c;AI的下一个革命背景&#xff1a;为什么选择MultiOn&#xff1f;MultiOn是什么&#xff1f;如何安装MultiOn&#xff1f;简单的库函数使用方法场景应用常见问题及解决方案总结 探索未来&#xff1a;MultiOn&#xff0c;AI的下一…

图表示学习中的Transformer:Graphormer的突破

人工智能咨询培训老师叶梓 转载标明出处 在自然语言处理和计算机视觉等领域&#xff0c;Transformer架构已经成为主导选择。然而&#xff0c;在图级别的预测任务中&#xff0c;它的表现并不如主流的图神经网络&#xff08;GNN&#xff09;变体。这一现象引发了一个思考&#x…

指针变量的自增、自减运算

指针变量的自增、自减运算相比较于普通变量的自增、自减运算又什么区别呢&#xff1f; 让我们先来复习一下普通变量的自增、自减运算 int main() {int i; //定义一个整型变量printf("请输入一个数字&#xff1a;\n");scanf("%d&qu…

JetBrains系列产品无限重置免费试用方法

JetBrains系列产品无限重置免费试用方法 写在前面安装插件市场安装插件 写在前面 支持的产品&#xff1a; IntelliJ IDEA AppCode CLion DataGrip GoLand PhpStorm PyCharm Rider RubyMine WebStorm为了保证无限重置免费试用方法的稳定性&#xff0c;推荐下载安装2021.2.2及其…

QT Creator cmake 自定义项目结构, 编译输出目录指定

1. 目的 将不同的源文件放到不同的目录下进行管理&#xff0c; 如下&#xff1a; build: 编译输出目录 include: 头文件目录 rsources: 资源文件目录 src: cpp文件目录 2. 创建完cmake工程后修改CMakeLists.txt 配置 注 &#xff1a; 这里头文件目录是include, 所以在includ…

CSS05-复合选择器

一、什么是复合选择器 1-1、后代选择器&#xff08;重要&#xff09; 示例1&#xff1a; 示例2&#xff1a; 示例3&#xff1a; 1-2、子选择器 示例&#xff1a; 1-3、并集选择器&#xff08;重要&#xff09; 示例&#xff1a; 1-4、伪类选择器 1、链接伪类选择器 注意事项&am…

CVPR最牛图像评价算法!

本文所涉及所有资源均在 传知代码平台可获取。 目录 概述 一、论文思路 1.多任务学习框架&#xff1a; 2.视觉-语言对应关系&#xff1a; 3.动态损失权重&#xff1a; 4.模型优化和评估&#xff1a; 二、模型介绍 三、详细实现方法 1.图像编码器和语言编码器&#xff08;Image…

德蒂企鹅PAEDIPROTECT:德国医研力作,专为敏感肌婴幼儿量身打造

新生儿的诞生总是伴随着喜悦&#xff0c;也充满着手忙脚乱&#xff0c;尤其是敏感肌宝宝的皮肤护理。宝宝的皮肤如同初绽的花瓣&#xff0c;皮肤角质层薄而脆弱&#xff0c;容易受到外界刺激物的影响&#xff0c;水分流失快&#xff0c;经常会出现干燥、瘙痒、红斑甚至湿疹等症…

【ARM】AMBA和总线

AMBA AMBA&#xff08;Advanced Microcontroller Bus Architecture&#xff09; 总线是由ARM公司提出的一种开放性的片上总线标准&#xff0c;它独立于处理器和工艺技术&#xff0c;具有高速度低功耗等特点。 总线&#xff1a;系统芯片中各个模块之间需要有接口来连接。总线作…

爬虫类Chrome去除前端无限debugger反调试(轻松分析算法)

文章目录 引言方法1(简易抓包或者分析js适用)方法2(解决实际问题-最简单的方法)方法3(解决实际问题-麻烦点也是学会fiddler的一个功能)第一步&#xff1a;熟悉界面的大致功能意思第二步&#xff1a;保存出需要替换的代码&#xff0c;记住保存位置&#xff0c;待会儿要用第三步&…

【Python篇】详细学习 pandas 和 xlrd:从零开始

文章目录 详细学习 pandas 和 xlrd&#xff1a;从零开始前言一、环境准备和安装1.1 安装 pandas 和 xlrd1.2 验证安装 二、pandas 和 xlrd 的基础概念2.1 什么是 pandas&#xff1f;2.2 什么是 xlrd&#xff1f; 三、使用 pandas 读取 Excel 文件3.1 读取 Excel 文件的基础方法…

如何在精益六西格玛项目实践中激励小组成员保持积极性?

在精益六西格玛项目实践中&#xff0c;激励小组成员保持积极性是推动项目成功与持续改进的关键因素。精益六西格玛作为一种集精益生产与六西格玛管理精髓于一体的管理模式&#xff0c;旨在通过流程优化、质量提升及成本降低&#xff0c;实现企业的卓越绩效。然而&#xff0c;这…

《DevOps实践指南》笔记-Part 3

一篇文章显得略长&#xff0c;本文对应第5-6章、附录、认证考试、参考资源等。 前言、第1-2章请参考Part 1&#xff0c;第3-4章内容&#xff0c;请参考Part 2。 持续学习与实验的技术实践 通过以下方式制定有关提高安全性、持续改进和边做边学的制度&#xff1a; 建立公正的…

找不到MFC140.dll无法继续执行代码怎么办,共有6种解决方法

在计算机使用过程中&#xff0c;我们可能会遇到各种问题&#xff0c;其中一种常见的问题是DLL文件丢失。DLL文件是动态链接库文件&#xff0c;它包含了可以被多个程序共享的代码和数据。MFC140.dll就是其中之一。本文将深入分析MFC140.dll丢失的原因&#xff0c;并提供6种有效的…

双亲委派机制SPI

SPI如何破坏双亲委派机制&#xff1f;可根据以下概念一步步深入 什么是双亲委派机制&#xff1f; 双亲委派机制是Java类加载器体系中采用的一种类加载策略&#xff0c;旨在保证类加载的安全性和稳定性。 这一机制规定了类加载的顺序和规则&#xff0c;即当一个类加载器收到类…