成为Linux服务器侦探 🕵️‍♂️ 如何通过端口号追踪进程并找到主进程

大家好!在管理Linux服务器时,我们经常会遇到这样的疑问:“咦?现在是哪个服务在使用80端口?”或者“这个Web服务器有多个进程,哪个才是真正的主进程呢?”

今天,我们将花时间成为一名“Linux侦探”,来解决这些疑问。让我们从一个简单的线索——端口号——开始,识别嫌疑犯(进程),并找出其背后的主进程,一起体验这个激动人心的过程吧!🕵️‍♀️

第一步:第一个线索 – 通过端口号查找进程嫌疑犯 📡

所有的调查都始于一个微小的线索。我们的第一个线索就是“端口号”。通过检查特定端口的请求由谁接收,我们可以确定要列入嫌疑名单的进程。

此时,最现代、最强大的工具就是ss命令。(虽然netstat是一个经典的工具,但ss更快,提供的信息也更多。)

sudo ss -tlpn | grep ':[포트번호]'

# 让我们以80端口为例进行查找。
sudo ss -tlpn | grep ':80'

这个命令看起来可能有点复杂,但了解了选项的含义就简单了。

  • -t: 只显示TCP协议。
  • -l: 只显示Listening(等待连接)状态的。
  • -p: 显示使用该端口的Process信息。(最重要!)
  • -n: 以Numeric(数字)形式显示端口号或IP地址。(可快速确认)

执行此命令后,您将获得以下结果:

LISTEN 0  511  0.0.0.0:80  0.0.0.0:* users:(("apache2",pid=1337,fd=4))

好了,罪犯已经浮出水面!查看users:部分,我们确认名为apache2的应用程序正在以PID(进程ID)1337运行,并占用了80端口。第一阶段调查完成!

第二步:深入调查 – 剖析进程层次结构 👨‍👩‍👧

虽然我们已经确定了apache2这个嫌疑犯,但调查并未就此结束。如果您使用ps命令查询apache2进程,会发现有多个进程同时运行。

这是因为像Web服务器这样的程序为了高效处理任务,通常采用一个主进程生成并管理多个工作进程的结构。这就像餐厅经理(主进程)管理多名厨师和服务员(工作进程)一样。🍳

我们的任务是找出这些进程中真正的“老板”,即主进程。此时使用的命令是ps -ef。

ps -ef | grep apache2

结果将类似于以下内容:

UID    PID   PPID   C STIME TTY      TIME     CMD
root   1337     1    0 10:30 ?    00:00:00   /usr/sbin/apache2 -k start
www-data 1380  1337   0 10:30 ?    00:00:00   /usr/sbin/apache2 -k start
www-data 1381  1337   0 10:30 ?    00:00:00   /usr/sbin/apache2 -k start

让我们在这里寻找指向主进程的决定性证据。

  • 证据1:执行用户(UID)是root。
  • 主进程通常以root账户运行,因为它需要高权限来访问系统资源和打开端口。而工作进程为了安全起见,则以权限较低的用户(如www-data等)运行。
  • 证据2:父进程ID(PPID)是1。
  • PPID为1意味着该进程是由系统启动时第一个执行的进程(systemd或init)直接启动的。也就是说,它是这个进程树的“始祖”。
  • 证据3:其他工作进程的父进程就是它。
  • 看看其他apache2进程的PPID。它们都指向1337,对吗?这正是PID 1337是它们父进程,即主进程的最确凿证据。

所有证据都指向PID 1337是主进程。

第三步:撰写调查报告 – 安全地将结果保存到文件 ✍️

所有调查结束后,我们需要将结果记录在报告中。让我们将查明的应用程序名称(小写)和主PID保存到/opt/process.txt这样的文件中。

这里需要注意!像/opt或/etc这样的系统目录需要root权限才能创建文件。许多人会犯sudo echo “内容” > /opt/file.txt这样的错误。这个命令只有echo是以sudo权限执行的,而文件写入操作(>)则是以当前用户权限执行,因此会遇到“Permission denied”错误。

最安全可靠的方法是使用tee命令。

printf "apache2
1337
" | sudo tee /opt/process.txt

这个命令的执行方式如下:

  1. printf “apache2n1337”: 在第一行生成”apache2″,并在其后换行(在解释中以

    表示),然后在第二行生成”1337″文本。

  2. | (管道): 将生成的文本作为输入传递给下一个命令。
  3. sudo tee /opt/process.txt: 以root权限执行tee。tee的作用是将通过管道接收到的输入同时写入屏幕和文件。这样就可以在没有权限问题的情况下安全地创建文件。

总结

恭喜!您现在已经成为一名能干的Linux服务器侦探了。🎉

今天,我们从一个小的线索——端口号(ss)开始,剖析了进程的家族关系(ps -ef)找到了主进程,并学习了如何在没有权限问题的情况下,将调查结果整洁地保存到文件(tee)中。

这三个命令是监控系统和解决问题必不可少的技术,请务必记住它们,并在实际的服务器操作中加以运用!


Tags: Linux, 리눅스, 服务器管理, 系统工程, DevOps, 进程, 端口, PID, ss, ps, tee


Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注