Linux系统中strace命令的使用教程

作者&投稿:德博 (若有异议请与网页底部的电邮联系)
~ 在调试的时候,strace能帮助你追踪到一个程序所执行的系统调用。当你想知道程序和操作系统如何交互的时候,这是极其方便的,比如你想知道执行了哪些系统调用,并且以何种顺序执行。
这个简单而又强大的工具几乎在所有的Linux操作系统上可用,并且可被用来调试大量的程序。
命令用法
让我们看看strace命令如何追踪一个程序的执行情况。
最简单的形式,strace后面可以跟任何命令。它将列出许许多多的系统调用。一开始,我们并不能理解所有的输出,但是如果你正在寻找一些特殊的东西,那么你应该能从输出中发现它。
让我们来看看简单命令ls的系统调用跟踪情况。
代码如下:
raghu@raghu-Linoxide ~ $ strace ls
 这是strace命令输出的前几行。其他输出被截去了。

 上面的输出部分展示了write系统调用,它把当前目录的列表输出到标准输出。
下面的图片展示了使用ls命令列出的目录内容(没有使用strace)。
代码如下:
raghu@raghu-Linoxide ~ $ ls

 选项1 寻找被程序读取的配置文件
Strace 的用法之一(除了调试某些问题以外)是你能找到被一个程序读取的配置文件。例如,
代码如下:
raghu@raghu-Linoxide ~ $ strace php 21 | grep php.ini

 选项2 跟踪指定的系统调用
strace命令的-e选项仅仅被用来展示特定的系统调用(例如,open,write等等)
让我们跟踪一下cat命令的‘open’系统调用。
代码如下:
raghu@raghu-Linoxide ~ $ strace -e open cat dead.letter
 选项3 跟踪进程
strace不但能用在命令上,而且通过使用-p选项能用在运行的进程上。
代码如下:
raghu@raghu-Linoxide ~ $ sudo strace -p 1846

 选项4 strace的统计概要
它包括系统调用的概要,执行时间,错误等等。使用-c选项能够以一种整洁的方式展示:
代码如下:
raghu@raghu-Linoxide ~ $ strace -c ls
 选项5 保存输出结果
通过使用-o选项可以把strace命令的输出结果保存到一个文件中。
代码如下:
raghu@raghu-Linoxide ~ $ sudo strace -o process_strace -p 3229
 之所以以sudo来运行上面的命令,是为了防止用户ID与所查看进程的所有者ID不匹配的情况。
选项6 显示时间戳
使用-t选项,可以在每行的输出之前添加时间戳。
代码如下:
raghu@raghu-Linoxide ~ $ strace -t ls
 选项7 更精细的时间戳
-tt选项可以展示微秒级别的时间戳。
代码如下:
raghu@raghu-Linoxide ~ $ strace -tt ls

 -ttt也可以向上面那样展示微秒级的时间戳,但是它并不是打印当前时间,而是显示自从epoch(译注:1970年1月1日00:00:00 UTC)以来的所经过的秒数。
代码如下:
raghu@raghu-Linoxide ~ $ strace -ttt ls
 选项8 相对时间
-r选项展示系统调用之间的相对时间戳。
代码如下:
raghu@raghu-Linoxide ~ $ strace -r ls

linux 查看文件被哪个进程占用
答:1、查看进程“打开”的文件 (方法1): 1)pidof programe-name(获得想了解的进程(programe-name)的PID) 或ps -aux|grep programe-name(获得想了解的进程(programe-name)的PID) 找出进程的PID 2)cd /proc/$PID/fd(会看见文件描述符) 3)ls -l 得到文件描述符指向的实际文件,即当前...

linux常用的命令有哪些
答:Linux运维人员必会的120个命令 来自《跟老男孩学Linux运维:核心系统命令实战》一书 前言 第1章 Linux命令行简介 / 1 1.1Linux命令行概述 / 1 1.2在Linux命令行下查看命令帮助 / 4 1.3Linux shutdown reboot halt / 9 关机:shutdown -h now halt init 0 第2章 文件和目录操作命令 / 13 ...

Linux中进程管理工具htop的安装与其命令使用教程
答:命令可以作用于多个进程,例如 kill,将应用于所有已标记的进程 U 取消标记所有进程 s 选择某一进程,按s:用strace追踪进程的系统调用 l 显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件 I 倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然 +, - 在树形模式下,展开...

linux 好用的命令
答:Linux运维人员必会的120个命令 跟老男孩学Linux运维:核心系统命令实战 前言 第1章 Linux命令行简介 / 1 1.1Linux命令行概述 / 1 1.2在Linux命令行下查看命令帮助 / 4 1.3Linux shutdown reboot halt / 9 关机:shutdown -h now halt init 0 第2章 文件和目录操作命令 / 13 2.1pwd:...

Linux系统常用操作命令有哪些
答:/ 3209.9renice:调整运行中的进程的优先级 / 3239.10nohup:用户退出系统进程继续工作 / 3249.11strace:跟踪进程的系统调用 / 3259.12ltrace:跟踪进程调用库函数 / 3329.13runlevel:输出当前运行级别 / 3349.14init:初始化Linux进程 / 3359.15service:管理系统服务 / 335第10章 Linux网络管理...

Linux操作系统的知识点总结
答:•strace •lsof Linux操作系统的知识点总结4.如何分析操作系统 实际流程: 读数据》数据>硬盘》虚拟内存(swaP)》内存》cpu缓存》执行队列 分析方向,正好相反 Linux操作系统的知识点总结4.各个部分常出现的漏洞 •CPU: 容易出现该类瓶颈的邮件服务器、动态web服务器 •内存: 容易出现该类瓶颈的打印服务器、...

linux命令主要有哪几种?
答:Linux运维人员必会的120个命令 来自《跟老男孩学Linux运维:核心系统命令实战》一书 前言 第1章 Linux命令行简介 / 1 1.1Linux命令行概述 / 1 1.2在Linux命令行下查看命令帮助 / 4 1.3Linux shutdown reboot halt / 9 关机:shutdown -h now halt init 0 第2章 文件和目录操作命令 / 13 ...

linux必学的60个命令
答:而且可以根据自身的需要来修改完善Linux,使其最大化地适应用户的需要。Linux不仅系统性能稳定,而且是开源软件。其核心防火墙组件性能高效、配置简单,保证了系统的安全。在很多企业网络中,为了追求速度和安全,Linux不仅仅是被网络运维人员当作服务器使用,甚至当作网络防火墙,这是Linux的一大亮点。

linux常用的命令有哪些
答:1.1 pwd命令 该命令的英文解释为print working directory(打印工作目录)。输入pwd命令,Linux会输出当前目录。1.2 cd命令 cd命令用来改变所在目录。cd / 转到根目录中 cd ~ 转到/home/user用户目录下 cd /usr 转到根目录下的usr目录中---绝对路径 cd test 转到当前目录下的test子目录中---...

Linux运维工程师都需要具备哪些技能和职业品质
答:2、搭建服务:Linux服务有很多种,每个公司使用是截然不同的,所以常见的基础一定要掌握好,比如说ftp、Bind、DHCP、SAMBA服务要了解会简单配置,不光会搭建,一定要熟悉服务里面的配置。3、掌握脚本语言:shell语言是这个行业中必须要掌握的,一些比较简单的系统管理shell脚本是最为常见的、使用到的。另外...