DJ8-1 shell 的启动和终止、重定向、管道

news2024/11/16 1:38:53

目录

8.1  shell 的启动和终止

8.2  输入输出重定向

8.2.0  标准输入输出

8.2.1  输出重定向 >

8.2.2  输入重定向 <

8.2.3  常见输入输出重定向形式

8.2.4  标准错误输出重定向

8.3  管道


Linux 系统中的 shell 具有两大功能:

  • 是一个命令解释器:解释用户发出的各种操作系统命令
  • 是一种程序设计语言:功能强大,可包容引用所有的操作系统命令和可执行程序

8.1  shell 的启动和终止

1、shell 的启动

当系统启动时,OS 的核心程序 init 自动为每一个终端建立一个名为 getty 的进程。getty 进程在终端屏幕上显示:

login:    # 提示输入用户名
passwd:   # 提示输入密码

系统接收密码并与 /etc/passwd 文件中用户相关信息相比较,如果一致,则进入系统。系统根据 /etc/passwd 文件中的相关参数给该用户启动一个指定类型的 shell 进程,专门用于解释执行该用户发出的各种命令。

/etc/passwd

至此,终端屏幕上显示 “$”,表明 shell 已经启动完毕,等待用户的输入:

$

2、shell 的终止

当用户发出 exit 或 logout 命令时,shell 程序终止运行,该用户退出系统:

$ exit

系统将再次为该终端建立一个 getty 进程,等待用户的下一次登录。

 

8.2  输入输出重定向

如果一个进程在运行时需要输入输出数据,在缺省状况下是:

  • 从标准输入上读入数据
  • 向标准输出上输出结果

利用 shell 的重定向操作符,可以把进程的输入输出数据重新定向到任意其它文件。

8.2.0  标准输入输出

在 shell 程序中,最常使用的文件描述符 FD(file descriptor)有三个,分别是:

fd = 0    标准输入stdin:键盘
fd = 1    标准输出stdout:荧光屏
fd = 2    标准错误输出stderr:荧光屏

默认情况举例

$ cat file  运行结果(file的内容)送到标准输出荧光屏

$ passwd  所需数据(新老口令)从标准输入键盘读入

$ ls -Y abc  我们故意写了一个错误选项-Y
ls: invalid option –Y  错误信息送到标准错误输出(荧光屏)上显示

重定向举例

  • 重定向不写任何数字时默认为 "1",因此 "1>" 可以省略为 ">"
  • "2" 在使用时需要特别写明,不然就会被认为是 "1"
  • "&>" 是 "1&2>" 的缩写,其实 "&" 可以理解为且
  • "1" 是指标准输出,"&1" 是指标准输出的地址
1> &2 把标准输出重定向到标准错误
2> &1 把标准错误输出重定向到标准输出
&> filename 把标准输出和标准错误输出都重定向到文件filename中

& 是一个描述符。如果没有 "&",系统会误认为 "> 1" 后面的 "1" 是一个文件名,当找不到这个名称为 "1" 的文件时就会新建一个名称为 "1" 的文件。

8.2.1  输出重定向 >

1、语法格式

进程输出覆盖文件 filename:

command > filename

进程输出追加到文件 filename 后面,不覆盖 filename:

command >> filename 

注意:> 或 >> 的前后必须保留一个空格,command 和 filename 是根据你的实际情况填写的。

例如:默认情况下使用 cat 命令,将会把文件 myfile 的内容输出到标准输出文件荧光屏上:

$ cat myfile  

现在使用重定向,把文件 myfile 的内容输出到文件 newfile 中,标准输出已被重新定向到 newfile,其结果相当于拷贝文件 myfile 到文件 newfile:

$ cat myfile > newfile

或者把文件 myfile 的内容添加到文件 newfile 已有内容的后面,而不是覆盖 newfile:

$ cat myfile >> newfile

2、应用举例

① 按字母顺序显示当前系统中所有已登录的用户

依次输入以下命令,除了 $ 和汉字说明:

$ who > temp1          把当前登录用户的名单保存在temp1中
$ sort temp1 > temp2   把排序后的名单保存在temp2中
$ more temp2           逐屏显示排好序的用户名单
$ rm temp1 temp2       删除不用的临时文件
  • who:查询当前登录用户的名单
  • sort:输出时对文件内容进行排序,并不会改变文件内容
  • more:逐屏显示文件内容,敲一下回车才会换页
  • cat:直接显示文件全部内容,通过滚轮滑动查看
  • rm:删除文件


 

② 记录长时间运行程序的日志

将运行中的信息追加到文件 run_log 中,便于随时查询:

$ system_monitor >> run_log

8.2.2  输入重定向 <

进程的输入来自文件 filename,可记忆成 command ← filename:

command < filename

例如:把输入内容——文件 ive 内容——送到标准输出荧光屏:

$ cat < ive

I have ive.
I've ive.
minive

效果等价于查看文件 ive 内容:

$ cat ive

例如:若 cat 命令后无文件名,则 cat 会等待键盘输入:

$ cat

abcde  键盘输入内容
abcde  cat进程输出内容

this is a test line  键盘输入内容
this is a test line  cat进程输出内容

效果就是你输入什么它输出什么。

8.2.3  常见输入输出重定向形式

8.2.4  标准错误输出重定向

进程运行中的错误信息重定向到文件 filename:

command 2> filename

注意:2 和 > 之间没有空格。

例如:在编译过程中如果出现 core.c 不存在或不能读,以及 core_prt 没有写权限等错误,则把错误信息保存在文件 err.log 中:

$ gcc -o core_prt core.c 2> err.log

把连接后的 file1 和 file2 输出到 file3 中。如果该命令在运行过程中出现错误,则把错误信息输出到文件 errfile 中:

$ cat file1 file2 > file3 2> errfile

本例中 grep 命令的标准输出被重定向到了 count_log 文件,而标准错误输出又被重定向到了标准输出,因此无论是正常输出还是错误信息都会被送到 count_log:

$ grep string6 data_sav > count_log 2> &1

事实上,“&1” 表示标准输出的地址,而不是标准输出

8.3  管道

1、语法格式

管道用于连接两个命令,它把前一个命令的标准输出重定向给后一个命令作为标准输入:

  • 对 command1 来说,其标准输出被重定向到管道
  • 对 command2 来说,其标准输入也被重定向到管道

❤ 管道的使用格式为:

command1 | command2

可以把前面举的例子:

$ who > temp1          把当前登录用户的名单保存在temp1中
$ sort temp1 > temp2   把排序后的名单保存在temp2中
$ more temp2           逐屏显示排好序的用户名单
$ rm temp1 temp2       删除不用的临时文件

化简为如下形式,即 who 的输出作为 sort 的输入,sort 的输出作为 more 的输入:

$ who | sort | more

这样就省去了两个中间文件。

2、应用举例

查看系统当前有几个用户在上机使用系统:

$ who | wc –l
  • wc (Word Count):统计指定文件中的字节数、字数、行数,并将统计结果显示输出
  • -l,--lines:统计行数

把文件 myfile 按标准打印格式处理后,送到打印机打印出来,原文件 myfile 并未作任何修改:

$ pr myfile | lp

在包含所有用户名单的文件 user_list 中,查找包含 student 的行,并把结果排序后输出到文件 stu_list 中,此例为管道和输出重定向的混合使用:

$ grep student user_list | sort > stu_list
  • grep [options] [pattern] filename
  • 功能:对目标文本逐行进行匹配检查,打印匹配到的行
  • -i:忽略字符的大小写
  • -o:仅显示匹配到的字符串本身

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

express框架学习笔记

express简介 express是一个基于Node.js平台的极简的、灵活的WEB应用开发框架。express是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发WEB应用&#xff08;HTTP服务&#xff09; express使用 新建express文件夹新建文件test01.js&#xff0c;代码如…

特征点Features2D类介绍

文章目录 Features2D类介绍1. cv::AgastFeatureDetector2. cv::AKAZE3. cv::BRISK4. cv::FastFeatureDetector5. cv::GFTTDetector6. cv::KAZE7. cv::MSER8. cv::SimpleBlobDetector9. cv::StarDetector10. cv::SIFT11. cv::SURF12. cv::FastFeatureDetector13. cv::AgastFeatu…

leetcode2385. 感染二叉树需要的总时间(java)

感染二叉树需要的总时间 感染二叉树需要的总时间递归 dfs代码演示 二叉树专题 感染二叉树需要的总时间 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/amount-of-time-for-binary-tree-to-be-infected 给你一棵二叉树的…

每日一练 | 华为认证真题练习Day60

1、启用GRE的keepalive功能后&#xff0c;GRE隧道的本端会周期性的每10s向对端发送一次keepalive报文。 A. 对 B. 错 2、AAA协议是RADIUS协议。 A. 对 B. 错 3、路由器Radius信息配置如下&#xff1a;下列说法正确的有&#xff1f;&#xff08;多选&#xff09; A. 计费服务…

[Spring Cloud]:学习笔记·(一)

文章目录 摘要1 认识微服务1.1 单体架构与分布式架构1.2 分布式架构与微服务1.3 微服务架构 摘要 摘要&#xff1a;分布式&#xff1b;微服务&#xff1b;springcloud 1 认识微服务 1.1 单体架构与分布式架构 架构方式解释优点缺点单体架构将业务所有功能集中在一个项目中开…

java从入门到起飞(二)——运算符

目录 前提——运算符概念算数运算符注意事项&#xff1a;字符的“”操作字符串的“”操作 赋值运算符注意事项&#xff1a; 自增自减运算符注意事项&#xff1a; 关系运算符注意事项&#xff1a; 逻辑运算符短路逻辑运算符注意事项&#xff1a; 三元运算符计算规则&#xff1a;…

OpenCV Mat类

文章目录 Mat类Mat类数据类型读取Mat类支持的运算OpenCV Mat数据类型指针ptr的使用多维矩阵创建 Mat类 Mat类数据类型读取 S 有符号整型 U 无符号整型 F 浮点型CV_8U - 8位无符号整数&#xff08;0…255&#xff09;CV_8S - 8位有符号整数&#xff08;-128…127&#xff…

Python基础(1)——Python简介

Python基础&#xff08;1&#xff09;——Python简介 文章目录 Python基础&#xff08;1&#xff09;——Python简介目标Python介绍Python版本总结 目标 了解PythonPython的应用领域Python的版本 Python介绍 Python是时下最流行、最火爆的编程语言之一&#xff0c;具体原因如…

SAP从入门到放弃系列之BOM组-Part1

目录 BOM组两种模式&#xff1a; 创建BOM的方式 方式一&#xff1a;直接在每个工厂分别创建BOM。 方式二&#xff1a;创建BOM组&#xff0c;然后每个工厂参考创建 方式三&#xff1a;创建BOM组&#xff0c;每个工厂参考创建&#xff0c;针对有特殊的工厂复制BOM组后进行调…

人机交互学习-9 以用户为中心的设计

以用户为中心的设计 以用户为中心的设计思想工程设计过程的三个假设以人为本设计思想三个方面的假设以用户为中心的设计四原则UDC项目包含的方法 用户参与设计用户参与的重要性选择哪些用户&#xff1f;为什么要让用户参与&#xff1f; 用户参与的形式参与式设计PICTIVECARD 理…

Nacos-手写注册中心基本原理

本文已收录于专栏 《中间件合集》 目录 概念说明需求分析核心功能代码实现AService模块BService模块NacosService模块NacosSDK模块 注意事项总结提升 概念说明 注册中心是微服务架构中的纽带&#xff0c;类似于“通讯录”&#xff0c;它记录了服务和服务地址的映射关系。在分布…

香蕉派(Banana Pi) BPI-M2 Zero 评测试,与树莓派 Zero同尺寸的开发板

Banana Pi M2 Zero 是一款微型计算机&#xff0c;配备四核处理器并内置 Wi-Fi 和蓝牙。这是一款非常适合基本计算任务甚至轻度游戏的小型设备。在这篇评论中&#xff0c;我们将了解 M2 Zero 的性能、功能和价值。 什么是 Banana Pi BPI-M2 Zero Banana Pi M2 Zero 是由深圳公…

MongoDB(Windows版)安装

首先需要下载 官网&#xff1a;MongoDB: The Developer Data Platform | MongoDB 安装过程 需要安装的版本 第一步&#xff1a;安装时&#xff0c;Custom是指可以自定义安装路径&#xff0c;然后傻瓜式安装即可&#xff08;注意&#xff1a;先不要安装图形化工具&#xff0…

2023-06-17 LeetCode每日一题(分割圆的最少切割次数)

2023-06-17每日一题 一、题目编号 2481. 分割圆的最少切割次数二、题目链接 点击跳转到题目位置 三、题目描述 圆内一个 有效切割 &#xff0c;符合以下二者之一&#xff1a; 该切割是两个端点在圆上的线段&#xff0c;且该线段经过圆心。该切割是一端在圆心另一端在圆上…

【Vue】学习笔记-Vue Router activated deactivated 路由守卫

Vue Router activated deactivated 路由守卫 activated deactivated路由守卫1.全局守卫2.独享守卫3.组件内守卫全局路由守卫路由器的两种工作模式 activated deactivated activated 和 deactivated 是路由组件所独有的两个钩子&#xff0c;用于捕获路由组件的激活状态 具体使用…

管理类联考——英语——趣味篇——阅读——考题的来源

Part One考研英语阅读——Part A 1.卫报 《卫报》( The Guardian)是英国的全国性综合内容日报。与《泰晤士报》、《每日电讯报》被合称为英国三大报。由约翰爱德华容泰勒创办于1821年5月5日。该报注重报道国际新闻&#xff0c;擅长发表评论和分析性专题文章。一般公众视《卫报…

【数据分析之道-Matplotlib(九)】Matplotlib棉棒图

文章目录 专栏导读1、Matplotlib棉棒图stem()基本语法2、Matplotlib棉棒图stem()定义样式2.1linefmt参数2.2markerfmt参数2.3举例一&#xff1a;直线样式2.4举例二&#xff1a;圆点样式 3、棉棒图案例实战3.1绘制每月销量的棉棒图3.2绘制每月销量与平均销量之差 专栏导读 ✍ 作…

Prometheus介绍安装和快速入门

Prometheus介绍安装和快速入门 1、Prometheus介绍 1.1 什么是 Prometheus? Prometheus&#xff08;普罗米修斯&#xff09;是古希腊的一个神明&#xff0c;名字的意思是「先见之明」。从它的名字可以看出&#xff0c; Prometheus 是做「先见之明」的监控告警用途。维基百科…

HJ26 字符串排序

题目&#xff1a; HJ26 字符串排序 题解&#xff1a; 规则 1 &#xff1a;英文字母从 A 到 Z 排列&#xff0c;不区分大小写。 统一转换&#xff0c;通过减去对应字母的起始值&#xff0c;得到一个相对值&#xff0c;抹平大小写&#xff0c;例如&#xff1a;B - A&#xff…

【Java项目】使用LruCache提高DSP广告主需求方 (Demand Side Platform)系统性能

文章目录 背景LruCache简介LruCache在DSP系统中的应用场景LruCacheRedis增加LruCache数据过期清除机制ConcurrentHashMapLruCache零拷贝机制 源码 背景 我之前工作的一家公司是一家传媒公司&#xff0c;公司的主要盈利方式为在公司项目中接入广告&#xff0c;以及自媒体广告宣…