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

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)

曝苹果iPhone14热度非常高,iPhone13已成明日黄花跌价无极限外界除了期待华为Mate50的到来,苹果iPhone14的热度也非常高。iPhone14还没有正式发布,就已经登上多个热搜了。苹果每年发布新机的前一段时间,都是曝光信息最频繁的时候这个新晋国家5A级景区太美了!可观云海坐缆车走最长天桥,去一百次都不嫌多最近天气实在是太热了,天天待在空调房里,根本不敢出门,加上又忙,我已经很久没有出门去亲近自然了,整个人都很倦怠,只能和家人一起看手机相册,翻到去年在三百山的照片,真叫人怀念啊!安远精品武侠逆水寒新服夏水流萤将于8月26日来袭作为网易精品武侠大作热门网游逆水寒终于宣布新服夏水流萤开启时间,目前已经开启预约了,新服夏水流萤正式开启时间2022年8月26日1400开启,抢先新服预约2022年8月18日100美国在德克萨斯州发现了1亿多年前的古恐龙脚印美国在德克萨斯州发现了1亿多年前的古恐龙脚印美国当地时间2022年8月26日外媒消息报道称,德克萨斯州西北部的恐龙谷州立公园发现了多条属于高棘龙的足迹,因为大范围的干旱导致流经德克精致女孩的100条生活小习惯我是锁锁,点击上方关注,每天为你分享生活感悟和成长精进干货。01。出门时涂防晒和口红。02。睡觉前坚持涂润唇膏。03。会扎许多精致的发型,有时还配上蝴蝶结。04。早起喝一杯温水。0有时候觉得血缘关系相当于陌生人我记得小时候被我父母送去亲戚家寄住,因为我要读书,学校离家很远,所以不得已要去住。刚那时候我上小学,只知道我要离开父母一段时间,在这段时间里我每天都偷偷的躲在角落里面哭,但是我知道中断50多年后,美国新一代登月计划即将开始,是否意有所指呢?美国国家航空航天局22日宣布,美国新一代登月火箭太空发射系统(SLS),将会在29日搭载猎户座飞船升空,执行新一代阿尔忒弥斯登月计划。这次如同阿波罗登月计划一样,以飞行次数作为编号从产品角度,预计华为Mate50的三个结果,哪一个可能变成现实?华为Mate50,会不会成为下一个爆款手机?从目前的预订数量来看,很有可能成为苹果手机之后的另一个爆款手机产品,因为到目前为止,华为官网上的预订量已经超过100万台。一部还没有上市奔向草原天路!沉寂万年的火山,星空玻璃屋里的现实版狼图腾WELCOMETONEIMENGGU驰骋在乌拉盖的大草原上遇见草原河流风和自由的精灵在17。96万平方公里的锡林郭勒草原上奔驰沿着中国版的66号公路一路穿越平原山川河流火山群与蒙古玫瑰之战结局顾念被丰盛解雇,顾念委屈大哭,丰盛与她决裂顾念被舆论裹挟,身不由己玫瑰之战感觉剧情要失控了,到了大结局,观众没有看到预期的结果!反而仪盛和内斗更加激烈了,一切因为顾念,丰盛对她伤心失望,伤心解雇了她令仪痛骂顾念背叛,李大为苹果发布会,把Adobe看懵了,PSMAC紧急更新!功能真绝北京时间6月7日凌晨1点,苹果公司一年一度的全球开发者大会(WWDC)在美国旧金山如约而至。发布会真正的主角,再次聚焦在硬件上。时隔两年的WWDC上,M1的真正代际升级版M2芯片终
薛佳凝通天塔热播饰演抚慰人心陶瓷由秦俊杰邓家佳刘欢李梦孙浩陈燃洪剑涛主演,薛佳凝友情出演,黄梦莹特别出演的通天塔正在腾讯视频热播。该剧是由蔡骏偷窥一百二十天改编,这是他2014年创作的小说,主要讲述的是被囚禁者崔同为好声音冠军,邢晗铭和单依纯差距太大,是李荣浩高估了吗文泛fan之谈作为曾经现象级的音综,中国好声音造就了好多如今依然活跃在娱乐圈的明星,他们有些人从草根变成了炙手可热的艺人。比如像第一季的冠军梁博,第三季的冠军张碧晨,第四季的冠军张她曾被封中戏最美校花,颜值胜过章子怡,自爆如今45岁不婚内幕章子怡在大学期间曾与曾黎梅婷秦海璐袁泉胡静张彤李敏七位同学被封为八大金钗,但当时被认为星途最被看好的其实并不是章子怡,而是她的同学曾黎,是大家公认的校花。今年初曾黎参加节目时,首度Angelababy谈小7岁姐弟恋?海边拥抱画面曝光Angelababy赖冠霖主演的电视剧爱情应该有的样子,两人在剧中大谈跨越7岁年龄隔阂的甜蜜姐弟恋。Angelababy饰演的美妆公司经理尹亦可,久违重逢赖冠霖饰演海外归来自己异父香港功夫巨星定居四川!因爱国言论被封杀,妻子惨遭泼硫酸毁容01hr6月23日,香港演员梁小龙现身内地四川做核酸,引发一波网友的回忆杀。当日,梁小龙穿着白色上衣,黑色短裤,脚蹬一双老布鞋,十分接地气。即便身边有很多人,但却没一个人认出这个老同样是浓颜系美男,把严屹宽陈坤放在一起,简直是神仙打架颜值不仅有甜系和盐系之分,还有浓颜系和淡颜系的区分。浓颜系的男生脸部骨感较强,五官占据脸部的比例较多且都较为深邃,第一眼望去视觉冲击力较强。娱乐圈中的浓颜系美男更是数不胜数,接下来万众瞩目!七月番剧神仙来袭番剧推荐众所周知,番剧打架年年有,一波未平,一波又起!在这个看番剧简介都觉得浪费时间的时代里,不如听我给你推荐再去看番来得快!点赞收藏加关注!老板发财挡不住!为什么有人爱吸烟啊,因离开了快本平台,杜海涛终于认清自己不再担任快乐大本营的常驻主持人之后,杜海涛的资源直线下降,整个2022年,他也没在什么节目之中露脸。在快乐大本营节目组停止的这4个多月时间内,杜海涛并没有被其他电视台哄抢,十分尴尬武林外传中细思极恐的一集,莫小贝的那个梦到底要表达什么武林外传虽然只是一部情景喜剧,但是能够长久不衰,不断被网友提及,就在于它有很多可以琢磨的地方。剧中的很多情节,初看时并没有什么不妥,但看的次数越多,就越会让人产生细思极恐的感受。例传家大结局,所有角色之中她的反转最让人意外传家这部民国电视剧在大家恋恋不舍的时候大结局了,不过个人觉得45集是刚刚好。在上一集的河豚宴上易钟灵和易忠秀用剧毒的野生河豚代替了普通的河豚,杀死了在场的日本人。虽然鹰司没有吃,但华为手环7采用Ambiq公司Apollo3BluePlus主控芯片随着芯片集成度越来越高,工艺也越来越精细,智能手表智能眼镜等智能穿戴设备在拥有简约的外观时,同时还拥有多种功能,智能穿戴市场也开始受到年轻人的追捧。近期,在智能手坏市场华为与小米都