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用户         
登出


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










相关文章
|
5天前
|
NoSQL 关系型数据库 MySQL
Linux学习记录---(1、基本命令)
该博客文章提供了Linux系统中基本命令的使用记录,包括文件和目录操作、Redis服务管理、MySQL数据库操作以及Tomcat服务器的启动和检查。
Linux学习记录---(1、基本命令)
|
2天前
|
Linux
会玩这10个Linux命令,一定是个有趣的IT男!
会玩这10个Linux命令,一定是个有趣的IT男!
|
6天前
|
运维 Ubuntu Linux
Linux系统之ncdu命令的基本使用
【8月更文挑战第8天】Linux系统之ncdu命令的基本使用
13 2
Linux系统之ncdu命令的基本使用
|
2天前
|
安全 Linux 开发者
Linux笔记之ldd命令详解
`ldd`命令是Linux环境下一个非常实用的工具,用于显示一个程序运行时所需的共享库依赖。它帮助开发者和系统管理员快速诊断程序运行问题,特别是在处理"找不到库文件"或者"错误的库文件版本"等错误时。然而,出于安全的考虑,对于不信任的可执行文件,应该慎用 `ldd`命令,可以考虑使用其他工具如 `objdump`。总的来说,懂得如何妥善且安全地使用 `ldd`,对于维护一个稳定和高效的Linux系统来说,是非常重要的。
17 9
|
3天前
|
存储 Unix Linux
Linux I/O 重定向与管道
【8月更文挑战第17天】重定向在Linux中改变命令I/O流向,默认有&quot;&gt;&quot;覆盖输出至文件及&quot;&gt;&gt;&quot;追加输出至文件末尾,便于保存结果;使用&quot;&lt;&quot;从文件读取输入而非键盘,高效处理数据。文件描述符如0(stdin)、1(stdout)、2(stderr)标识I/O资源,支持读写操作。管道以&quot;|&quot;连接命令,使前一命令输出成为后一命令输入,如排序用户或找出CPU占用最高的进程,构建复杂数据处理流程。
18 9
|
2天前
|
Linux Shell
linux命令
linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
3天前
|
移动开发 运维 网络协议
运维必备 | Linux netstat命令详解
运维必备 | Linux netstat命令详解
|
3天前
|
Linux
真香~ Linux vi常用命令汇总!
真香~ Linux vi常用命令汇总!
|
3天前
|
Linux Shell
linux命令
linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
7天前
|
运维 安全 Linux
【超实用秘籍】Linux文件传输新高度:10个scp命令让你瞬间变身文件传输达人,从此告别繁琐操作!
【8月更文挑战第13天】文件传输是运维工作的核心部分,尤其对Linux用户来说,了解高效且安全的传输方法非常重要。本文介绍10种scp命令的应用技巧,涵盖基础文件传输、密钥认证、目录复制等场景,助你灵活运用这一基于SSH协议的安全工具。从简单的文件传输到复杂的多主机文件迁移,scp都能轻松应对。通过本文的学习,你将能更熟练地使用scp命令,提高工作效能。
26 6