Unix 连接
主机-host --服务器
终端 terminal (输入设备和输出设备) --客户端 使用服务端的程序
终端设备名称,如 tty*、ttyS* 、ttyAMA* 和 console 它通常是一个物理终端设备,直接连接到系统的硬件
控制台终端(console):对应到/dev/console 文件;
控制终端(controlling terminal) 应到 /dev/tty文件 tty 的全称是TeleTYpe,原来指的是电传打字机
虚拟控制台终端:仿真了类型为Linux的一种终端(TERM=Linux) /dev/tty0 会指向当前所使用虚拟终端
特定的组合键(如 Ctrl+Alt+F1、Ctrl+Alt+F2 等)来切换到这些终端
#1-6全屏,基于文本终端,#7为图形终端
伪终端(pseudo terminal):通常是通过ssh登陆的终端,对应到/dev/pts/*文件
串行端口终端(serial port terminal):
termcap curses terminfo
界面 CLI TUI GUI X-Window
命令执行过程
终端--输入命令--命令解析 --执行-返回结果
Termcap(terminal capabilities --》 Terminfo(terminal information
curses(cursor addressing)-- ncurses(new curses)
将所有不同类型终端的描述收集到一个数据库中,当程序希望向终端发送命令时,它可以通过使用数据库中的信息以一种标准化的方式完成
系统刚刚启动的时候,boot会给OS传递参数,其中有一个TERM=linux的,就是说起来以后终端就用Linux终端
Terminfo 是由Thomas E. Dickey开发的,它是ncurses库的一部分 /usr/share/terminfo
是一个库和数据库,用于描述终端的能力,如颜色、光标移动和其他特殊字符
使用xshell连接远程linux
1、使用xshell连接远程linux服务器时,Xshell充当远程终端会话的客户端
2、连接成功后,系统会为这次远程会话创建一个伪终端,伪终端由master和slve组成。
maste 主设备负责与Xshell通信(处理Xshell发送的输入并将程序的输出传回给Xshell);
slve 从设备(例如/dev/pts/0)则为这次远程会话提供虚拟终端环境。
3、在xshell输入命令时候,会先发送给主设备,
主设备再发送给从设备。 从设备中命令会被执行,从而返回给主设备。
主设备再传递回Xshell,从而就能在Xshell窗口中看到结果
Linux 创建进程
父进程/双亲、子进程/孩子、继承
exec 系列函数则用于在当前进程中执行新程序,替换其地址空间
exec就是把老的shell给干掉,然后去干活
fork 函数用于创建一个新进程,该进程是调用进程的副本(子进程)。
子进程会继承父进程的资源,但拥有独立的地址空间和堆栈。分叉
posix后面的标准接口posix_spawn;BSD的vfork;Windows的CreateProcess
#include <pthread.h>
pthread_create并不是linux的系统调用函数,而是由 glibc实现的符合posix接口规范的线程库函数。
pthread 的底层也是基于 copy_process 实现的
SHELL
变量类型
局部变量和全局变量 shell变量和环境变量
环境变量通过setenv创建,shell变量由set命令创建
交互式shell 和 非交互式shell 登录shell 和 非登录shell
登录shell执行登录文件和环境文件 登录shell:.profile,然后$ENV
输入shell的名称启动一个新shell,新shell是一个非登录shell 非登录shell只执行环境文件 非登录shell:$ENV
内部命令和外部命令 type file
bash a.sh | source a.sh | . a.sh |exec a.sh | ./a.shell
1.bash/sh 执行脚本
两种方法 bash xxx.sh,
另外一种就是bash -c “cmd string”
Bash可以以两种模式运行,默认模式(追求灵活性)和POSIX模式(追求兼容性)
2.source 命令是 bash shell 的内置命令,从 C Shell 而来。
source 命令的另一种写法是点符号,
用法和 source 相同 source 命令会强制执行脚本中的全部命令,而忽略文件的权限
source: not found shell 的解释器不是 bash,需把 shell 的解释器更改为 bash
source命令用于在当前shell环境中执行指定的脚本,而不是在一个新的shell中
bin/sh: 1: source: not found 错误
bash -c "source setup.bash && python3 test.py "
3. ./a.sh 打开一个subshell去读取、执行a.sh,
但a.sh需要有"执行权限",可以用chmod +x添加执行权限. 和bash
4. exec命令也可实现在原进程中执行,但是同时会终止原进程,所以我在命令行中执行
exec /opt/ros/../setup.sh 链接的ssh都断开了
history 输入ctrl+R后,开始准备查找命令
Docker
docker build
docker run 启动容器时传递环境变量到容器中
docker exec 进程的环境变量其实是继承自宿主机的?