(1).输出重定向

  定义:将命令的标准输出结果保存到指定的文件中,而不是直接显示在显示器上。

  输出重定向使用>和>>操作符。

  语法:cmd > filename,表示将标准输出写入文件,如果此文件已存在,将覆盖原文件的内容。如果不存在,则新建该文件。

     cmd >> filename,表示将标准输出追加到文件,如果文件不存在,则新建该文件。

实例1:查看当前主机的CPU类型保存到cpu.txt文件中,而不是直接显示到屏幕上。

//如果想要直接查看CPU信息
[xf@xuexi ~]$ cat /proc/cpuinfo
//那么相应的输出重定向如下
[xf@xuexi ~]$ cat /proc/cpuinfo > cpu.txt

实例2:将内核版本信息追加到cpu.txt

//如果想要查看系统基本信息
[xf@xuexi ~]$ uname -r
3.10.0-957.5.1.el7.x86_64
[xf@xuexi ~]$ uname -a
Linux xuexi 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
//那么相应的追加如下
[xf@xuexi ~]$ uname -a >> cpu.txt

实例3:清空一个文件

[xf@xuexi ~]$ > cpu.txt

(2).输入重定向

  定义:将命令中接收输入的途径有默认键盘改为其他文件,而不是等待从键盘输入。

  输入重定向使用<操作符。

实例:

[xf@xuexi ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[xf@xuexi ~]$ grep root < /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

mysql数据库导入数据,格式如下

[xf@xuexi ~]$ mysql -uroot -p123456789 < a.sql

(3).EOF

  EOF本意是End Of File,表明到了文件末尾。EOF通常与<<结合使用,<<EOF表示后续的输入作为子命令或子shell的输入,知道遇到EOF,再次返回主shell,可将其理解为分界符。既然是分界符,那么形式自然不是固定的,这里可以将EOF进行自定义,但是前后的分界符必须成对出现且不能和shell命令冲突。

实例1:

[xf@xuexi ~]$ cat > a.txt << EOF
> This is a file.
> EOF
[xf@xuexi ~]$ cat a.txt
This is a file.
[xf@xuexi ~]$ cat >> a.txt << EOF
> My name is xf.
> EOF
[xf@xuexi ~]$ cat a.txt
This is a file.
My name is xf.
[xf@xuexi ~]$ cat > b.txt << ccc
> This is a file.
> EOF
> ccc
[xf@xuexi ~]$ cat b.txt
This is a file.
EOF

实例2:在脚本中我们可以通过重定向输入来打印消息菜单。可以自定义。

[xf@xuexi ~]$ vim c.sh
//文件内容如下
#! /bin/bash cat << EOF
===================================
mysql
httpd
oracle
===================================
EOF
//保存退出
[xf@xuexi ~]$ chmod +x c.sh
[xf@xuexi ~]$ ./c.sh
===================================
mysql
httpd
oracle
===================================

(4).错误重定向

  定义:将命令执行过程中出现的错误信息(选项或参数错误)保存到指定文件,而不是直接显示到显示器。

  错误重定向使用2>和2>>操作符(2表示的是标准错误的文件描述符)

  语法:cmd 2> filename,表示将标准错误写入文件,如果此文件已存在,将覆盖原文件的内容。如果不存在,则新建该文件。

     cmd 2>> filename,表示将标准错误追加到文件,如果文件不存在,则新建该文件。

  在实际应用中,错误重定向可以用于收集执行的错误信息,为排错提供依据;对于shell脚本还可以将无关紧要的错误信息重定向到空文件/dev/null,以保持脚本输出的简洁。

实例1:将错误显示的内容与正确显示的内容分开

[xf@xuexi ~]$ ls /etc/passwd xxxx
ls: 无法访问xxxx: 没有那个文件或目录
/etc/passwd
[xf@xuexi ~]$ ls /etc/passwd xxxx > a.txt
ls: 无法访问xxxx: 没有那个文件或目录
[xf@xuexi ~]$ cat a.txt
/etc/passwd
[xf@xuexi ~]$ ls /etc/passwd xxxx 2> a.txt
/etc/passwd
[xf@xuexi ~]$ cat a.txt
ls: 无法访问xxxx: 没有那个文件或目录

实例2:正确的内容写入一个文件,错误的内容写入另一个文件

[xf@xuexi ~]$ ll /etc/passwd xxxx > right.txt 2> err.txt
[xf@xuexi ~]$ cat right.txt
-rw-r--r--. 1 root root 2257 2月 13 16:19 /etc/passwd
[xf@xuexi ~]$ cat err.txt
ls: 无法访问xxxx: 没有那个文件或目录

(5).null黑洞和zero空文件

  把/dev/null看做“黑洞”,所有写入它的内容都会永远丢失。而尝试从该文件读取内容也什么都读不到。然而/dev/null对命令行和脚本都非常有用。

  /dev/zero在类UNIX操作系统中,是一个特殊的文件,当你读它时,它会提供无限的空字符(NULL,ASCII NUL,0x00)。典型用法是用它来产生一个特定大小的空白文件。

实例1:使用dd命令产生一个50M的空白文件,空白文件可以临时当做设备文件使用

[xf@xuexi ~]$ dd if=/dev/zero of=1.txt bs=M count=50
记录了50+0 的读入
记录了50+0 的写出
52428800字节(52 MB)已复制,0.0508383 秒,1.0 GB/秒
[xf@xuexi ~]$ ll -h 1.txt
-rw-rw-r--. 1 xf xf 50M 2月 26 10:17 1.txt
[xf@xuexi ~]$ cat 1.txt
[xf@xuexi ~]$

  /dev/zero也可以用于清除分区头。

(6).&>和>&符号

  &表示等同于的意思。除了&>和>&以外还有&>>

实例1:把标准输出与标准错误写入到同一个文件,此实例使用&>和>&有多种写法

[xf@xuexi ~]$ ls /tmp xxxx >1.txt 2>&1
[xf@xuexi ~]$ ls /tmp xxxx 2>2.txt 1>&2
[xf@xuexi ~]$ ls /tmp xxxx &> 3.txt
[xf@xuexi ~]$ ls /tmp xxxx >& 4.txt
[xf@xuexi ~]$ cat 1.txt
ls: 无法访问xxxx: 没有那个文件或目录
/tmp:
ssh-2yPDLej8lp2k
systemd-private-fb4d19bcb21b4301aa41f11d24a7deab-bolt.service-3sZXoj
systemd-private-fb4d19bcb21b4301aa41f11d24a7deab-chronyd.service-rUnYOY
systemd-private-fb4d19bcb21b4301aa41f11d24a7deab-colord.service-go7dw4
systemd-private-fb4d19bcb21b4301aa41f11d24a7deab-cups.service-o7nKmx
systemd-private-fb4d19bcb21b4301aa41f11d24a7deab-fwupd.service-GN4Clw
systemd-private-fb4d19bcb21b4301aa41f11d24a7deab-rtkit-daemon.service-59x6Qx
tracker-extract-files.0
tracker-extract-files.1000
VMwareDnD
vmware-root_6784-2823359541
vmware-root_6814-2822835244
vmware-root_6819-3879179857
vmware-root_6821-3879048790
vmware-root_6829-3845623896
vmware-root_6834-2865236895
vmware-root_6839-3854340548
vmware-root_6843-3879573071
vmware-root_6844-2831682966
vmware-root_6849-4156467083
vmware-root_6850-3100130775
vmware-root_6851-4148143625
vmware-root_6855-4156336012
vmware-root_6863-4122911106
vmware-root_6874-3099737545
vmware-root_6883-4147619377
vmware-root_6889-4122255805
yum_save_tx.2019-02-21.14-15.ehxi5q.yumtx
yum_save_tx.2019-02-25.09-56.0qBBLA.yumtx
yum_save_tx.2019-02-26.10-23.gFGrHz.yumtx
[xf@xuexi ~]$ diff 1.txt 2.txt
[xf@xuexi ~]$ diff 1.txt 3.txt
[xf@xuexi ~]$ diff 1.txt 4.txt

实例2:把标准输出与标准错误追加到文件中

[xf@xuexi ~]$ ll > 1.txt
[xf@xuexi ~]$ cat 1.txt
总用量 0
-rw-rw-r--. 1 xf xf 0 2月 26 13:34 1.txt
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 公共
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 模板
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 视频
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 图片
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 文档
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 下载
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 音乐
drwxr-xr-x. 2 xf xf 6 11月 19 13:29 桌面
[xf@xuexi ~]$ ls /tmp xxxx &>>1.txt
[xf@xuexi ~]$ cat 1.txt
总用量 0
-rw-rw-r--. 1 xf xf 0 2月 26 13:34 1.txt
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 公共
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 模板
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 视频
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 图片
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 文档
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 下载
drwxr-xr-x. 2 xf xf 6 9月 6 11:43 音乐
drwxr-xr-x. 2 xf xf 6 11月 19 13:29 桌面
ls: 无法访问xxxx: 没有那个文件或目录
/tmp:
ssh-7dArISEgeS0O
systemd-private-6596f9db642a46ae9174a8ca3ace2009-bolt.service-UElQVL
systemd-private-6596f9db642a46ae9174a8ca3ace2009-chronyd.service-oIQjdt
systemd-private-6596f9db642a46ae9174a8ca3ace2009-colord.service-8hFZOp
systemd-private-6596f9db642a46ae9174a8ca3ace2009-cups.service-7i8U0x
systemd-private-6596f9db642a46ae9174a8ca3ace2009-fwupd.service-SWULra
systemd-private-6596f9db642a46ae9174a8ca3ace2009-rtkit-daemon.service-jYXFJl
tracker-extract-files.0
tracker-extract-files.1000
VMwareDnD
vmware-root_6784-2823359541
vmware-root_6814-2822835244
vmware-root_6819-3879179857
vmware-root_6821-3879048790
vmware-root_6829-3845623896
vmware-root_6834-2865236895
vmware-root_6839-3854340548
vmware-root_6843-3879573071
vmware-root_6844-2831682966
vmware-root_6849-4156467083
vmware-root_6850-3100130775
vmware-root_6851-4148143625
vmware-root_6855-4156336012
vmware-root_6863-4122911106
vmware-root_6874-3099737545
vmware-root_6883-4147619377
vmware-root_6889-4122255805
yum_save_tx.2019-02-21.14-15.ehxi5q.yumtx
yum_save_tx.2019-02-25.09-56.0qBBLA.yumtx
yum_save_tx.2019-02-26.10-23.gFGrHz.yumtx

实例3:shell脚本中的/dev/null 2>&1是什么意思呢?

[xf@xuexi ~]$ ls /etc/passwd >/dev/null 2>&1

注:将标准输出和标准错误全部重定向到/dev/null中,也就是将产生的所有信息丢弃。

(7).管道符|的使用

  语法: command -a | command -b | command -c | ...

注意:1、管道命令只处理前一个命令标准输出,不处理标准错误

   2、管道右边的命令,必须是一个能够接收前一个命令的标准输出的数据流的命令才行

   3、管道可以把两个命令连起来,它可以连接多个命令使用

实例1:对应注意1

[xf@xuexi ~]$ ls /tmp xxxx
ls: 无法访问xxxx: 没有那个文件或目录
/tmp:
ssh-7dArISEgeS0O
systemd-private-6596f9db642a46ae9174a8ca3ace2009-bolt.service-UElQVL
systemd-private-6596f9db642a46ae9174a8ca3ace2009-chronyd.service-oIQjdt
systemd-private-6596f9db642a46ae9174a8ca3ace2009-colord.service-8hFZOp
systemd-private-6596f9db642a46ae9174a8ca3ace2009-cups.service-7i8U0x
systemd-private-6596f9db642a46ae9174a8ca3ace2009-fwupd.service-SWULra
systemd-private-6596f9db642a46ae9174a8ca3ace2009-rtkit-daemon.service-jYXFJl
tracker-extract-files.0
tracker-extract-files.1000
VMwareDnD
vmware-root_6784-2823359541
vmware-root_6814-2822835244
vmware-root_6819-3879179857
vmware-root_6821-3879048790
vmware-root_6829-3845623896
vmware-root_6834-2865236895
vmware-root_6839-3854340548
vmware-root_6843-3879573071
vmware-root_6844-2831682966
vmware-root_6849-4156467083
vmware-root_6850-3100130775
vmware-root_6851-4148143625
vmware-root_6855-4156336012
vmware-root_6863-4122911106
vmware-root_6874-3099737545
vmware-root_6883-4147619377
vmware-root_6889-4122255805
yum_save_tx.2019-02-21.14-15.ehxi5q.yumtx
yum_save_tx.2019-02-25.09-56.0qBBLA.yumtx
yum_save_tx.2019-02-26.10-23.gFGrHz.yumtx
[xf@xuexi ~]$ ls /tmp xxxx | grep /tmp
ls: 无法访问xxxx: 没有那个文件或目录  //可以看到标准错误没有被处理,仍然输出
/tmp:

实例2:对应注意3

[xf@xuexi ~]$ ps -aux | grep sshd
root 7418 0.0 0.2 112860 4312 ? Ss 13:19 0:00 /usr/sbin/sshd -D
xf 10913 0.0 0.0 112728 988 pts/0 S+ 14:39 0:00 grep --color=auto sshd
[xf@xuexi ~]$ ps -aux | grep sshd | grep root
root 7418 0.0 0.2 112860 4312 ? Ss 13:19 0:00 /usr/sbin/sshd -D

(8).tee

tee [选项] [文件]

选项:

-a,--append 内容追加到给定的文件而非覆盖
-i,--ignore-interrupts 忽略中断信号
--help 帮助
--version 版本信息

  将标准输入复制到每个指定文件,并显示到标准输出

实例1:将磁盘使用的信息写入文件

[xf@xuexi ~]$ df -h | tee disk.log
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 17G 4.7G 13G 28% /
devtmpfs 975M 0 975M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 11M 980M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/sda1 1014M 276M 739M 28% /boot
tmpfs 199M 20K 199M 1% /run/user/1000
[xf@xuexi ~]$ cat disk.log
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 17G 4.7G 13G 28% /
devtmpfs 975M 0 975M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 11M 980M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/sda1 1014M 276M 739M 28% /boot
tmpfs 199M 20K 199M 1% /run/user/1000

实例2:将磁盘使用的信息追加到文件

[xf@xuexi ~]$ df -h | tee -a disk.log
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 17G 4.7G 13G 28% /
devtmpfs 975M 0 975M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 11M 980M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/sda1 1014M 276M 739M 28% /boot
tmpfs 199M 20K 199M 1% /run/user/1000
[xf@xuexi ~]$ cat disk.log
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 17G 4.7G 13G 28% /
devtmpfs 975M 0 975M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 11M 980M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/sda1 1014M 276M 739M 28% /boot
tmpfs 199M 20K 199M 1% /run/user/1000
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 17G 4.7G 13G 28% /
devtmpfs 975M 0 975M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 11M 980M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/sda1 1014M 276M 739M 28% /boot
tmpfs 199M 20K 199M 1% /run/user/1000

注:可以用来记录日志

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

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

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

  2. Linux中重定向及管道

    1重定向1.1      重定向符号 >               输出重定向到一个文件或设备 覆盖原来的文件 >!              输出重定向到一个文件或设备 强制覆盖原来的 ...

  3. Linux数据流重定向与管道

    数据流重定向简单来说就是把原本应该输出到某处(比如说屏幕)的数据,重定向其输出目的地,到其他的地方(比如文件). linux中的输入与输出: 标准输入(stdin):默认从键盘输入 标准输出(stdo ...

  4. Linux IO重定向和管道

    计算机组成部分: 由io . 控制器.计算器.存储器组成 IO: input output 计算机里面通过终端窗口实现输入和输出,键盘鼠标屏幕这些只是手段,真正完成输入输出的是终端窗口 标准输入.出. ...

  5. 【Linux】重定向与管道

    重定向 redirection 每个命令有输入源和输出目的地,默认行为,是标准输入和标准输出.大多数情况,标准输入是键盘,标准输出是屏幕.可以为单独的操作修改输入和输出,这就是重定向.重定向可以使某个 ...

  6. linux - 输入输出重定向 及 管道

    > 正确结果重定向 2> 错误结果重定向 &> 正确和错误全部重定向 >> 追加,其它同> 标准输出实际上就是显示器,比如我们使用cat命令打开一个文件,文 ...

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

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

  8. Linux 的进程间通信:管道

    本文由云+社区发表 作者:邹立巍 版权声明: 本文章内容在非商业使用前提下可无需授权任意转载.发布. 转载.发布请务必注明作者和其微博.微信公众号地址,以便读者询问问题和甄误反馈,共同进步. 微博ID ...

  9. Linux标准IO和管道

    Linux标准IO和管道 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.标准输入和输出 程序:指令+数据 读入数据:Input 输出数据:Output 打开的文件都有一个fd: ...

随机推荐

  1. 知问前端——Ajax提交表单

    本文,运用两大表单插件,完成数据表新增的工作. 一.创建数据库 创建一个数据库,名称为:zhiwen,表——user表,字段依次为:id.name.pass.email.sex.birthday.da ...

  2. Freemarker <#list List/Map/Array[] as Object>

    http://blog.csdn.net/ani521smile/article/details/52164366 详细教程链接

  3. 基于FPGA的HDTV视频图像灰度直方图统计算法设计

    随着HDTV的普及,以LCD-TV为主的高清数字电视逐渐进入蓬勃发展时期.与传统CRT电视不同的是,这些高清数字电视需要较复杂的视频处理电路来驱动,比如:模数转换(A/D Converter).去隔行 ...

  4. github新建托管项目及上传项目

    一.新建托管项目 1.注册: 2.点击new repositories新建一个新项目: 3.输入项目名称及项目描述,Create repository: 4.点击右边栏的剪切板图标,记录下你的项目地址 ...

  5. 【Python学习】Jupyter解决单个变量输出问题

    使用Jupyter的时候有时候发现,我明明写了好几个变量打印,但是它只显示最后一个.Out只有一个. 但是使用下面的语句.就可以实现多个输出. from IPython.core.interactiv ...

  6. 【swupdate文档 二】许可证

    许可证 SWUpdate是免费软件.它的版权属于Stefano Babic和其他许多贡献代码的人(详情请参阅实际源代码和git提交信息). 您可以根据自由软件基金会发布的GNU通用公共许可证第2版的条 ...

  7. 在linux内核中获得比jiffies精度更高的时间值【转】

    转自:http://blog.chinaunix.net/uid-20672257-id-2831219.html 内核一般通过jiffies值来获取当前时间.尽管该数值表示的是自上次系统启动到当前的 ...

  8. Bookmarks_www2

    Bookmarks Bookmarks alexis- (Alex Incogito) - Repositories · GitHub GitHub - aetcnc-Arduino_DeltaHMI ...

  9. 105.Construct Binary Tree from Preorder and Inorder Traversal---《剑指offer》面试6

    题目链接 题目大意:根据先序遍历和中序遍历构造二叉树. 法一:DFS.根据模拟步骤,直接从先序和中序数组中找值然后加入二叉树中,即先从先序数组中确定根结点,然后再去中序数组中确定左子树和右子树的长度, ...

  10. php文件读取的问题

    PHP字符编码问题 首先说下字符编码问题,当我们给定路径后如果路径中包含中文,可能会出现问题,打印到屏幕则显示没问题, 但是读取文件会报错:readfile(E:/素玄文件/app历史版本/素玄ERP ...