zoukankan      html  css  js  c++  java
  • Linux重定向与管道

    1 信号管理进程    1

    1.1 kill命令    1

    1.2 killall命令    1

    1.3 pkill    1

    2 后台进程管理    1

    2.1 jobs    1

    2.2 bg命令    1

    2.3 fg命令    1

    2.4 sleep命令    1

    3 标准输入和输出    1

    3.1 标准输入和输出    1

    4 输出重定向    1

    4.1 重定向:改变标准输入、标准输出的方向的就是重定向    1

    4.2 标准输出重定向(覆盖)    1

    4.3 标准输出重定向(追加)    1

    4.4 错误输出重定向    1

    4.5 正确错误的都输出到同一个文件中    1

    4.6 正确的错误的都输入到相同的位置    1

    4.7 重定向到空/dev/null    1

    4.8 脚本中使用重定向    1

    4.9 脚本中使用重定向    1

    5 输入重定向    1

    5.1 邮件服务    1

    5.2 输入重定向给grep 执行查询操作    1

    5.3 dd生成指定大小的文件    1

    5.4 mysql导入表结构    1

    5.5 利用重定向建立多行文件    1

    5.6 利用重定向建立多行文件    1

    6 进程管道技术    1

    7 tee管道技术    1

    1. 信号管理进程

        使用kill命令发送信号和进程通信

        定义守护进程的角色

        结束用户会话和进程

    1. kill命令

        kill命令:kill命令用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。

        kill:后面接进程PID 杀死进程

    [root@oldboy ~]# ps aux | grep vim

    root 63112 0.0 1.0 151580 5084 pts/0 S+ 17:46 0:00 vim 123.txt

    root 63162 0.0 0.2 112720 968 pts/1 R+ 17:47 0:00 grep --color=auto vim

    [root@oldboy ~]# kill 63112

            

            -l:列出全部的信息名称

            -15:TERM:终止进程

            -9:强制终止

            -1:挂起信号,可以让进程重新配置

    1. killall命令

        killall命令使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程

    root 63747 0.0 1.0 151580 5080 pts/0 S+ 17:59 0:00 vim 123.txt

    root 63781 0.0 1.0 151404 5064 pts/1 S+ 17:59 0:00 vim anaconda-ks.cfg

    root 63927 0.0 0.2 112720 972 pts/2 R+ 18:02 0:00 grep --color=auto vim

    [root@oldboy ~]# killall vim

    1.     pkill

        pkill命令:可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。

            -u:后面接用户名,踢出登录用户,关闭终端

    [root@oldboy ~]# w

    18:06:53 up 23:01, 3 users, load average: 0.00, 0.01, 0.05

    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

    root pts/0 10.0.0.1 16:51 3:01 0.05s 0.05s -bash

    oldboy pts/1 10.0.0.1 18:06 8.00s 0.00s 0.00s -bash

    root pts/2 10.0.0.1 17:59 5.00s 0.02s 0.00s w

    [root@oldboy ~]# pkill -u oldboy

            -t:终端名,结束终端所有程序

    [root@oldboy ~]# pkill -t pts/1

    [oldboy@oldboy ~]$ vim 123.txt

    Vim: Caught deadly signal TERM

     

    Vim: Finished.

     

     

    已终止

    [oldboy@oldboy ~]$

            -t -9:强制结束指定程序并关闭终端

    [root@oldboy ~]# pkill -t -9 pts/1

    1. 后台进程管理

    2. jobs

        jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。

        jobs

            -l:显示进程号

    [root@oldboy ~]# jobs -l

    [1]+ 62110 停止 vim 123.txt

            -r:仅显示运行(running)的任务

            -s:仅显示睡眠状态(sleeping)的任务

    [root@oldboy ~]# jobs -l

    [1]+ 62110 停止 vim 123.txt

    [2]- 62259 运行中 sleep 1000 &

    [root@oldboy ~]# jobs -r

    [2]- 运行中 sleep 1000 &

    [root@oldboy ~]# jobs -s

    [1]+ 已停止 vim 123.txt

        

    1. bg命令

        bg命令用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号&的效果是相同的,都是将其放到系统后台执行。

    [root@oldboy ~]# jobs

    [1]+ 已停止 sleep 20000

    [root@oldboy ~]# bg 1

    [1]+ sleep 20000 &

    将一个程序放在后台运行 的另一种方法

    [root@oldboy ~]# sleep 2000 &

    [1] 62626

    1. fg命令

        fg命令用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行。与bg命令一样,若后台任务中只有一个,则使用该命令时,可以省略任务号

    [root@oldboy ~]# jobs

    [1]+ 运行中 sleep 20000 &

    [root@oldboy ~]# fg 1

    sleep 20000

    1. sleep命令

        sleep命令

        时间:指定要暂停时间的长度。

        时间长度,后面可接 s、m、h 或 d,其中 s 为秒,m 为 分钟,h 为小时,d 为日数。

    暂停5秒钟

    [root@oldboy ~]# sleep 5

    [root@oldboy ~]#

     

    这是一个在脚本中控制时间的重要命令 例如每隔3面输出一行hello would!

    while true

    do

        echo "hello would!"

        sleep 3

    done

     

    1. 标准输入和输出

    2. 标准输入和输出

    执行一个shell程序时通常会自动打开三个标准文件

    [root@oldboy ~]# vim 123.txt

     

    [1]+ 已停止 vim 123.txt

    [root@oldboy ~]# jobs -l

    [1]+ 64561 停止 vim 123.txt

    [root@oldboy ~]# ll /proc/64561/fd

    总用量 0

    lrwx------ 1 root root 64 8月 22 18:13 0 -> /dev/pts/2

    lrwx------ 1 root root 64 8月 22 18:13 1 -> /dev/pts/2

    lrwx------ 1 root root 64 8月 22 18:13 2 -> /dev/pts/2

    lrwx------ 1 root root 64 8月 22 18:13 4 -> /root/.123.txt.swp

     

    [root@oldboy ~]# ll /dev/std*

    lrwxrwxrwx 1 root root 15 8月 20 14:49 /dev/stderr -> /proc/self/fd/2

    lrwxrwxrwx 1 root root 15 8月 20 14:49 /dev/stdin -> /proc/self/fd/0

    lrwxrwxrwx 1 root root 15 8月 20 14:49 /dev/stdout -> /proc/self/fd/1

    标准输入(STDIN,文件描述符为0):通常对应终端的键盘,也可从其他文件或命令或者文件内容中输入。

    标准输出(STDOUT,文件描述符为1):默认输出到屏幕。

    错误输出(STDERR,文件描述符为2):默认输出到屏幕。

    文件名称(filename,文件描述符为3+)

     

    进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

    进程使用文件描述符(file descriptors)来管理打开的文件

     

    1. 输出重定向

    1.当屏幕输出的信息很重要,而且我们需要将他存下来的时候;
    2.后台执行中的程序,不希望他干扰屏幕正常的输出结果时;
    3.系统的执行命令, 例如定时任务的执行结果,希望他可以存下来时;
    4.一些执行命令,我们已经知道他可能出现错误信息, 想将他直接丢弃时;
    5.错误信息与正确信息需要分别输出时;

    1. 重定向:改变标准输入、标准输出的方向的就是重定向

    标准覆盖输出重定向
    标准追加输出重定向 >> 
    错误覆盖输出重定向 2> 
    错误追加输出重定向 2>> 
    输入重定向 <

     

    类型

    操作符

    用途

    标准覆盖输出重定向

    >

    将命令的执行结果输出到文件中,而不是直接显示在屏幕上

    标准追加输出重定向

    >>

    将命令执行的结果追加输出到指定的文件

    标准输入定向

    <

    将命令中接受输入的途径由默认的键盘更改为指定的文件

     

    1. 标准输出重定向(覆盖)

    标准输出重定向,先清空,后写入,如果文件不存在则创建

    [root@oldboy ~]# echo hello > 123.txt

    1. 标准输出重定向(追加)

    标准输出重定向,在源文件基础上追加新的内容

    [root@oldboy ~]# echo word >> 123.txt

    1. 错误输出重定向

    正确输出以及错误输出重定向到指定的文件内

    查询/etc目录下的以.conf结尾的文件,查询成功的输出到1.txt中,失败的保存到2.txt中

    [oldboy@oldboy ~]$ find /etc/ *.conf 1>1.txt 2>2.txt

     

    1. 正确错误的都输出到同一个文件中

    查询/etc目录下的所有以.conf结尾的文件将成功和失败的结果都保存到一个文件中

    [oldboy@oldboy ~]$ find /etc *.conf &>1.txt

    1. 正确的错误的都输入到相同的位置

    重定向到相同的位置

    [root@oldboy pubilc]# ls /root /error >ab 2>&1

    1. 重定向到空/dev/null

    空设备,即将产生的输出丢掉

    [root@oldboy ~]# ls /root /error >ab 2>/dev/null

    [root@oldboy ~]# ls /root /error >ab &>/dev/null

    1. 脚本中使用重定向

    [root@oldboy ~]# vim ping.sh

    ping -c1 10.0.0.200

    if [ $? -eq 0 ];then

    echo "10.0.0.200 is up."

    else

    echo "10.0.0.200 is down."

    fi

    [root@oldboy ~]# chmod +x ping.sh

    [root@oldboy ~]# ./ping.sh

    //改进后版

    [root@oldboy ~]# vim ping.sh

    ping -c1 10.0.0.200 &>/dev/null

    if [ $? -eq 0 ];then

    echo "10.0.0.200 is up."

    else

    echo "10.0.0.200 is down."

    fi

     

    1. 脚本中使用重定向

    [root@oldboy ~]# vim ping2.sh

    ping -c1 10.0.0.200 &>/dev/null

    if [ $? -eq 0 ];then

    echo "10.0.0.200 is up." >>up.txt

    else

    echo "10.0.0.200 is down." >>down.txt

    fi

    [root@oldboy ~]# chmod +x ping2.sh

    [root@oldboy ~]# ./ping2.sh

     

    1. 输入重定向

    表中输入:<等价于0<

    1. 邮件服务

    安装sendmail和xmail

    [root@oldboy ~]# yum install -y sendmail mailx

    已加载插件:fastestmirror

    Loading mirror speeds from cached hostfile

    * base: mirrors.aliyun.com

    * extras: mirrors.aliyun.com

    * updates: mirrors.aliyun.com

    base | 3.6 kB 00:00:00

    extras | 3.4 kB 00:00:00

    updates | 3.4 kB 00:00:00

    修改主机解析:在hosts文件中加入本机的主机名和ip地址

    [root@oldboy ~]# vim /etc/hosts

    10.0.0.100 oldboy

    重启服务

    [root@oldboy ~]# systemctl restart sendmail

    发邮件 mail 邮箱地址 ; subject:主题 ; 邮件内容 ; .号结束邮件;

    [root@oldboy ~]# mail 228361008@qq.com

    Subject: 123

    12345

    123345

    .

    EOT

    检测是否收到邮件

    [root@oldboy ~]# su - oldboy

    [oldboy@oldboy ~]$ mail

    Heirloom Mail version 12.5 7/5/10. Type ? for help.

    "/var/spool/mail/oldboy": 2 messages

    > 1 root Wed Aug 22 11:25 21/651 "asd"

    发邮件时将指定文件内容发送

    [root@oldboy ~]# mail -s "test" oldboy < /etc/hosts

    1. 输入重定向给grep 执行查询操作

    [root@oldboy ~]# grep 'root' < /etc/passwd

    root:x:0:0:root:/root:/bin/bash

    operator:x:11:0:operator:/root:/sbin/nologin

    1. dd生成指定大小的文件

    if=/dev/zero if是源

    of=file.txt 是目标

    bs 是单个大小

    count是文件数量

    最后要生成的文件大小等于bs乘以count

    [root@oldboy ~]# dd if=/dev/zero of=file.txt bs=5M count=4

    记录了4+0 的读入

    记录了4+0 的写出

    20971520字节(21 MB)已复制,0.022939 秒,914 MB/秒

    [root@oldboy ~]# ll file.txt -h

    -rw-r--r-- 1 root root 20M 8月 22 22:03 file.txt

     

    1. mysql导入表结构

    安装mariadb数据库

    [root@oldboy ~]# yum install -y mariadb

    已加载插件:fastestmirror

    Loading mirror speeds from cached hostfile

    * base: mirrors.aliyun.com

    * extras: mirrors.aliyun.com

    * updates: mirrors.aliyun.com

    表结构导入

    [root@oldboy ~]# mysql -uroot -p123 <bbs.sql    

    1. 利用重定向建立多行文件

    [root@oldboy ~]# cat >> file.txt

    12334

    124

    2134

     

    [root@oldboy ~]# cat file.txt

    12334

    124

    2134

    1. 利用重定向建立多行文件

    [root@oldboy ~]# cat > file.txt <<a

    > sdf

    > sdfg

    > df

    > a

    [root@oldboy ~]# cat file.txt

    sdf

    sdfg

    df

     

    1. 进程管道技术

    管道操作符号"|"连接两个命令,将左侧的标准输出,交给右侧的标准输入

    格式:cmd1 | cmd2 [...| cmdn]

    示例:使用管道和cut截取passwd中的用户名使用的shell 的数量,排序

    [root@oldboy ~]# cut -d":" -f7 /etc/passwd | sort | uniq -c | sort -nr

    18 /sbin/nologin

    3 /bin/bash

    1 /sbin/shutdown

    1 /sbin/halt

    1 /bin/sync

    示例:打印根分区已用空间的百分比(只打印数字)

    [root@oldboy ~]# df | grep /$| awk '{print $5}' | awk -F% '{print $1}'

    8

    1. tee管道技术

     

    找IP地址,并且保存tee

    [root@oldboy ~]# ip a | grep "inet "| awk '{print $2}'| tee 1.txt | awk -F/ '{print $1}'

    127.0.0.1

    10.0.0.100

    [root@oldboy ~]# cat 1.txt

    127.0.0.1/8

    10.0.0.100/24

     

    [root@oldboy ~]# ifconfig | sed -nr 2's#^.*inet (.*) netmask.*$#1#gp'| tee 2.txt

    10.0.0.100

     

  • 相关阅读:
    本地 配置 Memcache
    本地配置 Redis
    Mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。
    perceptron感知机 mtalab
    修正收益率
    k近邻算法 ---- KNN
    原码、反码、补码、移码
    卡尔曼滤波器--连续变量
    收益率
    Matlab基础 数组
  • 原文地址:https://www.cnblogs.com/majinhai/p/9534097.html
Copyright © 2011-2022 走看看