重定向-管道技术-xargs命令详解
重定向
什么是重定向?
将原本要输出在屏幕的内容,重新定向输出到指定的文件或设备中。
为什么要使用重定向?
1、备份的时候需要知道备份的结果。
2、屏幕上输出信息比较重要的时候需要保存下来。
3、定时任务我们需要知道结果。
4、执行命令时,明知会报错,我们会使用重定向,将结果放入 /dev/null
5、执行命令时,正确的结果和错误会同时输出,将正确的结果输入到常规日志,将错误的结果输出到错误日志。
重定向的分类
- 标准输入
- 标准输出
| 名称 | 文件描述符 | 作用 |
|---|---|---|
| 标准输入(stdin) | 0 | 通常键盘(其它的输入设备) |
| 标准输出(stdout) | 1 | 默认输出到屏幕 |
| 错误输出(stderr) | 2 | 默认输出到屏幕 |
| 文件名(filename) | 3+ |
输出重定向
/dev/null
/dev/pts/0
/tmp/1.txt
| 类型 | 符号 | 用途 | 备注 |
|---|---|---|---|
| 标准覆盖输出重定向 | 1> | 将命令执行的正确结果默认输出位置修改为指定的文件或者目录中。 | 通常>即可,1可以不写 |
| 标准追加输出重定向 | >> | 将命令的输出的正确结果,输出到指定文件的末尾,不会覆盖原文件的内容。 | |
| 错误输出重定向 | 2> | 将命令执行的错误结果输出到默认位置,修改为指定的文件或者终端(覆盖原有的内容) | |
| 错误追加输出重定向 | 2>> | 将命令执行的错误结果输出到指定的文件末尾或者终端(不会覆盖原有的内容) | |
| 标准输入重定向 | 0< | 将命令中接收输入的内容默认由键盘,改为命令或者文件。 | 通常0可以省略不写,默认0 |
| 标准追加输入重定向 | 0<< | 将命令中接收输入内容默认由键盘,改为命令或者文件。 |
# 标准覆盖输出重定向
[root@oldboy /data]# echo 123 > a.txt # 输出到文件
echo '123' >/dev/pts/0 # 输出到终端

# 标准输出追加重定向
[root@oldboy /data]# echo 123 >> a.txt
[root@oldboy /data]# echo gongxiaoliao >> /var/log/messages

# 错误输出重定向
ll /sfdsfa 2> a.txt
# 正确的和错误的都输出到同一个文件当中
- 2>&1
- &> 效率更高
[root@oldboy /data]# ll /root /sfdsfa > a.txt 2>&1
[root@oldboy /data]# ll /root /sfdsfa &> a.txt
# 错误输出到黑洞
ls /root /asdfds 2> /dev/null



# 脚本中使用重定向
#!/bin/bash
. /etc/init.d/functions
read -p "请输入要检测的IP:" IP
ping -c1 -W1 $IP &>/dev/null
if [ $? -eq 0 ];then
action "$IP" /bin/true >> /tmp/IP_OK.txt
else
action "$IP" /bin/false >> /tmp/IP_FAILD.txt
fi
管道符:将管道符左边命令的标准输出交给管道符右边的命令处理。
输入重定向
# 比如tr命令
root@oldboy ~]# tr 'a' 'A' </etc/passwd
mail -s 'biaoti' 邮件地址 < /etc/passwd
echo 123asdf | mail -s 'biaoti' 邮件地址
管道技术
管道操作的符号: | 管道符
将管道符左边命令的标准输出,交给管道符右边命令的标准输入处理。管道符只接收正确的输出。
用法: cmd1|cmd2|cmd3
案例一
[root@oldboy ~]# sort -t: -k3 -nr /etc/passwd|head -5 # 对数据的排序处理
案例二
# 统计出passwd文件中,所有用户的shell种类
[root@gong ~]# awk -F: '{print $7}' /etc/passwd|sort |uniq|wc -l
5
[root@gong ~]# cut -d':' -f7 /etc/passwd|sort|uniq -c|sort -nr
案例三
10种方法,取IP
[root@gong ~]# hostname -I
10.0.0.89
[root@gong ~]# ip a s eth0|head -3|tail -1|cut -d'/' -f1|cut -d' ' -f6
10.0.0.89
[root@gong ~]# ip a s eth0|grep -w inet|cut -d'/' -f1|cut -d' ' -f6
10.0.0.89
[root@gong ~]# ip a s eth0|sed -n 3p |cut -d'/' -f1|cut -d' ' -f6
10.0.0.89
[root@gong ~]# ip a s eth0|sed -n /inet/p |cut -d'/' -f1|cut -d' ' -f6|head -1
10.0.0.89
[root@gong ~]# ip a s eth0|sed '1,2d' |sed '2,$d'|cut -d' ' -f6|cut -d'/' -f1
10.0.0.89
[root@gong ~]# ip a s eth0|sed -nr 's#.*inet (.*)/24.*#\1#g'p
10.0.0.89
[root@gong ~]# ip a s eth0|awk 'NR==3{print $0}'|cut -d' ' -f6|cut -d'/' -f1
10.0.0.89
[root@gong ~]# ip a s eth0|awk 'NR>2&&NR<4{print $0}'|cut -d' ' -f6|cut -d'/' -f1
10.0.0.89
[root@gong ~]# ip a s eth0 |awk -F'[ /]+' 'NR==3{print $3}'
10.0.0.89
[root@gong ~]# ip a s eth0|sed -n 3p|awk -F'[ /]+' '{print $3}'
10.0.0.89
案例四
# 取出磁盘所剩百分比
[root@gong ~]# df -h|awk 'NR>1{print $5}'
6%
0%
0%
2%
0%
25%
0%
管道技术-tee
在重定向到文件或者设备的时候还可以向终端输出。

# tee 和 重定向的区别
[root@zls ~]# date > date.txt
[root@zls ~]# date |tee date.txt
xargs
[root@localhost opt]# find /etc/ -name '*.conf'|xargs cp -t /tmp/
## 2.xargs和管道符的不同
[root@gong /tmp]# touch file1.txt
[root@gong /tmp]# touch file2.txt
[root@gong /tmp]# touch file3.txt
[root@gong /tmp]# echo abc >file1.txt
[root@gong /tmp]# echo abb >file2.txt
[root@gong /tmp]# echo abd >file3.txt
[root@gong /tmp]# ll |sed 's#file#abc#g' # 在不使用xargs的时候,sed更改的只是输出的结果
total 12
-rw-r--r-- 1 root root 4 Apr 8 16:40 abc1.txt
-rw-r--r-- 1 root root 4 Apr 8 16:40 abc2.txt
-rw-r--r-- 1 root root 4 Apr 8 16:40 abc3.txt
[root@gong /tmp]# ll
total 12
-rw-r--r-- 1 root root 4 Apr 8 16:40 file1.txt
-rw-r--r-- 1 root root 4 Apr 8 16:40 file2.txt
-rw-r--r-- 1 root root 4 Apr 8 16:40 file3.txt
[root@gong /tmp]#
[root@gong /tmp]# cat file*
abc
abc
abd
[root@gong /tmp]# ls |xargs sed -i 's#ab#AB#g' # 在使用xargs的时候会把前面的内容当作单个的文件再被sed处理,实际上文件内容已经被更改。
[root@gong /tmp]# cat file*
ABc
ABc
ABd
重定向-管道技术-xargs命令详解的更多相关文章
- [转帖]xargs命令详解,xargs与管道的区别
xargs命令详解,xargs与管道的区别 https://www.cnblogs.com/wangqiguo/p/6464234.html 之前一直说要学习一下 xargs 到现在为止也没学习.. ...
- 【转帖】linux sort,uniq,cut,wc,tr,xargs命令详解
linux sort,uniq,cut,wc,tr,xargs命令详解 http://embeddedlinux.org.cn/emb-linux/entry-level/201607/21-5550 ...
- xargs命令详解,xargs与管道的区别
为什么要用xargs,问题的来源 在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以 ...
- 【转】xargs命令详解,xargs与管道的区别
为什么要用xargs,问题的来源 在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以 ...
- [转]xargs命令详解,xargs与管道的区别
为什么要用xargs,问题的来源 在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以 ...
- Linux命令:xargs命令详解,xargs与管道的区别
阅读目录 为什么要用xargs,问题的来源 xargs是什么,与管道有什么不同 xargs的一些有用的选项 回到顶部 为什么要用xargs,问题的来源 在工作中经常会接触到xargs命令,特别是在别人 ...
- Linux下xargs命令详解及xargs与管道的区别
在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以及与管道的区别.为什么要用xarg ...
- xargs命令详解
xargs命令是把接收到的数据重新格式化,再将其作为参数提供给其他命令,下面介绍xargs命令的各种使用技巧 一.将多行输入转换成单行输入: [root@host1 test]# echo -e &q ...
- linux xargs 命令详解
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从 ...
随机推荐
- 小心,别被eureka坑了
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其子项 ...
- 体渲染——Volume
基本概念 体渲染(Volume),是绘制类似烟.雾.云的效果.这种渲染和之前的表面渲染不同,光线可以在物体内部进行散射. 体渲染的主要特点 1. 可以在物体内部散射. 2. 从进入vo ...
- sql 如何删除(代替)字段内某一部分内容
方法一(此方法既可用于删除某一列字段中的某部分字符,也可用于替换某一列字段中的某部分字符) update Table_Name set Column_Name=replace(Column_Name, ...
- matlab结构体、数组和单元数组类型的创建
matlab结构体.数组和单元数组类型的创建 @ 目录 matlab结构体.数组和单元数组类型的创建 matlab结构体类型 数组类型 单元数组类型 matlab结构体类型 通过字段赋值创建结构体 创 ...
- Docker笔记(二) 安装常用软件
常用环境安装 这里收集一些常用环境的安装步骤,可直接复制进行使用,节省安装时间,后续会随时补充 安装MySQL5.7.32 下载mysql5.7.32的镜像 ( 记得下载镜像要先确保镜像仓库中存在这个 ...
- springboot的logback的配置文件
之前敲出来一个 logback 的配置文件,防止以后找起来麻烦在这里存个档 修改了日志输出的内容 设置默认级别为 INFO 正常日志 ( TRACE 到 WARN ) 输出到单独的文件夹 异常日志 ( ...
- Linux安装MySQL8高版本压缩包(通用)
前言 前段时间领导让我部署测试环境,希望安装高版本的MySQL,过程遇到很多问题,特此记录帮助迷失的人们 下载 MySQL官方下载地址:https://dev.mysql.com/downloads/ ...
- pwn 好的联系网站
https://pwnable.kr/ https://w3challs.com/challenges/wargame http://overthewire.org/wargames/ http:// ...
- C/C++ 手工实现IAT导入表注入劫持
DLL注入有多种方式,今天介绍的这一种注入方式是通过修改导入表,增加一项导入DLL以及导入函数,我们知道当程序在被运行起来之前,其导入表中的导入DLL与导入函数会被递归读取加载到目标空间中,我们向导入 ...
- Python脚本爬取网站美女照片
上次无意之中看到一个网站,里面全是美女的照片,我就心想,哪天有时间了得把这网站的所有美女照片都得爬下来.今天有时间,写了点代码,爬去了网站的所有照片.附上战果!图片实在是太多了,爬半个多小时 先附上所 ...