lurk
是strace
的一个简单而美观的替代品。它允许用户跟踪进程或命令的系统调用。与strace
相比,lurk
专注于提供简单但美观的用户体验,同时实现了strace
最重要的用例。
jq
等工具进行进一步处理。curl -L -o /tmp/lurk.tar.gz "https://github.com/JakWai01/lurk/releases/latest/download/lurk-x86_64-unknown-linux-gnu.tar.gz" tar -xzf /tmp/lurk.tar.gz -C /tmp sudo install /tmp/lurk /usr/local/bin
cargo install lurk-cli
pacman -S lurk
要快速了解,可以运行lurk --help
:
lurk 0.2.7
用法:
lurk [选项] [命令]...
参数:
<命令>... 跟踪命令
选项:
-c, --summary-only
仅报告摘要,不输出常规内容
-C, --summary
除常规输出外,还报告摘要
-e, --expr <表达式>
用于修改要跟踪的事件或跟踪方式的限定表达式
-E, --env <环境变量>
--env var=val 添加环境变量。--env var 移除环境变量。
-f, --follow-forks
跟踪当前跟踪的进程创建的子进程
-h, --help
打印帮助信息
-j, --json
以JSON格式显示输出
-n, --syscall-number
显示系统调用号
-o, --file <文件>
指定输出文件名
-p, --attach <附加>
附加到正在运行的进程
-s, --string-limit <字符串限制>
设置打印的最大字符串大小
-T, --syscall-times
显示系统调用花费的时间(毫秒)
-u, --username <用户名>
以指定用户名的uid、gid和附加组运行命令
-v, --no-abbrev
打印字符串的完整版本,不使用缩写
-V, --version
打印版本信息
-z, --successful-only
只打印成功返回的系统调用
-Z, --failed-only
只打印返回错误代码的系统调用
跟踪系统调用基本有两种方式。你可以直接执行一个命令,或者通过--attach
提供进程ID(PID)来附加到正在运行的进程。后一种情况下,命令需要以提升的权限(sudo
)运行。
$ lurk ls
[54605] execve("", "", "") = 0
[54605] brk(NULL) = 0x55578000
[54605] arch_prctl(12289, 0xffffe780) = -22
[54605] access("", 4) = -2
[54605] openat(4294967196, "/etc/ld.so.cache", 524288) = 3
[54605] newfstatat(3, "", 0xffffd9a0, 4096) = 0
[54605] mmap(NULL, 92599, 1, 2, 3, 0) = 0xf7fa9000
...
$ sudo lurk --attach $PID
[54683] epoll_wait(5, 0xd01a3c20, 8, 4294967295) = -4
[54683] recvmsg(3, 0x4a4a0020, 0) = -11
[54683] recvmsg(3, 0x4a4a0020, 0) = -11
[54683] clock_gettime(1, 0x4a49df40) = 0
[54683] clock_gettime(1, 0x4a4a0220) = 0
[54683] recvmsg(3, 0x4a4a0050, 0) = -11
...
--expr
进行过滤与strace
不同,lurk
仅支持--expr trace
。由于这个标志的行为几乎与strace
中的完全相同,这里简要摘录并稍作修改了strace
手册页中关于如何使用lurk --expr trace
的说明:
-e trace=syscall_set
--trace=syscall_set
仅跟踪指定的系统调用集合。syscall_set定义为[!]value[,value],
value可以是以下之一:
syscall
通过名称指定要跟踪的特定系统调用(但请参见注意事项)。
?value 系统调用限定前的问号允许在没有匹配到系统调用时抑制错误。
/regex 仅跟踪匹配正则表达式的系统调用。
你可以使用POSIX扩展正则表达式语法(参见regex(7))。
%file
file 跟踪所有以文件名作为参数的系统调用。
你可以将此视为-e trace=open,stat,chmod,unlink,...的缩写,
这对于查看进程引用的文件很有用。此外,使用这个缩写
可以确保你不会意外忘记包含像lstat(2)这样的调用。
打赌你会忘记这个。不带百分号前缀的语法("-e trace=file")
已被弃用。
%process
process
跟踪与进程生命周期(创建、执行、终止)相关的系统调用。
不带百分号前缀的语法("-e trace=process")已被弃用。
%net
%network
network
跟踪所有网络相关的系统调用。
不带百分号前缀的语法("-e trace=network")已被弃用。
%signal
signal 跟踪所有信号相关的系统调用。
不带百分号前缀的语法("-e trace=signal")已被弃用。
%ipc
ipc 跟踪所有IPC相关的系统调用。
不带百分号前缀的语法("-e trace=ipc")已被弃用。
%desc
desc 跟踪所有文件描述符相关的系统调用。
不带百分号前缀的语法("-e trace=desc")已被弃用。
%memory
memory 跟踪所有内存映射相关的系统调用。
不带百分号前缀的语法("-e trace=memory")已被弃用。
%creds 跟踪读取或修改用户和组标识符或能力集的系统调用。
%stat 跟踪stat系统调用的变体。
%lstat 跟踪lstat系统调用的变体。
%fstat 跟踪fstat、fstatat和statx系统调用的变体。
%%stat 跟踪用于请求文件状态的系统调用
(stat、lstat、fstat、fstatat、statx及其变体)。
%statfs
跟踪statfs、statfs64、statvfs、osf_statfs和
osf_statfs64系统调用。可以通过-e trace=/^(.*_)?statv?fs
正则表达式实现相同效果。
%fstatfs
跟踪fstatfs、fstatfs64、fstatvfs、osf_fstatfs和
osf_fstatfs64系统调用。可以通过-e trace=/fstatv?fs
正则表达式实现相同效果。
%%statfs
跟踪与文件系统统计相关的系统调用
(statfs类、fstatfs类和ustat)。可以通过
-e trace=/statv?fs|fsstat|ustat正则表达式实现相同效果。
%clock 跟踪读取或修改系统时钟的系统调用。
%pure 追踪始终成功且没有参数的系统调用。目前,这个列表包括以下系统调用:arc_gettls(2)、getdtablesize(2)、getegid(2)、getegid32(2)、geteuid(2)、geteuid32(2)、getgid(2)、getgid32(2)、getpagesize(2)、getpgrp(2)、getpid(2)、getppid(2)、get_thread_area(2)(在x86以外的架构上)、gettid(2)、get_tls(2)、getuid(2)、getuid32(2)、getxgid(2)、getxpid(2)、getxuid(2)、kern_features(2)和metag_get_tls(2)。
-c选项对于确定哪些系统调用可能有用于追踪很有帮助。例如,trace=open,close,read,write表示只追踪这四个系统调用。如果只监控一部分系统调用,在推断用户/内核边界时要小心。默认设置是trace=all。
注意:在使用bash时,如果用"!"来否定一个语句,确保对其进行转义("!")。
过滤不包含字母"o"的系统调用
$ lurk --expr trace=\!/o ls
[55155] execve("", "", "") = 0
[55155] brk(NULL) = 0x55578000
[55155] arch_prctl(12289, 0xffffe780) = -22
[55155] access("", 4) = -2
[55155] newfstatat(3, "", 0xffffd9a0, 4096) = 0
[55155] mmap(NULL, 92599, 1, 2, 3, 0) = 0xf7fa9000
[55155] read(3, "\u{7f}ELF\u{2}\u{1}\u{1}", 832) = 832
...
只过滤以文件为参数的所有系统调用
$ lurk --expr trace=%file ls
[55121] access("", 4) = -2
[55121] openat(4294967196, "/etc/ld.so.cache", 524288) = 3
[55121] newfstatat(3, "", 0xffffd9a0, 4096) = 0
[55121] openat(4294967196, "/usr/lib/libcap.so.2", 524288) = 3
[55121] newfstatat(3, "", 0xffffd9a0, 4096) = 0
[55121] openat(4294967196, "/usr/lib/libc.so.6", 524288) = 3
[55121] newfstatat(3, "", 0xffffd980, 4096) = 0
...
抑制prctl系统调用的错误
$ lurk --expr trace=?prctl ls
[55407] execve("", "", "") = 0
[55407] brk(NULL) = 0x55578000
[55407] arch_prctl(12289, 0xffffe780) = -22
[55407] access("", 4) = -2
[55407] openat(4294967196, "/etc/ld.so.cache", 524288) = 3
[55407] newfstatat(3, "", 0xffffd9a0, 4096) = 0
[55407] mmap(NULL, 92599, 1, 2, 3, 0) = 0xf7fa9000
只输出openat、close和mmap系统调用
$ lurk --expr trace=openat,close,mmap ls
[55440] openat(4294967196, "/etc/ld.so.cache", 524288) = 3
[55440] mmap(NULL, 92599, 1, 2, 3, 0) = 0xf7fa9000
[55440] close(3) = 0
[55440] openat(4294967196, "/usr/lib/libcap.so.2", 524288) = 3
[55440] mmap(NULL, 8192, 3, 34, 4294967295, 0) = 0xf7fa7000
[55440] mmap(NULL, 45128, 1, 2050, 3, 0) = 0xf7f9b000
[55440] mmap(0xf7f9e000, 20480, 5, 2066, 3, 12288) = 0xf7f9e000
作为Rust库使用
请参阅tracer示例。
致谢
许可证
lurk (c) 2022-2023 Jakob Waibel, Yuri Astrakhan及贡献者
SPDX-License-Identifier: MIT OR Apache-2.0
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号