• Linux之重定向


    1,Linux中的重定向到底是个什么呢?

    Linux中的重定向就是将原本要输出到屏幕中的数据信息,重新指向某个特定的文件中,或者定向到黑洞(/dev/null)中。

    1.2重定向有什么用呢?

    • 1,当程序执行输出的信息比较多时,需要保存下来在进行分页查看。
    • 2,后台执行的程序一般都会有输出,不希望它输出干扰到终端。
    • 3,执行定时的备份任务,希望备份的结果保留下来时。
    • 4,当重复创建用户,会提示一些错误信息,可以直接将信息丢弃。
    • 5,希望将错误日志与正确日志,分别输出保存到不同文件时。

    1.3 标准输入与输出

    • 当进程操作一个文件时:
    • 1,首先进程是无法直接访问硬件的,需要借助内核来访问文件
    • 2,而内核kernel需要利用文件描述符 (file descriptor)来访问文件。
    • 总结:进程---通过--->文件描述符(非负整数)--访问---》文件名称;进程使用文件描述符来管理打开的文件对应关系。
    • 第一步:运行 tail -f /etc/passwd
    • 第二部:通过文件描述符3--->/etc/passwd-->inode-->block
    • 第三步:正确输出--->默认情况下通过文件描述符1--->当前终端 1>(改变输出的位置,文件,黑洞)
    • 第四步: 错误输出--->默认情况下通过文件描述符2---》当前终端 2>(错误输出)
    • 通常程序访问一个文件至少会打开三个标准文件,分别是标准输入,标准输出,错误输出。
    • 进程将从标准输入中得到数据,将正常输出打印至屏幕终端,将错误的输出信息也打印至屏幕终端。

    名称 文件描述符 作用
    标准输入(STDIN) 0 默认是键盘,也可以是文件或其他命令的输出
    标准输出(STDOUT) 1 默认输出到屏幕。
    错误输出(STDERR) 2 默认输出到屏幕
    文件名称(filename) 3+

    2,输出重定向案例

    • 输出重定向,改变输出内容的位置。输出重定向有如下几种方式,如表格所示:
    类型 操作符 用途
    标准覆盖输出重定向 1> 将程序输出的正确结果输出到指定到文件中,会覆盖文件原有的内容
    标准追加输出重定向 1>> 将程序输出的正确结果以追加的方式输出到指定文件
    错误覆盖输出重定向 2> 将程序的错误结果输出到执行的文件中,会覆盖文件原有的内容
    错误追加输出重定向 2>> 将程序输出的错误结果以追加的方式输出到执行的文件

    2.1,案例1,-标准输出重定向

    • 标准输出重定向示例
    • 1,如果文件不存在则创建
    • 2,如果文件存在则清空内容
    [root@Linux.net: ~]#> text.txt
    [root@Linux.net: ~]#ifconfig echo > edu.txt
    
    

    2.2案例-标准追加输出重定向

    • 标准追加输出重定向示例
    • 1,如果文件不存在则创建
    • 2,如果文件存在则在文件尾部添加内容
    [root@Linux.net: ~]#echo "hello linux" >>if
    
    

    2.3案例3-错误输出重定向

    • 错误输出重定向
    • 1,正确输出及错误输出至相同文件
    • 2,正确输出及错误输出至不同的文件
    [root@Linux.net: ~]#find /etc -name "*.conf" 1>ok 2>ok
    [root@Linux.net: ~]#find /etc -name "*.conf" 1>ok 2>error
    
    

    2.4案例4-混合和输出重定向

    • 混合输出重定向
    • 1,将正确输出和错误输出混合至同一文件
    • 2,将两个文件内容组合为一个文件
    [root@Linux.net: ~]#find /etc/ -name "*.conf" &>ab
    [root@Linux.net: ~]#cat ab >c
    
    

    *正确和错误都输入到相同位置

    [root@Linux.net: ~]#ls /root/ /error >ab 2>&1
    
    

    2.5,案例5-将内容输出至黑洞

    [root@Linux.net: ~]#ls /root/ /error >ab 2>/dev/null
    [root@Linux.net: ~]#ls /root/ /error >ab &>/dev/null
    
    

    3,输入重定向案例

    • 输入重定向:指的是"重新指定设备"来"代替键盘"作为新的输入设备;

    3.1输入重定向示例

    • 1,通过输入重定向读取文件内容;
    [root@Linux.net: ~]#cat < /etc/hosts
    
    • 2,通过输入重定向读入多行内容;
    [root@Linux.net: ~]# cat <<EOF
    [root@Linux.net: ~]#cat <<EOF
    > 1
    > 2
    > 3
    > 4
    > 5
    > EOF  #只要不出现EOF则可以一直输入
    
    
    • 3,通过输入重定向数据导入至数据库中;
    [root@Linux.net: ~]#mysql -uroot -p carol.net < /opt/wordpress.sql
    
    

    3.2脚本输入重定向

    • 使用输入重定向打印安装服务的菜单导航栏;
    [root@Linux.net: ~]# cat install.sh
    #!/usr/bin/bash
    cat <<-EOF
    -----------主菜单---------
    |   1)安装nginx     |
    |   2)安装php       |
    |   3)退出           |
    -----------------------
    EOF
    read -p "请选择你要安装的软件编号[1|2|3]:"
    

    3.3输入重定向场景

    • 1,恢复数据时

    • 2,脚本打印菜单

    • 3,cat写入文件时;vim

    • 输出重定向

    • 正确输出:
    1>:覆盖(先清空,后写入)
    1>>:直接写入文件的尾部(末尾)
    
    • 错误输出
    2>:覆盖(先清空,后写入)
    2>>:直接写入文件的尾部(末尾)
    
    • 混合输出
    &>/dev/null
    &>>/dev/null
    1>/dev/null 2>&1
    

    4,进程管道技术

    • 4.1 什么是管道
    • 管道操作符合"|",主要用来链接左右两个命令,将左侧命令的【标准输出】,交给右侧命令的【标准输入】
    • 无法传递错误的标准输出给后者命令
    • 管道命令符可以让大家进一步掌握命令之间的搭配使用方法,进一步提高命令输出值的处理效率

    4.2管道流程示意图

    • 格式:cmd1 | cmd2 [...|cndn]

    4.3管道使用案例

    • 案例1:将/etc/passwd中的用户按UID大小排序
    [root@Linux.net: ~]#sort -t ":" -k3 -n /etc/passwd
    [root@Linux.net: ~]#sort -t ":" -k3 -n /etc/passwd -r
    [root@Linux.net: ~]#sort -t ":" -k3 -n /etc/passwd |head
    
    
    • 案例2:统计当前/etc/passwd中用户使用的shell类型
    #取出第七列(shell)|排序(相同的归类)|去重
    [root@Linux.net: ~]#awk -F:`{pint $7}` /etc/passwd |sort |uniq -c
    
    
    • 案例3:打印并输出当前所有主机网卡的IP地址
    [root@Linux.net: ~]#ip addr |grep 'inet' |awk '{print $2}' |awk -F "/" '{print $1}'
    

    4.4.1,tee与xargs

    [root@Linux.net: ~]#ip addr |grep 'inet' |tee ip.txt |awk -F "/" '{print $1}' |awk '{print $2}'
    
    [root@Linux.net: ~]#cat ip.txt
    

    4.4.2,管道中使用xargs

    • xargs参数传递,主要让一些不支持管道的命令可以使用管道技术
    [root@Linux.net: ~]#which cat |xargs ls -l
    -rwxr-xr-x. 1 root root 54080 Apr 11  2018 /usr/bin/cat
    [root@Linux.net: ~]# xargs rm -fv
    
    
  • 相关阅读:
    1219
    hdu 1280 前m大的数 和 hdu 4223 Dynamic Programming?
    codeforces Lucky Sum
    20121028
    asp.net(c#) 取得网卡mac地址
    代码使用FileUpload控件上传图片并自动生成缩略图、自动生成带文字和图片的水印图
    SQL Server日志文件总结及日志满的处理
    服务器应用程序不可用解决方案集
    如何调用存储过程,有返回值的,有参数的,存储过程中调用存储过程。(MS SQL Server)
    让网页自动刷新
  • 原文地址:https://www.cnblogs.com/qinghuani/p/15024730.html
Copyright © 2020-2023  润新知