144、【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(十一)
【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 blog
【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(十)
分析了 grep
命令正则表达式里面的几个特殊字符 .
,-
和 "
,下面继续
strace 日志解析
回到 egrep
正则表达式这里,在正则表达式中,括号 [ ]
表示字符类,匹配括号中任意一个字符,比如 [abc]
表示匹配一个字符,这个字符可以是 a,b,c 中的任意一个,如果想匹配多个字符,可以用 [abc]+
另外,这里还有个 [:alpha:]
,这个属于 POSIX 字符类(BRE 和 ERE 都支持),表示匹配字母符号,比如 a-z 和 A-Z,像类似的还有 [:digit:]
(匹配数字 0-9),[:alnum:]
(匹配字母和数字),这些 POSIX 字符类必须配合 [ ]
嵌套使用,比如 [[:alpha:]]
,[[:digit:]]
,[[:alnum:]]
,如果没有 [ ]
嵌套使用,就会变成匹配字符类 [ : a l p h ]
这些字面字符
另外,在 egrep
命令中,如果 +
在 [ ]
内部,那么也会被视为普通字符进行匹配,而不是表示一个或多个
所以正则表达式 ^[[:alpha:]+\\.\\-]+:
的含义是,匹配任意数量字母,+
,.
,-
,这些字母和符号可以出现一次和任意多次(出现位置没有要求),然后以冒号 :
结尾
这里的正则主要可以判断是否有 http://
,https://
等这些协议头
比如在终端输入
echo "http://localhost:8000" | grep -E -q "^[[:alpha:]+\\.\\-]+:"
echo $?
可以看到返回值是 0,说明找到了 URL 相关内容
如果将 -q
选项替换成 -o
选项
echo "http://localhost:8000" | grep -E -o "^[[:alpha:]+\\.\\-]+:"
可以看到匹配到的内容为 http:
可以看到 164 ~ 172 行,程序会自动用 grep -E
替换掉 egrep
命令,表示使用扩展正则表达式
可以看到,最后 PID 2715219
返回了 0,说明 grep -E
命令匹配到了 http:
内容
检测完 URL 协议 ok,可以看到下面系统发现当前是在 VSCode Remote-SSH / Remote-Server 环境中运行,并开始使用 VSCode 提供的工具链来打开外部链接 http://localhost:8000
,这里 browser.sh 是 VSCode Server 的一部分,专门用于在远程服务器上处理打开网页的请求,并将其转发回本地 VSCode 客户端
这里开始涉及到 VSCode 最强大的功能 远程开发
当第一次通过 Windows 上的 VSCode 对远程 Linux 机器进行 Remote-SSH 连接时,VSCode 会自动在 Linux 用户 home 目录下创建 ~/.vscode-server/
,并自动下载并解压一个服务器端 ~/.vscode-server/bin/哈希值/
可以看到,这个目录里包含几个关键内容
- node:轻量级 Node.js 运行时
- out/server-cli.js:VSCode 的命令行接口
- bin/remote-cli/code:Shell 启动脚本,用来启动 VSCode 编辑器,打开文件或文件夹
相当于在 Linux 上默默安装了一个 VSCode 内核,不需要用户手动安装,而是由 VSCode Remote 插件自动部署
当然,这个 Shell 启动脚本已经写入系统的环境变量,可以通过 which
命令找到其路径
终端输入
which code
可以看到指向的就是 VSCode 远程服务器的命令路径
ok,先到这儿,下篇 blog 继续