简介:
比如我们在服务器上运行 Nginx,访问的时候就是连接不上,我们可以使用 ps aux | grep nginx看下nginx进程是不是启动了,也可以看下 80端口有没有被占用。换句话说,如果没有任何程序跑在这个端口上(或者说没有任何程序使用这个端口),证明忘了启动相关程序或者没能启动成功,或者说程序使用的端口被修改了,不是80了,那又怎么可能能访问到呢?
1.查看全部端口占用情况
Linux中我们可以使用 netstat 工具来进程网络分析,netstat 命令有非常多选项,这里只列出了常用的一部分 -a或--all 显示所有连接中的Socket,默认不显示 LISTEN 相关的。 -c或--continuous 持续列出网络状态,不断自动刷新输出。 -l或--listening 显示监听中的服务器的Socket。 -n或--numeric 直接使用IP地址,而不是展示域名。 -p或--programs 显示正在使用Socket的程序进程PID和名称。 -t或--tcp 显示TCP传输协议的连接。 -u或--udp 显示UDP传输协议的连接。
比如我们可以查看服务器中监控了哪些端口,如果我们的nginx是使用80端口,uwsgi使用的是7001端口,我们就能知道通过下面的命令
> netstat -nltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:7001 0.0.0.0:* LISTEN 2070/uwsgi tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 1575/redis-server 1
就能知道80端口的 nginx 是不是启动成功了,7001端口的uwsgi是不是启动成功了。
注意:如果PID和Program Name显示不出来,证明是权限不够,可以使用sudo运行
2.查看具体端口占用情况
> sudo lsof -i :80 (注意端口80前面有个英文的冒号) COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 4123 admin 3u IPv4 13031 0t0 TCP *:http (LISTEN) nginx 4124 admin 3u IPv4 13031 0t0 TCP *:http (LISTEN)
我们可以通过这个方法查询出占用端口的程序,如果遇到端口已经被占用,原来的进程没有正确地终止,可以使用kill命令停掉原来的进程,这样我们就又可以使用这个端口了。
除了上面讲的一些命令,在部署过程中会经常用到下面的一些Linux命令,如果不清楚它们是做什么的,可以提前自行学习下这些Linux基础命令:
ls, touch, mkdir, mv, cp, ps, chmod, chown
学习完了这些内容,我们应该就具备了部署Linux服务器的基础知识了,在遇到问题后,应该也会有一些调查思路。