Linux重定向><命令的使用

简介: 重定向分为输出重定向和输入重定向。

重定向分为输出重定向和输入重定向。


一、输出重定向


1、简介


  输出重定向分为正确输出和错误输出,这是由FD来控制的,由上一章文章讲到1为标准正确输出,2为标准错误输出。

      正确输出命令:程序命令   1>   指定文件     等价于  程序命令   >   指定文件

                               程序命令    1>> 指定文件      等价于    程序命令   >>    指定文件

      错误输出命令:程序命令    2>  指定文件                    

                               程序命令    2>>    指定文


注意:>是覆盖输出,>>是追加输出。


1)演示正确输出

[root@localhost ~]# ls /test                    //普通查看/test的内容
dir001  dir002  file1  file2  t1  t2  t3  time.txt
//将/test文件夹内容输出到time.txt中,在终端不会显示任何信息。
[root@localhost ~]# ls /test 1> /test/time.txt  
//查看time.txt文件,发现ls  /test命令输出的内容到了time文件中
[root@localhost ~]# cat /test/time.txt
dir001
dir002
file1
file2
t1
t2
t3
time.txt
tme.txt
//将没有输出信息的程序输出到time文件中
[root@localhost ~]# mkdir /test/list   1> /test/time.txt
//time文件中没有任何信息
[root@localhost ~]# cat /test/time.txt
//将有输出的程序输出的信息放入到time文件中
[root@localhost ~]# mkdir -v  /test/list1   1> /test/time.txt
//time中有内容,发现覆盖了原来time文件中的内容
[root@localhost ~]# cat /test/time.txt
mkdir: 已创建目录 "/test/list1"
//将date命令的信息追加到time文件中
[root@localhost ~]# date  1>>  /test/time.txt
//发现原来的内容还在,并且多了刚刚写入的信息
[root@localhost ~]# cat /test/time.txt
mkdir: 已创建目录 "/test/list1"
2022年 10月 12日 星期三 14:46:08 CST


注意:程序本身要有输出才可以将输出信息写入指定文件


2)演示错误输出

//将ls/ text的错误信息写入到time中
[root@localhost ~]# ls /test 2> /test/time.txt    
//在终端显示出来了        
dir001  dir002  file1  file2  list  list1  t1  t2  t3  time.txt  tme.txt
//time文件中没有信息,因为ls /test命令没有错误信息
[root@localhost ~]# cat /test/time.txt


注意:错误输出是要将由错误信息的程序写入到指定文件,没有错误信息的将写入空信息。


//将ls /aaaaaaaaaaaa  输出的错误信息写入到time文件中
[root@localhost ~]# ls /aaaaaaaaaaaa 2> /test/time.txt   
//信息被写入到time文件中 
[root@localhost ~]# cat /test/time.txt
ls: 无法访问/aaaaaaaaaaaa: 没有那个文件或目录


3)将正确输出和错误输出都放到一个文件中或者分别放到两个文件中


命令:&>  


注意:这个&虽然和将程序放到后台运行时一样的但是&>是表示and的意思中间不能有空格


//查看test目录下的内容,查看aaaaaaaa目录下的内容
[root@localhost ~]# ls /test/    /aaaaaaaa  
ls: 无法访问/aaaaaaaa: 没有那个文件或目录
/test/:
dir001  file1  list   t1  t3        tme.txt
dir002  file2  rigth  t2  time.txt  wrong
//将两个命令输出的内容都写入到list文件中(不区分是正确输出还是错误输出)
[root@localhost ~]# ls /test/    /aaaaaaaa  &> /test/list
//写入成功
[root@localhost ~]# cat /test/list
ls: 无法访问/aaaaaaaa: 没有那个文件或目录
/test/:
dir001
dir002
file1
file2
list
rigth
t1
t2
t3
time.txt
tme.txt
wrong
//将正确输出写入到right文件中,将错误输出写入到wrong文件中
[root@localhost ~]# ls /test/ 1> /test/right   /aaaaaa 2> /test/wrong
//查看right文件,写入成功
[root@localhost ~]# cat /test/right
/test/:
dir001
dir002
file1
file2
list
right
rigth
t1
t2
t3
time.txt
tme.txt
wrong
//查看wrong文件,写入成功
[root@localhost ~]# cat /test/wrong
ls: 无法访问/aaaaaa: 没有那个文件或目录


4)在生产环境中的使用


生产环境中我们一般将信息都写入到/dev/null


/dev/null相当于垃圾桶,表示我们不看这些输出信息,因为有些命令会输出很多行信息,这时候我们只需要写入到/dev/null中即可看不到了。


[root@localhost ~]# ls /test/    /aaaaaaaa  &> /dev/null
//不会显示任何信息
[root@localhost ~]# 

二、输入重定向


1、简介


标准输入:0<  等价于  <


注意:这的符号和输出符号相反,可以将其看做成是漏斗,信息从大口向小口流入。


2、以输入重定向发送邮件为例


1)默认发邮件过程


发送邮件命令:mail   -s  “邮件名”   收件人

111                                                        //邮件信息

.                                                              //以.为终止

查看邮件命令:mail

                       然后输入邮件号查看邮件


//编辑邮件发送给sure1用户
[root@localhost ~]# mail -s "toyou" sure1        
hello.                                        //发现在这一行输入.是不会终止的
.                                                //另起一行输入.会结束编辑
EOT
//切换sure1用户
[root@localhost ~]# su - sure1
上一次登录:三 10月 12 15:23:16 CST 2022pts/0 上
//查看邮件
[sure1@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/sure1": 2 messages 2 new
>N  1 root                  Wed Oct 12 15:18  18/609   "toyou"
 N  2 root                  Wed Oct 12 15:23  19/613   "mymail"
//选择需要查看的邮件
& 1
Message  1:
From root@localhost.localdomain  Wed Oct 12 15:18:49 2022
Return-Path: <root@localhost.localdomain>
X-Original-To: sure1
Delivered-To: sure1@localhost.localdomain
Date: Wed, 12 Oct 2022 15:18:49 +0800
To: sure1@localhost.localdomain
Subject: toyou
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@localhost.localdomain (root)
Status: R
hello.
//按q退出邮件
& q     
Held 2 messages in /var/spool/mail/sure1
//退出sure1用户
[sure1@localhost ~]$ exit
登出


解释邮件对应的信息


N  1 root                  Wed Oct 12 15:18  18/609   "toyou"

1:邮件编号

root:发送人

Wed Oct 12 15:18:时间

"toyou":邮件名


2)用重定向的方法快速发送邮件


准备一个邮件内容


//创建mail文件
[root@localhost ~]# touch /test/mail
//编辑文件内容
[root@localhost ~]# vim /test/mail
//查看mail文件内容
[root@localhost ~]# cat /test/mail
hello i am sure


通过重定向发邮件


原理:利用输入重定向,把文件内容代替人为的输入。


//将mail文件内的内容输入到邮件中,发送给sure1,邮件名为hello
[root@localhost ~]# mail -s "hello" sure1  0< /test/mail
//切换sure1
[root@localhost ~]# su - sure1
上一次登录:三 10月 12 15:32:59 CST 2022pts/0 上
//查看邮件
[sure1@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/sure1": 3 messages 1 new 2 unread
    1 root                  Wed Oct 12 15:18  19/620   "toyou"
 U  2 root                  Wed Oct 12 15:23  20/623   "mymail"
>N  3 root                  Wed Oct 12 15:33  18/618   "hello"    //收到hello邮件
& 3                                                                //选择查看3号邮件
Message  3:
From root@localhost.localdomain  Wed Oct 12 15:33:14 2022
Return-Path: <root@localhost.localdomain>
X-Original-To: sure1
Delivered-To: sure1@localhost.localdomain
Date: Wed, 12 Oct 2022 15:33:14 +0800
To: sure1@localhost.localdomain
Subject: hello
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@localhost.localdomain (root)
Status: R
hello i am sure                        //邮件信息
& q                                                   //退出邮件
Held 3 messages in /var/spool/mail/sure1
您在 /var/spool/mail/sure1 中有邮件
[sure1@localhost ~]$ exit                           //退出sure1用户         
登出


通过这种方式可以将编辑好的文件信息发送给任何人就不需要一遍遍的编辑,只需要拟好模板即可










相关文章
|
6天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
24 3
|
6天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
19 2
|
27天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
177 5
|
27天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
76 4
|
14天前
|
缓存 监控 Linux
|
17天前
|
Linux Shell 数据安全/隐私保护
|
18天前
|
域名解析 网络协议 安全
|
24天前
|
运维 监控 网络协议
|
25天前
|
监控 Linux Shell
|
6天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
24 3