linux下常用指令 Posted on 2020-05-10 | In learning linux常用命令123456789101112131415161718192021222324252627282930313233343536373839404142434445461. 文件目录1.1 特殊符号: 1.1.1 . 当前目录1.1.2 .. 上级目录1.1.3 ~ 用户的home目录1.2 cd - 切换目录1.3 ls - 查看目录/文件属性1.4 mv/cp/rm 剪切/拷贝/删除文件1.5 rmdir 删除空目录1.6 touch 创建新文件1.7 查看文件内容 more(按页查看)/less(部分查看)/cat(查看全部)/head(查看前x行)/tail(查看后x行)1.8 hexdump 以十六进制查看文件 hexdump -C 文件名 hexdump -C 文件名 | less1.9 ln 创建文件链接1.10 file - 查看文件类型1.11 grep - 查找文件内容1.12 find/whereis/whois<!-- more -->2. 用户/权限2.1 useradd(命令)/adduser(脚本) 添加目录2.1 passwd 修改用户登陆密码2.3 userdel 删除用户2.4 usermod 修改用户信息(用户名/主目录/用户组/登陆密码)2.4 chmod 修改文件权限2.5 chown 修改文件拥有者2.6 groupadd/groupdel 添加用户组/删除用户组 3. 进程/任务3.1 ps/top 查看当前进程信息3.2 kill 结束进程 4. 磁盘4.1 df/du 查看磁盘使用信息 5. 其它 clear - 清屏 source - 强行让一个脚本去立即影响当前的环境(不重启而更新配置) apt - 软件包管理 更新源 sudo apt update 更新软件 sudo apt upgrade 安装软件 : sudo apt install 软件名 卸载软件 : sudo apt remove / sudo apt autoremove 6. 常见配置文件 GDB常用1234567891011121314151617181920212223242526272829303132333435363738394041424344454647481 命令行参数系列1.1 set args1.2 show args 2 运行系列2.1 r - 运行2.2 n - 单步步过(源码)2.3 s - 单步步入2.4 u - 运行到循环退出2.5 c - 继续运行2.6 si/ni - 汇编级单步步入/步过2.7 jump - 设置eip到指定位置2.8 finish 执行到当前函数返回2.9 回车键 重复执行上一指令 3 断点系列3.1 b 行号/函数名 - 设置断点3.2 info b - 查看断点3.3 d 断点号 - 删除断点3.4 dis 断点号 - 禁用断点3.5 enable 断点号 - 启用断点 4 信息查看系列4.1 print 变量名 - 查看变量的值4.2 set 变量名=VAL - 修改变量的值4.3 set disassembly-flavor intel 以intel方式查看反汇编4.4 list [函数名] - 查看源码4.5 backtrace 查看函数的调用的栈帧和层级关系,简写bt4.6 frame:切换函数的栈帧,简写f4.7 x命令 格式 x/<n/f/u> <addr> n是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。 f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果 地址是指令地址,那么格式可以是i。 u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。 n/f/u三个参数可以一起使用。例如: 命令:x/3uh 0x54320 表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。 输出格式: 一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。要做到这样,你可以使用GDB的数据显示格式: x 按十六进制格式显示变量。 d 按十进制格式显示变量。 u 按十六进制格式显示无符号整型。 o 按八进制格式显示变量。 t 按二进制格式显示变量。 a 按十六进制格式显示变量。 c 按字符格式显示变量。 f 按浮点数格式显示变量。 ELF文件结构1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162PE的组成 1. 头部 1.1 DOS头 1.2 NT头 1.2.1 文件头 1.2.2 扩展头 1.3 区段头2. 区段数据 2.1 代码段: .text 2.2 数据段: .data 2.3 只读数据段: .rdata 2.3.1 导入表的数据 2.3.2 导出表的数据 2.4 重定位数据段: .reloc ELF文件格式ELF的组成部分 1. ELF头 1.1 id数组 1.1.1 前4位是魔数 0x74"elf" 1.1.2 ELF文件种类(32位/64位) 1.1.3 ELF文件数据的字节序(小端/大端) 1.1.4 版本 : 1. 文件版本,2. 系统ABI版本 1.2 文件类型 : 可重定位文件/可执行文件/动态库文件2. 程序头 2.1 段类型 : 决定了段的作用,以及段是否被加载到内存中. 一个ELF文件中,至少存在一个LOAD类型的段. ELF一般都有解释器段,这个段用于保存解释器的文件路径. 有可能也会存在动态链接段(用于链接外部模块) 2.2 段数据的文件偏移/文件大小/内存地址/内存中的大小 2.3 加载到内存中后的分页属性 2.4 段的对齐粒度3. 区段头 3.1 区段名 3.2 区段类型 3.3 Link和info 3.4 区段数据的文件偏移和大小,元素大小.4. 区段数据 4.1 符号表 4.1.1 记录本模块的符号(导出) 记录在.symtab符号表中 记录一个符号的名字(例如函数名),记录了符号 的绑定类型(LOCAL,GLOBAL),还记录了符号的类型(函数,区段),记录符号的值(根据符号的不同,有不同的值,例如函数是符号类型,值就是函数的地址) 4.1.2 记录了导入的符号 记录在.dynsym符号表 4.2 重定位表 4.2.1 重定位类型, 决定了修复重定位的方法 可执行文件类型的ELF和共享库的ELF文件的重定位是不一样的. 4.2.2 重定位的偏移(根据重定位类型决定) elf的加载do_execve(); 1. 其它 5.1 PLT和GOT表 call printf ==> jmp [GOT表项地址] =第二次以后=> printf真正的地址 push XX jmp xxx ==> 加载printf所在的so文件,修复printf函数地址 2 构造函数数组,析构函数数组2.1 全局对象的初始化和析构.3 ptrace - 调试相关