1.重定向概述

1.1什么是重定向
  • 将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中
 名称	  文件描述符	              作用
标准输入(STDIN) 0 默认是键盘,也可以是文件或其他命令的输出。
标准输出(STDOUT) 1 默认输出到屏幕。
错误输出(STDERR) 2 默认输出到屏幕。
1.2进程将从标准输入中得到数据,将正常输出打印至屏幕终端,将错误的输出信息也打印至屏幕终端
  以 cat 命令为例, cat 命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。若使用如下命令:
`[root@chengyinwu ~]# cat /etc/passwd`
但如果 使用 cat 命令没有跟上输入的文件名,那么cat命令则会通过命令行标准输入中读取数据, 并将其送到标准输出
[root@chengyinwu ~]# cat
hello 标准输入
hello 标准输出
^C
- 用户输入的每一行都立刻被cat命令输出到屏幕上

1.3 持续追踪查看文件内容

[root@chengyinwu ~]# tail -f /etc/passwd
ctrl+z 将进程转到后台

1.4 查看运行的进程

[root@chengyinwu ~]# ps
PID TTY TIME CMD
5848 pts/1 00:00:00 bash
6885 pts/1 00:00:00 tail
6888 pts/1 00:00:00 ps

1.5 查看tail命令的pid,6885进程下的文件描述符

[root@chengyinwu ~]# ls -l /proc/6885/fd
total 0
lrwx------ 1 root root 64 Dec 3 06:57 0 -> /dev/pts/1
lrwx------ 1 root root 64 Dec 3 06:57 1 -> /dev/pts/1
lrwx------ 1 root root 64 Dec 3 06:56 2 -> /dev/pts/1
lr-x------ 1 root root 64 Dec 3 06:57 3 -> /etc/passwd
lr-x------ 1 root root 64 Dec 3 06:57 4 -> inotify

1.6 Linux查看标准输入输出设备

[root@chengyinwu ~]# ls -l /dev/std*
lrwxrwxrwx 1 root root 15 Dec 2 22:30 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Dec 2 22:30 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Dec 2 22:30 /dev/stdout -> /proc/self/fd/1

2. 输出重定向

  • 输出重定向,改变输出内容的位置。输出重定向有如下几种方式
      类型	    操作符	                  用途
标准覆盖输出重定向 > 将程序输出的正确结果输出到指定的文件中,会覆盖文件原有的内容
标准追加输出重定向 >> 将程序输出的正确结果以追加的方式输出到指定文件,不会覆盖原有文件
错误覆盖输出重定向 2> 将程序的错误结果输出到执行的文件中,会覆盖文件原有的内容
错误追加输出重定向 2>> 将程序输出的错误结果以追加的方式输出到指定文件,不会覆盖原有文件
标准输入重定向 << 将命令中接收输入的途径由默认的键盘更改为指定的文件或命令

2.1 标准输出重定向, 先清空,后写入, 如果文件不存在则创建

案例1: 标准输出重定向(每次都会覆盖文件)
[root@chengyinwu ~]# ifconfig eth0 > abc
2.2标准输出重定向, 先清空,后写入, 如果文件不存在则创建
[root@chengyinwu ~]# ifconfig eth0 > abc 案例2: 标准输出重定向(会往文件的尾部在添加内容)
标准追加输出重定向, 向配置文件末尾追加内容
[xixi@chengyinwu ~]$ echo "This is network conf" >> if 案例3: 错误输出重定向
正确输出以及错误输出重定向至一个文件
[root@chengyinwu ~]# useradd yinyin
[root@chengyinwu ~]# su - yinyin 将标准输出和标准错误输出重定向到不同文件
[yinyin@chengyinwu ~]$ find /etc -name "*.conf" 1>a 2>b 案例4: 正确和错误都输入到相同位置
将标准输出和标准错误输出重定向到同一个文件, 混合输出
[yinyin@chengyinwu ~]$ find /etc -name "*.conf" &>ab 合并两个文件内容至一个文件
[yinyin@chengyinwu ~]$ cat a b > c 案例5: 正确和错误都输入到相同位置
#重定向到相同的位置
[root@chengyinwu ~]# ls /root /error >ab 2>&1 案例6: 重定向到空设备/dev/null
#将产生的任何数据放入黑洞设备,则视为丢弃。
[root@chengyinwu ~]# ls /root /error >ab 2>/dev/null
[root@chengyinwu ~]# ls /root /error >ab &>/dev/null

3.输入重定向

  • 输入重定向,即原本从键盘等上获得的输入信息,重定向由命令的输出作为输入。< 等价 0<
案例1: 从文件中读入输入的操作
没有改变输入的方向,默认键盘
[root@chengyinwu ~]# mail alice
Subject: hello
1111
2222
3333
. #结束
EOT #检查是否收到邮件
[root@chengyinwu ~]# su - alice
[root@chengyinwu ~]# mail #输入重定向,来自于文件
[root@chengyinwu ~]# mail -s "test01" alice < /etc/hosts
案例2: 无法形容案例,请看实际操作 #没有改变输入的方向,默认键盘,此时等待输入
[root@chengyinwu ~]# grep 'root'
xxx
xxx [root@chengyinwu ~]# grep 'root' < /etc/passwd
root:x:0:0:root:/root:/bin/bash
案例3: 无法形容案例,请看实际操作 [root@chengyinwu ~]# dd if=/dev/zero of=/file1.txt bs=1M count=20
[root@chengyinwu ~]# dd </dev/zero >/file2.txt bs=1M count=20

4.进程管道技术

1.什么是管道

管道操作符号 "|" ,主要用来连接左右两个命令, 将左侧的命令的标准输出, 交给右侧命令的标准输入

PS: 无法传递标准错误输出至后者命令

2.管道使用案例

案例1: 将/etc/passwd 中的用户按 UID 大小排序

[root@chengyinwu ~]# sort -t":" -k3 -n /etc/passwd
[root@chengyinwu ~]# sort -t":" -k3 -n /etc/passwd -r
[root@chengyinwu ~]# sort -t":" -k3 -n /etc/passwd |head
案例2: 统计当前/etc/passwd 中用户使用的 shell 类型 #思路:取出第七列(shell) | 排序(把相同归类)| 去重
[root@chengyinwu ~]# awk -F: '{print $7}' /etc/passwd
[root@chengyinwu ~]# awk -F: '{print $7}' /etc/passwd |sort
[root@chengyinwu ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq
[root@chengyinwu ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq -c
案例5: 打印当前所有 IP [root@chengyinwu ~]# ip addr |grep 'inet ' |awk '{print $2}' |awk -F"/" '{print $1}'
127.0.0.1
192.168.69.112
PS: 管道命令符能让大家能进一步掌握命令之间的搭配使用方法,进一步提高命令输出值的处理效率。

4. 管道中的tee技术

选项: -a追加
[root@chengyinwu ~]# ip addr |grep 'inet ' |tee ip.txt |awk -F"/" '{print $1}' |awk '{print $2}'
127.0.0.1
10.0.0.100 [root@chengyinwu ~]# cat ip.txt
inet 127.0.0.1/8 scope host lo
inet 10.0.0.100/24 brd 192.168.69.255 scope global ens32
重定向与 tee 有他们在使用过程中有什么区别 [root@chengyinwu ~]# date > date.txt #直接将内容写入date.txt文件中
[root@chengyinwu ~]# date |tee date.txt #命令执行会输出至屏幕,但会同时保存一份至date.txt文件中

5. xargs参数传递,主要让一些不支持管道的命令可以使用管道技术

 which cat|xargs ls- l
ls |xargs rm -fv
ls |xargs cp -rvt /tmp/ -或-> ls | xargs -I {} cp -rv {} /tmp/
ls |xargs mv -t /tmp/ -或-> ls | xargs -I {} mv {} /tmp

12.Linux重定向与管道|的更多相关文章

  1. 【Linux】【专项突破】Linux重定向与管道

    [专项突破]Linux重定向与管道 This article is written by Xrilang(Chinese Name:萌狼蓝天) If you want find me ,You can ...

  2. linux学习笔记-12.输入输出重定向及管道

    1.新建一个文件 touch a.txt> b.txt 2.错误重定向:2> find /etc -name zhaoxing.txt 2> error.txt 3.将正确或错误的信 ...

  3. Linux - 重定向与管道

    标准输出重定向 ">" 操作符:覆盖目标文件内容 huey@huey-K42JE:~/huey/linux/cmdline$ date > foo huey@huey- ...

  4. Linux重定向与管道

    程序执行时默认会打开3个流,标准输入.标准输出.标准错误. Redirection The shell interprets the symbols <,>, and >> a ...

  5. Linux Shell 重定向与管道【转帖】

    by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...

  6. linux文件管理之管道与重定向

    ============================================================== 内容提要: 输入输出重定向.管道: 重定向的作用: 文件描述符 0 1 2 ...

  7. LINUX常用命令--重定向、管道篇(四)

    一.Linux重定向 重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令.这部分涉及到的比较多的命令主要有: 涉及到的比较多的命令主要有: cat:连 ...

  8. [转帖]Linux教程(12)- linux输入输出重定向

    Linux教程(12)- linux输入输出重定向 2018-08-21 22:57:02 钱婷婷 阅读数 49更多 分类专栏: Linux教程与操作 Linux教程与使用   版权声明:本文为博主原 ...

  9. 【转】Linux重定向操作符

    Linux重定向操作符 功能描述 > 将命令输出写入文件或设备,而不是命令提示符或句柄,清空原有文件然后写入 < 从文件而不是从键盘或句柄读入命令输入 >> 将命令输出添加到文 ...

随机推荐

  1. npm install 时间很长解决方案

    国外镜像站很慢,所以我们可以更换为国内的镜像站 首先可以get命令查看registry npm congfig get registry 如果你没有变更果regustry你的结果应该会是这样的 也就是 ...

  2. 远古框架-SSH maven配置 (包含gson)

    Spring3.2.17+Struts2.3.15+Hibernate3.6.10 <?xml version="1.0" encoding="UTF-8" ...

  3. 常用HBase操作

    HBase是一个分布式.面向列的数据库,可以用来存储非结构化和半结构化的松散数据,具有高可靠.高性能.面向列.可伸缩的特性.通过行键(RowKey).列族(ColumnFamily).列(Column ...

  4. Hadoop核心组件之MapReduce

    MapReduce概述 Google MapReduce的克隆版本 优点:海量数据的离线处理,易开发,易运行 缺点:实时流式计算 Hadoop MapReduce是一个软件框架,用于轻松编写应用程序, ...

  5. js---电商中常见的放大镜效果

    js中的放大镜效果 在电商中,放大镜效果是很常见的,如下图所示: 当鼠标悬浮时,遮罩所在区域在右侧进行放大. 在动手写之前,我们要先理清思路,分析需求,所需知识点,再将每一块进行组装,最后进行功能的完 ...

  6. 基于操作系统原理的Linux 的用户管理

    一.实验目的 1.掌握为root用户修改密码的方法. 2.掌握创建新用户的方法. 3.掌握用户组的管理方法. 4.掌握为用户授权的方法. 二.实验内容 1.Linux的用户管理 (1)创建新用户创建新 ...

  7. 基于Docker搭建大数据集群(一)Docker环境部署

    本篇文章是基于Docker搭建大数据集群系列的开篇之作 主要内容 docker搭建 docker部署CentOS 容器免密钥通信 容器保存成镜像 docker镜像发布 环境 Linux 7.6 一.D ...

  8. python自动化测试三部曲之untitest框架

    终于等到十一,有时间写博客了,准备利用十一这几天的假期把这个系列的博客写完 该系列文章本人准备写三篇博客 第一篇:介绍python自动化测试框架unittest 第二篇:介绍django框架+requ ...

  9. Python基础(十四)

    今日主要内容 装饰器扩展 有参装饰器 多个装饰器装饰一个函数 递归 一.装饰器扩展 (一)含有参数的装饰器 先来回顾一下装饰器的标准模式 def wrapper(fn): def inner(*arg ...

  10. Angular 页面初始化动画

    用于进入组件前的加载动画 第一步:index.html 定义动画模板和样式 // 样式 <style type="text/css">.preloader { posi ...