命令部分
1.怎样查看都有哪些进程占用了端口?
进程:一个正在运行的程序
端口:门牌号
- lsof -i:端口号(查看某一端口的占用情况)
lsof -i (显示符合条件的进程情况)
COMMAND:进程名称或进程开启方式
PID:进程ID
USER:进程所有者
FD:文件描述符8
TYPE:协议类型
DEVICE:端口号
SIZE/OFF:偏移量
NODE:协议名
NAME:节点名 - netstat -tunlp |grep 端口号(查看某一端口的占用情况)
netstat -tunlp |grep (用于显示tcp,udp的端口和进程相关情况)
-t 仅显示与tcp相关的
-u仅显示与udp相关的
-n不限时别名,能显示数字的全部转化为数字
-l 仅显示出于listen(监听)状态的
-p显示建立这些连接的程序名
2.ps和top的区别?
- ps是进程操作命令,用于报告当前系统的进程状态
- top是系统监测操作命令,可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具
- ps看到的是命令执行瞬间的进程信息,而top可以持续的监视
3.netstat都有哪些参数?
netstat命令用于显示网络状态
-a:显示所有连线中的Socket
-t:显示TCP传输协议的连线状况
-u:显示UDP传输协议的连线状况
-l:显示监控中的服务器的Socket
-p:显示正在使用Socket的程序识别码和程序名称
-n:直接使用ip地址,而不通过域名服务器
-r:显示Routing Table
-c:持续列出网络状态
-e:显示网络其他相关信息
-h:在线帮助
-0:显示计时器
-v:显示指令执行过程
-w:显示RAW传输协议的连线状况
4.如何查看一个进程处在哪个目录下?
ps以及top只可以查看到进程相对路径
Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件
ps aux | grep process_name 找到对应 process 的 PID
ll /proc/PID 查进程绝对路径及信息
5.如何查看一个进程打开的文件?
- lsof
- proc查看 top得到进程号进入对应目录
/proc/对应进程pid/fd
在fd目录 -ls -lh下就能看到文件描述符和关联文件的文件路径
6.tcpdump参数的含义?
是一个运行在命令行下的抓包工具
-a:将网络地址和广播地址转化成名字
-b:在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的
-c:在收到指定的包的数量后,tcpdump就会停止
-d:将匹配信息包的代码以人们能够理解的汇编格式给出
-dd:将匹配信息包的代码以c语言程序段的格式给出
-ddd:将匹配信息包的代码以十进制的形式给出
-e:在输出行打印出数据链路层的头部信息
-f:将外部的Internet地址以数字的形式打印出来
-F:从指定的文件中读取表达式,忽略命令行中给出的表达式
-i:指定监听的网络接口
-l:使标准输出变为缓冲行形式,可以把数据导出到文件
-L:列出网络接口的已知数据链路
-m:从文件module中导入SMI MIB模块定义
-n:不把网络地址转换成名字
-nn:不进行端口名称的转换
-N:不输出主机名中的域名部分,例如,‘nic.ddn.mil‘只输出’nic‘
-p:将网卡设置为非混杂模式,不能与host或broadcast一起使用
-P:不将网络接口设置成混杂模式
-q:快速输出,只输出较少的协议信息
-r:从指定的文件中读取包(这些包一般通过-w选项产生)
-t:在输出的每一行不打印时间戳
-tt:在每一行中输出非格式化的时间戳
-ttt:输出本行和前面一行之间的时间差
-tttt:在每一行中输出由date处理的默认格式的时间戳
-T:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议)
-u:输出未解码的NFS句柄
-v: 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
-vv:输出详细的报文信息
-w:直接将分组写入文件中,而不是不分析并打印出来
-s:从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节
-S:将tcp的序列号以绝对值形式输出,而不是相对值
-X:告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器
-O:不运行分组分组匹配(packet-matching)代码优化程序
7.使用命令查找某个目录下所有文件名含有“abc”的文件,写出完整命令
find /某个目录名 -name abc
8.查找这些文件中哪些文件含“hello”,写出完整命令
find /abc -name “*.cpp” | xargs grep “hello”
9.find和grep的区别?
都是文件操作命令
- find是在指定目录下查找文件
- grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
10.gdb中给定一个地址,如何查看这个地址的内存?
x(examine)命令
格式: x /nfu < addr >
n:是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u来定义
f:表示显示的格式
- x :按十六进制格式显示变量
d :按十进制格式显示变量
u :按十进制格式显示无符号整型
o :按八进制格式显示变量
t :按二进制格式显示变量
a :按十六进制格式显示变量
i :指令地址格式
c :按字符格式显示变量
f :按浮点数格式显示变量
u:表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes,当我们指定了字节长度后,GDB会从指定内存定的内存地址开始,读写指定字节,并把其当作一个值取出来
- b:表示单字节
h:表示双字节
w:表示四字节
g:表示八字节
< addr >:表示一个内存地址
11.g++和gcc的区别?
- 就本质而言,gcc和g++并不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参数中要编译的文件的类型,调用对应的GUN编译器而已,gcc调用了C compiler,而g++调用了C++ compiler
- 对于.c和.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)
- 对于.c和.cpp文件,g++则统一当做cpp文件编译
- 使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL
- gcc在编译C文件时,可使用的预定义宏是比较少的
- 在用gcc编译c++文件时,为了能够使用STL,需要加参数 –lstdc++ ,但这并不代表 gcc –lstdc++ 和 g++等价