linux输入输出重定向

  1. 0x01 前言
  2. 0x02 具体
  3. 文件描述符简介
  4. 重定向符号
  5. 重点:
    1. [n]<:输入重定向
    2. [n]> >>: 输出重定向
  6. exec绑定重定向
    1. 管道符 |
  7. 参考

0x01 前言


在渗透测试中,很多情况下都会遇到反弹shell的情况,之前都是把反弹shell的语句复制过来用的,其实根本不知道语句的意思,最近准备深入了解一下反弹shell的机制,现在先从十分关键的输入,输出,重定向开始。

0x02 具体


文件描述符简介


在操作系统中每个程序的打开都要经过系统管理,而系统管理进程或者程序的运行就是通过文件描述符来管理,文件描述符在形式上是一个非负整数,实际上,他是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新的文件时,内核向该文件返回一个文件描述符。在linux进程中应均有三个标准的POSIX文件描述符,对应三个标准流:

标准输入: Standard input 0 stdin

标准输出: Standard output 1 stdout

标准错误输出: Standard error 2 stderr

对于任何一条linux命令执行,他会是这样一个过程

一个命令执行了:

现有一个输入:输入可以从键盘输入,也可以从文件得到。

命令执行完成:成功了,会把成功结果输出到屏幕,即标准输出,默认是屏幕们也可以输出到文件.

命令执行有错误:会把错误也输出到屏幕上(默认是屏幕)。

重定向符号


重点:

  • bash 在执行一条指令的时候,首先会检查命令中存不存在重定向符号,如果存在,那么首先将文件描述符重定向,然后再把重定向去掉,执行命令

  • 重定向就是针对文件描述符的操作

  • 如果指令中存在多个重定向,那么不要随便改变顺序,因为重定向是从左向右解析的,改变顺序可能会带来完全不同的结果

eg:

ls > dirlist 2>&1

解释:将标准输出和标准错误输出重定向到文件dirlist中,

ls 2>&1 > dirlist

解释:只将标准输出转移到文件中,因为重定向符号是按照从左到右的顺序识别的,本句先合并再定向是是没有用的们应该先定向再合并

先解析 2>&1

之后重定向

[n]<:输入重定向


实现输入重定向,输入重定向时输入的内容来自文件,而不仅仅是用户输入。

test:

解释: 首先输入重定向到2.txt 读取2.txt文件中的内容,然后再输出重定向,将文件中的内容写入到1.txt中

解释:上面两个结果不同,第一有1.txt是因为输入时1.txt 第二个没有1.txt是因为直接从文件中读取输入,读取的文件的内容。

输入重定向就是改变默认的本机用户输入,可以从文件中读取数据,也可以从其他的主机上输入

[n]> >>: 输出重定向


默认输出时屏幕,使用输出重定向,可以将输出写入文件。

test:

输出重定向就是将命令执行的结果显示到文件或其他地方去

“>” 和 “>>”的区别


> 会覆盖输出文件原来的内容
>>会在原文件的结尾添加内容

标准输出与标准错误输出重定向


格式:

&> 或 >&

解释:将标准输出和标准错误输出全都定向到文件中

等价于

>file 2>&1

2>&1 是把 标准错误输出重定向到标准输出,

注:添加一个& 是为了区分文件标识符和文件名。不加 & 2>1 表示把标准错误输出重定向到文件名是1的文件中,加了&以后表示后面的数字指文件标识符,为不是文件名

文件描述符的复制


格式:[n]<&[m] or [n] >&[m]

说明:

  • 这里两个都是将文件描述符n复制到m,前者以只读的方式打开,后者以写的形式打开,所以 0<&1和 0>&1是没有区别的(只读、只写对标准输入输出没有什么影响)

  • 这里的& 目的是为了区分数字名字的文件和文件描述符,如果没有& 系统会认为是将文件描述符重定向到了一个数字作为文件名的文件,而不是一个文件描述符

exec绑定重定向


exec 文件描述符[n] <或> file或文件描述符或设备
之前的重定向是针对当前的一条语句的,而使用exec以后,所有的语句都会执行。

test:

管道符 |


管道命令”|” 将几条命令前后连接在一起,形成一条管道线,

命令格式:命令A|命令B,即命令1的正确输出作为命令B的操作对象。

解释:A会作为B的输入 “|”提供两者之间的通道

参考

https://blog.csdn.net/ccwwff/article/details/48519119

https://blog.csdn.net/ccwwff/article/details/48519119

http://www.k0rz3n.com/2018/08/05/Linux%20%E5%8F%8D%E5%BC%B9shell%20%EF%BC%88%E4%BA%8C%EF%BC%89%E5%8F%8D%E5%BC%B9shell%E7%9A%84%E6%9C%AC%E8%B4%A8/#more


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 sunsec98@gmail.com

文章标题:linux输入输出重定向

本文作者:Sunsec

发布时间:2018-10-06, 18:10:19

最后更新:2020-07-04, 15:36:34

原始链接:http://yoursite.com/2018/10/06/linux重定向/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录