Linux中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数
ps命令。“ps - aux | grep PID":用来查看某PID进程状态
ptree -p 查看进程树
top
: 动态显示当前系统中的进程和系统资源使用情况。
htop
: 类似于top
,但提供更多的交互式功能和信息。
文件权限怎么修改
文件的权限字符为 -rwxrwxrwx
说说常用的Linux命令
说说如何以root权限运行某个程序
su sudo 转到root用户态
sudo chmod +x program将可执行文件设置为具有执行权限
说说软链接和硬链接的区别
软连接 | 硬链接 | |
定义 |
是一个指向目标文件或目录的特殊文件 一个文本文件,包含了目标文件或目录路径信息 |
文件系统中一个实际文件,与目标文件 或目录共享相同索引节点 |
限制 | 比目标文件小,因为只是一个包含目标文件的路径信息 |
与目标文件具有相同的大小,共享相同 的数据块 |
创建方式 | 可以跨越文件系统创建 | 只能在同一文件系统内创建 |
影响 | 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接 | 删除一个硬链接文件并不影响其他有相同 inode 号的文件 |
说说静态库和动态库怎么制作及如何使用,区别是什么
1. 静态库代码装载的速度快,执行速度比动态库快;
2. 动态库更加节省内存,可执行文件体积比静态库小;
3. 静态库在编译时加载,动态库在运行时加载;
4. 静态链接库win下.lib后缀linux下是.a后缀。生成动态连接库,win下.dll后缀,linux下以.so为后缀
简述GDB常见的调试命令,什么是条件断点,多进程下如何调试
GDB命令格式:
-
quit:退出gdb,结束调试
-
list:查看程序源代码
list 5,10:显示5到10行的代码
list test.c:5, 10: 显示源文件5到10行的代码,在调试多个文件时使用
list get_sum: 显示get_sum函数周围的代码
list test,c get_sum: 显示源文件get_sum函数周围的代码,在调试多个文件时使用
-
reverse-search:字符串用来从当前行向前查找第一个匹配的字符串
-
run:程序开始执行
-
help list/all:查看帮助信息
-
break:设置断点
break 7:在第七行设置断点
break get_sum:以函数名设置断点
break 行号或者函数名 if 条件:以条件表达式设置断点
-
watch 条件表达式:条件表达式发生改变时程序就会停下来
-
next:继续执行下一条语句 ,会把函数当作一条语句执行
-
step:继续执行下一条语句,会跟踪进入函数,一次一条的执行函数内的代码
条件断点:break if 条件 以条件表达式设置断点
多进程下如何调试:用set follow-fork-mode child 调试子进程
或者set follow-fork-mode parent 调试父进程
说说什么是大端小端,如何判断大端小端?
小端:低的有效字节存储在低的存储器地址。小端一般为主机字节序,常用的X86结构是小端模式。很多的ARM,DSP都为小端模式。以数字书写方式,低位数字在前面。
大端:高的有效字节存储在低的存储器地址(内存地址)。大端一般为网络字节序,数字书写方式,高位数字在前面。
在进行网络通信时是否需要进行字节序转换?
相同字节序的平台在进行网络通信时可以不进行字节序转换,但是跨平台进行网络数据通信时必须进行字节序转换。
原因如下:网络协议规定接收到得第一个字节是高字节,存放到低地址,所以发送时会首先去低地址取数据的高字节。小端模式的多字节数据在存放时,低地址存放的是低字节,而被发送方网络协议函数发送时会首先去低地址取数据(想要取高字节,真正取得是低字节),接收方网络协议函数接收时会将接收到的第一个字节存放到低地址(想要接收高字节,真正接收的是低字节),所以最后双方都正确的收发了数据。而相同平台进行通信时,如果双方都进行转换最后虽然能够正确收发数据,但是所做的转换是没有意义的,造成资源的浪费。而不同平台进行通信时必须进行转换,不转换会造成错误的收发数据,字节序转换函数会根据当前平台的存储模式做出相应正确的转换,如果当前平台是大端,则直接返回不进行转换,如果当前平台是小端,会将接收到得网络字节序进行转换。
网络字节序
网络上传输的数据都是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它将这个字节作为高位字节还是低位字节处理,是一个比较有意义的问题; UDP/TCP/IP协议规定:把接收到的第一个字节当作高位字节看待,这就要求发送端发送的第一个字节是高位字节;而在发送端发送数据时,发送的第一个字节是该数值在内存中的起始地址处对应的那个字节,也就是说,该数值在内存中的起始地址处对应的那个字节就是要发送的第一个高位字节(即:高位字节存放在低地址处);由此可见,多字节数值在发送之前,在内存中因该是以大端法存放的; 所以说,网络字节序是大端字节序; 比如,我们经过网络发送整型数值0x12345678时,在80X86平台中,它是以小端发存放的,在发送之前需要使用系统提供的字节序转换函数htonl()将其转换成大端法存放的数值;