zoukankan      html  css  js  c++  java
  • linux输入输出重定向及案例

    重定向

    什么是重定向?

    将原本要输出在屏幕中的内容,重新定向输出到指定的文件或设备中。
    ** 为什么要使用重定向?**

    1.备份时,我们需要知道备份的结果

    2.屏幕上输出信息,比较重要的时候,我们想要保存下来

    3.定时任务,我们需要知道结果

    4.执行命令时,明知道会报错,我们会使用重定向,将结果 放入 /dev/null

    5.执行命令时,正确 结果和错误 结果会同时输出,将正确结果输出到常规日志,将错误结果输出到错误日志

    重定向的分类

    • 标准输入
    • 标准输出
    名称 文件描述符 作用
    标准输入(stdin) 0 通常键盘(其他输入命令的终端设备)
    标准输出(stdout) 1 默认输出到屏幕
    错误输出(stderr) 2 默认输出到屏幕
    文件名(filename) 3+ -
    [root@localhost ~]# ll /dev/std*
    lrwxrwxrwx 1 root root 15 3月  25 10:36 /dev/stderr -> /proc/self/fd/2
    lrwxrwxrwx 1 root root 15 3月  25 10:36 /dev/stdin -> /proc/self/fd/0
    lrwxrwxrwx 1 root root 15 3月  25 10:36 /dev/stdout -> /proc/self/fd/1
    
    [root@localhost ~]# ll /proc/121169/fd/
    总用量 0
    lrwx------ 1 root root 64 4月   7 11:28 0 -> /dev/pts/3
    lrwx------ 1 root root 64 4月   7 11:28 1 -> /dev/pts/3
    lrwx------ 1 root root 64 4月   7 11:27 2 -> /dev/pts/3
    lr-x------ 1 root root 64 4月   7 11:28 3 -> /var/log/messages
    

    输出重定向

    /dev/null

    /dev/pts/0

    /dev/pts/1

    /tmp/zls.txt

    /root/1.txt

    类型 符号 用途 备注
    标准覆盖输出重定向 1> 将命令执行的正确结果默认输出的位置,修改为指定的文件或者终端(覆盖原有内容) 通常'>'即可,1可以不写,默认就是1
    标准追加输出重定向 >> 将命令执行的正确结果,输出到指定文件的末尾(不覆盖原有内容) -
    错误覆盖输出重定向 2> 将命令执行的错误结果默认输出的位置,修改为指定的文件或者终端(覆盖原有内容) -
    错误追加输出重定向 2>> 将命令执行的错误结果,输出到指定文件的末尾(不覆盖原有内容) -
    标准输入重定向 0< 将命令中接收输入内容由默认的键盘,改为命令或者文件 通常'<'即可0可以写也可以不写,默认0
    标准输入追加重定向 0<< 将命令中接收输入内容由默认的键盘,改为命令或者文件 -
    # 标准覆盖输出重定向
    [root@localhost ~]# echo wxx>/tmp/1.txt
    
    [root@localhost ~]# cat /tmp/1.txt
    wxx
    
    [root@localhost ~]# echo 321>/tmp/2.txt
    
    [root@localhost ~]# cat /tmp/2.txt
    
    [root@localhost ~]# echo wxx1>/tmp/3.txt
    [root@localhost ~]# cat /tmp/3.txt
    wxx1
    **标准追加输出重定向**
    

    标准追加输出重定向

    [root@localhost ~]# echo 456 >> /var/log/messages
    [root@localhost ~]# echo 123 >> /var/log/messages

    **错误输出重定向**
    

    错误输出重定向

    [cdx@localhost ~]$ find /etc/ -type d

    **将标准输出和错误输出都输出到相同的文件中**
    

    将标准输出和错误输出都输出到相同的文件中

    [cdx@localhost ~]$ find /etc/ -type d > /tmp/100.txt 2>&1

    [cdx@localhost ~]$ find /etc/ -type d &> /tmp/101.txt

    **将错误输出,重定向到黑洞**
    

    将错误输出,重定向到黑洞

    [root@localhost ~]# ls / /ooo 2>/dev/null

    **脚本中使用重定向**
    

    脚本中使用重定向

    !/bin/bash

    . /etc/init.d/functions

    read -p "请输入要检测的IP:" IP

    ping -c1 -W1 $IP &>/dev/null

    if [ (? -eq 0 ];then action ")IP" /bin/true >> /tmp/IP_OK.txt
    else
    action "$IP" /bin/false >> /tmp/IP_FAILD.txt
    fi

    输入重定向

    [root@localhost ~]# mail -s "$(date +%F-%T)_test" 11111@qq.com < /etc/passwd
    





    [root@localhost opt]# echo -e "111
    222
    333" > file1.txt
    [root@localhost opt]# cat file1.txt
    111
    222
    333
    [root@localhost opt]# echo '
    1111
    2222
    3333
    4444
    ' > file2.txt
    
    [root@localhost opt]# cat >> 1.txt <<EOF
    > aaa
    > bbb
    > ccc
    > ddd
    > EOF
    
    [root@localhost opt]# cat >> 2.txt
    111
    222
    333
    444
    
    Ctrl + d 结束
    
    
    cat <<EOF
    +--------------------------+
    | vmware manager           |
    +--------------------------+
    | by wxx                   |
    +--------------------------+
    | 1. Install KVM           |
    | 2. Install or Reset C6.5 |
    | 3. Install or Reset C7.4 |
    | 5. Instqll or Reset W7   |
    | 6. Remove all            |
    | q. quit                  |
    +--------------------------+
    EOF
    
    
    [root@localhost opt]# cat <<EOF
    > 1.install  mysql
    > 2.install nginx
    > 3.intsall php
    > 4.install tomcat
    > 5.install redis
    > EOF
    1.install  mysql
    2.install nginx
    3.intsall php
    4.install tomcat
    5.install redis
    
    # 两条命令同时重定向
    [root@localhost opt]# (ls ; date) > 1.txt
    
     (while :; do date; sleep 2; done) &>date.txt &
     
     #如果不希望某些命令的执行对当前 shell 环境产生影响,请在subshell中执行
     [root@localhost ~]# (cd /boot; ls)
    

    管道技术

    管道操作符号:|,叫做管道符
    作用:将管道符左边命令的标准输出,交给管道符右边命令的标准输入来处理
    用法:cmd1|cmd2|cmd3| cmd4...

    # 取出passwd文件中,uid最大的前五个
    [root@localhost ~]# sort -nr -k 3 -t ':' /etc/passwd|head -5
    
    # 统计出passwd文件中,所有用户的shell种类
    [root@localhost ~]# awk -F: '{print $7}' /etc/passwd|sort |uniq|wc -l
    6
    
    [root@localhost ~]# hostname -I
    10.0.0.200
    [root@localhost ~]# ifconfig |awk 'NR==2{print $2}'
    10.0.0.200
    sed
    awk
    grep
    
    组合:sed awk
    grep awk
    
    10种方法,取IP
    
    # 取出 磁盘已使用 百分比
    [root@localhost ~]# df -h|awk '{print $5}'|awk -F '%' '{print $1}'
    已用
    9
    0
    0
    1
    0
    24
    5
    0
    1
    
    # tee 和 重定向的区别
    tee会将输出结果显示在屏幕上
    [root@zls ~]# date > date.txt 
    [root@zls ~]# date |tee date.txt
    
    #xargs:将管道前面的结果当成管道后面命令的参数
    [root@localhost opt]# find /etc/ -name '*.conf'|xargs cp -t /tmp/
    

    十种方式取ip

    十种方法取ip
    [root@wzh ~]# ifconfig|awk 'NR==2 {print $2}'
    10.0.0.200
    [root@wzh ~]# ifconfig|sed -nr '2s#.*et (.*) ne.*#1#gp'
    10.0.0.200 
    [root@wzh ~]# ifconfig|grep -w 'broadcast'|cut -d ' ' -f10
    10.0.0.200
    [root@wzh ~]# ifconfig|sed -n '2p'|awk '{print $2}'
    10.0.0.200
    [root@wzh ~]# ifconfig|grep -w 'broadcast'|sed -r 's#.*et (.*) ne.*#1#g'
    10.0.0.200
    [root@wzh ~]# ifconfig |head -2|tail -1|cut -d ' ' -f10
    10.0.0.200
    [root@wzh ~]# ifconfig|grep -w 'broadcast'|cut -c 14-24
    10.0.0.200 
    [root@wzh ~]# ifconfig|awk 'NR==2'|cut -d 't' -f2|cut -d 'n' -f1
     10.0.0.200
     [root@wzh ~]# ifconfig|sed -n '2p'|grep -o '[0.-9]*'|head -1
    10.0.0.200
    [root@wzh ~]# ifconfig|sed -n '2p'|cut -d ' ' -f10
    10.0.0.200
    

    练习题

    01.复制/etc/passwd文件到当前目录下,把文件中的:替换成#,不能使用sed和vim命令。
    cp /etc/passwd ./
     tr ':' '#' < ./passwd
    
    02.改变文件所有者的命令是?
    chown
    03.新建一个1.txt文件,文件内容如下
    [root@centos7 ~]# cat >>1.txt <<eof
    > 1123
    > 1122
    > 112233
    > 321
    > 3306
    > 8080
    > 80
    > 23
    > 21
    > 8081
    > 8082
    > 8085
    > eof
    1123
    1122
    112233
    321
    3306
    8080
    80
    23
    21
    8081
    8082
    8085
    04.接03题,显示1.txt第3行到第10行的内容(三种方法)
    [root@centos7 ~]# head 1.txt|tail -7
    [root@centos7 ~]# awk 'NR==3,NR==10' 1.txt
    [root@centos7 ~]# sed -n '3,10p' 1.txt
    05.接03题,显示1.txt第3行和第10行的内容(两种方法)
    [root@centos7 ~]# awk 'NR==3;NR==10' 1.txt
    [root@centos7 ~]# sed -n '3p;10p' 1.txt
    06.执行命令echo "I am qiandao,my qq is 1716141363">/oldboy/oldboy.txt,
    [root@wzh ~]# echo "I am qiandao,my qq is 1716141363">/oldboy/oldboy.txt
    [root@wzh ~]# cat /oldboy/oldboy.txt
    I am qiandao,my qq is 1716141363
    
    现在需要从文件中过滤出“qiandao”和“1176494252”字符串,请给出命令?(最少三种方法)
    [root@wzh ~]# egrep -o 'qiandao||1716141363' /oldboy/oldboy.txt
    qiandao
    1716141363
    [root@wzh ~]# awk -F '[ ,]' '{print $3,$7}' /oldboy/oldboy.txt
    qiandao 1716141363
    [root@wzh ~]# sed -r 's#.*am (.*)(,.*)s(.*)#13#g' /oldboy/oldboy.txt
    qiandao 1716141363
    07.接上题,如果需要从文件中过滤出“qiandao,1176494252”字符串,请再给出命令?
    [root@wzh ~]# egrep -o 'qiandao,|1716141363' /oldboy/oldboy.txt 
    qiandao,
    1716141363
    
    08.用什么命令可以测试另外一台服务器的某个端口是打开的
    telnet
    09.简述 > 和 >> 符号作用,以及两个符号之间区别
    1.> 输出重定向符号 作用:将前面的内容输出到文件中并且覆盖原文件内容
    2.>> 追加重定向符号 作用:在原有文件的基础上追加新内容
    区别>会覆盖原文件>>是追加在文件底部不覆盖
    10.vim中把所有的oldboy替换为oldgirl 给出命令
    :%s#oldboy#oldgirl#g
    11.管道符号的含义说明   |
    作用:将管道符左边命令的标准输出,交给管道符右边命令的标准输入来处理
    12.如何创建一个系统用户,创建完成如何进行切换用户,切换完毕如何确认查看
    [root@wzh ~]# useradd w
    [root@wzh ~]# su - w
    虚拟机ip 10.0.0.200
    [w@wzh ~]$ whoami
    w
    
    13.如何实现每次系统启动自动备份/oldboy/oldboy.txt文件,并且备份操作完在/oldboy/info.log中有备份操作提示信息
    vim /etc/rc.local	
    cp /oldboy/oldboy.txt{,.bak} && echo oldboy.txt back is ok >> /oldboy/info.log
    14.查找/app/logs下7天以前的log文件并删除(请使用xargs)
    find /app/logs/ -type f -mtime +7 |xargs rm -f
    15.将/etc目录下大于100k的文件移动至/tmp下 (请使用xargs)
     find /etc/ -type f -size +100k|xargs -i mv {} /tmp/
    16.如何查看/var/log/目录下的文件数
    find /var/log/ -type f |wc -l
    17.硬链接可以作为源文件的备份文件,为什么还要cp命令进行备份(说明硬链接原理)
    相同inode号的文件互为硬链接
    cp是两个文件,硬链接实际是一个文件
    18.linux系统中文件属性信息都包含什么
    inode节点号
    文件类型和权限
    硬链接数
    属主和属组
    文件的大小
    最后修改时间
    文件或目录名
    19.请说明利用管道命令和xargs命令结合是, 命令执行的原理过程
    xargs将参数列表转换成小块分段传递给其他命令
    读入stdin的数据转换为参数添加至命令后面
    让一些不支持管道的命令可以使用管道
    | 把前面命令的标准输出交给管道后面命令的标准输入
    20.如何创建一个新的oldgirl用户,并且需要给用户设置密码,并且采用免交互方式创建密码
    useradd oldgirl
    echo '123'|passwd --stdin oldgirl
    21.把/etc/passwd文件中的第5到第15行的内容保存到/oldboy/test.txt中,(不低于三种方法)
    mkdir /oldboy
    touch /oldboy/test.txt
    awk 'NR==5,NR==15' /etc/passwd > /oldboy/test.txt
    sed -n '5,15p' /etc/passwd > /oldboy/test.txt
     head -15 /etc/passwd|tail -10 > /oldboy/test.txt
    22.说一说你知道的vim里面的命令并写出意思。(不低于10个)
    gg :将光标移动到文件的开头 ,ngg就是移至n行行首
    dd  :  删除一行,(删除多行 ndd dnd :n为数字 + p = 剪切)
    D   :  将光标之后的内容都删除
    u   :   撤销
    $(shift+4) : 将光标移动至行尾
    ^(shift+6)  :  将光标移动至行首
    dG   : 删除光标以下的所有内容(包括光标所在行)
    yy :  复制,复制n 行,nyy ,yny
     p :  粘贴(光标所在行的下一行)
     R :  多个字符替换(按ESC退出替换)
    23.删除oldboy.txt文件中的所有空行,有的空行里面存在tab键和空格(两种方法)
    sed -ri '/^[ 	]*$/d' oldboy.txt
    awk '!/^[ 	]*$/' oldboy.txt
    24.快速返回到上一次所在的目录的命令为(cd - )
    25.给test.sh文件加上执行权限
    touch test.sh
    chmod +x test.sh
    26.将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz文件,并将此文件保存到/home目录下,实现此任务的tar命令格式
    将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz文件,并将此文件保存到/home目录下,实现此任务的tar命令格式
    27.用shell在/usr/local下建立20个子目录xunlei1-xunlei20,再在这个子目录下分别建255个子目录dir1-dir255再在255个子目录下创建10000个文件xunlei1.html-xunlei10000.html
    mkdir -p /usr/loca/xunlie{1..20}/dir{1..255}/
    
     touch   /usr/loca/xunlie{1..20}/dir{1..255}/xunlei{1..10000}.html  
    28.linux如何得知服务器的的运行时长?
    uptime
    29.rm命令修改了别名信息的文件/etc/profile,但还是不能直接删除信息,是什么原因,并写出和别名设置相关的文件及路径信息
    家目录中的文件配置优于/etc目录文件的配置
    /etc/profile
    /etc/bashrc
    
    设置别名或变量可以全局生效
    ~/.bash_profile
    ~/.bashrc
    
    设置别名或变量只是相应用户生效
      
    在家目录中有文件中设置了别名
    /etc/profile -->/etc/bashrc-->~/.bashrc--> ~/.bash_profile
    30.linux运维工程师都需要具备哪些职业素质?
    人品
    7*24
    持续学习
    
  • 相关阅读:
    解决SQL Server Compact 无法在64位系统下正常运行
    Mvc5+Entity Framework6 之二----在MVC中用Entity Framework实现基本的CRUD
    Asp.net MVC5中Html.DropDownList的使用
    C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母
    MVC学习 (二) Razor语法
    MVC学习 (一)
    编程实现机器人相遇
    jquery优化引发的思考
    (续)检测到有潜在危险的 Request.Form 值
    检测到有潜在危险的 Request.Form 值
  • 原文地址:https://www.cnblogs.com/zabcd/p/13289655.html
Copyright © 2011-2022 走看看