145、【OS】【Nuttx】【周边】效果呈现方案解析:VSCode Remote Server
【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 blog
【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(十一)
分析了 egrep
命令找到了 URL 链接内容 http:
,然后开始通过 broswer.sh 处理打开网页的请求,并简单分析了下 VSCode 在 ~/.vscode-server/ 路径下自动部署的内容,下面继续来看下
VSCode Remote Server
这里有个细节,上篇 blog 提到终端输入
which code
可以查看 VSCode Shell 启动脚本路径
但是之前说过,第一次通过 Windows 上的 VSCode 对远程 Linux 机器进行 Remote-SSH 连接时,VSCode 会自动下载并解压一个服务器端 ~/.vscode-server/bin/哈希值/
注意,这里服务器端出现在的目录是 ~/.vscode-server/bin
,而 which code
命令指向的是 ~/.vscode-server/cli/servers
终端输入
diff -r ~/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server ~/.vscode-server/bin/fabdb6a30b49f79a7aba0f2ad9df9b399473380f
可以看到两者内容是相同的
diff -r
命令表示递归比较两者及其子目录下的内容
并且会默认将比较的内容打印出来,现在没有内容输出,相当于说明两个目录下的内容是相同的,而 which code
命令指向的是 ~/.vscode-server/cli/servers
下的内容,可以理解 ~/.vscode-server/cli/servers
下的内容是 ~/.vscode-server/bin
的副本拷贝
这里这俩目录的区别在于
~/.vscode-server/bin/
是 VSCode 服务器代码的安装目录,目录用提交哈希命名,对 VSCode 版本进行唯一标识,多个会话可以共享这个目录~/.vscode-server/cli/servers
是一个会话的运行时状态目录,其意义不仅仅是代码副本,而是包含版本引用 + 运行时状态,比如which code
命令就指向的是这里
Windows 系统上查看 VSCode 菜单栏上的帮助信息
可以查看 VSCode 上版本号和 Commit 哈希值
可以看到,其中 Commit 哈希值是和 ~/.vscode-server/bin
目录下的哈希值是一一对应的
此时换一个电脑,用另一个 VSCode 版本登录,比如下面这里用的是 Version 1.96.4
可以看到此时 Commit 哈希值发生了变化,在新机器上输入 which code
,可以看到新机器上,code 命令指向的是 Version 1.96.4 版本的 Commit 哈希空间
而之前在原机器上,使用 which code
,指向的是 Version 1.96.2 版本的 Commit 哈希空间
这里其实涉及到一个多实例的概念,就好比 vscode-server 是一个服务类型,每次新建一个会话,就会有个实例产生(同版本的实例可能会被多个会话复用)
在 Version 1.96.2 机器终端输入
echo $PATH
可以看到
VSCode 在进行 Remote SSH 的时候,将自己的实例 server 路径写到了 PATH 环境变量里面(注意这里的 Commit 哈希)
在 Version 1.96.4 机器终端同样输入
echo $PATH
可以看到
这里的实例路径(Commit 哈希值)与前面那台机器不同,因为这也是在 VSCode 在进行 Remote SSH 时注入的
注意,虽然这里都输入的是 echo $PATH
命令,但是它们运行在不同的会话中,所以 PATH 已经被隔离开,所以这里 Version 1.96.2 机器看不到 Version 1.96.4 机器的 vscode-server 路径,Version 1.96.4 机器也看不到 Version 1.96.2 机器的 vscode-server 路径
ok,先分析到这儿,下篇 blog 继续