当前位置: 首页 > news >正文

Linux shell编程学习笔记25:tty

1 tty的由来

在 1830 年代和 1840 年代,开发了称为电传打字机(teletypewriters)的机器,这些机器可以将发件人在键盘上输入的消息“沿着线路”发送在接收端并打印在纸上。

电传打字机的名称由teletypewriters, 缩短为teletypes,并最终缩短为 TTY。

电传打字机:teletypewriters →  teletypes → tty

在电子计算机问世后,电传打字机成为那个时代与大型小型计算机和大型计算机交互的默认方式,并在软件中模拟演变为伪电传打字机或虚拟电传打字机 (PTS:pseudo terminal device)。

在 Linux 和其他类 Unix 操作系统(如 macOS)的桌面环境中,终端窗口和应用程序(如 x-term 和 Konsole)都是虚拟电传打字机的示例。

2 linux中的tty

在Linux中,我们的终端窗口是电传打字机 (TTY) 的软件仿真,作为伪电传打字机 (PTS) 连接到伪电传打字机多路复用器。 

Linux的设备一般位于/dev目录下,我们可以使用命令

ls /dev/tty*

来查看系统中的tty设备。如:

csdn @ edu zsh $ ls /dev/tty*
/dev/tty
csdn @ edu zsh $ bash
[csdn ~]$ ls /dev/tty*
/dev/tty

 

 在csdn提供的Linux测试环境中,只有1个tty设备。

在实际的Linux系统中,可能存在多个tty设备,如:

 user @ host bash $ls /dev/tty*
/dev/tty    /dev/tty23  /dev/tty39  /dev/tty54    /dev/ttyAMA3  /dev/ttyS0
/dev/tty0   /dev/tty24  /dev/tty4   /dev/tty55    /dev/ttyp0    /dev/ttyS1
/dev/tty1   /dev/tty25  /dev/tty40  /dev/tty56    /dev/ttyp1    /dev/ttyS10
/dev/tty10  /dev/tty26  /dev/tty41  /dev/tty57    /dev/ttyp2    /dev/ttyS11
/dev/tty11  /dev/tty27  /dev/tty42  /dev/tty58    /dev/ttyp3    /dev/ttyS12
/dev/tty12  /dev/tty28  /dev/tty43  /dev/tty59    /dev/ttyp4    /dev/ttyS13
/dev/tty13  /dev/tty29  /dev/tty44  /dev/tty6     /dev/ttyp5    /dev/ttyS14
/dev/tty14  /dev/tty3   /dev/tty45  /dev/tty60    /dev/ttyp6    /dev/ttyS15
/dev/tty15  /dev/tty30  /dev/tty46  /dev/tty61    /dev/ttyp7    /dev/ttyS2
/dev/tty16  /dev/tty31  /dev/tty47  /dev/tty62    /dev/ttyp8    /dev/ttyS3
/dev/tty17  /dev/tty32  /dev/tty48  /dev/tty63    /dev/ttyp9    /dev/ttyS4
/dev/tty18  /dev/tty33  /dev/tty49  /dev/tty7     /dev/ttypa    /dev/ttyS5
/dev/tty19  /dev/tty34  /dev/tty5   /dev/tty8     /dev/ttypb    /dev/ttyS6
/dev/tty2   /dev/tty35  /dev/tty50  /dev/tty9     /dev/ttypc    /dev/ttyS7
/dev/tty20  /dev/tty36  /dev/tty51  /dev/ttyAMA0  /dev/ttypd    /dev/ttyS8
/dev/tty21  /dev/tty37  /dev/tty52  /dev/ttyAMA1  /dev/ttype    /dev/ttyS9
/dev/tty22  /dev/tty38  /dev/tty53  /dev/ttyAMA2  /dev/ttypf
user @ host bash $

2.1 tty命令的功能、格式和说明

tty 命令将打印您的伪电传从属设备用于连接到主设备的设备文件的名称。实际上,这就是您的终端窗口的编号。输入命令: tty --help可以查看tty命令的帮助信息,其中包括了命令格式和说明

user @ edu bash $ tty --help              
Usage: tty [OPTION]...
Print the file name of the terminal connected to standard input.

  -s, --silent, --quiet   print nothing, only return an exit status
      --help     display this help and exit
      --version  output version information and exit

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report tty translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils 'tty invocation'

 

2.1.1 命令格式

tty [-s][--help][--version]

2.1.2 参数说明

  • -s或--silent或--quiet                   不显示任何信息,只回传状态代码。
  • --help                                          在线帮助。
  • --version                                     显示版本信息。

 下面我们结合实例来看看tty命令。

2.2 tty命令的实例

2.2.1 tty不带参数:显示当前终端

csdn @ edu bash $ tty
/dev/pts/1

 在终端输入tty命令可以看到我们我们已连接到位于 /dev/pts/1 的设备文件。

2.2.2 tty -s 

-s(静默)选项让 tty 不生成任何输出。但它执行完成后,仍会产生一个退出值。

在bash中:

csdn @ edu bash $ tty -s; if [ $? ]; then echo $? ":is in a tty"; else echo  $? ":is not in a tty"; fi
0 :is in a tty

在zsh中:

csdn @ edu zsh $ tty -s; if [ $? ]; then; echo $? ":is in a tty"; else echo  $? ":is not in a tty"; fi
0 :is in a tty

可以看到,tty -s顺利执行后退出值为0。

其实tty命令的退出值还有可能是:

  • 0:如果标准输入来自 模拟的或物理的TTY 设备。
  • 1:如果标准输入不是来自 TTY 设备。
  • 2:语法错误,使用了不正确的命令行参数。
  • 3:发生写入错误。

所以,我们可以对上面的实例,使用 case in语句 做进一步的修改:

csdn @ edu zsh $ tty -s; case $? in; 0) echo 0-ok;; 1) echo 1-no tty;;  2) echo 2-bad cmd;; 3) echo 3-write error;; esac 
0-ok

 

相关文章:

Linux shell编程学习笔记25:tty

1 tty的由来 在 1830 年代和 1840 年代&#xff0c;开发了称为电传打字机&#xff08;teletypewriters&#xff09;的机器&#xff0c;这些机器可以将发件人在键盘上输入的消息“沿着线路”发送在接收端并打印在纸上。 电传打字机的名称由teletypewriters&#xff0c; 缩短为…...

AIGC大模型-初探

大语⾔模型技术链 1. ⾃然语⾔处理 2. 神经⽹络 3. ⾃注意⼒机制 4. Transformer 架构 5. 具体模型 - GPT6. 预训练&#xff0c;微调 7. ⼤模型应⽤ - LangChain 大语⾔模型有什么用&#xff1f; 利⽤⼤语⾔模型帮助我们理解⼈类的命令&#xff0c;从⽽处理⽂本分析…...

Postman for Mac(HTTP请求发送调试工具)v10.18.10官方版

Postman for mac是一个提供在MAC设备上功能强大的开发&#xff0c;监控和测试API的绝佳工具。非常适合开发人员去使用。此版本通过Interceptor添加了对请求捕获的支持&#xff0c;修正了使用上下文菜单操作未复制响应正文的问题和预请求脚本的垂直滚动条与自动完成下拉列表重叠…...

SpringBoot 项目优雅实现读写分离 | 京东云技术团队

一、读写分离介绍 当使用Spring Boot开发数据库应用时&#xff0c;读写分离是一种常见的优化策略。读写分离将读操作和写操作分别分配给不同的数据库实例&#xff0c;以提高系统的吞吐量和性能。 读写分离实现主要是通过动态数据源功能实现的&#xff0c;动态数据源是一种通过…...

企业如何利用好用户画像对客户进行精准营销?提高营销转化?

随着市场竞争的加剧&#xff0c;企业对于客户的需求和行为越来越关注&#xff0c;如何利用好用户画像对客户进行精准营销&#xff0c;提高营销转化&#xff0c;成为企业关注的焦点。 一、了解用户需求和行为 首先&#xff0c;企业需要了解客户的需求和行为&#xff0c;包括客户…...

acwing算法基础之搜索与图论--匈牙利算法求二分图的最大匹配数

目录 1 基础知识2 模板3 工程化 1 基础知识 二分图中的最大匹配数&#xff1a;从二分图中选择一些边&#xff08;这些边连接集合A和集合B&#xff0c;集合A中结点数目为n1&#xff0c;集合B中结点数目为n2&#xff09;&#xff0c;设为集合S&#xff0c;其中任意两条边不共用一…...

优化重复冗余代码的8种方式

文章目录 前言1、抽取公用方法2、抽工具类3、反射4、泛型5、继承与多态6、使用设计模式7、自定义注解(或者说AOP面向切面)8、函数式接口和Lambda表达式 前言 日常开发中&#xff0c;我们经常会遇到一些重复代码。大家都知道重复代码不好&#xff0c;它主要有这些缺点&#xff…...

DVWA - 3

文章目录 XSS&#xff08;Dom&#xff09;lowmediumhighimpossible XSS&#xff08;Dom&#xff09; XSS 主要基于JavaScript语言进行恶意攻击&#xff0c;常用于窃取 cookie&#xff0c;越权操作&#xff0c;传播病毒等。DOM全称为Document Object Model&#xff0c;即文档对…...

android studio离线tips

由于种种原因&#xff08;你懂的&#xff0c;导致我们使用android studio会有很多坑&#xff0c;这里记录一下遇到的问题以及解决方案 环境问题 无法下载gradle 因为android studio采用gradle作为构建工具&#xff0c;国内gradle没有镜像下载非常慢&#xff0c;并且大概率失…...

JWT概念(登录代码实现)

JWT (JSON Web Token)是一种开放标准&#xff0c;用于在网络应用程序之间安全地传输信息。JWT是一种基于JSON的轻量级令牌&#xff0c;包含了一些声明和签名&#xff0c;可以用于认证和授权。 JWT主要由三部分组成&#xff1a;头部、载荷和签名。 头部包含了使用的算法和类型…...

如何在 Windows 10/11 上高质量地将 WAV 转换为 MP3

WAV 几乎完全准确地存储了录音硬件所听到的内容&#xff0c;这使得它变得很大并占用了更多的存储空间。因此&#xff0c;WAV 格式在作为电子邮件附件发送、保存在便携式音频播放器上、通过蓝牙或互联网从一台设备传输到另一台设备等时可能无法正常工作。 如果您遇到 WAV 问题&…...

详解FreeRTOS:FreeRTOS消息队列(高级篇—1)

目录 1、队列简介 2、队列的运行机制 3、队列的阻塞机制 4、队列结构体 5、创建队列...

Vue3 + ts+ elementUi 实现后台数据渲染到下拉框选项中,滑动加载更多数据效果

前言 功能需求&#xff1a;下拉框中分页加载后端接口返回的人员数据&#xff0c;实现滑动加载更多数据效果&#xff0c;并且可以手动搜索定位数据&#xff0c;此项目使用Vue3 ts elementUi 实现 实现 把此分页滑动加载数据功能封装成vue中的hooks&#xff0c;文件命名为use…...

Elasticsearch 索引库操作与 Rest API 使用详解

1. 引入 Elasticsearch 依赖 在开始之前&#xff0c;确保你的 Maven 或 Gradle 项目中已经引入了 Elasticsearch 的 Java 客户端库。你可以使用以下 Maven 依赖&#xff1a; xml <dependency> <groupId>org.elasticsearch.client</groupId> <ar…...

线性代数(四)| 解方程 齐次性 非齐次性 扩充问题

文章目录 1 方程解的个数2 解方程步骤2.1 齐次性方程组2.2 非齐次方程组 3 一些扩充问题 系数矩阵 增广矩阵 A m n X B A_{mn}XB Amn​XB 1 方程解的个数 m 代表有m个方程 n代表有n个未知数 系数矩阵的秩与增广矩阵的秩不同 无解 若相同 &#xff0c;如系数矩阵的秩和未知…...

快乐数问题

编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1&#xff…...

8 历史服务器配置

为了查看程序的历史运行情况&#xff0c;需要配置一下历史服务器 1、配置mapred-site.xml vim mapred-site.xml在该文件里面增加如下配置 //原先的配置不用删除 <!-- 历史服务器端地址 --> <property><name>mapreduce.jobhistory.address</name><…...

读书笔记:《精益数据分析》

《精益数据分析 . Lean Analytics Use Data to Build a Better Startup Faster》 加 . 阿利斯泰尔 . 克罗尔 本杰明 . 尤科维奇 著&#xff0c;韩知白 王鹤达 译 2023.7.27 ~ 2023.11.4 本以为是本纯数学的、介绍公式的数据分析用法的书&#xff0c;结果是&#xff1a;…...

酷柚易汛ERP- 组装单与拆卸单操作

1、功能介绍 组装单用来处理企业组装等加工业务&#xff0c;拆卸单用来处理企业拆卸等加工业务&#xff0c;支持一对多的产品加工业务。 2、主要操作 2.1 新增组装单 打开【仓库】-【组装单】新增组装单。 录入组合件与子件&#xff0c;单据审核后&#xff0c;系统根据存货…...

yolov8训练

介绍 训练深度学习模型包括向其提供数据并调整其参数&#xff0c;以便其能够做出准确的预测。Ultralytics YOLOv8中的训练模式旨在充分利用现代硬件功能&#xff0c;对目标检测模型进行有效和高效的训练。本指南旨在涵盖使用YOLOv8强大的一组功能开始训练自己的模型所需的所有细…...

抖音短视频账号矩阵系统、短视频矩阵源码+无人直播源码开发可打包

抖音短视频账号矩阵系统、短视频矩阵源码无人直播源码开发可打包 矩阵系统源码主要有三种框架&#xff1a;Spring、Struts和Hibernate。Spring框架是一个全栈式的Java应用程序开发框架&#xff0c;提供了IOC容器、AOP、事务管理等功能。Struts框架是一个MVC架构的Web应用程序框…...

NI和EttusResearchUSRP设备之间的区别

NI和EttusResearchUSRP设备之间的区别 概述 USRP&#xff08;通用软件无线电外设&#xff09;设备是业界领先的商软件定义无线电&#xff08;SDR&#xff09;。全球数以千计的工程师使用USRPSDR来快速设计、原型设计和部署无线系统。它们以两个不同的品牌进行营销和销售&…...

WPF UI样式介绍

WPF&#xff08;Windows Presentation Foundation&#xff09;是微软的一个用于创建桌面客户端应用程序的UI框架。WPF使用XAML&#xff08;可扩展应用程序标记语言&#xff09;作为其界面设计语言&#xff0c;这使得开发者能够以声明性方式定义UI元素和布局。 在WPF中&#xf…...

【开源】基于Vue.js的校园失物招领管理系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系统公告模块2.4 感谢留言模块 三、界面展示3.1 登录注册3.2 招领模块3.3 寻物模块3.4 公告模块3.5 感谢留言模块3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 基于Vue…...

计算机视觉中目标检测的数据预处理

本文涵盖了在解决计算机视觉中的目标检测问题时&#xff0c;对图像数据执行的预处理步骤。 首先&#xff0c;让我们从计算机视觉中为目标检测选择正确的数据开始。在选择计算机视觉中的目标检测最佳图像时&#xff0c;您需要选择那些在训练强大且准确的模型方面提供最大价值的图…...

es 查询多个索引的文档

es 查询多个索引 第一种做法&#xff1a; 多个索引&#xff0c;用逗号隔开 GET /book_2020_09,book_2021_09/_search第二种做法&#xff1a; 可以用 * 模糊匹配。。比如 book* &#xff0c;表示查询所有 book开头的 索引。 GET /book*/_search GET /*book*/_search第二种做…...

用java把服务器某个目录日志实时打印出来

1.引入第三方包 <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version> </dependency>2.代码如下 import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import …...

金融信贷行业如何准确——大数据精准定位获客渠道

通过大数据精准获客&#xff0c;不仅可以及时拦截网址浏览量&#xff0c;还可以访问移动贷款应用软件的高频活跃客户和新注册客户。此外&#xff0c;通过大数据进行准确的客户获取&#xff0c;还可以获得电话座机号码的实时通信记录&#xff0c;捕捉小程序应用程序和关键词搜索…...

LeetCode 面试题 16.21. 交换和

文章目录 一、题目二、C# 题解 一、题目 给定两个整数数组&#xff0c;请交换一对数值&#xff08;每个数组中取一个数值&#xff09;&#xff0c;使得两个数组所有元素的和相等。 返回一个数组&#xff0c;第一个元素是第一个数组中要交换的元素&#xff0c;第二个元素是第二…...

未来之路:大模型技术在自动驾驶的应用与影响

本文深入分析了大模型技术在自动驾驶领域的应用和影响&#xff0c;万字长文&#xff0c;慢慢观看~ 文中首先概述了大模型技术的发展历程&#xff0c;自动驾驶模型的迭代路径&#xff0c;以及大模型在自动驾驶行业中的作用。接着&#xff0c;详细介绍了大模型的基本定义、基础功…...