linux重定向与管道符(一)
linux重定向和管道符
为什么要使用重定向
1.当屏幕输出的信息很重要,而且我们需要将他存下来的时候;
2.后台执行中的程序,不希望他干扰屏幕正常的输出结果时;
3.系统的例行命令,例如定时任务的执行结果,希望他可以存下来时;
4.一些执行命令,我们已经知道他可能出现错误信息时,想将他直接丢弃时;
例子:
通过脚本自动安装mysql
1)查询mysql是否已经安装
2)未安装就自动安装
rpm -q mysql
//查询mysql是否安装,如果未安装就使用yum安装
[root@localhost ~]# rpm -q mariadb &>/dev/null ||yum install -y mariadb
//查询mysql是否安装,如果已经安装则输出mariadb install
[root@localhost ~]# rpm -q mariadb &>/dev/null && echo 'mariadba install'
mariadba install
; cmd1;cmd2
cmd1执行完后,再执行cmd2
&& cmd1 && cmd2
cmd1执行正确后,才会执行cmd2
|| cmd1||cmd2
cmd1执行错误后,才会执行cmd2
5.错误信息与正确信息需要分别输出时。
标准输入和输出

执行一个shell程序时通常会自动打开三个标准文件
标准输入(STDIN,文件描述符为0):通常对应终端的键盘,也可以从其他文件或命令或者文件内容中输入
标准输出(STDOUT,文件描述符为1):默认输出到屏幕。
错误输出(STDERR,文件描述符为2):默认输出到屏幕。
文件名称(filename,文件描述符为3+)
进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而降错误信息送到标准错误文件中。
进程使用文件描述符(file descriptors)来管理打开的文件。
FD:
/proc/pid/fd
以cat命令为例,cat命令的功能是从命令行给出的文件读取数据,并将这些数据直接送到标准输出。若使用以下命令:
[root@localhost ~]# cat /etc/passwd
将会把/etc/passwd的内容依次显示到屏幕上。但如果cat命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。
[root@localhost ~]# cat
asdasda
asdasda
asdasd
asdasd
asdasd
asdasd
输入输出过程检测
//持续追踪查看文件内容
[root@localhost ~]# vim /etc/passwd
ctrl+z 将进程转到后台
//查看运行的进程
[root@localhost ~]# ps
PID TTY TIME CMD
1495 pts/1 00:00:00 bash
1549 pts/1 00:00:00 vim
1550 pts/1 00:00:00 ps
//查看1549进程下的文件描述符
[root@localhost ~]# ll /proc/1549/fd
总用量 0
lrwx------ 1 root root 64 12月 19 13:52 0 -> /dev/pts/1
lrwx------ 1 root root 64 12月 19 13:52 1 -> /dev/pts/1
lrwx------ 1 root root 64 12月 19 13:50 2 -> /dev/pts/1
lrwx------ 1 root root 64 12月 19 13:52 4 -> /etc/.passwd.swo
//linux查看标准输入输出设备
[root@localhost ~]# ll /dev/std*
lrwxrwxrwx 1 root root 15 12月 19 08:37 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 12月 19 08:37 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 12月 19 08:37 /dev/stdout -> /proc/self/fd/1
输出重定向
重定向:改变标准输入、标准输出的方向的就是重定向
标准覆盖输出重定向>
标准追加输出重定向>>
错误覆盖输出重定向2>
错误追加输出重定向2>>
输入重定向<
类型 操作符 用途
标准覆盖输出重定向 > 将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上
标准追加输出重定向 >> 将命令执行的结果追加输出到指定文件
标准输入重定向 < 将命令中接收输入的途径由默认的键盘更改为指定的文件
案例1:标准输出重定向(覆盖)
[root@localhost ~]# hostnamectl >host_info.txt
案例2:标准输出追加重定向
[root@localhost ~]# echo "123">>host_info.txt
[root@localhost ~]# cat host_info.txt
案例3:标准输出错误信息
[root@localhost ~]# cat b >b.txt
cat: b: 没有那个文件或目录
[root@localhost ~]# cat b 2>b.txt
[root@localhost ~]# cat b.txt
cat: b: 没有那个文件或目录
案例4:错误正确的输入到不同的文件
[root@localhost ~]# su - oldboy
上一次登录:日 12月 22 19:33:28 CST 2019pts/0 上
[oldboy@localhost ~]$ find /etc/ -name "*.conf" 1>a 2>b
案例5:错误的正确的都输入到相同的文件中
[root@localhost ~]# ls a.txt c.txt
ls: 无法访问c.txt: 没有那个文件或目录
a.txt
[root@localhost ~]# ls a.txt c.txt &> aaa
[root@localhost ~]# cat aaa
ls: 无法访问c.txt: 没有那个文件或目录
a.txt
[root@localhost ~]# ls a.txt c.txt >aaa 2>1
[root@localhost ~]# ls a.txt c.txt >bbb 2>1
[root@localhost ~]# diff aaa bbb
案例6:像空设备输入信息
[root@localhost ~]# ls /root /error >ab 2>/dev/null
[root@localhost ~]# ls /root /error >ab &>/dev/null
案例7:脚本中使用重定向
写一个脚本,测试主机是否up
[root@localhost ~]# vim ping.sh
ping -c2 10.0.1.31
if [ $? -eq 0 ];then
echo "10.0.1.31 is up"
else
echo "10.0.1.31 is down"
fi
改进后版
[root@localhost ~]# vim ping.sh
ping -c2 10.0.1.31 &> /dev/null
if [ $? -eq 0 ];then
echo "10.0.1.31 is up"
else
echo "10.0.1.31 is down"
fi
[root@localhost ~]# sh ping.sh
10.0.1.31 is up
最终版
[root@localhost ~]# vim ping.sh
ping -c2 $1 &> /dev/null
if [ $? -eq 0 ];then
echo "$1 is up"
else
echo "$1 is down"
fi
[root@localhost ~]# sh ping.sh 10.0.1.23
10.0.1.23 is down
[root@localhost ~]# sh ping.sh 10.0.1.251
10.0.1.251 is down
[root@localhost ~]# sh ping.sh 10.0.1.31
10.0.1.31 is up
3.输入重定向
标准输入 < 等价0<
案例1:发邮件
//1.安装所需软件包
[root@localhost ~]# yum install -y sendmail mailx
sendmail 邮件服务器
mailx 邮件客服端,提供mail命令
//2.启动sendmail服务
[root@localhost ~]# systemctl start sendmail
//3.使用mail发邮件
[root@localhost ~]# mail oldboy
Subject: test
hello world
. //结束
EOT
注意:
修改/etc/hosts文件,添加主机名和IP地址对应关系
//切换用户,收邮件
[oldboy@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/oldboy": 1 message 1 new
>N 1 root Mon Dec 23 21:18 20/780 "test"
& 1
Message 1:
From root@localhost.localdomain Mon Dec 23 21:18:37 2019
Return-Path: <root@localhost.localdomain>
From: root <root@localhost.localdomain>
Date: Mon, 23 Dec 2019 21:18:37 +0800
To: oldboy@localhost.localdomain
Subject: test
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
Status: R
hello world
//输入重定向,来自于文件
[root@localhost ~]# mail -s "test0" oldboy </etc/hosts

案例2:
[root@localhost ~]# grep root </etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
案例3:
[root@localhost ~]# dd if=/dev/zero of=file1.txt bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0262077 秒,800 MB/秒
[root@localhost ~]# ll -lh file1.txt
-rw-r--r-- 1 root root 20M 12月 23 21:33 file1.txt
[root@localhost ~]# dd if=/dev/sda of=mbr.bak count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000315237 秒,1.6 MB/秒
[root@localhost ~]# ll -lh mbr.bak
-rw-r--r-- 1 root root 512 12月 23 21:35 mbr.bak
[root@localhost ~]# dd </dev/zero >file2.txt bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0467819 秒,448 MB/秒
[root@localhost ~]# ll -lh file2.txt
-rw-r--r-- 1 root root 20M 12月 23 21:39 file2.txt
案例4:
//mysql 表结构导入
mysql -uroot -p123 <bbs.sql
案例5:利用重定向建立多行的文件
[root@localhost ~]# cat >a.txt
asdsada
asdas
d
asd
案例6:利用重定向建立多行的文件
[root@localhost ~]# cat >c.txt <<EOF
> ASDAS
> ASDASD
> ASDAS
> EOF
cat >> /etc/ntf.conf <<EOF
>> /etc/ntf.conf cat <<EOF
总结:
1.进程管理
针对信号来管理进程
-1 HUP平滑重启
-9 强制
-15 默认,终止
kill pid
killall pname
pkill [ -u ] [-t]
2.作业掉度(前台后台)
jobs 查看后台作业
ctrl +z 把前台的作业暂停放入后台
bg 后台调度
fg 前台调度
课后作业:screen的使用
3.重定向输入输出
标准输入(STDIN,文件描述符为0):通常对应终端的键盘,也可以从其他文件或命令或者文件内容中输入
标准输出(STDOUT,文件描述符为1):默认输出到屏幕。
标准输出(STDERROR,文件描述符为2):默认输出到屏幕。
重定向输出:
> >> 2> 2>> &> 2>&1
将标准输出(显示器)改为文件输出
重定向输入
<
将标准输入(键盘)改为文件输出
linux重定向与管道符(一)的更多相关文章
- Linux学习之管道符、重定向、通配符、转义符、环境变量
Linux学习之管道符.重定向.通配符.转义符.环境变量 1. 输入输出重定向 输入重定向是指把文件导入命令中. 输出重定向是指把原本要输出到屏幕的数据信息写入指定文件中. a 标准输入重定向(STD ...
- linux入门系列7--管道符、重定向、环境变量
前面文章我们学习了linux基础命令,如果将不同命令组合使用则可以成倍提高工作效率.本文将学习重定向.管道符.通配符.转义符.以及重要的环境变量相关知识,为后面的shell编程打下基础. 一.IO重定 ...
- Linux就该这么学:重定向,管道符,通配符,转义符,环境变量
第三章:重定向,管道符,环境变量 3.1 输入输出重定向 定义:输入重定向是指将文件导入命令中,输出重定向是指将原本显示到屏幕的信息输出问文件.相较于输入重定向,输出重定向使用的更多,下面重点介绍输出 ...
- 【转】Linux重定向操作符
Linux重定向操作符 功能描述 > 将命令输出写入文件或设备,而不是命令提示符或句柄,清空原有文件然后写入 < 从文件而不是从键盘或句柄读入命令输入 >> 将命令输出添加到文 ...
- Linux重定向相关(转载帖,供自己cookbook)
Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作. Linux默 ...
- Linux重定向命令
linux重定向命令应用及语法 [复制链接] 发表于 2008-12-18 18:24 | 来自 51CTO网页 [只看他] 楼主 1. 标准输入的控制语法:命令 文件将命令的执行结果 ...
- Linux重定向及nohup不输出的方法
转载自:http://blog.csdn.net/qinglu000/article/details/18963031 先说一下linux重定向: 0.1和2分别表示标准输入.标准输出和标准错误信 ...
- 使用Linux重定向解决nohup.out无写权限问题
■场景 执行nohup命令的时候,经常会出现下面这种没有写入权限的错误. nohup: ignoring input and appending output to `nohup.out'nohup: ...
- Linux nohup 关闭终端的时候,程序依然能在后台运行( linux重定向及nohup不输出的方法)
先说一下linux重定向: 0.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出.在一般使用时,默认的是标准输出,既1.当我们需要特殊用途时,可以使用其他标号 ...
随机推荐
- VEH&VCH
本文99.9%的代码及内容作者:mengwuji 来自:http://www.mengwuji.net/forum.php?mod=viewthread&tid=1371 VEH:向量化异常处 ...
- Java固定资产管理系统 源码 jsp ssh
固定资产管理系统是对高校固定资产的一个信息化管理系统,基本功能包括:对固定资产的购进.接触.销毁,对物品的使用状态.借出状态.库存状态等进行标识,对各类物品进行编号,根据编号进行查询,根据名称进行查询 ...
- dp--区间dp P1880 [NOI1995]石子合并
题目描述 在一个圆形操场的四周摆放 N 堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出一个算法,计算出将 N 堆石子 ...
- Java学习——代理模式
Java中的三种代理模式 一,什么是代理模式? 代理模式是一种设计模式,简单的来说就是在不改变源码的情况下,实现对目标对象的功能扩展. 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 元数据
你可能想知道MySQL以下三种信息: 查询结果信息: SELECT, UPDATE 或 DELETE语句影响的记录数. 数据库和数据表的信息: 包含了数据库及数据表的结构信息. MySQL服务器信息: ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 创建数据库
在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: CREATE DATABASE 数据库名; 以下命令简单的演示了创建数据库的过程,数据名为 RUNOOB: [root@ho ...
- Python列表中去重的多种方法
怎么快速的对列表进行去重呢,去重之后原来的顺序会不会改变呢? 去重之后顺序会改变 set去重 列表去重改变原列表的顺序了 l1 = [1,4,4,2,3,4,5,6,1] l2 = list(set( ...
- JavaScript 闭包究竟是什么JavaScript 闭包究竟是什么
用JavaScript一年多了,闭包总是让人二丈和尚摸不着头脑.陆陆续续接触了一些闭包的知识,也犯过几次因为不理解闭包导致的错误,一年多了资料也看了一些,但还是不是非常明白,最近偶然看了一下 jQue ...
- SQL 一个【OR】属性给你带来了怎样的麻烦
关于 数据库 or 的用法,就不说了 讲讲OR对数据库性能有多大的杀伤力,以后线上的项目如果是数据量很大的表,一定不要用OR来查询 今天在工作的时候,同事遇到了SQL优化的问题,让我帮忙 ...
- 业内首发 | 区块链数据服务 - BDS
区块链数据服务(Blockchain Data Service,BDS)是京东云区块链产品部发推出的,其将区块链的链式.非结构化数据通过技术手段进行结构化存储,实时同步到高性能数据仓库中. 用户可以通 ...