【Linux】【实战系列】10 分钟掌握日常开发中 Linux 网络处理相关命令

  • hello,大家好,我是 Lorin,上一期和大家分享一期日常开发中常用的 Linux 文件和文本命令实战教学,这一期给大家带来常用的网络处理命令实战。

lsof

  • lsof(list open files)是一个列出当前系统打开文件的工具,日常开发中常用于查看端口占用情况。
bash 复制代码
// 显示所有打开的端口
lsof -i
bash 复制代码
// 查看 8080 端口占用情况
lsof -i:8000

nodejs  26993 root   10u  IPv4 37999514      0t0  TCP *:8000 (LISTEN)

// 其它一些常见用法
lsof abc.txt:显示开启文件abc.txt的进程
lsof -c abc:显示abc进程现在打开的文件
lsof -c -p 1234:列出进程号为1234的进程所打开的文件
lsof -d 4:显示使用fd为4的进程

netstat

  • netstat 用于查看网络状态。日常工作中常用于观察服务器网络连接、端口占用。
bash 复制代码
命令格式:
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

常用参数:
常用参数:
-a或--all 显示所有连线中的Socket
-p或--programs 显示正在使用Socket的程序识别码和程序名称
-n或--numeric 直接使用IP地址,而不通过域名服务器(显示具体端口号)
-t或--tcp 显示TCP传输协议的连线状况
-u或--udp 显示UDP传输协议的连线状况

// 如查看所有 TCP 网络连接
[root@iZwz97fphe0t194uzxhm8lZ ~]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN      833/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      880/sshd
tcp        0      0 172.19.229.159:22       183.14.134.96:25981     ESTABLISHED 25803/sshd: root [p
tcp        0      0 172.19.229.159:55656    100.100.21.100:80       TIME_WAIT   -
tcp        0      0 172.19.229.159:55658    100.100.21.100:80       TIME_WAIT   -
tcp        0      0 172.19.229.159:55648    100.100.21.100:80       TIME_WAIT   -
tcp        0      0 172.19.229.159:60706    100.100.0.70:80         TIME_WAIT   -
tcp6       0      0 :::5355                 :::*                    LISTEN      833/systemd-resolve
tcp6       0      0 :::80                   :::*                    LISTEN      2801/docker-proxy
tcp6       0      0 :::443                  :::*                    LISTEN      2790/docker-proxy
tcp6       0      0 :::1024                 :::*                    LISTEN      3031/docker-proxy
tcp6       0      0 :::1025                 :::*                    LISTEN      3020/docker-proxy


// 查看 80 端口占用的进程和进程号 可以和上一期学的 grep 命令组合使用
[root@iZwz97fphe0t194uzxhm8lZ ~]# netstat -atnp | grep 80
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      880/sshd
tcp        0      0 172.19.229.159:44072    100.100.21.100:80       TIME_WAIT   -
tcp        0      0 172.19.229.159:44070    100.100.21.100:80       TIME_WAIT   -
tcp        0      0 172.19.229.159:49126    100.100.0.70:80         TIME_WAIT   -
tcp        0      0 172.19.229.159:44078    100.100.21.100:80       TIME_WAIT   -
tcp        0      0 172.19.229.159:44076    100.100.21.100:80       TIME_WAIT   -
tcp6       0      0 :::80                   :::*                    LISTEN      2801/docker-proxy

ping

  • ping 命令用于检测与另一个主机之间的网络连接,日常开发中常用于检测服务器是否在线,但无法 ping 通不等于服务不在线,因为服务器端可以主动关闭该功能。
  • 使用 ICMP(Internet Control Message Protocol) 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息。
ini 复制代码
命令格式:
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

常用参数:
-d 使用Socket的SO_DEBUG功能
-c <完成次数> 设置完成要求回应的次数
-i<间隔秒数> 指定收发信息的间隔时间
-R 记录路由过程
-t<存活数值> 设置存活数值TTL的大小
-s<数据包大小> 设置数据包的大小

// 示例
[root@iZwz97fphe0t194uzxhm8lZ ~]# ping -i 3 -c 3 -s 1024 -t 255 baidu.com
PING baidu.com (39.156.66.10) 1024(1052) bytes of data.
1032 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=1 ttl=49 time=50.1 ms
1032 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=2 ttl=49 time=50.1 ms
1032 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=3 ttl=49 time=50.1 ms

--- baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 11ms
rtt min/avg/max/mdev = 50.116/50.119/50.123/0.182 ms

// -i 3 执行周期为 3 秒
// -c 3 要求会员次数 3 次
// -s 1024 包大小 1024 
// -t 设置TTL值为 255

nslookup

  • 是用于查询域名系统(DNS)信息的命令行工具。它可以用来查找域名的IP地址,或者反向查找IP地址对应的域名。
yaml 复制代码
命令格式:
nslookup domain [dns-server]

// 使用示例 使用默认域名服务器
[root@iZwz97fphe0t194uzxhm8lZ ~]# nslookup baidu.com
Server:         100.100.2.136
Address:        100.100.2.136#53

Non-authoritative answer:
Name:   baidu.com
Address: 110.242.68.66
Name:   baidu.com
Address: 39.156.66.10

// 使用指定域名服务器解析
[root@iZwz97fphe0t194uzxhm8lZ ~]# nslookup baidu.com 8.8.8.8
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   baidu.com
Address: 39.156.66.10
Name:   baidu.com
Address: 110.242.68.66

ssh

  • Linux SSH(Secure Shell)是一种用于远程管理和安全通信的协议和工具。它允许用户通过网络安全地远程登录到其他计算机,并执行各种操作,日常工作中常用于登录服务器。
  • SSH使用非对称加密来建立连接,并在连接建立后使用对称加密来保护通信内容。这种方法确保了数据的机密性和完整性。
css 复制代码
命令格式:
ssh [选项] [参数]

常用参数:
-p:指定远程服务器上的端口
-i:指定身份(私钥)文件

// 常用方式
# ssh 用户名@远程服务器地址
ssh user1@172.24.210.101
# 指定端口
ssh -p 2211 root@140.206.185.170

ssh-keygen

  • 除了使用密码登录的方式,我们还可以生成秘钥文件实现免密登录。
java 复制代码
// ssh-keygen # 为当前用户生成 ssh 公钥 + 私钥
// 如果你使用了密码,那么请确保添加了 -o 选项,它会以比默认格式更能抗暴力破解的格式保存私钥
$ ssh-keygen -o
Generating public/private rsa key pair.
Enter file in which to save the key (/home/schacon/.ssh/id_rsa):
Created directory '/home/schacon/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/schacon/.ssh/id_rsa.
Your public key has been saved in /home/schacon/.ssh/id_rsa.pub.
The key fingerprint is:
d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local

// 将当前用户的公钥复制到需要 ssh 的服务器的 ~/.ssh/authorized_keys,实现免密登录
ssh-copy-id user@ip:port

scp

  • SCP(Secure Copy Protocol)是一种用于在远程系统之间安全复制文件的协议。它通过SSH(Secure Shell)协议进行加密通信,确保数据传输的安全性。SCP通常用于将文件从一个计算机复制到另一个计算机,或者从本地计算机上传到远程服务器,反之亦然。
ruby 复制代码
命令格式:
scp [参数] [本地文件] [远程地址]

常用参数:
-r:递归复制怎么目录

// 使用示例
// 从本地计算机上传文件到远程服务器
scp /path/to/local/file username@remote_server:/path/to/remote/directory

// 从远程服务器下载文件到本地计算机
scp username@remote_server:/path/to/remote/file /path/to/local/directory

// 从本地计算机上传整个目录到远程服务器
scp -r /path/to/local/directory username@remote_server:/path/to/remote/directory

sftp

  • SFTP(Secure File Transfer Protocol)是一种基于SSH协议的安全文件传输协议,用于在本地计算机和远程服务器之间以加密和安全的方式传输文件。与SCP不同,SFTP提供了更多的文件管理功能,允许用户在本地和远程系统之间进行更灵活的文件操作,包括上传、下载、删除、重命名文件,以及浏览远程目录等。

  • 使用示例

ruby 复制代码
// 连接到远程服务器
sftp username@remote_server

// 上传文件到远程服务器
put /path/to/local/file /path/on/remote/server

// 下载文件到本地计算机
get /path/on/remote/server /path/to/local/directory

// 列出远程服务器上的文件和目录
ls

// 或者列出特定目录
ls /path/on/remote/server

// 删除远程服务器上的文件
rm /path/on/remote/server/filename

// 重命名远程服务器上的文件
rename old_filename new_filename

// 退出SFTP会话
exit

网络工具 curl

  • curl 是一个强大的命令行工具,用于在Unix、Linux和类Unix系统中进行数据传输。它支持多种协议,包括HTTP、HTTPS、FTP、SCP、SFTP、LDAP等,可以用来发送请求并接收来自Web服务器和其他网络服务的响应。
  • 下面我们主要介绍一些常见的用法:
csharp 复制代码
命令格式:
curl [选项] [URL]

常用参数:
-v:选项来显示HTTP请求和响应的详细信息
-i:选项来显示HTTP响应头信息
-X:选项来指定HTTP请求方法
-x:选项来指定代理服务器
-u:选项来指定用户名和密码
-H:选项来指定HTTP头部信息

# 使用示例
// 发送 get 请求
curl https://www.example.com

// 发送 post 请求
// 使用-X选项来指定HTTP请求方法,通常与-d选项一起使用以发送POST数据
curl -X POST -d "key1=value1&key2=value2" https://www.example.com/api

// 发送HTTP请求时携带HTTP头部信息
curl -H "Authorization: Bearer <token>" https://api.example.com/resource

// 使用代理服务器
curl -x http://proxy.example.com:8080 https://www.example.com

// 保存下载文件
curl -o outputfile.txt https://www.example.com/file.txt

// 使用用户名和密码进行HTTP基本认证
curl -u username:password https://www.example.com/secure/resource

网络工具 wget

  • wget是一个在命令行中常用的工具,用于从网络上下载文件。它支持HTTP、HTTPS、FTP等多种协议,并提供了丰富的选项,使得文件下载变得非常灵活和强大。
  • 下面介绍一些常见用法:
less 复制代码
命令格式:
wget [选项] [URL]

常用参数:
-b:选项来在后台下载文件
-O:选项来指定保存的文件名
-c:选项来启用断点续传,如果下载中断,可以恢复下载

// 使用wget下载文件,将文件保存在当前工作目录
wget https://www.example.com/file.txt

// 使用-O选项来指定保存的文件名
wget -O myfile.txt https://www.example.com/file.txt

// 后台下载
wget -b https://www.example.com/largefile.zip

// 限速下载速度
wget --limit-rate=100k https://www.example.com/largefile.zip

最后

  • 如果文章对你有帮助,请一键三连,关注、点赞、收藏,你的支持是我创作的最大动力,谢谢大家。
相关推荐
小孙姐4 分钟前
Linux-Day11.WEB服务,虚拟主机
linux·运维·服务器
ARM+FPGA+AI工业主板定制专家26 分钟前
基于ARM+FPGA多通道超声信号采集与传输系统设计
linux·人工智能·fpga开发·rk3588·rk3568·codesys
风象南30 分钟前
3s → 30ms!SpringBoot树形结构“开挂”实录:一次查询提速100倍
后端
用户61204149221330 分钟前
C语言做的汽车线路模拟查询系统
c语言·后端·设计模式
Victor3561 小时前
MySQL(181)如何在MySQL中管理大数据量的表?
后端
绿箭柠檬茶1 小时前
Ubuntu 下编译 SQLCipher 4.8.0
linux·运维·ubuntu·sqlite3
Victor3561 小时前
MySQL(182) 如何进行MySQL的分库分表?
后端
U盘失踪了6 小时前
python JSONPath 表达式生成器
linux·windows·python
锦鲤飞上天8 小时前
CentOS卸载、安装MySQL8(yum操作)
linux·adb·centos
mortimer8 小时前
一次搞懂 rsync:从入门到解决真实世界中的权限难题
linux·运维·centos