Linux下10个帮助你定位和调试用的命令大收集
本文列出在Linxu下帮助你调试或定位问题常用的命令,相信你一定会用到。本文旨在抛砖引玉,具体的使用详情可自行查找。
file
Linuxfile命令用于查看文件类型。filebinlsbinls:ELF64bitLSBexecutable,x8664,version1(SYSV),dynamicallylinked(usessharedlibs),forGNULinux2。6。32,BuildID〔sha1〕aaf05615b6c91d3cbb076af81aeff531c5d7dfd9,strippedfilestudystudy:directory
ldd
ldd的作用是打印可执行档依赖的共享库文件。针对动态链接的二进制文件运行它会显示其所有依赖的库及其路径。lddbinlslinuxvdso。so。1(0x00007ffd623ef000)libselinux。so。1lib64libselinux。so。1(0x00007fd138066000)libcap。so。2lib64libcap。so。2(0x00007fd137e61000)libacl。so。1lib64libacl。so。1(0x00007fd137c58000)libc。so。6lib64libc。so。6(0x00007fd13788a000)libpcre。so。1lib64libpcre。so。1(0x00007fd137628000)libdl。so。2lib64libdl。so。2(0x00007fd137424000)lib64ldlinuxx8664。so。2(0x00007fd13828d000)libattr。so。1lib64libattr。so。1(0x00007fd13721f000)libpthread。so。0lib64libpthread。so。0(0x00007fd137003000)ltrace
ltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用,可以作为堆栈调用跟踪调试使用。ltrace〔option。。。〕〔command〔arg。。。〕〕a对齐具体某个列的返回值。c计算时间和调用,并在程序退出时打印摘要。C解码低级别名称(内核级)为用户级名称。d打印调试信息。e改变跟踪的事件。f跟踪子进程。h打印帮助信息。i打印指令指针,当库调用时。l只打印某个库中的调用。L不打印库调用。n,indentNR对每个调用级别嵌套以NR个空格进行缩进输出。o,outputfile把输出定向到文件。pPID附着在值为PID的进程号上进行ltrace。r打印相对时间戳。sSTRLEN设置打印的字符串最大长度。S显示系统调用。t,tt,ttt打印绝对时间戳。T输出每个调用过程的时间开销。uUSERNAME使用某个用户id或组ID来运行命令。V,version打印版本信息,然后退出。ltrace。exelibcstartmain(0x40052d,1,0x7ffc38054de8,0x400550unfinished。。。puts(hellohello)6exited(status0)
hexdump
hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看。hexdumpbinlshead0000000457f464c01020001000000000000000000000100003003e0001000058500000000000000000020004000000000000003a00002000000000000030000000000040003800090040001c001b000004000060000000500000040000000000000000005000400000000000000040000000000000000006001f800000000000001f800000000000000000700008000000000000000300000004000000000800238000000000000023800000000000000000900238000000000000001c000000000000strings
strings命令在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。strings命令对识别随机对象文件很有用。语法:strings〔a〕〔〕〔o〕〔tFormat〕〔nNumber〕〔Number〕〔file。。。〕aall:扫描整个文件而不是只扫描目标文件初始化和装载段fprintfilename:在显示字符串前先显示文件名nbytes〔number〕:找到并且输出所有NUL终止符序列:设置显示的最少的字符数,默认是4个字符tradix{o,d,x}:输出字符的位置,基于八进制,十进制或者十六进制o:类似radixoTtarget:指定二进制文件格式eencoding{s,S,b,l,B,L}:选择字符大小和排列顺序:s7bit,S8bit,{b,l}16bit,{B,L}32bit:读取中选项stringsbinlsheadlib64ldlinuxx8664。so。2libselinux。so。1gmonstartinitfgetfileconfreeconlgetfileconfinilibcap。so。2captotextreadelf
一般用于查看ELF格式的文件信息,常见的文件如在Linux上的可执行文件,动态库(。so)或者静态库(。a)等包含ELF格式的文件。readelfhexeELFHeader:Magic:7f454c46020101000000000000000000Class:ELF64Data:2scomplement,littleendianVersion:1(current)OSABI:UNIXSystemVABIVersion:0Type:EXEC(Executablefile)Machine:AdvancedMicroDevicesX8664Version:0x1Entrypointaddress:0x400440Startofprogramheaders:64(bytesintofile)Startofsectionheaders:6432(bytesintofile)Flags:0x0Sizeofthisheader:64(bytes)Sizeofprogramheaders:56(bytes)Numberofprogramheaders:9Sizeofsectionheaders:64(bytes)Numberofsectionheaders:30Sectionheaderstringtableindex:29objdump
objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息。catexe。cincludestdio。hintmain(){printf(hello);return0;}objdumpSexe。。。000000000040052dmain:40052d:55pushrbp40052e:4889e5movrsp,rbp400531:bfe0054000mov0x4005e0,edi400536:e8d5feffffcallq400410putsplt40053b:b800000000mov0x0,eax400540:5dpoprbp400541:c3retq400542:662e0f1f840000nopwcs:0x0(rax,rax,1)400549:00000040054c:0f1f4000nopl0x0(rax)。。。strace
strace常用来跟踪进程执行时的系统调用和所接收的信号。在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。strace。exeexecve(。exe,〔。exe〕,〔27vars〕)0brk(NULL)0xe22000mmap(NULL,4096,PROTREADPROTWRITE,MAPPRIVATEMAPANONYMOUS,1,0)0x7f0e1780e000access(etcld。so。preload,ROK)1ENOENT(Nosuchfileordirectory)open(etcld。so。cache,ORDONLYOCLOEXEC)3fstat(3,{stmodeSIFREG0644,stsize83540,。。。})0mmap(NULL,83540,PROTREAD,MAPPRIVATE,3,0)0x7f0e177f9000close(3)0open(lib64libc。so。6,ORDONLYOCLOEXEC)3read(3,177ELF211331202。。。,832)832fstat(3,{stmodeSIFREG0755,stsize2156160,。。。})0mmap(NULL,3985888,PROTREADPROTEXEC,MAPPRIVATEMAPDENYWRITE,3,0)0x7f0e17220000mprotect(0x7f0e173e3000,2097152,PROTNONE)0mmap(0x7f0e175e3000,24576,PROTREADPROTWRITE,MAPPRIVATEMAPFIXEDMAPDENYWRITE,3,0x1c3000)0x7f0e175e3000mmap(0x7f0e175e9000,16864,PROTREADPROTWRITE,MAPPRIVATEMAPFIXEDMAPANONYMOUS,1,0)0x7f0e175e9000close(3)0mmap(NULL,4096,PROTREADPROTWRITE,MAPPRIVATEMAPANONYMOUS,1,0)0x7f0e177f8000mmap(NULL,8192,PROTREADPROTWRITE,MAPPRIVATEMAPANONYMOUS,1,0)0x7f0e177f6000archprctl(ARCHSETFS,0x7f0e177f6740)0mprotect(0x7f0e175e3000,16384,PROTREAD)0mprotect(0x600000,4096,PROTREAD)0mprotect(0x7f0e1780f000,4096,PROTREAD)0munmap(0x7f0e177f9000,83540)0fstat(1,{stmodeSIFCHR0620,strdevmakedev(136,0),。。。})0mmap(NULL,4096,PROTREADPROTWRITE,MAPPRIVATEMAPANONYMOUS,1,0)0x7f0e1780d000write(1,hello,6hello)6exitgroup(0)?exitedwith0
nm
nm是name的缩写,它显示指定文件中的符号信息,文件可以是对象文件、可执行文件或对象文件库。如果文件中没有包含符号信息,nm报告该情况,但不把他解释为出错。nm缺省情况下报告十进制符号表示法下的数字值。nmexe0000000000601034Bbssstart0000000000601034bcompleted。63550000000000601030Ddatastart0000000000601030Wdatastart0000000000400470tderegistertmclones00000000004004e0tdoglobaldtorsaux0000000000600e18tdoglobaldtorsauxfiniarrayentry00000000004005d8Rdsohandle0000000000600e28dDYNAMIC0000000000601034Dedata0000000000601038Bend00000000004005c4Tfini0000000000400500tframedummy0000000000600e10tframedummyinitarrayentry0000000000400710rFRAMEEND0000000000601000dGLOBALOFFSETTABLEwgmonstart00000000004005e8rGNUEHFRAMEHDR00000000004003e0Tinit0000000000600e18tinitarrayend0000000000600e10tinitarraystart00000000004005d0RIOstdinused0000000000600e20dJCREND0000000000600e20dJCRLIST00000000004005c0Tlibccsufini0000000000400550TlibccsuinitUlibcstartmainGLIBC2。2。5000000000040052dTmainUputsGLIBC2。2。500000000004004a0tregistertmclones0000000000400440Tstart0000000000601038DTMCEND。。。
gdb
gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。gccgoexeexe。cgdbexeGNUgdb(GDB)RedHatEnterpriseLinux7。6。1115。el7Copyright(C)2013FreeSoftwareFoundation,Inc。LicenseGPLv3:GNUGPLversion3orlaterhttp:gnu。orglicensesgpl。htmlThisisfreesoftware:youarefreetochangeandredistributeit。ThereisNOWARRANTY,totheextentpermittedbylaw。Typeshowcopyingandshowwarrantyfordetails。ThisGDBwasconfiguredasx8664redhatlinuxgnu。Forbugreportinginstructions,pleasesee:http:www。gnu。orgsoftwaregdbbugs。。。Readingsymbolsfromhomestudyexe。。。done。(gdb)list1includestdio。h2intmain()3{45printf(hello);6return0;78}(gdb)b5Breakpoint1at0x400531:fileexe。c,line5。(gdb)rStartingprogram:homestudyexeBreakpoint1,main()atexe。c:55printf(hello);(gdb)nhello6return0;(gdb)
喝酒30年的老行家,请客吃饭时必备的3款酒,你知道吗?咱们在日常生活中,无论是请客吃饭还是商业应酬,又或是和朋友闲聊小酌,都是需要喝酒的。每个人偏好的口味和选酒的侧重点都是不太一样的,小编就先来给大家说说自己在挑酒时更看重的点吧。首先
立体多维政策保障丰收背后的大国粮策央视网消息今年,国家持续强化政策支持,加大投入力度,逐步构建起要素多元立体多维的扶持粮食生产的政策保障体系,成为丰收的有力支撑。在补贴方面,今年国家继续安排耕地地力保护补贴,稳定实
大曝光!公募逆市加仓这些龙头股中国基金报记者李树超见习记者雨田受美债收益率俄乌冲突疫情反复和经济下行压力扰动,今年三季度沪指从3400点跌至3000点附近,在A股快速变盘期间,公募基金作为机构资金风向标,如何在
清华博士辞职创业,创成江苏瞪羚企业现代快报讯(记者杨亦文)他是家中最小的,也是唯一的男孩,他的上面有6个姐姐。大家或许会想,在这样环境成长的男孩肯定是娇生惯养难有作为的。但彭伟平却惊掉了众人的下巴,从小就刻苦努力,
反对动态清零的恶果开始显现,香港又一家老牌企业清盘近一段时间以来,数万名香港民众花钱购买免打针纸,让本就严峻的香港防疫形势雪上加霜。而香港迟迟未能缓解的疫情,也使得众多期盼着与内地实现正常通关的香港商家面临着更加艰难的局面。据港媒
好的亲密关系让彼此照耀建立一段相互滋养彼此信任且长久的亲密关系,需要发展我们的很多特质智慧力量感爱慈悲创造力勇气阴柔力量阳刚力量在这个过程中,两个人的成长节奏会不同有时你需要做追随者,有时需要做引领者有
在守正创新中探索高速公路品牌建设的湖南样本路,在不断延伸高速路网,在不断完善,社会公众对高速出行的需求也在不断提升。近年来,湖南省高速公路集团有限公司(以下简称湖南高速集团)在加快推进高速公路建设的同时,守正创新,开拓进取
小米上架新款充电器新品支持UFCS1。0融合快充尽管在10月27日的RedmiNote12系列新品发布会上已经带来了多款新品,但其实小米还准备了更多的新品在最近正式上架,比如最近在小米商城上架的小米67WGaN双口充电器套装和小
新车触控按键被吐槽?大众将改回方向盘实体按键,新高尔夫首搭文懂车帝原创曹浩懂车帝原创产品日前,我们从海外媒体获悉,大众汽车CEO施文韬(ThomasSchfer)在其个人社交媒体上表示,大众品牌旗下车型将在今后推出的车型中改回方向盘上的实
中荣股份登陆创业板产品品类覆盖广泛细分领域品牌优势明显近年来,我国包装行业实现了持续快速发展,现已形成以纸包装塑料包装金属包装玻璃包装包装印刷和包装机械为主要产品的独立完整门类齐全的现代包装工业体系,基本能够满足国内消费和商品出口的需
年均复合增长30,这个服饰品牌很懂情绪管理?文丨木狸,出品丨零售氪星球(IDLSKXQ)情绪消费日渐成为影响商业世界的新力量。今年7月,话梅美妆集合店以银色集装箱设计风格的快闪店登陆广州万菱汇,拉满对生活与美的态度9月,潮玩