《Linux从小白到高手》理论篇补充:深入理解Linux中的输入输出及重定向

  1. List item

    今天继续宅家,闲来无事接着写。本篇是《Linux从小白到高手》理论篇补充篇。本篇深入介绍Linux中的输入输出及重定向。
    输入和输出(I/O)是操作系统与用户、程序以及硬件设备之间交互的基本方式。Linux有很多输入输出操作,包括标准I/O、文件I/O、管道、重定向、设备文件等。

一.Linux的输入输出

1. 标准I/O(Standard I/O)

Linux中的标准I/O涉及三个主要流:
标准输入(stdin):文件描述符为0,通常来自键盘。
标准输出(stdout):文件描述符为1,通常输出到终端。
标准错误(stderr):文件描述符为2,通常输出到终端,但可以与标准输出分开处理。

2. 文件I/O

Linux中的文件I/O涉及对文件系统的读写操作。文件可以是普通文件、目录、设备文件(如硬盘、串口等)或管道。

#使用cat命令读取文件内容  
cat file.txt  
#使用echo命令写入文件  
echo "Hello, World!" > file.txt  
#使用重定向操作符追加内容到文件  
echo "Another line" >> file.txt

3. 管道(Pipes)

管道是一个将命令的输出作为另一个命令的输入。使用竖线 | 符号创建管道。

#将ls命令的输出传递给grep命令  
ls | grep "pattern"  
#多级管道  
cat file.txt | grep "pattern" | sort

4. 输入输出重定向

重定向允许你改变标准输入、输出和错误流的默认行为。

#将输入重定向自文件  
wc -l < file.txt  
#将输出重定向到文件  
ls > file_list.txt  
#将错误输出重定向到文件  
grep "pattern" non_existent_file 2> error.log    
#使用`tee`命令同时输出到终端和文件  
ls | tee file_list.txt

5. 设备文件

Linux将硬件设备表示为文件,通常位于 /dev 目录下。例如,硬盘、串口、USB设备等。

#列出所有设备文件  
ls /dev  
#读取串口设备(假设串口设备为/dev/ttyS0)  
cat /dev/ttyS0  
#写入数据到串口设备  
echo "Hello, Serial Port" > /dev/ttyS0

6. 伪终端(Pseudo-Terminals)

伪终端允许程序模拟终端行为,常用于远程登录(如SSH)、终端仿真器等。

#使用`pty`工具创建伪终端  
pty

7. 高级I/O操作

对于更复杂的I/O操作,可以使用编程接口,如C语言中的标准I/O库(stdio.h)或更底层的系统调用(如read(), write(), open(), close()等)。此处不做详细介绍。

二.Linux中的标准输入

Linux的标准输入(stdin) 是指程序接收输入数据的一种默认方式。它通常与键盘相关联,但也可以是从文件或其他程序输出中重定向或管道传输的数据。标准输入是三个标准流之一,另外两个是标准输出(stdout)和标准错误(stderr)。
在Linux命令行中,你可以使用重定向操作符来改变标准输入的行为。例如,你可以使用 < 操作符将文件的内容作为程序的输入:wc -l < file.txt
wc -l 命令会计算 file.txt 文件中的行数,而不是从键盘接收输入。
另外,也可以使用管道(|)将一个命令的输出作为另一个命令的输入,这实际上也涉及到了标准输入的重定向,只不过是由shell自动处理的:ls | grep “pattern”。ls 命令的输出被重定向为 grep 命令的输入,grep 命令会从中筛选出包含 “pattern” 的行。

三.Linux的标准输出和标准错误

在Linux和类Unix操作系统中,标准输出(stdout) 和 标准错误(stderr) 非常重要,它们构成了进程间通信和调试的基础。

标准输出(stdout)

标准输出是进程正常输出数据的地方。在命令行中,当你运行一个程序时,它的正常输出通常会显示在终端上。这个输出就是通过标准输出来实现的。标准输出有一个与之关联的文件描述符(file descriptor),通常是1。
可以将标准输出重定向到一个文件,而不是显示在终端上。例如,使用 > 操作符:
ls > output.txt
这个命令会将 ls 命令的输出重定向到 output.txt 文件中,而不显示在终端上。

标准错误(stderr)

标准错误是进程输出错误信息或警告信息的地方。与标准输出不同,标准错误也有一个与之关联的文件描述符,但通常是2。标准错误的设计初衷是为了将错误信息与正常输出分开,以便更容易地调试程序。
你可以将标准错误重定向到一个文件,或者将其与标准输出合并。例如,使用 2> 操作符可以单独重定向标准错误:

ls non_existent_file 2> error.txt

这个命令会将尝试列出不存在的文件时产生的错误信息重定向到 error.txt 文件中。

如果你想将标准输出和标准错误都重定向到同一个文件,你可以使用 &> 操作符(在某些shell中,如bash,也可以使用 > 操作符并追加 2>&1 来实现):
ls non_existent_file &> all_output.txt

ls non_existent_file > all_output.txt 2>&1
这两个命令都会将 ls 命令的正常输出和错误信息都重定向到 all_output.txt 文件中。

四.详解重定向

重定向是Linux中一个非常强大的功能,它可以改变命令的默认输入和输出行为。

1、重定向的意义

重定向是指将命令的输入或输出从一个默认的位置(如键盘或屏幕)改变到另一个位置(如文件或设备)。在Linux中,重定向主要通过特定的符号(一般是>/>>)和命令来实现。

2、重定向的类型

输入重定向:
输入重定向是指将文件或其他命令的输出作为另一个命令的输入。
使用 < 符号进行输入重定向。例如:command < input_file,这将 input_file 文件中的内容作为 command 命令的输入。
输出重定向:
输出重定向是指将命令的输出发送到文件或设备中,而不是显示在屏幕上。
使用 > 符号进行覆盖输出重定向。例如:command > output_file,这将 command 命令的标准输出重定向到 output_file 文件中,如果文件已存在,则会被覆盖。
使用 >> 符号进行追加输出重定向。例如:command >> output_file,这将 command 命令的标准输出以追加的方式重定向到 output_file 文件中,如果文件不存在,则会被创建。
错误重定向:
错误重定向是指将命令的错误信息(标准错误输出)发送到文件或设备中。
使用 2> 符号进行错误重定向。例如:command 2> error_file,这将 command 命令的错误信息重定向到 error_file 文件中。
合并输出与错误重定向
有时,用户可能希望将命令的标准输出和错误信息同时重定向到同一个文件中。
使用 &> 符号(在某些shell中)或 2>&1 的组合进行合并输出与错误重定向。例如:command &> output_and_error_file 或 command > output_file 2>&1,这将 command 命令的标准输出和错误信息都重定向到 output_and_error_file(或 output_file)中。
3、重定向的用法举例

//将命令输出重定向到文件
ls > file_list.txt
//此命令将当前目录下的文件和文件夹列表输出到 file_list.txt 文件中。
//将命令输出以追加的方式重定向到文件
echo "New line" >> file_list.txt
//此命令将在 file_list.txt 文件的现有内容之后追加一行文本 “New line”。
//将错误信息重定向到文件
grep "nonexistent_pattern" file.txt 2> errors.txt
//此命令尝试在 file.txt 文件中搜索一个不存在的模式,并将产生的错误消息输出到 errors.txt 文件中。
//将标准输出和标准错误同时重定向到同一个文件
ls nonexistent_directory &> output.txt
//或
ls nonexistent_directory > output.txt 2>&1
//这两个命令都尝试列出不存在的目录,并将命令的所有输出(包括错误信息)重定向到 output.txt 文件中。

4、重定向的高级用法
全局重定向:
全局重定向是对后续在Bash中创建的所有子进程都生效的重定向。它通常使用 exec 命令来实现。例如:
exec 5< test1
此命令会打开 test1 文件,并将其文件描述符分配为5。之后,任何使用文件描述符5的命令都会从 test1 文件中读取输入。
输入和输出同时重定向:
有时,用户可能希望将命令的输入和输出都重定向到文件。这可以通过同时使用 < 和 > 符号来实现。例如:
command < input_file > output_file
这将 input_file 文件中的内容作为 command 命令的输入,并将 command 命令的输出重定向到 output_file 文件中。

5、注意事项
–当使用重定向时,务必注意不要不小心覆盖了重要文件。可以先使用 ls 或 cat 命令检查文件内容,以避免不必要的损失。
–在处理大型文件或频繁写入的场景时,应当考虑文件锁定和并发写入的问题,以避免数据损坏。
–重定向符号可以单独使用,也可以与其他命令一起使用。此外,还可以将重定向与管道符号一起使用,实现更复杂的输出操作。
本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。

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

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

相关文章

【C++】二叉搜索树+变身 = AVL树

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言一、AVL树二、AVL树的实现2.1 平衡因子2.2 旋转处理2.2.1 左单旋&#xff1a;插入新节点后单纯的右边高2.2.2 …

html5 + css3(上)

目录 HTML初识基础认知web标准vscode的简介和使用注释 HTML标签学习排版标签标题和段落换行和水平线标签 文本格式化标签媒体标签图片标签图片-基本使用图片-属性 路径绝对路径相对路径 音频标签视频标签链接标签 HTML基础列表标签列表-无序和有序列表-自定义 表格标签表格-使用…

【包教包会】2D图片实现3D透视效果(支持3.x、支持原生、可合批)

将去年写的SpriteFlipper从2.x升级到3.x。 如果需要2.x版本或需要了解算法思路&#xff0c;请移步&#xff1a;https://blog.csdn.net/weixin_42714632/article/details/136745051 优化功能&#xff1a;可同时绕X轴和Y轴旋转&#xff0c;两者效果会叠加。 完美适配Web、原生…

数据结构与算法篇(图)(持续更新迭代)

目录 一、引言 二、基本概念 三、图的定义 四、图的基本概念和术语 1. 有向图 2. 无向图 3. 简单图 4. 多重图 5. 完全图&#xff08;也称简单完全图&#xff09; 6. 子图 7. 连通、连通图和连通分量 8. 强连通图、强连通分量 9. 生成树、生成森林 10. 顶点的度、…

使用WPF实现一个快速切换JDK版本的客户端工具

发现网上一键切换JDK环境的方法都是在mac或Linux下的&#xff0c;本人主力电脑是Windows&#xff0c;于是看了一下WPF的文档&#xff0c;自己开发了一个客户端。 直接上代码吧&#xff1a; using JavaSwitch.Properties; using Newtonsoft.Json; using System; using System.…

【C++11】新特性

前言&#xff1a; C11 是C编程语言的一个重要版本&#xff0c;于2011年发布。它带来了数量可观的变化&#xff0c;包含约 140 个新特性&#xff0c;以及对 C03 标准中约600个缺陷的修正&#xff0c;更像是从 C98/03 中孕育出的新语言 列表初始化 C11 中的列表初始化&#xff0…

爬虫案例——爬取情话网数据

需求&#xff1a; 1.爬取情话网站中表白里面的所有句子&#xff08;表白词_表白的话_表白句子情话大全_情话网&#xff09; 2.利用XPath来进行解析 3.使用面向对象形发请求——创建一个类 4.将爬取下来的数据保存在数据库中 写出对应解析语法 //div[class"box labelbo…

vite学习教程03、vite+vue2打包配置

文章目录 前言一、修改vite.config.js二、配置文件资源/路径提示三、测试打包参考文章资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&…

云手机可以解决TikTok运营的哪些问题?

随着社交媒体的飞速发展&#xff0c;TikTok迅速崛起&#xff0c;成为个人和企业进行品牌宣传和内容创作的首选平台。然而&#xff0c;在运营TikTok账号的过程中&#xff0c;不少用户会遇到各种问题。本文将详细阐述云手机如何帮助解决这些问题。 1. 多账号管理的高效便捷 通过云…

外包功能测试干了4年,技术退步太明显了。。。。。​

先说一下自己的情况&#xff0c;本科生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了差不多4年的功能测试&#xff0c;今年中秋&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测…

精准选择大模型:消费品行业的营销与体验创新之路

在消费品行业&#xff0c;大模型技术的引入正逐渐从一个新兴趋势转变为行业标配。随着人工智能的快速发展&#xff0c;特别是OpenAI等领军企业推出的创新技术&#xff0c;如Sora&#xff0c;大模型在市场营销、消费者行为分析、个性化推荐等方面展现出巨大潜力。然而&#xff0…

详解Java中的BIO、NIO、AIO

1、 详解Java中的BIO、AIO、NIO 1.1、引言 IO流是Java中比较难理解的一个知识点&#xff0c;但是IO流在实际的开发场景中经常会使用到&#xff0c;比如Dubbo底层就是NIO进行通讯。本文将介绍Java发展过程中出现的三种IO&#xff1a;BIO、NIO以及AIO&#xff0c;重点介绍NIO。…

动态桌面时钟 让时间在桌面舞动 发现生活中的美好瞬间!

在快节奏的现代生活中&#xff0c;时间是最宝贵的资源之一。无论是在工作还是生活中&#xff0c;我们都需要时刻关注时间&#xff0c;在桌面显示一个时钟&#xff0c;可以让你更方便的掌握时间。今天小编给大家推荐一个软件《芝麻时钟》&#xff08;下载地址&#xff1a;https:…

Linux高级编程_29_信号

文章目录 进程间通讯 - 信号信号完整的信号周期信号的编号信号的产生发送信号1 kill 函数(他杀)作用&#xff1a;语法&#xff1a;示例&#xff1a; 2 raise函数(自杀)作用&#xff1a;示例&#xff1a; 3 abort函数(自杀)作用&#xff1a;语法&#xff1a;示例&#xff1a; 4 …

汇编DEBUG程序调用

工具 系统&#xff1a;Windows 11 应用&#xff1a;DOSBox 0.74-3 下载安装教程&#xff1a;本人写的《DOSBox下载安装&#xff08;Windows系统 DOSBox 0.74-3&#xff09;》 https://blog.csdn.net/just_do_it_sq/article/details/142715182?spm1001.2014.3001.5501 相关文…

ARM 架构、cpu

一、ARM的架构 ARM是一种基于精简指令集&#xff08;RISC&#xff09;的处理器架构. 1、ARM芯片特点 ARM芯片的主要特点有以下几点&#xff1a; 精简指令集&#xff1a;ARM芯片使用精简指令集&#xff0c;即每条指令只完成一项简单的操作&#xff0c;从而提高指令的执行效率…

沂机管理系统/data/Ajax.aspx接口存在SQL注入漏洞

漏洞描述 沂机管理系统/data/Ajax.aspx接口存在SQL注入漏洞&#xff0c;攻击者可以获取服务器权限 漏洞复现 body"后台管理系统演示版" POC GET /data/Ajax.aspx?methodlog_list&page1&limit20&fkey1&fdate12024-10-0100%3A00%3A00&fdate2…

文章资讯职场话题网站源码整站资源自带2000+数据

介绍&#xff1a; 数据有点多&#xff0c;数据资源包比较大&#xff0c;压缩后还有250m左右。值钱的是数据&#xff0c;网站上传后直接可用&#xff0c;爽飞了 环境&#xff1a;NGINX1.18 mysql5.6 php7.2 代码下载

全球IP归属地查询-IP地址查询-IP城市查询-IP地址归属地-IP地址解析-IP位置查询-IP地址查询API接口

IP地址城市版查询接口 API是指能够根据IP地址查询其所在城市等地理位置信息的API接口。这类接口在网络安全、数据分析、广告投放等多个领域有广泛应用。以下是一些可用的IP地址城市版查询接口API及其简要介绍 1. 快证 IP归属地查询API 特点&#xff1a;支持IPv4 提供高精版、…

【零基础入门产品经理】学习准备篇 | 需要学一些什么呢?

前言&#xff1a; 零实习转行产品经理经验分享01-学习准备篇_哔哩哔哩_bilibili 该篇内容主要是对bilibili这个视频的观后笔记~谢谢美丽滴up主友情分享。 全文摘要&#xff1a;如何在0实习且没有任何产品相关经验下&#xff0c;如何上岸产品经理~ 目录 一、想清楚为什么…