热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux学习笔记之八(重定向下和匿名进程管道)

接七。给出上一讲没有给出的一个例子。上一讲讲的其实是输出重定向。今天我们来学习输入重定向。输入重定向上一讲已经说过procpidfd里面的0这个文件描述符对应的是标准输入&#x

接七。给出上一讲没有给出的一个例子。

上一讲讲的其实是输出重定向。今天我们来学习输入重定向。

输入重定向

上一讲已经说过/proc/pid/fd里面的0这个文件描述符对应的是标准输入&#xff0c;>或者1>是正确的输出&#xff0c;2>是错误信息&#xff0c;当然还有其它方式&#xff0c;上一讲里都有&#xff0c;0<&#xff0c;或者简写为<&#xff0c;就是输出的重定向符号&#xff0c;下面是一些例子。

第一个是发邮件的例子&#xff0c;需要先安装sendmai软件包和mailx。yum -y install sendmail mailx 即可。这里我试了一下&#xff0c;还必须要改/etc/hosts。在自己虚拟机的ip哪一行加一个主机名字加.com就可以了。效果如下&#xff1a;

下面才是我们重定向的重点。如何给一个用户发邮件呢&#xff1f;

mail 用户名就可以发给它邮件了&#xff0c;回车输入主题&#xff0c;再回车输入内容&#xff0c;怎么结束呢&#xff1f;另起一行&#xff0c;在行头打.回车就会自动出现EOT&#xff0c;就停止了。然后我们mail可以查看邮件,不加-u指定用户的话是看lcl用户的邮件&#xff08;当然你还要有权限看&#xff09;

root用户下mail -u root就可以看到刚才发给它的邮件了。左侧有一个邮件编号。在&后输入编号回车可以查看某一编号的邮件&#xff0c;输入q退出。上面这种是没有用到重定向的方式。

下面看一看重定向的方式&#xff1a;

重定向指定的是邮件的内容&#xff0c;主题得自己用-s指定了&#xff0c;后面必须加引号的。当然主题是可以为空的&#xff0c;如果你用了重定向而没有指定-s&#xff0c;那么主题就是空的。


案例2还是来看一下&#xff1a;

cat如果你不给文件路径就按回车&#xff0c;效果就是输入时默认从键盘输入&#xff0c;然后呢&#xff0c;你输什么回车它会重复打出来什么&#xff0c;grep呢&#xff0c;是你输入一行回车就过滤一行。给文件路径就可以有两种方式了&#xff0c;一种是作为参数&#xff0c;也就是不加<&#xff0c;一种是用输入重定向,这两种方法的不同就在于参数的个数不一样&#xff0c;效果是一样的&#xff0c;不过显然完全可以不加<&#xff0c;这里只是举例子而已&#xff0c;而且我试了一下重定向的参数按esc.也可以得到。

11.txt是通过输入重定向的方式作为cat的输入的&#xff0c;但是esc.也可以直接调出来。

案例三还是有点意思的&#xff0c;先来看dd命令。

只需要能看懂案例里的命令就可以了&#xff0c;不需要去细究。

再来看什么叫做/dev/zero文件。参考了https://blog.csdn.net/pi9nc/article/details/18257593

这个命令还是有点意思的&#xff0c;下面就会看到。

我们用df来看一下我们给的磁盘大小。

当时给的是50个G,上面加起来差不多。

但是呢&#xff0c;我们却能看到几百PB大小的文件。

当然这是假的&#xff0c;我们用了seek跳过了很多个块&#xff08;block&#xff09;&#xff0c;file1.txt的真实大小只有1M&#xff0c;我们今天学习的重点不在于此&#xff0c;只是看一下。另外我们还看到dd可以测试磁盘的读写速度&#xff0c;804M/s。当然也可以用重定向来导入。

/dev/zero的特点就是无限输出0,如果不加count参数的节制的话&#xff0c;输出的文件大小会一直增加&#xff0c;直到把对应的分区占满&#xff0c;不加seek是很真实的&#xff0c;上面就是产生了一个1.5G的里面全是null的文件。


案例4由于需要MYSQL数据库基础&#xff0c;这讲我们学习的重点是输入重定向&#xff0c;就跳过了&#xff0c;想看的请到

https://www.bilibili.com/video/av18740388/?p&#61;19&#xff0c;从第15分开始。

这里只是说明输入重定向还是很有用的。


用这个命令首先要yum -y install at。参考了

https://blog.csdn.net/gxiaop/article/details/55101020

需要先启动atd的。启动的方式变了&#xff0c;开机自启的命令也变了。

不是打上去的&#xff0c;是按^D自动就有的。

说起来有点奇怪&#xff0c;不知道什么时候主机名又变成localhost了。enmmmm。这个是我自己的虚拟机啊 &#xff0c;&#xff0c;原因还真不太清楚&#xff0c;不管了。

又三行的原因是回车并不是输入结束符&#xff0c;^d才是正常的输入结束符。

如果^c强制退出的话&#xff0c;只会把^c的上一行写入文件。

。可以用echo输入多行吗&#xff0c;可以&#xff0c;需要-e来解释转义字符。

但是需要引号把转义字符括起来。

还有其它转义字符比如\t&#xff0c;一个tab键也可以这么输出。

这里涉及到了脚本&#xff0c;脚本其实也好理解的&#xff0c;命令是你输一行执行一行&#xff0c;但是脚本就可以批量执行多行&#xff0c;当然执行还是一行一行来&#xff0c;但是输入只有一次&#xff0c;也不需要等一行命令执行完才可以输入下一个&#xff0c;提高了效率&#xff0c;就像在IDLE里只能一次执行一段for,但是在python脚本里面可以一次写入多个同等级的for语句&#xff0c;MATAB也是一样。脚本里面是没有人机交互的&#xff0c;那么以ctrl&#43;d作为结束符的话就不太现实&#xff0c;这时候需要用<<来定义结束符&#xff0c;上面例子已经很好的说明了这一点。

后面还会学习脚本&#xff0c;这里先见一下&#xff0c;.sh是shell脚本的后缀&#xff0c;就像python后缀是py,c&#43;&#43;后缀是cpp&#xff0c;matlab有m文件s文件。

再补充一点&#xff1a;

有的时候我们写代码需要缩进&#xff0c;对python来说更为重要。vim里怎么缩进可以参看。

https://jingyan.baidu.com/article/1612d5008ea0b8e20e1eee81.html

就是进入可视模式然后配合<或者>&#xff0c;也挺简单的。

但是<<后面定义的结束符必须顶头&#xff0c;不顶头就会报错&#xff0c;而且颜色也不是棕色的&#xff0c;那么这个时候我们可以在<<后面加-&#xff0c;这个时候结束符可以不顶头&#xff0c;但是必须是tab键&#xff0c;一般我们缩进也都是tab&#xff0c;而不是空格。

空格我试过了&#xff0c;确实不行&#xff0c;虽然eof还是棕黄色&#xff0c;但是确实会报错。

上面这个主要还是打印这个东西&#xff0c;用脚本的方式打印到终端。

有人可能会说这么麻烦有必要吗&#xff1f;当然必须要这样&#xff0c;在没有人机交互的情况下&#xff0c;计算机自动执行任务的时候必须用脚本。

综合案例4主要是为了说明多条命令输出重定向的方法。必须是小括号&#xff0c;其它的都不行。


其实这个;蛮好理解的&#xff0c;在c语言&#xff0c;MATLAB里也都是命令分隔符也就是一行可以写多个命令&#xff0c;不过c语言每段代码一个&#xff1b;是必须的&#xff0c;不然会报错,MATLAB不加&#xff1b;会直接输出&#xff0c;那样会很麻烦&#xff0c;数据多的时候你会看到命令窗口疯狂运动。

这里先补充学习一下终端的一些基本概念。参考了

https://blog.csdn.net/lcr_happy/article/details/59484514

/dev/ptmx是确实有的&#xff0c;是一个设备文件。

也就是说我们远程连接的时候用的都是伪终端。用tty可以查看当前终端&#xff0c;用w可以查看所有的终端&#xff0c;用pkill  9 -t pts/n可以终止终端&#xff0c;我们在虚拟机最小化安装的没有图形界面的里面的终端是tty&#xff0c;当然你需要登陆才行。

我是没有安装图形界面&#xff0c;如果你安装了图形界面的话可能会出现一个:0&#xff0c;这个是UI界面的终端号,gdm-sessio是UI界面。

我们了解到这里就可以了&#xff0c;我们远程连接的话都会给我们分配一个终端&#xff0c;当然可以用vnc连接图形界面的&#xff0c;我们没有UI的话就是pts/n。

匿名进程管道

进程管道其实也很简单&#xff0c;就是一个进程的输出作为另一个进程的输入&#xff0c;标准输入也就是1&#xff0c;左边进程的输出会作为右边进程的输入&#xff0c;中间的|就是一个匿名的管道。来看一下简单的效果。

如果直接ll /dev的话是很不人性化的&#xff0c;因为直接给你跳到了最后&#xff0c;后面加一个less就可以分页查看。

如果有错的话也是会显示的。


并且我们看到其实进程管道也是一种重定向&#xff0c;不过输出的方向对象不是文件而是进程的输入。

我们看到less的输入是一个管道pipe文件&#xff0c;这个文件是linux自动给你创建的。下面来看一下左边进程的文件描述符1,2会怎么样。

看到只有1重定向到了一个管道文件里面去了&#xff0c;说明和图上写的一样&#xff0c;是把标准输出也就是1重定向了&#xff0c;并且和less的fd里0对应的都是pipe22418&#xff0c;当然这种重定向也是一次性的。


上面还是一些例子&#xff0c;grep后面呢这个匹配的表达式暂时来说加不加引号没什么区别&#xff0c;不过最好加上去&#xff0c;后面会说为什么。

grep后面是可以用正则表达式的&#xff0c;^l就是以l开头的行。rpm那么命令就是查看已经装的软件包。而yum list是查看这个源里的软件&#xff0c;这些软件你不一定下载了&#xff0c;有&#64;的都是下载了的。

这里先来学习sort的用法&#xff0c;sort其实也比较简单&#xff0c;默认是一个一个字符去比较来进行排序的&#xff0c;什么意思呢&#xff1f;

看到排序的时候1后面就是11&#xff0c;这是因为先按第一个字符排的话1的ascii码没有2大。

如果想按数值排序的话就需要加一个-n。

我们回来看案例1&#xff1a;

先看一下/etc/passwd。看到以冒号分割的话&#xff0c;第三行列是uid&#xff0c;第四列是gid&#xff0c;第7列是所用的shell。

就按照上面的命令来打一下&#xff0c;上面解释的很清楚&#xff0c;还是很好理解的&#xff0c;因为/etc/passwd和多行&#xff0c;我们就用head看一下前10行。

再逆序看一下&#xff1a;

分隔符默认是空格或者tab键。


并且呢&#xff0c;sort是不会改变原来文件的内容&#xff0c;只是对文件内容排序然后输出而已。

也许你会用重定向改变源文件&#xff0c;但是不行&#xff0c;因为这样做的结果是清空了源文件&#xff0c;但是可以输出到其它文件时没有问题的。

看到对3排序的结果可以输出到4里去&#xff0c;但是sort 3>3后发现3被清空了&#xff0c;而grep命令是会报错的&#xff0c;4不能同时作为输入和输出。


案例2的这行代码我们前面也见过&#xff0c;--sort和sort命令不同&#xff0c;--sort是ps的一个选项。

当然用sort也可以完成一样的功能,--sort&#61;-%mem就是按照内存占用降序排序。head -6的原因是表头占了一行&#xff0c;不过发现用|sort的时候应该是-5&#xff0c;因为那个标题行没有了。并且其实 | 前面都可以不加空格的。

案例3用到了awk和uniq&#xff0c;awk是一个比较厉害的命令&#xff0c;不过这里用到的是很简单的功能了。参考了

https://www.cnblogs.com/xudong-bupt/p/3721210.html

字段就是分隔符之间的字符而已。

还有一个uniq&#xff0c;这个命令是去重的&#xff0c;不过必须是相邻的才行。

什么叫必须是相邻的呢&#xff1f;就是必须是相邻行才可以合并在一起的&#xff0c;那么这就得先排序一下了。

看一下效果&#xff1a;


案例5的话&#xff0c;先把有ip的行过滤出来&#xff0c;发现都有inet&#xff0c;就用这个过滤&#xff0c;但是发现inet6不是我们想要的行&#xff0c;怎么办呢&#xff0c;在匹配表达式后面加一个空格就可以。

这里就体现了引号的用处&#xff0c;如果不加引号&#xff0c;你在后面加空格也没用&#xff0c;因为根本就看不出来。

后面都是过滤ip的操作&#xff0c;后面那个/后面的数字是1的个数&#xff0c;其实就是掩码中1的个数&#xff0c;一个ip一共是有32位二进制数,最后把这个去掉就可以了。

案例6的话&#xff0c;应该看懂是不难的。

因为只需要根目录&#xff0c;所以用/$去匹配。


推荐阅读
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 基于 Bottle 框架构建的幽默应用 —— Python 实践 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • 利用Apache构建高效稳定的Web服务器环境
    本文详细介绍了如何利用Apache构建高效稳定的Web服务器环境。首先,概述了Apache服务器的基本概念及其安装步骤,并深入探讨了相关配置文件的设置方法。接着,通过具体的实验环境示例,展示了服务端(域名:zhangpp63.cn,IP地址:192.168.1.63)和客户端的配置过程,确保读者能够全面理解并实际应用这些技术。此外,还提供了一些优化建议,以提高服务器的性能和稳定性。 ... [详细]
  • 在 Windows 10 系统下配置 Python 3 和 OpenCV 3 的环境时,建议使用 Anaconda 分发版以简化安装过程。Anaconda 可以从其官方网站(https://www.anaconda.com/download)下载。此外,本文还推荐了几本关于 Python 和 OpenCV 的专业书籍,帮助读者深入理解和应用相关技术。 ... [详细]
  • 在使用 `requests` 库进行 HTTP 请求时,如果遇到 `requests.exceptions.SSLError: HTTPSConnectionPool` 错误,通常是因为 SSL 证书验证失败。解决这一问题的方法包括:检查目标网站的 SSL 证书是否有效、更新本地的 CA 证书库、禁用 SSL 验证(不推荐用于生产环境)或使用自定义的 SSL 上下文。此外,确保 `requests` 库和相关依赖项已更新到最新版本,以避免潜在的安全漏洞。 ... [详细]
  • 本文详细解析了高性能通信库 NanoMsg 的框架及其应用场景。其中,BUS模式支持多对多的简单通信方式,消息会传递给所有直接连接的节点。REQREP模式则适用于构建无状态的服务集群,用于处理用户的请求,每个请求都需要一个相应的响应。 ... [详细]
  • 在Windows环境下离线安装PyTorch GPU版时,首先需确认系统配置,例如本文作者使用的是Win8、CUDA 8.0和Python 3.6.5。用户应根据自身Python和CUDA版本,在PyTorch官网查找并下载相应的.whl文件。此外,建议检查系统环境变量设置,确保CUDA路径正确配置,以避免安装过程中可能出现的兼容性问题。 ... [详细]
  • 本文提供了在Windows系统上部署和启动MySQL免安装版本的详细步骤。首先,从MySQL官方网站下载社区版免安装包(https://dev.mysql.com/downloads/mysql/8.0.html),将其解压至指定目录,例如D:\tools\mysql。接着,配置系统环境变量,确保MySQL命令行工具可以在任意路径下使用。此外,还需创建并配置my.ini文件以设置MySQL的基本参数,确保数据库服务能够顺利启动和运行。 ... [详细]
  • 如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目
    本文详细介绍了如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目,涵盖了项目创建、配置及常见问题的解决方案。通过本指南,开发者可以快速掌握在 IntelliJ IDEA 中进行 Spring Boot 开发的最佳实践,提高开发效率。 ... [详细]
  • PyTorch 使用问题:解决导入 torch 后 torch.cuda.is_available() 返回 False 的方法
    在配置 PyTorch 时,遇到 `torch.cuda.is_available()` 返回 `False` 的问题。本文总结了多种解决方案,并分享了个人在 PyCharm、Python 和 Anaconda3 环境下成功配置 CUDA 的经验,以帮助读者避免常见错误并顺利使用 GPU 加速。 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 在Linux环境下,本文详细探讨了Apache服务器中CGI技术的应用与实现。首先,通过使用yum包管理器安装了必要的软件,如PHP。安装完成后,对Apache服务器进行了配置,确保CGI功能正常运行。此外,还介绍了如何编写和调试CGI脚本,以及如何在实际环境中部署这些脚本以提供动态网页内容。实验结果表明,通过合理的配置和优化,Apache服务器能够高效地支持CGI应用程序,为用户提供丰富的交互体验。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
author-avatar
mobiledu2502884523
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有