Linux如何更改Mac电脑上的设置(linux修改mac)

Mac电脑上的设置 如果你想要使用Linux系统,并且想要更改Mac电脑上的设置,下面我将为你介绍一下如何使用Linux来完成。 首先,你需要检查一下Mac电脑上安装在你的系统上的Linux发行版,比如Ubuntu。然后,在开始菜单中找到并打开终端,就可以进入Linux系统了。 最后,你可以使用以下代码来更新你的系统: sudo apt-get update 完成更新操作后,你就可以在Linux系代理记账统中更改所有你想要的设置了。例如,你可以使用以下命令来更改你的壁纸: gsettings set org.gnome.desktop.background picture-uri 你也可以使用以下命令来更改你的用户界面: gsettings set o公司注册rg.gnome.desktop.interface gtk-theme 此外,你还可以使用Linux系统中的其他命令来修改其他设置,例如声音,显示器,输入法等。 在更改完所有设置后,你可以通过重新启动Mac电脑来查看你所做的更改,以及它们是否按照你的预想结果生效。 总之,通过使用Linux系统更改Mac电脑上的设置是非常容易的。只要按照以上步骤,你就可以轻松地将你的Mac电脑更改成符合你个人需求的最佳设置。只要你花点时间,你就可以使用Linux系统拥有你想要的Mac电脑体验。

文章来源于网络,如有侵权,请联系删除。

我司专注于财务软件开发,财务会计软件生产管理财务软件企业微信财务软件

APP财务软件。多年来一直专于研发,销信于一体软件财务公司

安装Linux服务器轻松安装软件(linux服务器软件)

安装Linux服务器是一件非常重要的事情,它能够帮助您轻松管理网络服务和桌面环境。安装Linux服务器可以非常轻松地安装软件并管理文件和资源,而且可以在几分钟内完成安装。要想安装Linux服务器,您需要一台能够运行Linux的计算机以及一组安装文件。 第一步是下载所需的安装文件,同时还需要创建一个引导盘来开始安装。通常,用户可以从Linux发行版获取安装文件,并创建一个引导盘来开始安装,该引导盘也代理记账可以用作系统重启程序。 接下来,可以开始安装Linux服务器,安装非常简单,用户只需根据屏幕提示输入信息并执行步骤即可。安装完成后,需要根据用户的需求进一步配置Linux系统的所有组件,并执行必要的更新和安全扫描。此外,建议使用官方Linux文档来访问更多公司注册的配置选项,这样可以更好地为系统设置参数。 最后,安装过程完成后,可以开始安装软件。安装Linux软件非常简单,用户可以使用Linux命令行或图形用户界面(GUI)来安装所需的软件。在命令行界面下,用户可以使用“apt-get”命令来安装软件,而在图形界面下,用户可以使用软件中心或Google Play Store来完成安装。也可以使用Linux软件安装软件包,只需将包文件复制到服务器中并且运行“dpkg -i ”命令即可安装相应的服务器软件包。 总的来说,安装Linux服务器是一件非常容易的事,通过上述步骤,我们可以轻松安装所需的软件。

文章来源于网络,如有侵权,请联系删除。

我司专注于财务软件开发,财务会计软件生产管理财务软件企业微信财务软件

APP财务软件。多年来一直专于研发,销信于一体软件财务公司

Linux内核视频教程全面理解与精要讲解。(linux内核视频教程)

Linux 内核视频教程:全面理解与精要讲解 Linux是一种开源的操作系统,利用它可以搭建一个可靠的、可移植的和低成本的服务器。Linux的操作系统内核,是这个操作系统的最核心的部分,是其他功能的基础和基础组件。 要使用Linux,就需要先对其内核有一定的了解。Linux内核视频教程可以帮助你全面而又系统地理解Linux内核及其特性。Linux内核视频教程覆盖了多个内核技术,包括Linux内核基代理记账础、Linux线程实现、操作系统核心数据结构和算法、Linux内核编程、中断处理机制、I / O子系统等。 Linux内核教程可以给每一个Linux程序员提供完整的,精准的信息,以熟悉这个开源的操作系统的基础结构和深层次的工作机制。它不仅仅集中在Linux公司注册内核机制上,而且还包含了Linux编程的细节,这将为Linux程序员提供丰富的Linux内核的基础知识,让他们能够更加熟练地使用Linux内核。 此外,Linux内核视频教程还将帮助中级开发人员快速了解Linux内核编程技术,这样他们就可以更加熟练地、有效公司变更地应用Linux内核编程技术,不断改进内核实现更好的功能。 例如,在Linux中断处理机制的视频教程中,介绍了如何利用Linux的中断处理机制来处理中断请求,以提高系统性能。在Linux内核编程视频教程中,还可以学习如何使用Linux系统调用,以及如何使用相应代码控制硬件,从而实现, Linux 内核视频教程是所有Linux程序员必不可少的一项资源。它既高度概括性,又讲解问题细节,使得开发人员可以全面地理解和使用Linux内核技术,以实现更好的功能。

文章来源于网络,如有侵权,请联系删除。

我司专注于财务软件开发,财务会计软件生产管理财务软件企业微信财务软件

APP财务软件。多年来一直专于研发,销信于一体软件财务公司

深入了解Linux服务器配置信息(查看linux服务器配置)

Linux服务器配置信息是每一位Linux管理员需要深入了解和把握的重要问题。从技术角度讲,Linux服务器是一系列配置文件组成的,用于存储计算机硬件、操作系统和应用程序相关信息。它是定义计算机优化性能、控制操作系统性能、指定应用程序行为以及操纵用户会话等等非常重要的工具。因此,了解Linux服务器的配置信息对系统管理员来说都是非常重要的。 Linux系统的配置信息可以由多种方式获取,主要分为两大代理记账类。一类是通过检查系统日志来获取相关信息,另一类是通过使用配置文件以及专门的管理工具来查看配置。但要获取更准确的配置信息,最好使用Linux提供的故障检测工具–一般可以在 /sbin/ 目录下找到,比如dmesg、lspci、lsdev等工具,这些工具可以公司注册提供详细的配置信息。 另外,Linux也提供了一些配置文件,它们可以让系统管理员更加轻松的了解Linux服务器的配置信息,比如/etc/hosts文件用于记录不同主机的IP地址,/etc/resolv.conf文件用于记录DNS服务器,/etc/fstab公司变更用于设定系统启动时加载的挂载点,/etc/mtab文件用于记录当前被挂载的文件系统等。 此外,还有一些专业的管理工具可以帮助管理员全面的了解和把握Linux服务器的配置信息,比如lfprobe诊断工具,它可以帮助管理员实时检测系统的硬件和软件组件状态,从而更好的配置系统。还有hdparm工具,它可以用来查看和调整硬盘参数,以便能够让系统更好的运行。 总之,如果你是一位Linux管理员,了解Linux服务器配置信息绝对是必不可少的,它不仅会提高你的工作效率,还可以避免出现无法预料的问题,为你的系统保驾护航。

文章来源于网络,如有侵权,请联系删除。

我司专注于财务软件开发,财务会计软件生产管理财务软件企业微信财务软件

APP财务软件。多年来一直专于研发,销信于一体软件财务公司

Linux服务器IP地址映射管理(linuxip映射)

作为一个Linux服务器管理员,在管理服务器IP地址空间时,有时需要知道如何在Linux服务器系统上实现IP地址映射管理,以便于可以让网络更加高效安全的运行。针对IP地址映射管理,Linux提供的主要有一下几种管理方法。 首先,IP路由,我们在Linux服务器上可以使用route命令来管理网络路由,以实现IP映射。例如,内部地址14.99.47.36是私有IP地址,我们可以设置公有IP地址22.5代理记账.134.6来映射,可以在终端使用如下命令实现该映射: route add -host 114.99.47.36 gw 66.135.20.10 dev eth0 其次,反向代理,如果需要将服务器的外部访问IP映射到内部IP地址时,可以使用反向代理,将多个公司注册私有IP映射到多个公网IP地址上。可以使用如下的脚本来实现反向代理: #! /bin/bash IP=”143.99.47.88″ PORT=80 IPTABLES_CMD=’/sbin/iptables’ # 将私有IP地址映射到指定外部公网IP $IP公司变更TABLES_CMD -t nat -A PREROUTING -d 114.99.47.36 -j DNAT -to 22.5.134.6 # 将该映射端口号转发到内部服务器對應的端口 $IPTABLES_CMD -t nat -A PREROUTING进出口退税 -d 22.5.134.6 -p tcp –dport $PORT -j REDIRECT –to-port $PORT 第三,NAT路由,NAT路由是一种特殊的IP路由表,允许多台计算机使用一个IP地址来联网。服务器管理员可以使用IPTABLE工商年报S和MASQUERADE命令来实现NAT路由表的创建,以便将多个私有IP地址映射到一个公网IP,如下所示: #! /bin/bash IPTABLES_CMD=’/sbin/iptables’ $IPTABLES_CMD -t nat -A POSTROUTING -j MASQUERADE $IPTABLES_CMD -A FORWARD -j ACCEPT 最后,dnat,dnat也是一种将私有IP地址映射到公网IP地址的方法,可以使用iptables命令来实现,如下所示: #! /bin/bash IPTABLES_CMD=’/sbin/iptables’ $IPTABLES_CMD -t nat -A PREROUTING -p tcp -j DNAT –to-destination 22.5.134.6 总而言之,以上就是Linux服务器上IP地址映射管理的几种主要方法,服务器管理员可以根据实际需求,选择合适的映射方法,从而使网络更加安全高效的运行。

文章来源于网络,如有侵权,请联系删除。

我司专注于财务软件开发,财务会计软件生产管理财务软件企业微信财务软件

APP财务软件。多年来一直专于研发,销信于一体软件财务公司

深入浅出选择适合学习的Linux版本(适合学习的linux版本)

随着计算机技术的发展,Linux系统越来越受欢迎,并成为研究人员和学习者的首选。学习Linux是一个既具有挑战性又具有奖励性的过程,熟练掌握Linux系统可以为你提供一个安全、可靠、可靠的就业机会。那么,我们应该如何选择合适的Linux发行版来学习呢? 首先,要知道Linux发行版的基本概念。Linux是一个开源的操作系统,作为Linux内核的核心组件,可以提供多种发行版。一般来说,这些Linux代理记账发行版是基于共同的核心模型开发的,但不同发行版之间仍然存在一些差异,如界面、工具、软件和文档等。比较常见的Linux发行版包括Ubuntu,CentOS,RedHat和Debian等。 其次,要考虑Linux发行版的特性和当前需求。Linux发行版有着不同公司注册的特性,如安全性、可靠性、稳定性和易用性等。不同的发行版有着不同的特性,如可靠性、稳定性和性能等。此外,要考虑使用者的当前需求,根据不同的需求,要选择相应的发行版,以便能够满足客户的需求。 综上所述,要想选择适合学习的Linux发行版,就要考虑Linux发行版的概念、特性和当前需求。如果你是初学者,可以尝试使用基础的Linux发行版,如Ubuntu, Debian等,一步一步地学习Linux系统。然后,根据自己的需求来选择更专业的Linux发行版,以满足自己的高级需求。

文章来源于网络,如有侵权,请联系删除。

我司专注于财务软件开发,财务会计软件生产管理财务软件企业微信财务软件

APP财务软件。多年来一直专于研发,销信于一体软件财务公司

Linux77设置交换分区SWAP的方法

Linux系统的Swap分区,即交换分区,通常也称为虚拟内存,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。代理记账其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。 1. 创建交换分区文件
[root@devsz wxadmin]# dd if=/dev/zero of=/opt/公司注册swapfile bs=1M count=4096
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 20.789 s, 207 MB/s
2. 给文件授权
公司变更[root@devsz wxadmin]# chmod 600 /opt/swapfile
3. 格式化交换分区
[root@devsz wxadmin]# mkswap /opt/swapfile
Setting up swapspace vers进出口退税ion 1, size = 4194300 KiB
no label, UUID=bfe83644-0fa0-43f9-bf7e-69f9e24b391f
4. 开启交换分区
[root@devsz wxadmin]# swapon /opt/swapfile 5. 查看交换分区状态
[root@devsz wxadmin]# free -m
total used free shared buff/cache available
Mem: 3789 2682 208 280 898 586
Swap: 4095 0 4095
[root@devsz wxadmin]#
本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!

文章来源于网络,如有侵权,请联系删除。

我司专注于财务软件开发,财务会计软件生产管理财务软件企业微信财务软件

APP财务软件。多年来一直专于研发,销信于一体软件财务公司

Linux查看目录大小的方法(linux如何查看目录大小)

Linux是当前最流行的操作系统之一,在使用中我们会遇到查看某个目录大小的需求,对于检查磁盘空间占用情况等这些任务都是非常重要的工作,下面我们介绍几种查看Linux目录大小的方法。 1. 使用du命令。 du命令是一个十分好用的命令,用来查看某个文件或目录的大小,特别是大文件和大目录,du能够方便地显示出该文件或目录的大小,比如: $ du -sh document 4.1G document 上代理记账面的命令使用-s参数显示出指定的document目录的总体大小,最后的结果是4.1G。 2. 使用df命令。 df命令是一个查看文件系统空间使用量的非常重要的系统内置命令,这个命令可以查看文件系统空间使用情况,我们也可以使用这个命令查看指定目录的大小,如:公司注册 $ df -h document Filesystem Size Used Avail Use% Mounted on /dev/sda1 30G 21G 9G 70% / 此外,还可以使用ls -l的方式,显示目录中的子文件的大小,这种方法很容公司变更易理解,如: $ ls -l document drwxr-xr-x 5 root root 4096 Nov 18 09:48 file1 这样我们就可以得到文件的大小为4K。 最后,还可以通过网络分享的方式查看目录大小,一般在服务器上会共享某个目录,通过连接服务器,可以直接查看该目录的大小,无需到服务器远程执行查看目录大小命令。 总之,Linux系统提供了几种方式查看指定目录的大小,非常方便,比如使用du、df、ls等命令,以及通过网络的方式查看等等,可以选择合适用户的操作来查看目录,来维护计算机系统的正常使用。

文章来源于网络,如有侵权,请联系删除。

我司专注于财务软件开发,财务会计软件生产管理财务软件企业微信财务软件

APP财务软件。多年来一直专于研发,销信于一体软件财务公司

Linux下的进程管理命令(linux命令进程)

Linux是一款流行的操作系统,其中进程管理是重要的任务之一。由于Linux提供许多命令,用户可以使用这些命令来进行进程管理。 首先,我们介绍Linux下最常用的进程管理命令:ps。ps命令可以列出活动的进程,用户可以根据自己的需要查看进程的具体信息,包括PID、PPID、UID等。使用ps命令的格式如下: ps [options] 其中,options可以是以下参数:-A(列出系统中所有进程)、代理记账-e(列出所有进程)、-f(以全格式输出进程信息)等。 另一种常用的进程管理命令是top。top可以实时监控系统中各个进程的使用状态,最上面显示系统的cpu使用率,内存使用率,每秒钟处理的任务数等。使用top命令的格式如下: top [options] 其公司注册中,options可以是以下参数:-d(按指定的秒数刷新,例如-d 5)、-p(指定进程号)、-u(以某个用户的视角来显示)等。 此外,Linux还提供kill命令用于终止进程。Kill是一种常用的进程管理工具,用户可以指定要终止的进程号,来实现对进程的终公司变更止: kill [signal] 其中,signal为发送给要终止的进程的信号,默认值为SIGTERM,表示正常终止。 此外,Linux还提供了nice和renice命令处理CPU调度。 nice命令可以设定进程的优先级,而renice命令则可以修改给定进程的优先级: nice -n renice -n 以上就是Linux下常用的进程管理命令介绍,使用这些命令,用户可以很方便地管理系统中的进程,提高系统的效率,更好地利用已有资源。

文章来源于网络,如有侵权,请联系删除。

我司专注于财务软件开发,财务会计软件生产管理财务软件企业微信财务软件

APP财务软件。多年来一直专于研发,销信于一体软件财务公司

概述LinuxTTY/PTS的区别

当我们在键盘上敲下一个字母的时候,到底是怎么发送到相应的进程的呢?我们通过ps、who等命令看到的类似tty1、pts/0这样的输出,它们的作用和区别是什么呢? TTY历史 支持多任务的计算机出现之前 在计算机出来以前,人们就已经在使用一种叫teletype的设备,用来相互之间传递信息,看起来像下面这样: +———-+ Physical Line +———-+ | teletype |<—————代理记账——>| teletype | +———-+ +———-+ 两个teletype之间用线连接起来,线两端可能也有类似于调制解调器之类的设备(这里将它们忽略),在一端的teletype上敲键盘时,相应的数据会发送到另一端的teletype,具体功能是干什么的公司注册,我也不太了解。(我脑袋里面想到画面是在一端敲字,另一端打印出来) 这些都是老古董了,完全没接触过,所以只能简单的推测。 支持多任务的计算机出现之后 等到计算机支持多任务后,人们想到把这些teletype连到计算机上,作为计算机的终端,从而可以操作计算机。公司变更 使用teletype的主要原因有两个(个人见解): 现实中已经存在了大量不同厂商的teletype,可以充分利用现有资源 teletype的相关网络已经比较成熟,连起来方便 于是连接就发展成这样: +———-+ +———-+ +——-+ Physical进出口退税 Line +——-+ +——+ | | | Terminal |<->| Modem |<———————>| Modem |<->| UART |<->| Computer | +———-+ +——-+ +——-+ +——+ | | +———-+ 左工商年报边的Terminal就是各种各样的teletype 物理线路两边用上了Modem,就是我们常说的“猫”,那是因为后来网络已经慢慢的变发达了,大家可以共享连接了。(大概推测,可能不对) UART可以理解为将teletype的信号转换成计算机能识别的信号的设备公司注销 内核TTY子系统 计算机为了支持这些teletype,于是设计了名字叫做TTY的子系统,内部结构如下: +———————————————–+ | Kernel | | +——–+ | | +——–+ +————+ | | | +—————-+ | | U一般纳税人代理记账ART | | Line | | TTY |<———->| User process A | <——>| |<->| |<->| | | +—————-+ | | driver | | discipline | | driver |<—税务代办——->| User process B | | +——–+ +————+ | | | +—————-+ | +——–+ | | | +———————————————–+ UART driver对接外面的UART设备 Line discipline主要是对输入和输出做一些处理,可以理解它是TTY driver的一部分 TTY driver用来处理各种终端设备 用户空间的进程通过TTY driver来和终端打交道 为了简单起见,后面的介绍中不再单独列出UART driver和Line discipline,可以认为它们是TTY driver的一部分 TTY设备 对于每一个终端,TTY driver都会创建一个TTY设备与它对应,如果有多个终端连接过来,那么看起来就是这个样子的: +—————-+ | TTY Driver | | | | +——-+ | +—————-+ +————+ | | |<———->| User process A | | Terminal A |<———>| ttyS0 | | +—————-+ +————+ | | |<———->| User process B | | +——-+ | +—————-+ | | | +——-+ | +—————-+ +————+ | | |<———->| User process C | | Terminal B |<———>| ttyS1 | | +—————-+ +————+ | | |<———->| User process D | | +——-+ | +—————-+ | | +—————-+ 当驱动收到一个终端的连接时,就会根据终端的型号和参数创建相应的tty设备(上图中设备名称叫ttyS0是因为大部分终端的连接都是串行连接),由于每个终端可能都不一样,有自己的特殊命令和使用习惯,于是每个tty设备的配置可能都不一样。比如按delete键的时候,有些可能是要删前面的字符,而有些可能是删后面的,如果没配置对,就会导致某些按键不是自己想要的行为,这也是我们在使用模拟终端时,如果默认的配置跟我们的习惯不符,需要做一些个性化配置的原因。 后来随着计算机的不断发展,teletype这些设备逐渐消失,我们不再需要专门的终端设备了,每个机器都有自己的键盘和显示器,每台机器都可以是其它机器的终端,远程的操作通过ssh来实现,但是内核TTY驱动这一架构没有发生变化,我们想要和系统中的进程进行I/O交互,还是需要通过TTY设备,于是出现了各种终端模拟软件,并且模拟的也是常见的几种终端,如VT100、VT220、XTerm等。 可以通过命令toe -a列出系统支持的所有终端类型 可以通过命令infocmp来比较两个终端的区别,比如infocmp vt100 vt220将会输出vt100和vt220的区别。 程序如何和TTY打交道 在讨论TTY设备是如何被创建及配置之前,我们先来看看TTY是如何被进程使用的: #先用tty命令看看当前bash关联到了哪个tty dev@debian:~$ tty /dev/pts/1 #看tty都被哪些进程打开了 dev@debian:~$ lsof /dev/pts/1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 907 dev 0u CHR 136,1 0t0 4 /dev/pts/1 bash 907 dev 1u CHR 136,1 0t0 4 /dev/pts/1 bash 907 dev 2u CHR 136,1 0t0 4 /dev/pts/1 bash 907 dev 255u CHR 136,1 0t0 4 /dev/pts/1 lsof 1118 dev 0u CHR 136,1 0t0 4 /dev/pts/1 lsof 1118 dev 1u CHR 136,1 0t0 4 /dev/pts/1 lsof 1118 dev 2u CHR 136,1 0t0 4 /dev/pts/1 #往tty里面直接写数据跟写标准输出是一样的效果 dev@dev:~$ echo aaa > /dev/pts/2 aaa pts也是tty设备,它们的关系后面会介绍到 通过上面的lsof可以看出,当前运行的bash和lsof进程的stdin(0u)、stdout(1u)、stderr(2u)都绑定到了这个TTY上。 下面是tty和进程以及I/O设备交互的结构图: Input +————————–+ R/W +——+ ———–>| |<———->| bash | | pts/1 | +——+ <———–| |<———->| lsof | Output | Foreground process group | R/W +——+ +————————–+ 可以把tty理解成一个管道(pipe),在一端写的内容可以从另一端读取出来,反之亦然。 这里input和output可以简单的理解为键盘和显示器,后面会介绍在各种情况下input/ouput都连接的什么东西。 tty里面有一个很重要的属性,叫Foreground process group,记录了当前前端的进程组是哪一个。process group的概念会在下一篇文章中介绍,这里可以简单的认为process group里面只有一个进程。 当pts/1收到input的输入后,会检查当前前端进程组是哪一个,然后将输入放到进程组的leader的输入缓存中,这样相应的leader进程就可以通过read函数得到用户的输入 当前端进程组里面的进程往tty设备上写数据时,tty就会将数据输出到output设备上 当在shell中执行不同的命令时,前端进程组在不断的变化,而这种变化会由shell负责更新到tty设备中 从上面可以看出,进程和tty打交道很简单,只要保证后台进程不要读写tty就可以了,即写后台程序时,要将stdin/stdout/stderr重定向到其它地方(当然deamon程序还需要做很多其它处理)。 先抛出两个问题(后面有答案): 当非前端进程组里面的进程(后台进程)往tty设备上写数据时,会发生什么?会输出到outpu上吗? 当非前端进程组里面的进程(后台进程)从tty设备上读数据时,会发生什么?进程会阻塞吗? TTY是如何被创建的 下面介绍几种常见的情况下tty设备是如何创建的,以及input和output设备都是啥。 键盘显示器直连(终端) 先看图再说话: +—————————————–+ | Kernel | | +——–+ | +—————-+ +———-+ | +——————-+ | tty1 |<———->| User processes | | Keyboard |———>| | +——–+ | +—————-+ +———-+ | | Terminal Emulator |<->| tty2 |<———->| User processes | | Monitor |<———| | +——–+ | +—————-+ +———-+ | +——————-+ | tty3 |<———->| User processes | | +——–+ | +—————-+ | | +—————————————–+ 键盘、显示器都和内核中的终端模拟器相连,由模拟器决定创建多少tty,比如你在键盘上输入ctrl+alt+F1时,模拟器首先捕获到该输入,然后激活tty1,这样键盘的输入会转发到tty1,而tty1的输出会转发到显示器,同理用输入ctrl+alt+F2,就会切换到tty2。 当模拟器激活tty时如果发现没有进程与之关联,意味着这是第一次打开该tty,于是会启动配置好的进程并和该tty绑定,一般该进程就是负责login的进程。 当切换到tty2后,tty1里面的输出会输出到哪里呢?tty1的输出还是会输出给模拟器,模拟器里会有每个tty的缓存,不过由于模拟器的缓存空间有限,所以下次切回tty1的时候,只能看到最新的输出,以前的输出已经不在了。 不确定这里的终端模拟器对应内核中具体的哪个模块,但肯定有这么个东西存在 SSH远程访问 +———-+ +————+ | Keyboard |——>| | +———-+ | Terminal | | Monitor |<——| | +———-+ +————+ | | ssh protocol | ↓ +————+ | | | ssh server |————————–+ | | fork | +————+ | | ↑ | | | | write | | read | | | | +—–|—|——————-+ | | | | | ↓ | ↓ | +——-+ | +——-+ | +——–+ | pts/0 |<———->| shell | | | | +——-+ | +——-+ | | ptmx |<->| pts/1 |<———->| shell | | | | +——-+ | +——-+ | +——–+ | pts/2 |<———->| shell | | +——-+ | +——-+ | Kernel | +—————————–+ 这里的Terminal可能是任何地方的程序,比如windows上的putty,所以不讨论客户端的Terminal程序是怎么和键盘、显示器交互的。由于Terminal要和ssh服务器打交道,所以肯定要实现ssh的客户端功能。 这里将建立连接和收发数据分两条线路解释,为了描述简洁,这里以sshd代替ssh服务器程序: 建立连接 1.Terminal请求和sshd建立连接 2.如果验证通过,sshd将创建一个新的session 3.调用API(posix_openpt())请求ptmx创建一个pts,创建成功后,sshd将得到和ptmx关联的fd,并将该fd和session关联起来。
#pty(pseudo terminal device)由两部分构成,ptmx是master端,pts是slave端,
#进程可以通过调用API请求ptmx创建一个pts,然后将会得到连接到ptmx的读写fd和一个新创建的pts,
#ptmx在内部会维护该fd和pts的对应关系,随后往这个fd的读写会被ptmx转发到对应的pts。

#这里可以看到sshd已经打开了/dev/ptmx
dev@debian:~$ sudo lsof /dev/ptmx
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1191 dev 8u CHR 5,2 0t0 6531 /dev/ptmx
sshd 1191 dev 10u CHR 5,2 0t0 6531 /dev/ptmx
sshd 1191 dev 11u CHR 5,2 0t0 6531 /dev/ptmx

4.同时sshd创建shell进程,将新创建的pts和shell绑定 收发消息 1.Terminal收到键盘的输入,Terminal通过ssh协议将数据发往sshd 2.sshd收到客户端的数据后,根据它自己管理的session,找到该客户端对应的关联到ptmx上的fd 3.往找到的fd上写入客户端发过来的数据 4.ptmx收到数据后,根据fd找到对应的pts(该对应关系由ptmx自动维护),将数据包转发给对应的pts 5.pts收到数据包后,检查绑定到自己上面的当前前端进程组,将数据包发给该进程组的leader 6.由于pts上只有shell,所以shell的read函数就收到了该数据包 7.shell对收到的数据包进行处理,然后输出处理结果(也可能没有输出) 8.shell通过write函数将结果写入pts 9.pts将结果转发给ptmx 10.ptmx根据pts找到对应的fd,往该fd写入结果 11.sshd收到该fd的结果后,找到对应的session,然后将结果发给对应的客户端 键盘显示器直连(图形界面) +———-+ +————+ | Keyboard |——>| | +———-+ | Terminal |————————–+ | Monitor |<——| | fork | +———-+ +————+ | | ↑ | | | | write | | read | | | | +—–|—|——————-+ | | | | | ↓ | ↓ | +——-+ | +——-+ | +——–+ | pts/0 |<———->| shell | | | | +——-+ | +——-+ | | ptmx |<->| pts/1 |<———->| shell | | | | +——-+ | +——-+ | +——–+ | pts/2 |<———->| shell | | +——-+ | +——-+ | Kernel | +—————————–+ 为了简化起见,本篇不讨论Linux下图形界面里Terminal程序是怎么和键盘、显示器交互的。 这里和上面的不同点就是,这里的Terminal不需要实现ssh客户端,但需要把ssh服务器要干的活也干了(当然ssh通信相关的除外)。 SSH + Screen/Tmux 常用Linux的同学应该对screen和tmux不陌生,通过它们启动的进程,就算网络断开了,也不会受到影响继续执行,下次连上去时还能看到进程的所有输出,还能继续接着干活。 这里以tmux为例介绍其原理: +———-+ +————+ | Keyboard |——>| | +———-+ | Terminal | | Monitor |<——| | +———-+ +————+ | | ssh protocol | ↓ +————+ | | | ssh server |————————–+ | | fork | +————+ | | ↑ | | | | write | | read | | | | +—–|—|——————-+ | | ↓ | | ↓ | +——–+ +——-+ | +——-+ fork +————-+ | | ptmx |<->| pts/0 |<———->| shell |——–>| tmux client | | +——–+ +——-+ | +——-+ +————-+ | | | | ↑ | +——–+ +——-+ | +——-+ | | | ptmx |<->| pts/2 |<———->| shell | | | +——–+ +——-+ | +——-+ | | ↑ | Kernel | ↑ | +—–|—|——————-+ | | | | | | |w/r| +—————————+ | | | | fork | | ↓ | | +————-+ | | | | | tmux server |<——————————————–+ | | +————-+ 系统中的ptmx只有一个,上图中画出来了两个,目的是为了表明tmux服务器和sshd都用ptmx,但它们之间又互不干涉。 这种情况要稍微复杂一点,不过原理都是一样的,前半部分和普通ssh的方式是一样的,只是pts/0关联的前端进程不是shell了,而是变成了tmux客户端,所以ssh客户端发过来的数据包都会被tmux客户端收到,然后由tmux客户端转发给tmux服务器,而tmux服务器干的活和ssh的类似,也是维护一堆的session,为每个session创建一个pts,然后将tmux客户端发过来的数据转发给相应的pts。 由于tmux服务器只和tmux客户端打交道,和sshd没有关系,当终端和sshd的连接断开时,虽然pts/0会被关闭,和它相关的shell和tmux客户端也将被kill掉,但不会影响tmux服务器,当下次再用tmux客户端连上tmux服务器时,看到的还是上次的内容。 TTY和PTS的区别 从上面的流程中应该可以看出来了,对用户空间的程序来说,他们没有区别,都是一样的;从内核里面来看,pts的另一端连接的是ptmx,而tty的另一端连接的是内核的终端模拟器,ptmx和终端模拟器都只是负责维护会话和转发数据包;再看看ptmx和内核终端模拟器的另一端,ptmx的另一端连接的是用户空间的应用程序,如sshd、tmux等,而内核终端模拟器的另一端连接的是具体的硬件,如键盘和显示器。 常见的TTY配置 先先来看看当前tty的所有配置: dev@dev:~$ stty -a speed 38400 baud; rows 51; columns 204; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
stty还可以用来修改tty的参数,用法请参考man stty 只要是有权限的程序,都可以通过Linux提供的API来修改TTY的配置,下面介绍一些常见的的配置项。 rows 51; columns 204; 这个配置一般由终端控制,当终端的窗口大小发生变化时,需要通过一定的手段修改该配置,比如ssh协议里面就有修改窗口大小的参数,sshd收到客户端的请求后,会通过API修改tty的这个参数,然后由tty通过信号SIGWINCH通知前端程序(比如shell或者vim),前端程序收到信号后,再去读tty的这个参数,然后就知道如何调整自己的输出排版了。 intr = ^C tty除了在终端和前端进程之间转发数据之外,还支持很多控制命令,比如终端输入了CTRL+C,那么tty不会将该输入串转发给前端进程,而是将它转换成信号SIGINT发送给前端进程。这个就是用来配置控制命令对应的输入组合的,比如我们可以配置“intr = ^E”表示用CTRL+E代替CTRL+C。 start = ^Q; stop = ^S; 这是两个特殊的控制命令,估计经常有人会碰到,在键盘上不小心输入CTRL+S后,终端没反应了,即没输出,也不响应任何输入。这是因为这个命令会告诉TTY暂停,阻塞所有读写操作,即不转发任何数据,只有按了CTRL+Q后,才会继续。这个功能应该是历史遗留,以前终端和服务器之间没有流量控制功能,所以有可能服务器发送数据过快,导致终端处理不过来,于是需要这样一个命令告诉服务器不要再发了,等终端处理完了后在通知服务器继续。 该命令现在比较常用的一个场景就是用tail -f命令监控日志文件的内容时,可以随时按CTRL+S让屏幕停止刷新,看完后再按CTRL+Q让它继续刷,如果不这样的话,需要先CTRL+C退出,看完后在重新运行tail -f命令。 echo 在终端输入字符的时候,之所以我们能及时看到我们输入的字符,那是因为TTY在收到终端发过去的字符后,会先将字符原路返回一份,然后才交给前端进程处理,这样终端就能及时的显示输入的字符。echo就是用来控制该功能的配置项,如果是-echo的话表示disable echo功能。 -tostop 如果你在shell中运行程序的时候,后面添加了&,比如./myapp &,这样myapp这个进程就会在后台运行,但如果这个进程继续往tty上写数据呢?这个参数就用来控制是否将输出转发给终端,也即结果会不会在终端显示,这里“-tostop”表示会输出到终端,如果配置为“tostop”的话,将不输出到终端,并且tty会发送信号SIGTTOU给myapp,该信号的默认行为是将暂停myapp的执行。 TTY相关信号 除了上面介绍配置时提到的SIGINT,SIGTTOU,SIGWINCHU外,还有这么几个跟TTY相关的信号 SIGTTIN 当后台进程读tty时,tty将发送该信号给相应的进程组,默认行为是暂停进程组中进程的执行。暂停的进程如何继续执行呢?请参考下一篇文章中的SIGCONT。 SIGHUP 当tty的另一端挂掉的时候,比如ssh的session断开了,于是sshd关闭了和ptmx关联的fd,内核将会给和该tty相关的所有进程发送SIGHUP信号,进程收到该信号后的默认行为是退出进程。 SIGTSTP 终端输入CTRL+Z时,tty收到后就会发送SIGTSTP给前端进程组,其默认行为是将前端进程组放到后端,并且暂停进程组里所有进程的执行。 跟tty相关的信号都是可以捕获的,可以修改它的默认行为 结束语 本文介绍了常见的tty功能和特点,下一篇中将详细介绍和tty密切相关的进程session id,进程组,job,后台程序等,敬请期待。 参考 The TTY demystified 本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!

文章来源于网络,如有侵权,请联系删除。

我司专注于财务软件开发,财务会计软件生产管理财务软件企业微信财务软件

APP财务软件。多年来一直专于研发,销信于一体软件财务公司