🖍️
Command
  • Command
  • Linux
    • ab - Apache服务器的性能测试工具
    • accept - 指示打印系统接受发往指定目标打印机的打印任务
    • ack - 比grep好用的文本搜索工具
    • alias - 定义或显示别名。
    • apachectl - Apache服务器前端控制工具
    • apk - Alpine Linux 下的包管理工具
    • apropos - 在 whatis 数据库中查找字符串
    • apt-get - Debian Linux发行版中s的APT软件包管理工具
    • apt-key - 管理Debian Linux系统中的软件包密钥
    • apt-sortpkgs - Debian Linux下对软件包索引文件进行排序的工具
    • aptitude - Debian Linux系统中软件包管理工具
    • ar - 建立或修改备存文件,或是从备存文件中抽取文件
    • arch - 显示当前主机的硬件架构类型
    • arj - 用于创建和管理.arj压缩包
    • arp - arp 命令用于显示和修改 IP 到 MAC 转换表
    • arpd - 收集免费ARP信息
    • arping - 通过发送ARP协议报文测试网络
    • arptables - 管理ARP包过滤规则表
    • arpwatch - 监听网络上ARP的记录
    • as - 汇编语言编译器
    • at - 在指定时间执行一个任务
    • atop - 监控Linux系统资源与进程的工具
    • atq - 列出当前用户的at任务列表
    • atrm - 删除待执行任务队列中的指定任务
    • awk - 文本和数据进行处理的编程语言
    • axel - 多线程下载工具
    • badblocks - 查找磁盘中损坏的区块
    • basename - 打印目录或者文件的基本名称
    • batch - 在系统不繁忙的时候执行定时任务
    • bc - 算术操作精密运算工具
    • bg - 将前台终端作业移动到后台运行
    • bind - 显示或设置键盘按键与其相关的功能
    • blkid - 查看块设备的文件系统类型、LABEL、UUID等信息
    • blockdev - 从命令行调用区块设备控制程序
    • bmodinfo - 显示给定模块的详细信息
    • break - 结束for,while或until循环
    • builtin - 执行bash内建命令
    • bunzip2 - 创一个bz2文件压缩包
    • bye - 命令用于中断FTP连线并结束程序
    • bzcat - 解压缩指定的.bz2文件
    • bzcmp - 比较两个压缩包中的文件
    • bzdiff - 直接比较两个.bz2压缩包中文件的不同
    • bzgrep - 使用正则表达式搜索.bz2压缩包中文件
    • bzip2 - 将文件压缩成bz2格式
    • bzip2recover - 恢复被破坏的.bz2压缩包中的文件
    • bzless - 增强.bz2压缩包查看器
    • bzmore - 查看bzip2压缩过的文本文件的内容
    • cal - 显示当前日历或指定日期的日历
    • cancel - 取消已存在的打印任务
    • cat - 连接多个文件并打印到标准输出
    • cd - 切换用户当前工作目录
    • cdrecord - Linux系统下光盘刻录功能命令
    • chage - 修改帐号和密码的有效期限
    • chattr - 用来改变文件属性
    • chcon - 修改对象(文件)的安全上下文
    • chfn - 用来改变finger命令显示的信息
    • chgrp - 用来变更文件或目录的所属群组
    • chkconfig - 检查或设置系统的各种服务
    • chmod - 用来变更文件或目录的权限
    • chown - 用来变更文件或目录的拥有者或所属群组
    • chpasswd - 批量更新用户口令的工具
    • chroot - 把根目录换成指定的目的目录
    • chsh - 用来更换登录系统时使用的shell
    • cksum - 检查文件的CRC是否正确
    • clear - 清除当前屏幕终端上的任何信息
    • clock - 用于调整 RTC 时间
    • clockdiff - 检测两台linux主机的时间差
    • cmp - 比较两个文件是否有差异
    • col - 过滤控制字符
    • colrm - 删除文件中的指定列
    • comm - 按行比较两个已排序的文件
    • command - 调用并执行指定的命令
    • compress - 使用Lempress-Ziv编码压缩数据文件
    • consoletype - 输出已连接的终端类型
    • continue - 结束本次循环,继续执行下一个for,while或until循环
    • convertquota - 把老的配额文件转换为新的格式
    • cp - 将源文件或目录复制到目标文件或目录中
    • cpio - 用来建立、还原备份档的工具程序
    • crontab - 提交和管理用户的需要周期性执行的任务
    • csplit - 将一个大文件分割成小的碎片文件
    • cu - 用于连接另一个系统主机
    • cupsdisable - 停止指定的打印机
    • cupsenable - 启动指定的打印机
    • curl - 利用URL规则在命令行下工作的文件传输工具
    • cut - 连接文件并打印到标准输出设备上
    • date - 显示或设置系统时间与日期
    • dd - 复制文件并对原文件的内容进行转换和格式化处理
    • declare - 声明变量,设置或显示变量的值和属性
    • depmod - 分析可载入模块的相依性
    • df - 显示磁盘的相关信息
    • dhclient - 动态获取或释放IP地址
    • dhcpd - 运行DHCP服务器
    • dhcrelay - 使用dhcrelay命令可以提供中继DHCP和BOOTP请求
    • diff - 比较给定的两个文件的不同
    • diff3 - 比较3个文件不同的地方
    • diffstat - 显示diff命令输出信息的柱状图
    • dig - 域名查询工具
    • dircolors - 置ls命令在显示目录或文件时所用的色彩
    • dirname - 去除文件名中的非目录部分
    • dirs - 显示目录堆栈
    • disown - 从当前的shell中移除作业
    • dmesg - 显示Linux系统启动信息
    • dmidecode - 在Linux系统下获取有关硬件方面的信息
    • dnf - 新一代的RPM软件包管理器
    • dnsdomainname - 定义DNS系统中FQDN名称的域名
    • domainname - 显示和设置系统的NIS域名
    • dos2unix - 将DOS格式文本文件转换成Unix格式
    • dpkg-deb - Debian Linux下的软件包管理工具
    • dpkg-divert - Debian Linux中创建并管理一个转向列表
    • dpkg-preconfigure - Debian Linux中软件包安装之前询问问题
    • dpkg-query - Debian Linux中软件包的查询工具
    • dpkg-reconfigure - Debian Linux中重新配制一个已经安装的软件包
    • dpkg-split - Debian Linux中将大软件包分割成小包
    • dpkg-statoverride - Debian Linux中覆盖文件的所有权和模式
    • dpkg-trigger - Debian Linux下的软件包触发器
    • dpkg - Debian Linux系统上安装、创建和管理软件包
    • dris - 显示和清空目录堆栈中的内容
    • dstat - 通用的系统资源统计工具
    • du - 显示每个文件和目录的磁盘使用空间
    • dump - 用于备份ext2或者ext3文件系统
    • e2fsck - 用于检查第二扩展文件系统的完整性
    • e2label - 设置第二扩展文件系统的卷标
    • echo - 输出指定的字符串或者变量
    • ed - 单行纯文本编辑器
    • edquota - 用于编辑指定用户或工作组磁盘配额
    • egrep - 在文件内查找指定的字符串
    • eject - 用来退出抽取式设备
    • elinks - 纯文本界面的WWW浏览器
    • elm - 纯文本邮件客户端程序
    • emacs - 功能强大的全屏文本编辑器
    • enable - 启动或禁用shell内建命令
    • env - 显示系统中已存在的环境变量
    • ethtool - 显示或修改以太网卡的配置信息
    • ex - 启动vim编辑器的ex编辑模式
    • exec - 调用并执行指定的命令
    • exit - 退出当前的shell
    • expand - 将文件的制表符转换为空白字符
    • export - 为shell变量或函数设置导出属性
    • exportfs - 管理NFS共享文件系统列表
    • expr - 一款表达式计算工具
    • false - 返回状态为失败
    • fc - 显示历史列表中的命令或修改指定的历史命令并执行
    • fdisk - 查看磁盘使用情况和磁盘分区
    • fg - 将后台作业移动到前台终端运行
    • fgrep - 为文件搜索文字字符串
    • file - 用来探测给定文件的类型
    • find - 在指定目录下查找文件
    • findfs - 标签或UUID查找文件系统
    • finger - 用于查找并显示用户信息
    • firewall-cmd - Linux上新用的防火墙软件,跟iptables差不多的工具
    • fishshell - 比 bash 更好用的 shell
    • fmt - 读取文件后优化处理并输出
    • fold - 控制文件内容输出时所占用的屏幕宽度
    • fping - fping检测主机是否存在
    • free - 显示内存的使用情况
    • fsck - 检查并且试图修复文件系统中的错误
    • ftp - 用来设置文件系统相关功能
    • ftpcount - 显示目前已FTP登入的用户人数
    • ftpshut - 在指定的时间关闭FTP服务器
    • ftptop - proftpd服务器的连接状态
    • ftpwho - 显示当前每个ftp会话信息
    • fuser - 使用文件或文件结构识别进程
    • gcc - 基于C/C++的编译器
    • gcov - 测试程序的代码覆盖率的工具
    • gdb - 功能强大的程序调试器
    • get_module - 获取Linux内核模块的详细信息
    • getenforce - 显示当前SELinux的应用模式,是强制、执行还是停用
    • getsebool - 查询SElinux策略内各项规则的布尔值
    • git - 是目前世界上最先进的分布式版本控制系统
    • gpasswd - Linux下工作组文件的管理工具
    • gpm - 提供文字模式下的滑鼠事件处理
    • grep - 强大的文本搜索工具
    • groupadd - 用于创建一个新的工作组
    • groupdel - 用于删除指定的工作组
    • groupmod - 更改群组识别码或名称
    • groups - 用来打印指定用户所属的工作组
    • grpck - 用于验证组文件的完整性
    • grpconv - 用来开启群组的投影密码
    • grpunconv - 用来关闭群组的投影密码
    • grub - 多重引导程序grub的命令行shell工具
    • gunzip - 用来解压缩文件
    • gzexe - 用来压缩可执行文件
    • gzip - 用来压缩文件
    • halt - 关闭正在运行的Linux操作系统
    • hdparm - 显示与设定硬盘的参数
    • head - 显示文件的开头部分
    • help - 该命令是bash内建命令,用于显示bash内建命令的帮助信息
    • hexdump - 显示文件十六进制格式
    • history - 显示或操作历史列表
    • host - 常用的分析域名查询工具
    • hostid - 用来打印当前主机的数字化标识
    • hostname - 显示和设置系统的主机名
    • hping3 - 测试网络及主机的安全
    • htdigest - Apache服务器内置工具
    • htop - 非内部命令一个互动的进程查看器,可以动态观察系统进程状况
    • htpasswd - apache服务器创建密码认证文件
    • hwclock - 显示与设定硬件时钟
    • iconv - 转换文件的编码方式
    • id - 显示用户的ID以及所属群组的ID
    • ifcfg - 置Linux中的网络接口参数
    • ifconfig - 配置和显示Linux系统网卡的网络参数
    • ifdown - 禁用指定的网络接口
    • ifstat - 统计网络接口流量状态
    • iftop - 一款实时流量监控工具
    • ifup - 激活指定的网络接口
    • indent - 格式化C语言的源文件
    • info - Linux下info格式的帮助指令
    • init - init进程是所有Linux进程的父进程
    • inotifywait - 异步文件系统监控机制
    • insmod - 将给定的模块加载到内核中
    • install - 安装或升级软件或备份数据
    • iostat - 监视系统输入输出设备和CPU的使用情况
    • iotop - 用来监视磁盘I/O使用状况的工具
    • ip - 网络配置工具
    • ip6tables-restore - 还原ip6tables表
    • ip6tables-save - 保存ip6tables表配置
    • ip6tables - linux中防火墙软件
    • ipcalc - 简单的IP地址计算器
    • ipcrm - 删除消息队列、信号集、或者共享内存标识
    • ipcs - 分析消息队列共享内存和信号量
    • iperf - 网络性能测试工具
    • iptables-restore - 还原iptables表的配置
    • iptables-save - 备份iptables的表配置
    • iptables - Linux上常用的防火墙软件
    • iptraf - 实时地监视网卡流量
    • iptstate - 显示iptables的工作状态
    • ispell - 检查文件中出现的拼写错误
    • jed - 主要用于编辑代码的编辑器
    • jobs - 显示作业的状态
    • joe - 强大的纯文本编辑器
    • join - 两个文件中指定栏位内容相同的行连接起来
    • jwhois - whois 客户端服务
    • kernelversion - 打印当前内核的主版本号
    • kexec - 从当前正在运行的内核引导到一个新内核
    • kill - 发送信号到进程
    • killall - 使用进程的名称来杀死一组进程
    • last - 列出目前与过去登入系统的用户相关信息
    • lastb - 列出登入系统失败的用户相关信息
    • lastlog - 显示系统中所有用户最近一次登录信息
    • ld - 将目标文件连接为可执行程序
    • ldconfig - 动态链接库管理命令
    • ldd - 打印程序或者库文件所依赖的共享库列表
    • less - 分屏上下翻页浏览文件内容
    • let - 简单的计算器,执行算术表达式
    • lftp - 优秀的文件客户端程序
    • lftpget - 调用lftp指令下载指定的文件
    • lha - 压缩或解压缩lzh格式文件
    • lilo - 安装核心载入开机管理程序
    • ln - 用来为文件创建链接
    • lnstat - 显示Linux系统的网路状态
    • local - 在函数内定义局部变量
    • locate - 比 find 好用的文件查找工具
    • logger - 在系统日志中记录相应条目
    • login - 登录系统或切换用户身份
    • logname - 用来显示用户名称
    • logout - 退出当前登录的Shell
    • logrotate - 系统日志进行轮转、压缩和删除
    • logsave - 将命令的输出信息保存到指定的日志文件
    • logwatch - 可定制和可插入式的日志监视系统
    • look - 显示文件中以指定字符串开头的任意行
    • losetup - 设定与控制循环(loop)设备
    • lp - 打印文件或修改排队的打印任务
    • lpadmin - 配置CUPS套件中的打印机和类
    • lpc - 命令行方式打印机控制程序
    • lpq - 显示打印队列中的打印任务的状态信息
    • lpr - 将文件发送给指定打印机进行打印
    • lprm - 删除打印队列中的打印任务
    • lpstat - 显示CUPS中打印机的状态信息
    • ls - 显示目录内容列表
    • lsattr - 查看文件的第二扩展文件系统属性
    • lsb_release - 显示发行版本信息
    • lsblk - 列出块设备信息
    • lscpu - 显示有关CPU架构的信息
    • lsmod - 显示已载入系统的模块
    • lsof - 显示Linux系统当前已打开的所有文件列表 lsof -p pid
    • lspci - 显示当前主机的所有PCI总线信息
    • lsusb - 显示本机的USB设备列表信息
    • ltrace - 用来跟踪进程调用库函数的情况
    • lvcreate - 用于创建LVM的逻辑卷
    • lvdisplay - 显示逻辑卷属性
    • lvextend - 扩展逻辑卷空间
    • lvreduce - 收缩逻辑卷空间
    • lvremove - 删除指定LVM逻辑卷
    • lvresize - 调整逻辑卷空间大小
    • lvscan - 扫描逻辑卷
    • lynx - 纯文本模式的网页浏览器
    • mail - 命令行下发送和接收电子邮件
    • mailq - 显示待发送的邮件队列
    • mailstat - 显示到达的邮件状态
    • make - GNU的工程化编译工具
    • man - 查看Linux中的指令帮助
    • mapfile - 从标准输入读取行并赋值到数组
    • md5sum - 计算和校验文件报文摘要的工具程序
    • mesg - 设置当前终端的写权限
    • mii-tool - 配置网络设备协商方式的工具
    • mkbootdisk - 可建立目前系统的启动盘
    • mkdir - 用来创建目录
    • mke2fs - 创建磁盘分区上的“etc2/etc3”文件系统
    • mkfs - 用于在设备上创建Linux文件系统
    • mkinitrd - 建立要载入ramdisk的映像文件
    • mkisofs - 建立ISO 9660映像文件
    • mknod - 创建字符设备文件和块设备文件
    • mkswap - 建立和设置SWAP交换分区
    • mktemp - 创建临时文件供shell脚本使用
    • modprobe - 自动处理可载入模块
    • more - 显示文件内容,每次显示一屏
    • mount - 用于挂载Linux系统外的文件
    • mpstat - 显示各个可用CPU的状态
    • mtools - 显示mtools支持的指令
    • mv - 用来对文件或目录重新命名
    • mysql - MySQL服务器客户端工具
    • mysqladmin - MySQL服务器管理客户端
    • mysqldump - MySQL数据库中备份工具
    • mysqlimport - 为MySQL服务器用命令行方式导入数据
    • mysqlshow - 显示MySQL中数据库相关信息
    • named-checkzone - 使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称
    • nano - 字符终端文本编辑器
    • nc - 用于设置路由器,是网络工具中的瑞士军刀
    • ncftp - 是增强的的FTP工具
    • nethogs - 终端下的网络流量监控工具
    • netstat - 查看Linux中网络系统状态信息
    • newusers - 用于批处理的方式一次创建多个命令
    • nfsstat - 列出NFS客户端和服务器的工作状态
    • ngrep - 方便的数据包匹配和显示工具
    • nice - 改变程序执行的优先权等级
    • nisdomainname - 显示主机NIS的域名
    • nl - 为每一个文件添加行号
    • nm - 显示二进制目标文件的符号表
    • nmap - 网络探测和安全审核
    • nmcli - 地址配置工具
    • nohup - 将程序以忽略挂起信号的方式运行起来
    • nologin - 拒绝用户登录系统
    • nslookup - 查询域名DNS信息的工具
    • ntpdate - 使用网络计时协议(NTP)设置日期和时间
    • ntsysv - 集中管理系统的各种服务
    • objdump - 显示二进制文件信息
    • od - 输出文件的八进制、十六进制等格式编码的字节
    • openssl - 强大的安全套接字层密码库
    • parted - 磁盘分区和分区大小调整工具
    • partprobe - 不重启的情况下重读分区
    • passwd - 用于让用户可以更改自己的密码
    • paste - 将多个文件按列队列合并
    • patch - 为开放源代码软件安装补丁程序
    • pathchk - 检查文件中不可移植的部分
    • perl - perl语言解释器
    • pfctl - PF防火墙的配置命令
    • pgrep - 根据用户给出的信息在当前运行进程中查找并列出符合条件的进程ID(PID)
    • php - PHP语言的命令行接口
    • pico - 功能强大全屏幕的文本编辑器
    • pidof - 查找指定名称的进程的进程号ID号
    • pigz - 可以用来解压缩文件,gzip的并行实现升级版
    • ping - 测试主机之间网络的连通性
    • pkill - 可以按照进程名杀死进程
    • pmap - 报告进程的内存映射关系
    • popd - 从目录堆栈中删除目录
    • poweroff - 关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中
    • ppp-off - 关闭ppp连线
    • pr - 将文本文件转换成适合打印的格式
    • printf - 格式化并输出结果
    • protoize - GNU-C代码转换为ANSI-C代码
    • ps - 报告当前系统的进程状态
    • pssh - 批量管理执行
    • pstack - 显示每个进程的栈跟踪
    • pstree - 以树状图的方式展现进程之间的派生关系
    • pushd - 将目录添加到目录堆栈顶部
    • pv - 显示当前在命令行执行的命令的进度信息,管道查看器
    • pvchange - 修改物理卷属性
    • pvck - 检测物理卷的LVM元数据的一致性
    • pvcreate - 将物理硬盘分区初始化为物理卷
    • pvdisplay - 显示物理卷的属性
    • pvremove - 删除一个存在的物理卷
    • pvs - 输出物理卷信息报表
    • pvscan - 扫描系统中所有硬盘的物理卷列表
    • pwck - 用来验证系统认证文件内容和格式的完整性
    • pwconv - 用来开启用户的投影密码
    • pwd - 显示当前工作目录
    • pwunconv - 用来关闭用户的投影密码
    • quota - 显示磁盘已使用的空间与限制
    • quotacheck - 检查磁盘的使用空间与限制
    • quotaoff - 关闭Linux内核中指定文件系统的磁盘配额功能
    • quotaon - 激活Linux内核中指定文件系统的磁盘配额功能
    • rcconf - Debian Linux下的运行等级服务配置工具
    • rcp - 使在两台Linux主机之间的文件复制操作更简单
    • read - 从键盘读取变量值
    • readelf - 用于显示elf格式文件的信息
    • readonly - 标记shell变量或函数为只读
    • reboot - 重新启动正在运行的Linux操作系统
    • reject - 指示打印系统拒绝发往指定目标打印机的打印任务
    • rename - 用字符串替换的方式批量改变文件名
    • renice - 修改正在运行的进程的调度优先级
    • repquota - 报表的格式输出磁盘空间限制的状态
    • resize - 命令设置终端机视窗的大小
    • restore - 所进行的操作和dump指令相反
    • restorecon - 恢复文件的安全上下文
    • return - 从函数中退出并返回数值
    • rev - 将文件内容以字符为单位反序输出
    • rexec - 运程执行Linux系统下命令
    • rlogin - 从当前终端登录到远程Linux主机
    • rm - 用于删除给定的文件和目录
    • rmdir - 用来删除空目录
    • rmmod - 从运行的内核中移除指定的内核模块
    • route - 显示并设置Linux中静态路由表
    • rpm - RPM软件包的管理工具
    • rpm2cpio - 将RPM软件包转换为cpio格式的文件
    • rpmbuild - 创建RPM的二进制软件包和源码软件包
    • rpmdb - 初始化和重建RPM数据库
    • rpmquery - 从RPM数据库中查询软件包信息
    • rpmsign - 使用RPM软件包的签名管理工具
    • rpmverify - 验证已安装的RPM软件包的正确性
    • rsh - 连接远程主机并执行命令
    • rsync - 远程数据同步工具
    • runlevel - 打印当前Linux系统的运行等级
    • sar - 系统运行状态统计工具
    • scp - 加密的方式在本地主机和远程主机之间复制文件
    • screen - 用于命令行终端切换
    • sed - 功能强大的流式文本编辑器
    • seinfo - 查询SELinux的策略提供多少相关规则
    • semanage - 默认目录的安全上下文查询与修改
    • sendmail - 著名电子邮件服务器
    • seq - 以指定增量从首数开始打印数字到尾数
    • service - 控制系统服务的实用工具
    • sesearch - 查询SELinux策略的规则详情
    • set - 显示或设置shell特性及shell变量
    • setfacl - 设置文件访问控制列表
    • setpci - 查询和配置PCI设备的使用工具
    • setsebool - 修改SElinux策略内各项规则的布尔值
    • setsid - 在新的会话中运行程序
    • sftp-server - sftp协议的服务器端程序
    • sftp - 交互式的文件传输程序
    • sh - shell命令解释器
    • shift - 移动位置参数
    • shopt - 显示和设置shell操作选项
    • showmount - 显示NFS服务器加载的信息
    • shuf - 产生随机的排列
    • shutdown - 用来执行系统关机的命令
    • skill - 向选定的进程发送信号冻结进程
    • slabtop - 实时显示内核slab内存缓存信息
    • sleep - 将目前动作延迟一段时间
    • slocate - 命令查找文件或目录
    • smbclient - 交互方式访问samba服务器
    • smbpasswd - samba用户和密码管理工具
    • sort - 对文本文件中所有行进行排序
    • source - 在当前Shell环境中从指定文件读取和执行命令
    • speedtest-cli - 命令行下测试服务器外网速度
    • spell - 对文件进行拼写检查
    • split - 分割任意大小的文件
    • squid - squid服务器守护进程
    • squidclient - squid服务器的客户端管理工具
    • ss - 比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息
    • ssh-add - 把专用密钥添加到ssh-agent的高速缓存中
    • ssh-agent - ssh密钥管理器
    • ssh-copy-id - 把本地的ssh公钥文件安装到远程主机对应的账户下
    • ssh-keygen - 为ssh生成、管理和转换认证密钥
    • ssh-keyscan - 收集主机公钥的使用工具
    • ssh - openssh套件中的客户端连接工具
    • sshd - openssh软件套件中的服务器守护进程
    • startx - 用来启动X Window
    • stat - 用于显示文件的状态信息
    • strace - 跟踪系统调用和信号
    • strings - 在对象文件或二进制文件中查找可打印的字符串
    • stty - 修改终端命令行的相关设置
    • su - 用于切换当前用户身份到其他用户身份
    • sudo - 以其他身份来执行命令
    • sum - 计算文件的校验码和显示块数
    • supervisord - 配置后台服务/常驻进程的进程管家工具
    • suspend - 挂起shell的执行
    • swapoff - 关闭指定的交换空间
    • swapon - 激活Linux系统中交换空间
    • sync - 用于强制被改变的内容立刻写入磁盘
    • sysctl - 时动态地修改内核的运行参数
    • syslog - 系统默认的日志守护进程
    • systemctl - 系统服务管理器指令
    • systool - 显示基于总线、类和拓扑显示系统中设备的信息
    • tac - 连接多个文件并以行为单位反向打印到标准输出
    • tail - 在屏幕上显示指定文件的末尾若干行
    • tailf - 在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出
    • talk - 让用户和其他用户聊天
    • tar - Linux下的归档使用工具,用来打包和备份
    • tcpdump - 一款sniffer工具,是Linux上的抓包工具,嗅探器
    • tcpreplay - 将PCAP包重新发送,用于性能或者功能测试
    • tee - 从标准输入读取数据并重定向到标准输出和文件。
    • telint - 切换当前正在运行系统的运行等级
    • telnet - 登录远程主机和管理(测试ip端口是否连通)
    • tempfile - shell中给临时文件命名
    • test - shell环境中测试条件表达式工具
    • tftp - 在本机和tftp服务器之间使用TFTP协议传输文件
    • time - 统计给定命令所花费的总时间
    • times - 显示进程累计时间
    • tload - 显示系统负载状况
    • tmux - Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权
    • top - 显示或管理执行中的程序
    • touch - 创建新的空文件
    • tput - 通过terminfo数据库对终端会话进行初始化和操作
    • tr - 将字符进行替换压缩和删除
    • tracepath - 追踪目的主机经过的路由信息
    • traceroute - 显示数据包到主机间的路径
    • trap - 指定在接收到信号后将要采取的动作
    • tree - 树状图列出目录的内容
    • true - 返回状态为成功
    • tty - 显示连接到当前标准输入的终端设备文件名
    • type - 显示指定命令的类型
    • ulimit - 控制shell程序的资源
    • umask - 显示或设置创建文件的权限掩码
    • umount - 用于卸载已经加载的文件系统
    • unalias - 删除由alias设置的别名
    • uname - 显示Linux系统信息
    • unarj - 解压缩由arj命令创建的压缩包
    • uncompress - 用来解压.Z文件
    • unexpand - 将文件的空白字符转换为制表符
    • uniq - 显示或忽略重复的行
    • unlink - 系统调用函数unlink去删除指定的文件
    • unprotoize - 删除C语言源代码文件中的函数原型
    • unrar - 解压rar文件命令,从rar档案中提取文件
    • unset - 删除指定的shell变量或函数
    • unzip - 用于解压缩由zip命令压缩的压缩包
    • updatedb - 创建或更新slocate命令所必需的数据库文件
    • uptime - 查看Linux系统负载信息
    • useradd - 创建的新的系统用户
    • userdel - 用于删除给定的用户以及与用户相关的文件
    • usermod - 用于修改用户的基本信息
    • usernetctl - 被允许时操作指定的网络接口
    • users - 显示当前登录系统的所有用户
    • uucico - UUCP文件传输服务程序
    • uupick - 命令处理传送进来的文件
    • uuto - 将文件传送到远端的UUCP主机
    • vdfuse - VirtualBox软件挂载VDI分区文件工具
    • vgchange - 修改卷组属性
    • vgconvert - 转换卷组元数据格式
    • vgcreate - 用于创建LVM卷组
    • vgdisplay - 显示LVM卷组的信息
    • vgextend - 向卷组中添加物理卷
    • vgreduce - 从卷组中删除物理卷
    • vgremove - 用于用户删除LVM卷组
    • vgrename - 使用vgrename命令可以重命名卷组的名称
    • vgscan - 扫描并显示系统中的卷组
    • vi - 功能强大的纯文本编辑器
    • vmstat - 显示虚拟内存状态
    • volname - 显示指定的ISO-9660格式的设备的卷名称
    • w - 显示目前登入系统的用户信息
    • wait - 等待进程执行完后返回
    • wall - 向系统当前所有打开的终端上输出信息
    • watch - 可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令
    • wc - 统计文件的字节数、字数、行数
    • wget - Linux系统下载文件工具
    • whatis - 查询一个命令执行什么功能
    • whereis - 查找二进制程序、代码等相关文件路径
    • which - 查找并显示给定命令的绝对路径
    • who - 显示目前登录系统的用户信息
    • whoami - 打印当前有效的用户名称
    • write - 向指定登录用户终端上发送信息
    • xargs - 给其他命令传递参数的一个过滤器
    • xauth - 显示和编辑被用于连接X服务器的认证信息
    • xclip - 管理 X 粘贴板
    • xhost - 制哪些X客户端能够在X服务器上显示
    • xinit - 是Linux下X-Window系统的初始化程序
    • xlsatoms - 列出X服务器内部所有定义的原子成分
    • xlsclients - 列出显示器中的客户端应用程序
    • xlsfonts - 列出X Server使用的字体
    • xset - 设置X-Window系统中的用户爱好的实用工具
    • xz - POSIX 平台开发具有高压缩率的工具
    • yes - 重复打印指定字符串
    • ypdomainname - 显示主机的NIS的域名
    • yum - 基于RPM的软件包管理器
    • zcat - 显示压缩包中文件的内容
    • zfore - 强制为gzip格式的压缩文件添加.gz后缀
    • zip - 可以用来解压缩文件
    • zipinfo - 用来列出压缩文件信息
    • zipsplit - 将较大的zip压缩包分割成各个较小的压缩包
    • znew - 将.Z压缩包重新转化为gzip命令压缩的.gz压缩包
Powered by GitBook
On this page
  • 补充说明
  • ELF文件类型
  • 选项
  • 实例

Was this helpful?

  1. Linux

readelf - 用于显示elf格式文件的信息

用于显示elf格式文件的信息

补充说明

readelf命令 用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。

这个程序和objdump提供的功能类似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件),所以即使BFD库有什么bug存在的话也不会影响到readelf程序。

运行readelf的时候,除了-v和-H之外,其它的选项必须有一个被指定。

ELF文件类型

种类型的ELF文件:

  1. 可重定位文件:用户和其他目标文件一起创建可执行文件或者共享目标文件,例如lib*.a文件。

  2. 可执行文件:用于生成进程映像,载入内存执行,例如编译好的可执行文件a.out。

  3. 共享目标文件:用于和其他共享目标文件或者可重定位文件一起生成elf目标文件或者和执行文件一起创建进程映像,例如lib*.so文件。

    ELF文件作用:

ELF文件参与程序的连接(建立一个程序)和程序的执行(运行一个程序),所以可以从不同的角度来看待elf格式的文件:

  1. 如果用于编译和链接(可重定位文件),则编译器和链接器将把elf文件看作是节头表描述的节的集合,程序头表可选。

  2. 如果用于加载执行(可执行文件),则加载器则将把elf文件看作是程序头表描述的段的集合,一个段可能包含多个节,节头表可选。

  3. 如果是共享文件,则两者都含有。

    ELF文件总体组成:

elf文件头描述elf文件的总体信息。包括:系统相关,类型相关,加载相关,链接相关。

  • 系统相关表示:elf文件标识的魔术数,以及硬件和平台等相关信息,增加了elf文件的移植性,使交叉编译成为可能。

  • 类型相关就是前面说的那个类型。

  • 加载相关:包括程序头表相关信息。

  • 链接相关:节头表相关信息。

选项

-a 
--all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I. 

-h 
--file-header 显示elf文件开始的文件头信息. 

-l 
--program-headers  
--segments 显示程序头(段头)信息(如果有的话)。 

-S 
--section-headers  
--sections 显示节头信息(如果有的话)。 

-g 
--section-groups 显示节组信息(如果有的话)。 

-t 
--section-details 显示节的详细信息(-S的)。 

-s 
--syms        
--symbols 显示符号表段中的项(如果有的话)。 

-e 
--headers 显示全部头信息,等价于: -h -l -S 

-n 
--notes 显示note段(内核注释)的信息。 

-r 
--relocs 显示可重定位段的信息。 

-u 
--unwind 显示unwind段信息。当前只支持IA64 ELF的unwind段信息。 

-d 
--dynamic 显示动态段的信息。 

-V 
--version-info 显示版本段的信息。 

-A 
--arch-specific 显示CPU构架信息。 

-D 
--use-dynamic 使用动态段中的符号表显示符号,而不是使用符号段。 

-x <number or name> 
--hex-dump=<number or name> 以16进制方式显示指定段内内容。number指定段表中段的索引,或字符串指定文件中的段名。 

-w[liaprmfFsoR] or 
--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges] 显示调试段中指定的内容。 

-I 
--histogram 显示符号的时候,显示bucket list长度的柱状图。 

-v 
--version 显示readelf的版本信息。 

-H 
--help 显示readelf所支持的命令行选项。 

-W 
--wide 宽行输出。 

@file 可以将选项集中到一个文件中,然后使用这个@file选项载入。

实例

先给出如下例子:

1.对于可执行文件形式的elf格式文件:

1)查看可执行程序的源代码如下:

root@localhost [test]$ cat main.cpp 
#include <iostream> 
using std::cout; 
using std::endl; 
void my_print(); 

int main(int argc, char *argv[]) 
{ 
        my_print(); 
        cout<<"hello!"<<endl; 
        return 0; 
} 

void  my_print() 
{ 
        cout<<"print!"<<endl; 
}

2)编译如下:

[root@localhost test]$ g++ main.cpp -o main 
[root@localhost test]$ g++ -g main.cpp -o main.debug

3)编译之后,查看生成的文件:

[root@localhost test]$ ls -l 
总计 64 
-rwxr-xr-x 1 quietheart quietheart  6700 07-07 18:04 main 
-rw-r--r-- 1 quietheart quietheart   201 07-07 18:02 main.cpp 
-rwxr-xr-x 1 quietheart quietheart 38932 07-07 18:04 main.debug

这里,main.debug是带有调试信息的可执行文件,main是一般的可执行文件。

2.对于库文件形式的elf格式文件:

1)查看库的源代码如下:

//myfile.h 
#ifndef __MYFILE_H 
#define __MYFILE_H 
void printInfo(); 
#endif 

//myfile.cpp 
#include "myfile.h" 
#include <iostream> 
using std::cout; 
using std::endl; 
void printInfo() 
{ 
    cout<<"hello"<<endl; 
}

2)编译如下:

[root@localhost test]$ g++ -c myfile.cpp 
[root@localhost test]$ g++ -shared -fPCI -o libmy.so myfile.o 
[root@localhost test]$ ar -r libmy.a myfile.o 
ar: creating libmy.a

3)编译之后,查看生成的文件:

[root@localhost test]$ ls -l

总计 44

-rw-r--r-- 1 quietheart quietheart 2154 07-08 16:14 libmy.a 
-rwxr-xr-x 1 quietheart quietheart 5707 07-08 16:08 libmy.so 
-rwxr-xr-x 1 quietheart quietheart  117 07-08 16:06 myfile.cpp 
-rwxr-xr-x 1 quietheart quietheart   63 07-08 16:08 myfile.h 
-rw-r--r-- 1 quietheart quietheart 2004 07-08 16:08 myfile.o 
libmy.a  libmy.so  myfile.cpp  myfile.h  myfile.o

这里,分别生成目标文件myfile.o,共享库文件libmy.so,和静态库文件libmy.a。

基于以上可执行文件和库,这里给出一些常用的命令。

读取可执行文件形式的elf文件头信息:

[root@localhost test]$ readelf -h main 
ELF Header: 
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32 
  Data:                              2's complement, little endian 
  Version:                           1 (current) 
  OS/ABI:                            UNIX - System V 
  ABI Version:                       0 
  type:                              exec (Executable file) 
  Machine:                           Intel 80386 
  Version:                           0x1 
  Entry point address:               0x8048580 
  Start of program headers:          52 (bytes into file) 
  Start of section headers:          3232 (bytes into file) 
  Flags:                             0x0 
  Size of this header:               52 (bytes) 
  Size of program headers:           32 (bytes) 
  Number of program headers:         8 
  Size of section headers:           40 (bytes) 
  Number of section headers:         29 
  Section header string table index: 26

这里,可见可执行文件的elf文件,其类型为EXEC(可执行文件)。另外,含调试信息的"main.debug"和不含调试信息的"main"除了一些大小信息之外,其内容是一样的。并且由此可见文件的体系结构为Intel 80386。

读取目标文件形式的elf文件头信息:

[root@localhost test]$ readelf -h myfile.o 
ELF Header: 
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32 
  Data:                              2's complement, little endian 
  Version:                           1 (current) 
  OS/ABI:                            UNIX - System V 
  ABI Version:                       0 
  Type:                              REL (Relocatable file) 
  Machine:                           Intel 80386 
  Version:                           0x1 
  Entry point address:               0x0 
  Start of program headers:          0 (bytes into file) 
  Start of section headers:          516 (bytes into file) 
  Flags:                             0x0 
  Size of this header:               52 (bytes) 
  Size of program headers:           0 (bytes) 
  Number of program headers:         0 
  Size of section headers:           40 (bytes) 
  Number of section headers:         15 
  Section header string table index: 12

这里,可见目标文件的elf文件,其类型为REL(可重定位文件)。

读取静态库文件形式的elf文件头信息:

[root@localhost test]$ readelf -h libmy.a 
File: libmy.a(myfile.o) 
ELF Header: 
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32 
  Data:                              2's complement, little endian 
  Version:                           1 (current) 
  OS/ABI:                            UNIX - System V 
  ABI Version:                       0 
  Type:                              REL (Relocatable file) 
  Machine:                           Intel 80386 
  Version:                           0x1 
  Entry point address:               0x0 
  Start of program headers:          0 (bytes into file) 
  Start of section headers:          516 (bytes into file) 
  Flags:                             0x0 
  Size of this header:               52 (bytes) 
  Size of program headers:           0 (bytes) 
  Number of program headers:         0 
  Size of section headers:           40 (bytes) 
  Number of section headers:         15 
  Section header string table index: 12

这里,可见静态库文件的elf文件,其类型为REL(可重定位文件)。

读取动态库文件形式的elf文件头信息:

[root@localhost test]$ readelf -h libmy.so 
ELF Header: 
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32 
  Data:                              2's complement, little endian 
  Version:                           1 (current) 
  OS/ABI:                            UNIX - System V 
  ABI Version:                       0 
  Type:                              DYN (Shared object file) 
  Machine:                           Intel 80386 
  Version:                           0x1 
  Entry point address:               0x550 
  Start of program headers:          52 (bytes into file) 
  Start of section headers:          2768 (bytes into file) 
  Flags:                             0x0 
  Size of this header:               52 (bytes) 
  Size of program headers:           32 (bytes) 
  Number of program headers:         5 
  Size of section headers:           40 (bytes) 
  Number of section headers:         27 
  Section header string table index: 24

这里,可见动态库文件的elf文件,其类型为DYN(共享目标文件)。

查看可执行的elf文件程序头表信息:

[root@localhost test]$ readelf -l main 
Elf file type is EXEC (Executable file) 
Entry point 0x8048580 
There are 8 program headers, starting at offset 52 

Program Headers: 
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align 
  PHDR           0x000034 0x08048034 0x08048034 0x00100 0x00100 R E 0x4 
  INTERP         0x000134 0x08048134 0x08048134 0x00013 0x00013 R   0x1 
      Requesting program interpreter: /lib/[ld-linux.so.2] 
  LOAD           0x000000 0x08048000 0x08048000 0x00970 0x00970 R E 0x1000 
  LOAD           0x000970 0x08049970 0x08049970 0x00130 0x001c8 RW  0x1000 
  DYNAMIC        0x000988 0x08049988 0x08049988 0x000e0 0x000e0 RW  0x4 
  NOTE           0x000148 0x08048148 0x08048148 0x00020 0x00020 R   0x4 
  GNU_EH_FRAME   0x000820 0x08048820 0x08048820 0x00044 0x00044 R   0x4 
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4 

Section to Segment mapping: 
  Segment Sections... 
   00     
   01     .interp 
   02     .interp .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame 
   03     .ctors .dtors .jcr .dynamic .got .got.plt .data .bss 
   04     .dynamic 
   05     .note.ABI-tag 
   06     .eh_frame_hdr 
   07

这里,含调试信息的"main.debug"和不含调试信息的"main"其内容是一样的。

查看目标文件的elf文件程序头表信息:

[root@localhost test]$ readelf -l myfile.o 
There are no program headers in this file.

这里可知,可重定位的目标文件,它没程序头表。

查看静态库文件的elf文件程序头表信息:

[root@localhost test]$ readelf -l libmy.a 
File: libmy.a(myfile.o) 
There are no program headers in this file.

这里可知,可重定位的静态库文件,它没程序头表。

查看动态库文件的elf文件程序头表信息:

[root@localhost test]$ readelf -l libmy.so 
Elf file type is DYN (Shared object file) 
Entry point 0x550 
There are 5 program headers, starting at offset 52 

Program Headers: 
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align 
  LOAD           0x000000 0x00000000 0x00000000 0x007f4 0x007f4 R E 0x1000 
  LOAD           0x0007f4 0x000017f4 0x000017f4 0x0011c 0x00128 RW  0x1000 
  DYNAMIC        0x000810 0x00001810 0x00001810 0x000e0 0x000e0 RW  0x4 
  GNU_EH_FRAME   0x000738 0x00000738 0x00000738 0x0002c 0x0002c R   0x4 
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4 

Section to Segment mapping: 
  Segment Sections... 
   00     .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame 
   01     .ctors .dtors .jcr .data.rel.ro .dynamic .got .got.plt .bss 
   02     .dynamic 
   03     .eh_frame_hdr 
   04

这里可知,做为共享目标文件的动态库,它程序头表。

查看一个可执行的elf文件的节信息:

[root@localhost test]$ readelf -S main 
There are 29 section headers, starting at offset 0xca0: 
Section Headers: 
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al 
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0 
  [ 1] .interp           PROGBITS        08048134 000134 000013 00   A  0   0  1 
  [ 2] .note.ABI-tag     NOTE            08048148 000148 000020 00   A  0   0  4 
  [ 3] .gnu.hash         GNU_HASH        08048168 000168 000030 04   A  4   0  4 
  [ 4] .dynsym           DYNSYM          08048198 000198 0000d0 10   A  5   1  4 
  [ 5] .dynstr           STRTAB          08048268 000268 000183 00   A  0   0  1 
  [ 6] .gnu.version      VERSYM          080483ec 0003ec 00001a 02   A  4   0  2 
  [ 7] .gnu.version_r    VERNEED         08048408 000408 000060 00   A  5   2  4 
  [ 8] .rel.dyn          REL             08048468 000468 000010 08   A  4   0  4 
  [ 9] .rel.plt          REL             08048478 000478 000048 08   A  4  11  4 
  [10] .init             PROGBITS        080484c0 0004c0 000017 00  AX  0   0  4 
  [11] .plt              PROGBITS        080484d8 0004d8 0000a0 04  AX  0   0  4 
  [12] .text             PROGBITS        08048580 000580 000268 00  AX  0   0 16 
  [13] .fini             PROGBITS        080487e8 0007e8 00001c 00  AX  0   0  4 
  [14] .rodata           PROGBITS        08048804 000804 00001a 00   A  0   0  4 
  [15] .eh_frame_hdr     PROGBITS        08048820 000820 000044 00   A  0   0  4 
  [16] .eh_frame         PROGBITS        08048864 000864 00010c 00   A  0   0  4 
  [17] .ctors            PROGBITS        08049970 000970 00000c 00  WA  0   0  4 
  [18] .dtors            PROGBITS        0804997c 00097c 000008 00  WA  0   0  4 
  [19] .jcr              PROGBITS        08049984 000984 000004 00  WA  0   0  4 
  [20] .dynamic          DYNAMIC         08049988 000988 0000e0 08  WA  5   0  4 
  [21] .got              PROGBITS        08049a68 000a68 000004 04  WA  0   0  4 
  [22] .got.plt          PROGBITS        08049a6c 000a6c 000030 04  WA  0   0  4 
  [23] .data             PROGBITS        08049a9c 000a9c 000004 00  WA  0   0  4 
  [24] .bss              NOBITS          08049aa0 000aa0 000098 00  WA  0   0  8 
  [25] .comment          PROGBITS        00000000 000aa0 000114 00      0   0  1 
  [26] .shstrtab         STRTAB          00000000 000bb4 0000e9 00      0   0  1 
  [27] .symtab           SYMTAB          00000000 001128 000510 10     28  53  4 
  [28] .strtab           STRTAB          00000000 001638 0003f4 00      0   0  1 
Key to Flags: 
  W (write), A (alloc), X (execute), M (merge), S (strings) 
  I (info), L (link order), G (group), x (unknown) 
  O (extra OS processing required) o (OS specific), p (processor specific)

这里,main是可执行文件,不含调试信息。

查看一个包含调试信息的可执行的elf文件的节信息:

[root@localhost test]$ readelf -S main.debug 
There are 37 section headers, starting at offset 0x88c8: 

Section Headers: 
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al 
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0 
  [ 1] .interp           PROGBITS        08048134 000134 000013 00   A  0   0  1 
  [ 2] .note.ABI-tag     NOTE            08048148 000148 000020 00   A  0   0  4 
  [ 3] .gnu.hash         GNU_HASH        08048168 000168 000030 04   A  4   0  4 
  [ 4] .dynsym           DYNSYM          08048198 000198 0000d0 10   A  5   1  4 
  [ 5] .dynstr           STRTAB          08048268 000268 000183 00   A  0   0  1 
  [ 6] .gnu.version      VERSYM          080483ec 0003ec 00001a 02   A  4   0  2 
  [ 7] .gnu.version_r    VERNEED         08048408 000408 000060 00   A  5   2  4 
  [ 8] .rel.dyn          REL             08048468 000468 000010 08   A  4   0  4 
  [ 9] .rel.plt          REL             08048478 000478 000048 08   A  4  11  4 
  [10] .init             PROGBITS        080484c0 0004c0 000017 00  AX  0   0  4 
  [11] .plt              PROGBITS        080484d8 0004d8 0000a0 04  AX  0   0  4 
  [12] .text             PROGBITS        08048580 000580 000268 00  AX  0   0 16 
  [13] .fini             PROGBITS        080487e8 0007e8 00001c 00  AX  0   0  4 
  [14] .rodata           PROGBITS        08048804 000804 00001a 00   A  0   0  4 
  [15] .eh_frame_hdr     PROGBITS        08048820 000820 000044 00   A  0   0  4 
  [16] .eh_frame         PROGBITS        08048864 000864 00010c 00   A  0   0  4 
  [17] .ctors            PROGBITS        08049970 000970 00000c 00  WA  0   0  4 
  [18] .dtors            PROGBITS        0804997c 00097c 000008 00  WA  0   0  4 
  [19] .jcr              PROGBITS        08049984 000984 000004 00  WA  0   0  4 
  [20] .dynamic          DYNAMIC         08049988 000988 0000e0 08  WA  5   0  4 
  [21] .got              PROGBITS        08049a68 000a68 000004 04  WA  0   0  4 
  [22] .got.plt          PROGBITS        08049a6c 000a6c 000030 04  WA  0   0  4 
  [23] .data             PROGBITS        08049a9c 000a9c 000004 00  WA  0   0  4 
  [24] .bss              NOBITS          08049aa0 000aa0 000098 00  WA  0   0  8 
  [25] .comment          PROGBITS        00000000 000aa0 000114 00      0   0  1 
  [26] .debug_aranges    PROGBITS        00000000 000bb4 000020 00      0   0  1 
  [27] .debug_pubnames   PROGBITS        00000000 000bd4 000028 00      0   0  1 
  [28] .debug_info       PROGBITS        00000000 000bfc 0067aa 00      0   0  1 
  [29] .debug_abbrev     PROGBITS        00000000 0073a6 000726 00      0   0  1 
  [30] .debug_line       PROGBITS        00000000 007acc 0003e1 00      0   0  1 
  [31] .debug_frame      PROGBITS        00000000 007eb0 00009c 00      0   0  4 
  [32] .debug_str        PROGBITS        00000000 007f4c 000735 00      0   0  1 
  [33] .debug_loc        PROGBITS        00000000 008681 0000f3 00      0   0  1 
  [34] .shstrtab         STRTAB          00000000 008774 000151 00      0   0  1 
  [35] .symtab           SYMTAB          00000000 008e90 000590 10     36  61  4 
  [36] .strtab           STRTAB          00000000 009420 0003f4 00      0   0  1 
Key to Flags: 
  W (write), A (alloc), X (execute), M (merge), S (strings) 
  I (info), L (link order), G (group), x (unknown) 
  O (extra OS processing required) o (OS specific), p (processor specific)

可见,相对非调试版本的可执行文件,多了".debug*"段的信息。

查看一个目标文件的elf文件的节信息:

[root@localhost test]$ readelf -S myfile.o 
There are 15 section headers, starting at offset 0x204: 

Section Headers: 
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al 
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0 
  [ 1] .text             PROGBITS        00000000 000034 00009e 00  AX  0   0  4 
  [ 2] .rel.text         REL             00000000 000744 000060 08     13   1  4 
  [ 3] .data             PROGBITS        00000000 0000d4 000000 00  WA  0   0  4 
  [ 4] .bss              NOBITS          00000000 0000d4 000001 00  WA  0   0  4 
  [ 5] .ctors            PROGBITS        00000000 0000d4 000004 00  WA  0   0  4 
  [ 6] .rel.ctors        REL             00000000 0007a4 000008 08     13   5  4 
  [ 7] .rodata           PROGBITS        00000000 0000d8 000006 00   A  0   0  1 
  [ 8] .eh_frame         PROGBITS        00000000 0000e0 00008c 00   A  0   0  4 
  [ 9] .rel.eh_frame     REL             00000000 0007ac 000028 08     13   8  4 
  [10] .comment          PROGBITS        00000000 00016c 00002e 00      0   0  1 
  [11] .note.GNU-stack   PROGBITS        00000000 00019a 000000 00      0   0  1 
  [12] .shstrtab         STRTAB          00000000 00019a 00006a 00      0   0  1 
  [13] .symtab           SYMTAB          00000000 00045c 000180 10     14  14  4 
  [14] .strtab           STRTAB          00000000 0005dc 000166 00      0   0  1 
Key to Flags: 
  W (write), A (alloc), X (execute), M (merge), S (strings) 
  I (info), L (link order), G (group), x (unknown) 
  O (extra OS processing required) o (OS specific), p (processor specific) 


```shell

 **查看一个静态库文件的elf文件的节信息:** 

```shell
[root@localhost test]$ readelf -S libmy.a 
File: libmy.a(myfile.o) 
There are 15 section headers, starting at offset 0x204: 

Section Headers: 
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al 
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0 
  [ 1] .text             PROGBITS        00000000 000034 00009e 00  AX  0   0  4 
  [ 2] .rel.text         REL             00000000 000744 000060 08     13   1  4 
  [ 3] .data             PROGBITS        00000000 0000d4 000000 00  WA  0   0  4 
  [ 4] .bss              NOBITS          00000000 0000d4 000001 00  WA  0   0  4 
  [ 5] .ctors            PROGBITS        00000000 0000d4 000004 00  WA  0   0  4 
  [ 6] .rel.ctors        REL             00000000 0007a4 000008 08     13   5  4 
  [ 7] .rodata           PROGBITS        00000000 0000d8 000006 00   A  0   0  1 
  [ 8] .eh_frame         PROGBITS        00000000 0000e0 00008c 00   A  0   0  4 
  [ 9] .rel.eh_frame     REL             00000000 0007ac 000028 08     13   8  4 
  [10] .comment          PROGBITS        00000000 00016c 00002e 00      0   0  1 
  [11] .note.GNU-stack   PROGBITS        00000000 00019a 000000 00      0   0  1 
  [12] .shstrtab         STRTAB          00000000 00019a 00006a 00      0   0  1 
  [13] .symtab           SYMTAB          00000000 00045c 000180 10     14  14  4 
  [14] .strtab           STRTAB          00000000 0005dc 000166 00      0   0  1 
Key to Flags: 
  W (write), A (alloc), X (execute), M (merge), S (strings) 
  I (info), L (link order), G (group), x (unknown) 
  O (extra OS processing required) o (OS specific), p (processor specific)

查看一个动态库文件的elf文件的节信息:

[root@localhost test]$ readelf -S libmy.so 
There are 27 section headers, starting at offset 0xad0: 

Section Headers: 
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al 
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0 
  [ 1] .gnu.hash         GNU_HASH        000000d4 0000d4 00003c 04   A  2   0  4 
  [ 2] .dynsym           DYNSYM          00000110 000110 000120 10   A  3   1  4 
  [ 3] .dynstr           STRTAB          00000230 000230 000199 00   A  0   0  1 
  [ 4] .gnu.version      VERSYM          000003ca 0003ca 000024 02   A  2   0  2 
  [ 5] .gnu.version_r    VERNEED         000003f0 0003f0 000050 00   A  3   2  4 
  [ 6] .rel.dyn          REL             00000440 000440 0000b0 08   A  2   0  4 
  [ 7] .rel.plt          REL             000004f0 0004f0 000010 08   A  2   9  4 
  [ 8] .init             PROGBITS        00000500 000500 000017 00  AX  0   0  4 
  [ 9] .plt              PROGBITS        00000518 000518 000030 04  AX  0   0  4 
  [10] .text             PROGBITS        00000550 000550 0001c4 00  AX  0   0 16 
  [11] .fini             PROGBITS        00000714 000714 00001c 00  AX  0   0  4 
  [12] .rodata           PROGBITS        00000730 000730 000006 00   A  0   0  1 
  [13] .eh_frame_hdr     PROGBITS        00000738 000738 00002c 00   A  0   0  4 
  [14] .eh_frame         PROGBITS        00000764 000764 000090 00   A  0   0  4 
  [15] .ctors            PROGBITS        000017f4 0007f4 00000c 00  WA  0   0  4 
  [16] .dtors            PROGBITS        00001800 000800 000008 00  WA  0   0  4 
  [17] .jcr              PROGBITS        00001808 000808 000004 00  WA  0   0  4 
  [18] .data.rel.ro      PROGBITS        0000180c 00080c 000004 00  WA  0   0  4 
  [19] .dynamic          DYNAMIC         00001810 000810 0000e0 08  WA  3   0  4 
  [20] .got              PROGBITS        000018f0 0008f0 00000c 04  WA  0   0  4 
  [21] .got.plt          PROGBITS        000018fc 0008fc 000014 04  WA  0   0  4 
  [22] .bss              NOBITS          00001910 000910 00000c 00  WA  0   0  4 
  [23] .comment          PROGBITS        00000000 000910 0000e6 00      0   0  1 
  [24] .shstrtab         STRTAB          00000000 0009f6 0000da 00      0   0  1 
  [25] .symtab           SYMTAB          00000000 000f08 000410 10     26  48  4 
  [26] .strtab           STRTAB          00000000 001318 000333 00      0   0  1 
Key to Flags: 
  W (write), A (alloc), X (execute), M (merge), S (strings) 
  I (info), L (link order), G (group), x (unknown) 
  O (extra OS processing required) o (OS specific), p (processor specific)
Previousread - 从键盘读取变量值Nextreadonly - 标记shell变量或函数为只读

Last updated 5 years ago

Was this helpful?