文件重定向 | 学习笔记

简介: 快速学习文件重定向。

开发者学堂课程【Linux文件管理命令:文件重定向】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/591/detail/8346


文件重定向

 

内容介绍

一、标准的输入和输出

二、标准输出和错误的重定向

三、标准输出的重定向

 

一、  标准的输入和输出

1)程序

对于程序来讲,无非就是把一些数据加以处理,处理时我们需要将数据提供给计算机,计算机再将处理后的结果输出出来。这里就必然会涉及到输出数据和输入数据两个阶段。

读入数据:Input

输出数据:Output

2Linux 给程序提供三种 I/O 设备

输入数据需要用到输入设备,在 Linux 中通常将键盘作为输入设备,而输出通常在终端窗口实现。

输入、输出与错误也都有对应的文件来表示。这里的错误指的是当我们执行一个错误指令,程序通过终端窗口弹出的错误信息。对每一个在Linux里面打开的文件,系统都会分配一个数字,这个数字被称为文件描述符。这个数字代表着打开的文件,而我们用来输入的设备也是一个打开的文件,用0来表示。输出的设备用1来表示,输出的错误用2来表示。

即:

标准输入(STDIN- 0 默认接受来自键盘的输入;

标准输出(STDOUT- 1 默认输出到终端窗口;

标准错误(STDERR):- 2 默认输出到终端窗口。

3)打开的文件都有一个fd:file descriptor(文件描述符)

若想查看文件或进程对应的数字,可以进入 proc 目录下对应数字的目录,目录中的fd代表了文件描述符(file descriptor)。

 

二、标准输出和错误的重定向

对于一般情况下,默认的标准输入设备,也就是键盘,有许多命令是需要标准输入的,例如之前学过的 bc 命令,我们输入需要计算的公式,计算机处理后显示结果,所以可以说 bc 命令是既有标准输入又有标准输出。

当然不是所有命令都有标准输入、标准输出,例如 rm -f 2222命令,可以看到并没有输出。

标准输出和错误的重定向格式为:命令 操作符号 文件名,支持的操作符号包括:

l  >STDOUT 重定向到文件

l  2>STDERR 重定向到文件(将错误重定向到文件里)

l  &>把所有输出重定向到文件

l  >文件内容会被覆盖

l  set -C 禁止将内容覆盖已有文件,但可追加

l  >| file 强制覆盖

l  set +C 允许覆盖

l  >>原有内容基础上,追加内容

标准输出默认情况下在屏幕上显示,例如ls命令,此命令会列出目录文件,这就是他的输出结果。标准输出设备是当前的终端窗口。若我们需要把结果在非终端窗口中显示,这种行为就叫做重定向(redirect),通俗地说,就是改变方向。

那怎么改变方向呢?首先,标准输出的重定向非常简单,只需在标准输出的命令的后面补上对应的重定向操作符 >,在重定向操作符>后跟上你希望标准输出的位置。

例如,我当前的终端窗口的设备名称是 pts/0。另一个终端窗口是 pts/1。若我想在 pts/1上显示,则在标准输出命令后添加> /dev/pts/1。这时命令的执行结果就不在当前窗口显示,而在 pts/1窗口显示。

我们以前用>来创建空文件,实际上是运用了重定向的技术。当>前后均无内容,就相当于没有命令、没有输出,也就相当于创建一个空文件。若>后没有内容,它就会把这个文件创建出来。若再次使用 > ,执行命令时,新生成的文件,将会把之前生成的文件替换掉。

当然我们也可以在保留源文件时同时创建新文件,那我们只需要使用>>,此符号表示追加内容。

我们还可以使用禁止覆盖命令,禁止覆盖相对比较安全,一旦打开,则无法通过>覆盖原文件。以上方法的好处是我们可以将一些命令的执行结果重定向至文件内,以便今后慢慢分析。

注意,>只会重定向标准输出,错误信息是不会执行重定向的。2>可以把 STDERR重定向到文件,这里的2其实就是之前提到的文件通配符。1代表……,故>其实代表1>,只是我们默认不写。若我们希望将重定向到文件的错误信息隐藏起来,可以使用2> /dev/null/

当然,2>>也支持追加。

显然错误和标准输出是两种信息,但如果一个命令输出中既有标准输出又有错误时应该怎么处理呢?例如我们输入命令,试图打开一个正确文件夹中完全不存在的文件,我们此时希望将标准输出和错误信息分开保存至f1f2两个文件中,我们可以:

ls /data /error/ > /root/f1 2> /root/f2

也可以将标准输出和错误信息存储在一个文件里:

ls /data /error/ &> /root/all.log

或  ls /data /error/ &> /root/all.log 2>&1

或  ls /data /error/ 2> /root/all.log 1>&2

还可以使用(cal 2007;cal 2008>all.txt 来实现合并多个程序的 STDOUT,缺点是会显示更改命令成功的提示。

 

三、标准输入的重定向

标准输入如何进行重定向呢?换句话说就是用一个设备代替键盘进行标准输入。我们常用文件代替。我们使用<来表示标准输入的重定向。例如  bc<f1.txt 。我们通过以上方法可以将人工操作转变为自动化操作,将人工的交互式操作转化为非交互式操作。带来的好处就是可以批量处理。

标准输入有一个小工具:tr 命令。这个命令是一个外部命 令,可以用来转换和删除字符。tr [OPTION].. SET1 [SET2],将 SET1 中的字符用 SET2中的字符代替。如果两个集合之间字符数量不匹配,未匹配的将不进行替换。

我们还可以修改 tr 命令:

l  -C -C --complement:取字符集的补集

l  -d --delete:删除所有属于第一字符集的字符

l  -S --squeeze-repeats:把连续重复的字符以单独一个字符表示

l  -t --truncate-set1:将第一个字符集对应字符转化为第二 字符集对应的字符

[:alnum:]:字母和数字

[:alpha:]:字母

[:cntrl:]:控制(非打印)字符

[:digit:]:数字

[:graph:]:图形字符

[:lower:]:小写字母

[:print:]: 可打印字符

[:punct:]:标点符号

[:space:]:空白字符

[:upper:]:大写字母

[:xdigit:]:十六进制字符

相关文章
|
C语言
C语言初阶⑧(结构体)知识点和笔试题
C语言初阶⑧(结构体)知识点和笔试题
259 0
|
监控 数据可视化 虚拟化
服务器虚拟化
服务器虚拟化
764 0
|
小程序 数据库
微信小程序访问云数据库
微信小程序访问云数据库
303 1
|
8月前
|
存储 人工智能 自然语言处理
0 代码焦虑!阿里云 Bolt.diy 一键解锁你的专属网站,30 分钟惊艳上线
Bolt.diy 是阿里云推出的智能化建站工具,基于函数计算 FC 和百炼模型服务,通过自然语言描述即可快速生成网站。无需本地配置环境,3分钟完成部署,适合各水平用户。支持个性化定制、域名绑定及数据备份,安全可靠。无论是个人博客还是企业官网,都能轻松实现。立即领取免费额度体验:[部署链接](https://www.aliyun.com/solution/tech-solution/fc-bolt-diy?utm_content=g_1000403257)。
298 4
|
安全 网络安全 数据库
CISP-PTE靶机
本文档详细记录了一次针对Windows 2003服务器的渗透测试过程。测试环境包括攻击机(Kali Linux,IP: 192.168.18.130)和靶机(Windows 2003,IP: 192.168.18.145),两者需处于同一局域网内。测试过程中,通过Nmap扫描发现靶机开放了SQL Server端口,进一步利用信息泄露、文件上传漏洞及数据库连接等方式,逐步获取了系统的控制权限,最终实现了远程桌面连接。文中还提供了多种技术细节和操作命令,帮助读者理解每一步的具体实现方法。
436 0
CISP-PTE靶机
|
缓存 算法 数据处理
Python性能优化:提升代码效率与速度的秘诀
【10月更文挑战第22天】Python性能优化:提升代码效率与速度的秘诀
396 0
|
数据采集 缓存 网络安全
Python中网络请求超时的原因及解决方案
Python中网络请求超时的原因及解决方案
|
运维 监控 Java
Java在运维领域的技术应用与实践
Java在运维领域的技术应用与实践
236 1
|
Web App开发 弹性计算 安全
阿里云上云入门
本文帮助个人新手用户熟悉和了解云计算的基本概念、上云准备和上云流程。