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

 

posted @ 2018-08-25 14:37  诚易网络  阅读(1209)  评论(0编辑  收藏  举报