【Linux】Linux面试的经典题目总结---命令部分

一、怎么查看都有哪些进程占用了端口?

1、lsof -i

用来显示符合条件的进程情况。lsof(list open files)是一个列出当前系统打开文件的工具。在root用户来执行lsof -i命令,如下图所示:

【Linux】Linux面试的经典题目总结---命令部分
lsof输出各列信息的意义如下:

COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件,如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点
NAME:打开文件的确切名称

2、lsof -i:端口号

lsof -i:端口号。用来查看某一端口的占用情况。比如查看22号端口使用情况,lsof -i:22,如下图所示:

【Linux】Linux面试的经典题目总结---命令部分

3、netstat -tunlp

netstat -tunlp用于显示tcp,udp的端口和进程等相关情况,如下图所示:

【Linux】Linux面试的经典题目总结---命令部分
-t:仅显示tcp相关选项
-u:仅显示udp相关选项
-n:拒绝显示别名,能显示数字的全部转化成数字。
-l:仅列出有在listen的状态。
-p:显示建立相关链接的程序名。

4、netstat -tunlp | grep 端口号

netstat -tunlp|grep 端口号,用于查看指定端口号的进程情况,如查看22端口的情况,netstat -tunlp|grep 22,如下图所示:
【Linux】Linux面试的经典题目总结---命令部分
二、top 和 ps 的区别

  • ps看到的是命令执行瞬间的进程信息,而top可以持续的监视
  • ps只是查看进程,而top还可以监视系统性能,如平均负载,cpu和内存的消耗
  • 另外top还可以操作进程,如改变优先级(命令r)和关闭进程(命令k)
  • ps主要是查看进程的,关注点在于查看需要查看的进程top主要看cpu,内存使用情况,及占用资源最多的进程由高到低排序,关注点在于资源占用情况。

三、netstat 都有哪些参数

  • netstat -s :本选项能bai够按照各个协du议分别显示其统计数据。如果你的应用程zhi序(如daoWeb浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么你就可以用本选项来查看一下所显示的信息。你需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。
  • netstat -e :本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量)。
  • netstat -r:本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的信息。除了显示有效路由外,还显示当前有效的连接。
  • netstat -a:本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接。
  • netstat -n:显示所有已建立的有效连接。

四、如何查看一个进程处在哪个目录下
通过 ps 及 top 命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等。
这时,我们需要通过以下的方法来查看进程的详细信息:
Linux 在启动一个进程时,系统会在 /proc 下创建一个以 PID 命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为 exe 的文件即记录了绝对路径,通过 ll 或 ls –l 命令即可查看。
我们可以先通过 ps aux | grep process_name 找到对应 process 的 PID,再通过 ll /proc/PID 查到进程的绝对路径等信息
cwd符号链接的是进程运行目录;
exe符号连接就是执行程序的绝对路径;
cmdline就是程序运行时输入的命令行命令;
environ记录了进程运行时的环境变量;
fd目录下是进程打开或使用的文件的符号连接
五、查看一个进程打开的文件怎么查看
lsof -p 进程PID
六、tcpdump 各个参数的意义
tcpdump 是一个运行在命令行下的抓包工具。它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。它的常用参数有如下:
 <1> -i 指定监听的网卡。这个参数主要用于计算机有多个网卡的情况。如果不使用此参数,则默认监听第一块网卡,eth0。  
 <2> -w 将监听到的数据包写入文件中。参数后直接跟“/路径/文件名”。  
 <3> -r 因为 -w 保存的是二进制格式,不可以直接读取查看。-r 参数用来流量回放,查看-w保存的文件。  
 <4> -c 指定接收到包的数目。当达到指定数目后,tcpdump就会停止。
 <5> -e 打印出数据链路层头部信息。
七、使用命令查找某个目录下所有文件名含有“abc”的文件,写出完整命令

find .-name “*” -exec grep -l “abc”

八、查找这些文件中哪些文件含“hello”,写出完整命令

find / -name | xargs grep ‘hello’

九、find 和 grep 的区别?
1、grep
Linux系统中grep命令是b一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。它的使用权限是所有用户。
grep指的是在文件中查找字符串
语法:grep 字符串 文件名
如:grep success luojiahui.txt
意思是在文件luojiahui.txt查找success
2、find
功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。
find指的是查找文件或目录
语法: find 查找位置 文件名或目录名
如:在 /root/luojiahui目录下查找index.htm
find /root/luojiahui index.htm
十、gdb 中给定一个地址,如何查看这个地址的内存。
语法是:

x / nfu <addr

x 是 examine 的缩写
addr表示待查看的内存地址。
n/f/u三个参数可以一起使用。例如:
命令:x/3uh 0x7ff320
表示,从内存地址0x7ff320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十进制显示无符号整型。
十一、g++与 gcc 的区别
gcc和g++都是GNU(一个组织)的编译器。
1、对于.c后缀的文件,gcc把它当做是C程序;g++当做是C++程序;
2、对于.cpp后缀的文件,gcc和g++都会当做c++程序。
3、编译阶段,g++会调用gcc;
4、连接阶段,通常会用g++来完成,这是因为gcc命令不能自动和c++程序使用的库连接。
5、 gcc 可以编译.c 和.cpp 的源文件。对*.c 按 c 语言语法规则处理,*.cpp 自动按 c++ 语法规则处理,但默认不链接相应的 c++库,需要手动指定链接的库名"-lstdc++"