Linux shell之重定向
文章目录
- 前言
- 一、输出重定向
- 二、输入重定向
- 三、重定向原理
- 总结
前言
我们有些时候想要将命令的输出保存起来,而不仅仅是让它输出到显示器上(终端上)。将命令的输出保存再文件中后方便分析输出的内容。重定向也可以是输出也可以是输入。
一、输出重定向
输出重定向:将命令的输出发送的一个文件中,终端输出的内容会被保存到输出文件中
bash shell : > 输出的内容会覆盖已有文件的内容
bash shell : >> 输出的内容追加到已有的文件中
覆盖重定向:
追加重定向:
二、输入重定向
输入重定向:将文件的内容重定向到命令中
bash shell : < 将文件的内容重定向命令中,作为命令的输入
bash shell : << 输入不需要文件进行重定向,只需要在命令行中指定用于输入重定向的数据即可
输入重定向:
wc命令用来对数据中的文本进行计数,默认情况下:
文本的行数 文本的单词个数 文本的字节数
内联输入重定向:
必须指定一个文本标记来划分输入数据的开始结尾。任何字符串都可以作为文本标记,单开始和结尾的文本标记必须一致
(1)以EOF作为文本标记
(2)以hi作为文本标记
三、重定向原理
来自于我的这篇文章:Linux fork 写时复制
分离fork和exec的做法在构建Linux shell的时候非常有用,这给了shell在fork之后exec之前运行代码的机会,这些代码可以在运行一个全新的程序前改变环境。
shell也是一个用户程序,它会显示一个提示符,等待用户的输入。
当我们向shell输入一个命令(一个可执行的程序)时,shell就在文件系统中找到这个可执行的程序,通过调用fork()创建新进程,并调用exec系列函数来执行这个可执行的程序,调用wait()等待该命令的完成。子进程执行结束后,shell从wait()返回并再次输出提示符,等待用户的下一条命令。
那么现在我们通过一个小例程来体会一下fork + exec组合分离的强大功能:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <string.h>int main()
{int ret = fork();if(ret == 0){//fork之后,exec执行之前,来改变一些子进程运行的环境//关闭 STDOUT_FILENO : 标准输出,对应的文件描述符为 1close(STDOUT_FILENO);//打开file.txt文件,这样 wc 的执行结果写入file.txt文件中open("./file.txt", O_CREAT | O_WRONLY | O_TRUNC , S_IRWXU);char *my_args[3];my_args[0] = strdup("wc");my_args[1] = strdup("fork_exec.c");my_args[2] = NULL;//执行exec函数,运行一个新shell程序:wc fork_exec.cexecvp(my_args[0], my_args);}else if(ret > 0){wait(NULL);}else{printf("fork error\n");return -1;}return 0;
}
从结果可以看出两者运行的结构一致:
wc用来统计指定文件的行数、字数,以及字节数。
shell重定向的原理:当shell调用fork完成子进程的创建后,shell在调用exec()之前先关闭了标准输出,
然后打开文件redirect.txt,这样shell命令wc 的输出结果就被发送到文件redirect.txt中,而不是输出给标准输出,打印在屏幕上。
总结
注意,不管是输出重定向还是输入重定向,命令总是在左边。重定向的符号指向数据的流动方向。
Linux shell之重定向相关推荐
- linux shell数据重定向(输入重定向与输出重定向)详细分析
转载自: linux shell数据重定向(输入重定向与输出重定向)详细分析 - 程默 - 博客园 http://www.cnblogs.com/chengmo/archive/2010/10/20/ ...
- linux脚本重定向到输入,linux shell输入输出重定向
新建一个文本文件包含所需要的脚本.举例,我会使用pico编辑器写一个脚本用来运行程序tar,带上必要的可选项可以用来解压从因特网下载下来的*.tar的文件(我好像总是记不住tar的所有参赛).我决定把 ...
- Linux Shell 文件描述符 及 stdin stdout stderr 重定向
Abstract: 1) Linux Shell 命令的标准输入.标准输出.标准错误,及其重定位: 2)Linux Shell 操作自定义文件描述符: 文件描述符是与文件相关联的一些整数,他们保持与已 ...
- 输出重定向Linux命令,Linux Shell重定向(输入输出重定向)精讲
Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向:从字面上理解,输入输出重定向就是「改变输入与输出的方向」的意思. 那么,什么是输入输出方向呢?标准的输入输出方向又是什么呢? ...
- Linux Shell重定向Linux管道
Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向:从字面上理解,输入输出重定向就是「改变输入与输出的方向」的意思. 标准的输入输出方向 输入方向就是数据从哪里流向程序.数据默认 ...
- linux shell重定向(输入输出重定向)讲解
文章目录 文件描述符 输出重定向 输入重定向 写在后面 linux shell的重定向是个什么东西呢,顾名思义就是重新定位方向,定位什么方向呢,那就是输入和输出的方向,也就是说linux shell的 ...
- Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)
1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...
- linux shell 脚本实现tcp/upd协议通讯(重定向应用)
前几天发了重定向以及管道相关使用方法,今天这里发些很有趣的例子.通过重定向实现基于tcp/udp协议的软件通讯. linux 设备里面有个比较特殊的文件: /dev/[tcp|upd]/host/po ...
- 如何理解Linux shell中的“2>1”(将文件描述2(标准错误输出)的内容重定向到文件描述符1(标准输出))(尼玛>符号竟然不支持搜索,害我搜搜不到,只能搜)
文章目录 前言 有何妙用 如何理解 总结 前言 有时候我们常看到类似这样的脚本调用: ./test.sh > log.txt 2>&1 这里的2>&1是什么意思?该如 ...
最新文章
- HAOI2011 Problem b
- 关于mysql engine(引擎)的疑问
- C#利用反射机制,获取实例的属性和属性值
- bpmn文件的标签为何都以bpmn2开头_C语言之两种作用域:函数的作用域与文件作用域...
- Java启动参数与内存调优一些学习笔记
- 最长公共子上升序列(信息学奥赛一本通-T1306)
- 【NLP】毕设学习笔记(一):词袋模型、主题模型、词嵌入
- The servlet name already exists.解决方法
- 麒麟ARM版:不能使用U盘安装,只能使用光盘
- 基础学习笔记之opencv(2):haartraining前将统一图片尺寸方法
- WPS文字的字数统计在哪?如何查看当前文档有多少个字?
- sqlplus 执行脚本经验总结
- 多想和你拉手跳恰恰恰
- 用cout输出uchar(unsigned char)变量时,没有输出结果怎么办?
- 迷你计算机主板,打造最强MINI主机 五款高规ITX主板推荐
- 火狐浏览器安装FoxyProxy代理插件
- 网络高清车载云台摄像机,白光云台摄像机激光云台摄像机
- 实验二 Python流程控制
- git解决merge branch
- python+django校园大学生兼职系统vue357
热门文章
- 大家知道苹果手机打电话时如何录音吗
- J-LinuxShell-W3
- Sum of Consecutive Prime Numbers
- java 物联网 云计算_为什么说不是云计算选择了物联网,而是物联网选择了云计算?...
- 年度特辑 | 2017 开源中国新增开源项目排行榜 TOP 100
- 逐行和隔行原理 去隔行原理 去隔行芯片
- 公众号+视频号+个人号的闭环运营将非常重要
- 倍思畅享系列Type-C转USB3.0 RJ45网口HUB转换器 极简设计非凡功能
- 什么是“独立站”,怎么建站?有哪些用处?
- 元宇宙001 | 情绪无法自控?元宇宙助你一臂之力