范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Linux下10个帮助你定位和调试用的命令大收集

  本文列出在Linxu下帮助你调试或定位问题常用的命令,相信你一定会用到。本文旨在抛砖引玉,具体的使用详情可自行查找。
  # file
  Linux file命令用于查看文件类型。  # file /bin/ls /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aaf05615b6c91d3cbb076af81aeff531c5d7dfd9, stripped # file study study: directory
  # ldd
  ldd的作用是打印可执行档依赖的共享库文件。针对动态链接的二进制文件运行它会显示其所有依赖的库及其路径。  $ ldd /bin/ls linux-vdso.so.1 => (0x00007ffd623ef000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fd138066000) libcap.so.2 => /lib64/libcap.so.2 (0x00007fd137e61000) libacl.so.1 => /lib64/libacl.so.1 (0x00007fd137c58000) libc.so.6 => /lib64/libc.so.6 (0x00007fd13788a000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fd137628000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fd137424000) /lib64/ld-linux-x86-64.so.2 (0x00007fd13828d000) libattr.so.1 => /lib64/libattr.so.1 (0x00007fd13721f000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd137003000) # ltrace
  ltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用,可以作为堆栈调用跟踪调试使用。  ltrace [option ...] [command [arg ...]]  -a 对齐具体某个列的返回值。 -c 计算时间和调用,并在程序退出时打印摘要。 -C 解码低级别名称(内核级)为用户级名称。 -d 打印调试信息。 -e 改变跟踪的事件。 -f 跟踪子进程。 -h 打印帮助信息。 -i 打印指令指针,当库调用时。 -l 只打印某个库中的调用。 -L 不打印库调用。 -n, --indent=NR 对每个调用级别嵌套以NR个空格进行缩进输出。 -o, --output=file 把输出定向到文件。 -p PID 附着在值为PID的进程号上进行ltrace。 -r 打印相对时间戳。 -s STRLEN 设置打印的字符串最大长度。 -S 显示系统调用。 -t, -tt, -ttt 打印绝对时间戳。 -T 输出每个调用过程的时间开销。 -u USERNAME 使用某个用户id或组ID来运行命令。 -V, --version 打印版本信息,然后退出。   # ltrace ./exe __libc_start_main(0x40052d, 1, 0x7ffc38054de8, 0x400550  puts("hello"hello ) = 6 +++ exited (status 0) +++
  # hexdump
  hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看。  $ hexdump /bin/ls |head 0000000 457f 464c 0102 0001 0000 0000 0000 0000 0000010 0003 003e 0001 0000 5850 0000 0000 0000 0000020 0040 0000 0000 0000 03a0 0002 0000 0000 0000030 0000 0000 0040 0038 0009 0040 001c 001b 0000040 0006 0000 0005 0000 0040 0000 0000 0000 0000050 0040 0000 0000 0000 0040 0000 0000 0000 0000060 01f8 0000 0000 0000 01f8 0000 0000 0000 0000070 0008 0000 0000 0000 0003 0000 0004 0000 0000080 0238 0000 0000 0000 0238 0000 0000 0000 0000090 0238 0000 0000 0000 001c 0000 0000 0000 # strings
  strings命令 在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。strings命令对识别随机对象文件很有用。  语法: strings [ -a ] [ - ] [ -o ] [ -t Format ] [ -n Number ] [ -Number ] [file ... ]  -a --all:扫描整个文件而不是只扫描目标文件初始化和装载段 -f –print-file-name:在显示字符串前先显示文件名 -n –bytes=[number]:找到并且输出所有NUL终止符序列 - :设置显示的最少的字符数,默认是4个字符 -t --radix={o,d,x} :输出字符的位置,基于八进制,十进制或者十六进制 -o :类似--radix=o -T --target= :指定二进制文件格式 -e --encoding={s,S,b,l,B,L} :选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit @ :读取中选项  $ strings /bin/ls | head /lib64/ld-linux-x86-64.so.2 libselinux.so.1 __gmon_start__ _init fgetfilecon freecon lgetfilecon _fini libcap.so.2 cap_to_text # readelf
  一般用于查看ELF格式的文件信息,常见的文件如在Linux上的可执行文件,动态库(* .so)或者静态库(* .a) 等包含ELF格式的文件。  $ readelf -h exe ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2"s complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x400440 Start of program headers: 64 (bytes into file) Start of section headers: 6432 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 9 Size of section headers: 64 (bytes) Number of section headers: 30 Section header string table index: 29 # objdump
  objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息。  $ cat exe.c #include  int main() {  printf("hello "); return 0;  }   $ objdump -S exe ...  000000000040052d 
: 40052d: 55 push %rbp 40052e: 48 89 e5 mov %rsp,%rbp 400531: bf e0 05 40 00 mov $0x4005e0,%edi 400536: e8 d5 fe ff ff callq 400410 40053b: b8 00 00 00 00 mov $0x0,%eax 400540: 5d pop %rbp 400541: c3 retq 400542: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 400549: 00 00 00 40054c: 0f 1f 40 00 nopl 0x0(%rax) ... # strace   strace常用来跟踪进程执行时的系统调用和所接收的信号。在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 $ strace ./exe execve("./exe", ["./exe"], [/* 27 vars */]) = 0 brk(NULL) = 0xe22000 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0e1780e000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=83540, ...}) = 0 mmap(NULL, 83540, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f0e177f9000 close(3) = 0 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "177ELF21133>120&2"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=2156160, ...}) = 0 mmap(NULL, 3985888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0e17220000 mprotect(0x7f0e173e3000, 2097152, PROT_NONE) = 0 mmap(0x7f0e175e3000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c3000) = 0x7f0e175e3000 mmap(0x7f0e175e9000, 16864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f0e175e9000 close(3) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0e177f8000 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0e177f6000 arch_prctl(ARCH_SET_FS, 0x7f0e177f6740) = 0 mprotect(0x7f0e175e3000, 16384, PROT_READ) = 0 mprotect(0x600000, 4096, PROT_READ) = 0 mprotect(0x7f0e1780f000, 4096, PROT_READ) = 0 munmap(0x7f0e177f9000, 83540) = 0 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0e1780d000 write(1, "hello ", 6hello ) = 6 exit_group(0) = ? +++ exited with 0 +++   # nm   nm 是name的缩写,它显示指定文件中的符号信息,文件可以是对象文件、可执行文件或对象文件库。如果文件中没有包含符号信息,nm报告该情况,但不把他解释为出错。nm缺省情况下报告十进制符号表示法下的数字值。 $ nm exe 0000000000601034 B __bss_start 0000000000601034 b completed.6355 0000000000601030 D __data_start 0000000000601030 W data_start 0000000000400470 t deregister_tm_clones 00000000004004e0 t __do_global_dtors_aux 0000000000600e18 t __do_global_dtors_aux_fini_array_entry 00000000004005d8 R __dso_handle 0000000000600e28 d _DYNAMIC 0000000000601034 D _edata 0000000000601038 B _end 00000000004005c4 T _fini 0000000000400500 t frame_dummy 0000000000600e10 t __frame_dummy_init_array_entry 0000000000400710 r __FRAME_END__ 0000000000601000 d _GLOBAL_OFFSET_TABLE_ w __gmon_start__ 00000000004005e8 r __GNU_EH_FRAME_HDR 00000000004003e0 T _init 0000000000600e18 t __init_array_end 0000000000600e10 t __init_array_start 00000000004005d0 R _IO_stdin_used 0000000000600e20 d __JCR_END__ 0000000000600e20 d __JCR_LIST__ 00000000004005c0 T __libc_csu_fini 0000000000400550 T __libc_csu_init U __libc_start_main@@GLIBC_2.2.5 000000000040052d T main U puts@@GLIBC_2.2.5 00000000004004a0 t register_tm_clones 0000000000400440 T _start 0000000000601038 D __TMC_END__ ...   # gdb   gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。 $ gcc -g -o exe exe.c $ gdb exe GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-115.el7 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu". For bug reporting instructions, please see: ... Reading symbols from /home/study/exe...done. (gdb) list 1 #include 2 int main() 3 { 4 5 printf("hello "); 6 return 0; 7 8 } (gdb) b 5 Breakpoint 1 at 0x400531: file exe.c, line 5. (gdb) r Starting program: /home/study/exe Breakpoint 1, main () at exe.c:5 5 printf("hello "); (gdb) n hello 6 return 0; (gdb)

血糖过高,如何吃水果更合理?掌握5个要点或能避免病情加重高血糖是当代中老年人较为常见的代谢综合征之一,而且,由于现代人饮食搭配的不合理以及运动习惯的匮乏,很多青少年也表现出不同程度的血糖过高症状。一旦血糖值告急,人们在食物的选择上就会分7个习惯会让关节老的更快,若你中招,趁早改掉,别等老了后悔俗话说,树老根先枯,人老腿先衰。膝关节是人体最大的关节,也很容易受损,很多人一上了年纪,膝盖就容易出现各种各样的问题。要知道,我们的膝盖是有寿命的,大约60年左右,若提前用完了,对你知道便秘的人,排不出去的便便都去哪了吗?你有没有想过,如果长时间不大便,体内的便便去哪了呢?一般情况下吃进去的食物,在经过胃肠道的时候会经过第一次的吸收食物的体积就会有所缩小胃里没法消化吸收的食物就会进入了小肠然后被小肠民间俗语一个柿子十副药是什么意思?柿子能吃还是不能吃?秋季是柿子的味道,自古以来柿子都被赋予美好的寓意,还被誉为果中圣品。相传古代宋朝人过年的时候,会在餐桌上摆放一种叫百事吉的利市,就是将柿子橘子和柏枝都放到同一个盘子里,先将柏枝折断白萝卜是结节加速器吗?消化科医生若不想癌变,少吃5物导语民间白萝卜一直有着小人参的美誉,而且白萝卜当中含有丰富的营养价值和药用价值,从民间里的一些俗语我们就能够看出。比如冬吃萝卜,夏吃姜,不用医生开药方萝卜上市,医生没事,萝卜进城,年少不知孟超好,错把平平当成宝上一篇我们聊到咪咕系主播和腾讯主播的pk(详情腾讯系与咪咕系的PK)腾讯系与咪咕系的PK今天我们来聊一聊腾讯系的前方记者,不知道大家伙熟知的是哪一位,周玲安还是烤肉姐恐惧?都不是,连丢8局错失冠军,有四川丁俊晖之称的周跃龙为何一触即溃?2022北爱尔兰公开赛落下帷幕,相信有不少熬夜看决赛的朋友一定非常难受周跃龙明明有绝对的领先优势,却在后面的比赛中一触即溃,连丢八局错失排名赛首冠。上半场马克艾伦24落后,周跃龙本他,是中国龙队,是日本乒坛一姐的崇拜偶像,美女老婆吸睛揭秘背后故事知悉幕后真相他,在国内是六边形战士,在国外被日本队长疯狂示爱,最后却没能和日本货国女队长擦出火花。一六边形战士结缘乒乓球竟是这个原因6岁小马龙又白又奶训练1988年,马160180cm男生简约穿搭,八套秋冬季高级感搭配秋日生活打卡季秋冬穿搭不仅要满足保暖需求,还要穿出简约又不单调的时尚感!今天分享八套随性高级轻熟简约的日常秋冬穿搭灵感,运用基础款进行叠穿搭配,干净清爽的同时又能增加整体穿搭的层次为什么我的孩子越来越丑?都说女大十八变,越变越好看,可我家女儿怎么越来越丑了,晚上睡觉张着口,小孩子家家的却呼噜声很大,小李很困惑,便带孩子到医院检查,医生诊断为腺样体肥大,建议切除。图片来源于网络什么是你是独裁家长吗?亲爱的友友们,您既然已经点开了,就请您花几分钟的时间有效阅读一下吧,谢谢你会逼着孩子按照你的要求去做吗?也许孩子会在你的压力一下乖乖听话,乖乖顺从,但是这却不能让孩子从内心深处真正
胡润榜上的蒋仁生和他的代理公司智飞生物11月8日,胡润研究院发布2022胡润百富榜,智飞生物的蒋仁生家族以820亿元上榜。从乡村教师到市值千亿的上市公司老板,蒋仁生创办的智飞生物却撕不掉代理公司的标签。无论是创业之初引爽!加拿大总理诬告中国,加方要求撤资,中企找上阿根廷投160亿虽然加拿大坐拥世界第二大领土面积,但充其量只是个小国,不仅人口少,还因为眼界小,一直作为美国附庸存在,没有自身独立性,美国一旦施压,就会立马改变原则。特别是当今的小特鲁多政府,完全双11里的快递小哥日派单400余件,儿子快不认识我了三湘都市报全媒体记者胡锐视频李致远一年一度的双11正在上演。今年双11,包裹大军还如往年一样凶猛吗?人们口中日薪500元的快递小哥又是如何工作的?11月7日,三湘都市报记者跟着圆通董宇辉推荐的姥姥语录,迷茫的时候读一读前些天,董宇辉与央视主持人倪萍聊天时,谈及倪萍写的书姥姥语录。董宇辉说这是一本可以医治现代病的书,每一个在生活中迷失方向的人都可以读一读。倪萍的姥姥是一位活了99岁的老人,历经世事买下霍华德,一口气签3名NBA球员!财大气粗的台湾联赛,什么来头经多方消息证实,台湾桃园云豹队已经签下了德怀特霍华德。鉴于联赛规则限制,后者月薪最高为3万,单赛季薪水则为18万美元左右。上赛季,霍华德效力于湖人,出战了60场常规赛。虽然他场均仍全锦赛冷门不断,四大世界冠军先后输球,王楚钦输给国乒退役老将全锦赛冷门不断,四大世界冠军先后输球,王楚钦意外地输给退役老将!北京时间11月5号,全锦赛的两项团体比赛都已经进行到了八进四的阶段,在昨天进行的十六进八的比赛当中,男团和女团先后有286!威少虽败犹荣!老詹拉胯,湖人14分惨败!爵士不要文班亚马在强势拿下2连胜后,状态有所回暖的湖人队,此役坐镇主场,迎来了爵士队的挑战。湖人队方面,威少状态火爆,此役湖人队能否捍卫主场,向3连胜发起冲击,可以说让这场比赛充满了看点。反观爵士CBA3消息!阿联火线回归男篮,周琦带伤报道国家队,新疆新帅亮相在中国篮球转换成国家队模式后,大家讨论更多的,似乎并不是男篮具体的技战术,也不是接下来男篮对手的情况,而是主教练杜锋的选人和用人,以及他通过媒体对球迷的回应。像杜锋这样充满争议的主哈登遭遇重伤了,欧文终于道歉了,格林没有激情了此前在和奇才的比赛中哈登遭遇了受伤,现在确认他右脚肌腱拉伤,预计至少缺战一个月。现年33岁的哈登自离开火箭后,他的常规赛出勤率就直线下滑,上赛季他一共出战了65场常规赛,出勤率不到CBA最新消息广东签约孙椿棚周琦带伤出战,力挺杜锋。北京时间11月5日,CBA休赛期刚刚开启,中国男篮第五窗口期世预赛集训队,就马不停气的从赛区前往广州集合,此次中国男篮集训时间只有6天时间,可以说时间紧任务朱婷手术后疤痕曝光好长一道口子!球迷直呼好心疼朱婷复出了,在经历了手腕伤病以及竞技状态低谷,再到手术康复后,我们等来了中国女排的女王。不过,朱婷的手腕疤痕,或许要伴随她一段时间了。朱婷是什么伤?朱婷的伤病在于右手手腕。这个伤病