Linux系统管道详细教程,重定向详细讲解,最全,最详细的Linux管道重定向 | grep等等,管道重定向的基础知识的详解

Linux管道和重定向

重定向

文件描述符

file descriptors (FD,文件描述符 或 Process I/O channels)

进程使用文件描述符来管理打开的文件

$$ 当前终端的pid

[root@localhost ~]# ls /proc/$$/fd

0 1 2 3 255

文件描述符 0 与 进程的标准输入(standard input)

文件描述符 1 与 标准输出(standard output)

文件描述符 2 与 标准错误(standard error)

e.g.

如何查看一个进程打开的文件描述符

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

root 1195 0.0 0.4 151204 4900 pts/1 S+ 22:39 0:00 vim a.txt

root 1214 0.0 0.0 112660 972 pts/0 S+ 22:47 0:00 grep --color=auto vim

[root@localhost ~]# ls -l /proc/1195/fd

total 0

lrwx------ 1 root root 64 Mar 5 22:48 0 -> /dev/pts/1

lrwx------ 1 root root 64 Mar 5 22:48 1 -> /dev/pts/1

lrwx------ 1 root root 64 Mar 5 22:43 2 -> /dev/pts/1

lrwx------ 1 root root 64 Mar 5 22:48 3 -> /root/.a.txt.swp

输出重定向 (覆盖,追加)

正确输出: 1> 1>> 等价于 > >>

错误输出: 2> 2>>

案例1:输出重定向(覆盖)

[root@localhost ~]# date 1> date.txt

案例2:输出重定向(追加)

[root@localhost ~]# date >> date.txt

案例3:错误输出重定向

[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt

ls: 无法访问/aaaaaaaaa: 没有那个文件或目录

[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt 2>error.txt //重定向到不同的位置

案例4: 正确和错误都输入到相同位置

[root@localhost ~]# ls /home/ /aaaaaaaaa &>list.txt //混合输出

案例5: 正确和错误都输入到相同位置

[root@localhost~]# ls /home/ /aaaaaaaaa >list.txt 2>&1 //重定向到相同的位置

案例6:重定向到空设备/dev/null

[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt 2>/dev/null //空设备,即将产生的输出丢掉

[root@localhost~]# ls /home/ /aaaaaaaaa &>/dev/null //空设备,即将产生的输出丢掉

案例7:脚本中使用重定向

[root@localhost ~]# vim ping1.sh

ping -c1 10.18.40.100

if [ $? -eq 0 ];then

echo "10.18.40.100 is up."

else

echo "10.18.40.100 is down!"

fi

[root@localhost ~]# vim ping1.sh

[root@localhost ~]# chmod +x ping1.sh

[root@localhost ~]# ./ping1.sh

添加执行权限的文件是可以使用./或者/去执行一个文件

不加执行权限可不可以执行文件(可以)但是,不能使用./或/ 要使用bash或者sh去执行这个文件

案例7:脚本中使用重定向

[root@localhost ~]# vim ping1.sh

ping -c1 10.18.40.100 &>/dev/null

if [ $? -eq 0 ];then

echo "10.18.40.100 is up."

else

echo "10.18.40.100 is down!"

fi

案例8:脚本中使用重定向

[root@localhost ~]# vim ping2.sh

ping -c1 10.18.40.100 &>/dev/null

if [ $? -eq 0 ];then

    echo "10.18.40.100 可以访问." >>up.txt

else

    echo "10.18.40.100 不可以访问" >>down.txt

fi

#!/bin/bash  解释器:解释这个脚本里面的内容

最终版脚本:

for i in {1..100}

do

       ping -c1 10.11.65.$i &>/dev/null

       if [ $? -eq 0 ];then

              echo "10.11.65.$i is up" >>up.txt

       else

              echo "10.11.65.$i is down" >>down.txt

       fi

done

标准输入:

<  0<

综合案例1:

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

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

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

mysql:

    mysql -u root -p123 farm < qqfarm.sql

    -u 用户名

    -p 密码

    farm 数据库中的一个库名

    qqfarm.sql 数据库文件

    将数据库文件qqfarm.sql导入到farm的库中.

综合案例2: 利用重定向建立多行的文件  脚本script创建多行文件

[root@localhost ~]# cat >>file200.txt <<EOF

111

222

333

yyy

ccc

EOF

管道

作用:

        实现进程间通信的手段之一

好处:

        Linux的程序小,功能单一,效率高,但是无法完成很复杂的任务,就需要借助于管道将多个进程组合起来

用法:

        command1 | command2 |command3 |...

[root@localhost ~]# ps aux |grep 'sshd'

[root@localhost ~]# rpm -qa |grep bash

sort对字段排序

[root@localhost ~]# sort -rn b.txt

9

7

6

5

3

2

1

-n 按数值,默认按字符排序

-r 逆序

uniq去重

[root@localhost ~]# uniq -c b.txt //统计重复的次数

1 5

1 6

1 7

1 9

1 1

1 2

1 3

1

awk打印指定的字段

例2:统计当前/etc/passwd中用户使用的shell类型

思路:取出第七列(shell) | 排序(把相同归类)| 去重

[root@localhost ~]# awk -F: '{print $7}' /etc/passwd

[root@localhost ~]# awk -F: '{print $7}' /etc/passwd |sort

[root@localhost ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq

[root@localhost ~]# awk -F: '{print $NF}' /etc/passwd |sort |uniq -c

-F: 指定字段分隔符,默认以空格或者是tab分隔

$7 第七个字段

$NF表示最后一个字段

$(NF-1)表示倒数第二个字段

NR

NR==2 第二行

NR==9 第九行

wc -l

计算文件里有多少行,返回的结果是数字

例如 cat /etc/passwd | wc -l

64

说明有64行,因为每个账户占一行,64行也就是代表有64个账户

三通定向tee

借助于三通管道可以实现将前一个进程的输出作为后一个进程的输入,也可以将前一个进程的输出结果重定向到一个文件中。

|tee file 覆盖

|tee -a file 追加

[root@xingdian ~]# ip a show eth0 |tee file1 |grep 'inet ' |tee file2 |awk -F"/" '{print $1}'

|tee file3 |awk '{print $2}' |tee file4

172.16.140.1

[root@xingdian ~]# cat file1

13: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN

link/ether 3c:97:0e:54:c3:57 brd ff:ff:ff:ff:ff:ff

inet 172.16.140.1/24 brd 172.16.140.255 scope global br0

inet6 fe80::3e97:eff:fe54:c357/64 scope link

valid_lft forever preferred_lft forever

[root@xingdian ~]# cat file2

inet 172.16.140.1/24 brd 172.16.140.255 scope global br0

[root@xingdian ~]# cat file3

inet 172.16.140.1

[root@xingdian ~]# cat file4

到这里,管道和重定向就讲完了,如果有疑问或者有建议,欢迎评论去留言,一起拯救世界

Linux进程管理--最全最详细的Linux进程基本操作,进程查看,进程筛选,进程kill,网络进程的基本操作ps aux ,ss,netstat等等_error1024的博客-CSDN博客

Linux修改root密码/忘记root密码如何操作?_error1024的博客-CSDN博客

Linux 系统--组管理(创建,修改,删除),用户提权操作_error1024的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值