程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 操作系统 - Linux

    • 基础操作
    • 目录操作
    • 文件操作
    • 用户和权限管控
    • 打包和解压
    • 定时任务管理
    • 系统管理
    • 网络服务操作
      • 磁盘分区管理
      • 其他常用命令
    • 云服务器
    • 操作系统 - Linux
    scholar
    2024-03-27
    目录

    网络服务操作

    # 1. 管理系统服务 (systemctl)

    systemctl命令是CentOS 7及以上版本引入的新的服务管理工具,用于管理系统服务、单位和系统状态。它提供了更强大和灵活的功能,适用于基于systemd的发行版。

    **Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启能够被systemctl管理的软件,一般也称之为服务。**一些系统内置的服务,如NetworkManager(主网络服务)、network(副网络服务)、firewalld(防火墙服务)和ssh(远程终端)等,可以通过systemctl命令进行控制。

    # 1.1 systemctl的基本操作和命令

    • 启动服务:

      systemctl start 服务名
      
      1

      启动一个服务。如果服务已安装但未运行,此命令将启动它。

    • 停止服务:

      systemctl stop 服务名
      
      1

      停止正在运行的服务。

    • 重启服务:

      systemctl restart 服务名
      
      1

      如果服务已经在运行,此命令会先停止服务,然后再重新启动它。如果服务未运行,就直接启动服务。

    • 重新加载服务:

      systemctl reload 服务名
      
      1

      重新加载服务的配置文件。如果服务支持在不中断当前运行状态的情况下重新加载配置,这是一个很有用的命令。

    • 启用服务:

      systemctl enable 服务名
      
      1

      设置服务为开机自启。这意味着在系统下次启动时,服务会自动启动。

    • 禁用服务:

      systemctl disable 服务名
      
      1

      取消服务的开机自启设置。

    • 检查服务状态:

      systemctl status 服务名
      
      1

      显示服务的当前状态,包括是否正在运行、是否开机自启等信息。

    • 检查服务是否活动(正在运行):

      systemctl is-active 服务名
      
      1

      检查服务当前是否处于活动状态。

    • 检查服务是否开机自启:

      systemctl is-enabled 服务名
      
      1

      检查服务是否被设置为开机自启。

    • 列出所有服务:

      systemctl list-units --type=service
      
      1

      显示系统中所有已安装的服务。

    • 列出正在运行的服务:

      systemctl list-units --type=service --state=running
      
      1

      仅显示当前正在运行的服务。

    注意事项

    • 对于大多数systemctl命令,您需要具有root权限,因此可能需要在命令前添加sudo。
    • systemctl命令不仅限于管理服务,它还可以用于管理其他类型的“单位”,如挂载点、定时任务等。
    • 通过使用systemctl命令,系统管理员可以方便地启动、停止、重启服务,管理服务的开机自启设置,以及查看系统当前的服务状态。
    • 对于一些复杂的服务,可能还需要了解其特定的配置文件和日志文件位置,以便进行更深入的管理和故障排查。

    # 1.2 列出所有服务参数解释

    执行了systemctl list-units --type=service命令来列出所有服务,下面是一个输出示例及其各个参数的说明:

      UNIT                   LOAD   ACTIVE SUB     DESCRIPTION
      apache2.service        loaded active running Apache HTTP Server
      cron.service           loaded active running Regular background program processing daemon
      ssh.service            loaded active running OpenBSD Secure Shell server
      mysql.service          loaded active running MySQL Community Server
      network.service        loaded failed failed  LSB: Bring up/down networking
    
    1
    2
    3
    4
    5
    6
    • UNIT:服务的唯一标识符,通常是服务的名称加上.service后缀。
    • LOAD:表示单位文件是否已经被加载到systemd的配置中。loaded表示已加载;如果是not-found,则表示未找到单位文件。
    • ACTIVE:服务的活动状态。active表示正在运行;inactive表示未运行;failed表示服务尝试启动但失败了。
    • SUB:更详细的活动状态信息。对于服务来说,常见的状态包括running(正在运行)、exited(已退出)、failed(失败)等。
    • DESCRIPTION:对服务的简短描述,帮助用户了解服务的作用。

    使用systemctl list-units --type=service的优势

    • 一目了然:快速获取系统中所有服务的状态,无需逐一查询。
    • 故障排查:通过查看服务状态(尤其是那些标记为failed的服务),可以迅速定位系统问题。
    • 管理便捷:对于需要进一步管理的服务,如需要重启或停止的服务,可直接使用systemctl命令进行操作。

    systemctl作为systemd的主要管理工具,不仅提供了基本的启动、停止、重启和查看服务状态的功能,还支持一些高级用法,这些高级用法能帮助系统管理员更有效地管理系统和服务。以下是一些实用的systemctl高级用法:

    # 1.3 工作中一些高级用法

    1. 查看一个服务的服务名:
    • 使用systemctl list-units --type=service命令列出所有服务,然后通过grep工具搜索特定的服务。例如,查找所有包含mysql的服务名称:
      systemctl list-units --type=service | grep mysql
      
      1
    • 这样可以找到系统中与MySQL相关的所有服务及其服务名。
    1. 检查服务的启动失败原因:
    • 使用systemctl status 服务名命令可以查看服务的状态及最近的日志信息。例如:
      systemctl status mysqld
      
      1
    • 通过这个命令的输出,可以查看到服务启动失败的具体错误信息和日志。

    3, 列出启动失败的服务:

    • 使用systemctl命令列出所有启动失败的服务:
      systemctl --failed
      
      1
    1. 创建系统快照:
    • systemd允许你创建系统状态的快照,以便之后可以恢复到该状态:

      systemctl snapshot mySnapshot
      
      1
    1. 恢复系统快照:
    • 如果需要,可以恢复之前创建的快照:
      systemctl isolate mySnapshot
      
      1

    # 2. 管理系统服务(service)

    service命令是CentOS上默认的服务管理工具,用于启动、停止、重启和查询服务的状态。它提供了简单的接口,适用于基于SysV init的发行版。

    # 说明:service命令用于运行System V init脚本,这些脚本一般位于/etc/init.d文件下
    # 这个命令可以直接运行这个文件夹里面的脚本,而不用加上路径
    service ssh status      # 查看服务状态 
    service --status-all     # 查看所有服务状态 
    service ssh restart     # 重启服务 
    
    1
    2
    3
    4
    5

    image-20231218155305642

    注意事项

    • 路径:使用service命令时,不需要指定服务脚本的完整路径。系统会自动在/etc/init.d/目录下查找匹配的服务脚本。
    • 权限:大多数service命令(尤其是启动和停止服务的命令)需要超级用户权限,因此在执行这些命令时可能需要使用sudo。
    • 开机自启:虽然service命令本身不直接管理服务的开机自启,但可以配合chkconfig(在较老的系统中)或systemctl(在使用systemd的系统中)命令来配置服务的自启动。
    • 迁移到systemd:如果您的系统使用的是systemd(如CentOS 7及以上版本),推荐使用systemctl命令来管理服务,因为它提供了更多的功能和更好的集成。

    # 3. 防火墙操作(firewalld)

    在Linux系统中,防火墙是用于监控和控制进出网络流量的关键安全工具。iptables和firewalld是两种常用的防火墙管理工具,分别在较老的Linux发行版和基于systemd的新版系统中使用。

    # 3.1 iptables操作(CentOS 6)

    在CentOS 6及以前版本中,iptables服务是默认的防火墙工具。以下是通过service和chkconfig命令管理iptables服务的基本操作:

    # 查看iptables服务的状态
    service iptables status
    # 开启iptables服务
    service iptables start
    # 停止iptables服务
    service iptables stop
    # 重启iptables服务
    service iptables restart
    # 关闭iptables服务的开机自启动
    chkconfig iptables off
    # 开启iptables服务的开机自启动
    chkconfig iptables on
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    • service iptables status/start/stop/restart:这些命令用来查看、启动、停止或重启iptables服务。
    • chkconfig iptables off/on:chkconfig命令用于管理服务的开机自启动。off参数禁用iptables服务的自启动,而on参数则启用自启动。

    # 3.2 firewalld操作(CentOS 7及以上)

    在基于systemd的系统(如CentOS 7及以上版本)中,firewalld成为了默认的防火墙管理工具,使用systemctl命令来进行管理:

    # 查看firewalld防火墙的状态
    systemctl status firewalld.service
    # 关闭运行的firewalld防火墙
    systemctl stop firewalld.service
    # 永久禁止firewalld服务
    systemctl disable firewalld.service
    
    1
    2
    3
    4
    5
    6
    • systemctl status firewalld.service:显示firewalld服务的当前状态,包括是否正在运行。
    • systemctl stop firewalld.service:停止当前运行的firewalld服务,防火墙规则不再生效,但在系统重启后firewalld可能会自动启动。
    • systemctl disable firewalld.service:禁用firewalld服务,防止其在系统启动时自动运行。这对于想要永久禁用防火墙的用户很有用。

    注意事项

    • 使用iptables或firewalld进行防火墙配置时,需要谨慎操作,以免意外阻断正常的网络连接。
    • 在修改防火墙规则后,建议立即检查网络连接的相关功能,确保规则更改按预期工作。
    • firewalld提供了动态防火墙管理,支持无需重启服务即可应用规则变更,这使得管理操作更为灵活。
    • 在使用firewalld时,可以通过firewall-cmd命令进行更为详细的防火墙设置,如规则添加、区域管理等。

    # 4. 开放/关闭防火墙端口

    在使用firewalld管理防火墙规则时,开放或关闭特定端口是常见的操作之一,这对于控制对特定服务的访问非常重要。以下是如何使用firewalld命令来管理防火墙端口的详细指南:

    # 4.1 开放防火墙端口

    开放端口允许外部网络的数据流通过指定端口访问本地服务。这对于运行Web服务器、数据库服务器等服务的系统尤其重要。

    sudo firewall-cmd --zone=public --add-port=[端口号]/tcp --permanent
    
    1
    • --zone=public:指定操作的区域为public。firewalld支持多个区域(zones),每个区域有其特定的规则和策略。public是一个常用区域,适用于公共网络。
    • --add-port=[端口号]/tcp:指定要开放的端口号和协议(TCP或UDP)。替换[端口号]为实际的端口数字。
    • --permanent:使规则永久生效,即使重启防火墙服务或系统后,规则仍然有效。

    # 4.2 关闭防火墙端口

    关闭端口是为了阻止外部访问通过特定端口进入本地服务,增加系统安全性。

    sudo firewall-cmd --zone=public --remove-port=[端口号]/tcp --permanent
    
    1

    此命令与开放端口的命令相似,但使用--remove-port选项来指定需要关闭的端口。

    # 4.3 重新加载防火墙规则

    更改防火墙规则后,需要重新加载firewalld以应用新的规则。

    sudo firewall-cmd --reload
    
    1

    # 4.4 查看开放的端口

    查看当前在public区域开放的端口,有助于了解哪些服务对外提供访问。

    sudo firewall-cmd --zone=public --list-ports
    
    1

    注意事项

    • 开放和关闭端口操作应谨慎进行,以避免无意中暴露敏感服务或阻断正常的网络访问。
    • 在应用任何更改之前,最好先验证firewalld的当前配置,特别是在生产环境中。
    • 了解firewalld的区域(zones)概念和如何使用它们来细化安全策略,可以帮助更好地组织防火墙规则。

    # 5. 测试端口开放情况(nmap/telnet)

    在网络安全和系统管理中,了解和控制哪些端口处于开放状态是非常重要的。nmap和telnet是两个强大的工具,它们可以帮助我们检测和测试端口的状态。

    • 公认端口:1~1023,用于系统内置或常用知名软件绑定使用
    • 注册端口:1024~49151,用于松散绑定使用(用户自定义)
    • 动态端口: 49152~65535,用于临时使用(多用于出口)

    # 5.1 nmap命令

    nmap(Network Mapper)是一个开源工具,用于网络发现和安全审计。它可以扫描大量的网络或单个主机以确定哪些服务和端口是开放的。

    • 基本端口扫描:

      nmap [被查看的IP地址]
      
      1

      扫描目标IP地址上开放的端口。如果未指定端口范围,nmap会扫描已知的1000个最常用的端口。

    • 指定端口范围扫描:

      nmap -p 1-100 [IP地址]
      
      1

      扫描从端口1到端口100的范围。

    • 快速扫描:

      nmap -F [IP地址]
      
      1

      执行快速扫描,只扫描常见的端口。

    • 保存扫描结果:

      nmap -oN output.txt [IP地址]
      
      1

      将扫描结果以普通文本格式保存到output.txt文件中。

    • 端口和服务版本检测:

      nmap -sV [IP地址]
      
      1

      检测端口上运行的服务的版本信息。

    # 5.2 nmap命令输出解释

    以下是一个nmap`命令输出示例,我将解释输出中每个参数的含义。

    • Starting Nmap [version] (URL) at [time]:表示nmap扫描的开始,显示了使用的Nmap版本、官方网站URL和开始扫描的时间。
    • Nmap scan report for [host] ([IP]):扫描报告的头部,显示了被扫描的主机名和IP地址。
    • Host is up ([latency]):表示目标主机是在线的,以及其响应的延迟时间。
    • Not shown: [number] closed ports:未在报告中显示的关闭端口数量。
    Starting Nmap 7.80 ( https://nmap.org ) at 2021-03-01 12:00 EDT
    Nmap scan report for example.com (93.184.216.34)
    Host is up (0.080s latency).
    Not shown: 990 closed ports
    PORT     STATE    SERVICE
    22/tcp   open     ssh
    80/tcp   open     http
    443/tcp  open     https
    993/tcp  open     imaps
    995/tcp  open     pop3s
    3306/tcp open     mysql
    5432/tcp open     postgresql
    8080/tcp open     http-proxy
    8443/tcp open     https-alt
    8888/tcp open     sun-answerbook
    
    Nmap done: 1 IP address (1 host up) scanned in 9.76 seconds
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    • PORT:被扫描的端口号。
    • STATE:端口的状态。可能的状态有:
      • open:端口是开放的,有应用程序在监听。
      • closed:端口是关闭的,没有应用程序监听该端口。
      • filtered:由于网络过滤,无法确定端口状态。
    • SERVICE:在对应端口上运行的服务或协议的名称。例如,ssh、http等。
    • Nmap done: 1 IP address (1 host up) scanned in [time]:扫描完成的总结,显示了扫描的IP地址数量、在线的主机数量和总扫描耗时。

    # 5.3 telnet命令

    telnet是另一种测试特定端口是否开放的工具。它尝试建立TCP连接到指定的IP地址和端口。如果连接成功,则表明端口是开放的;如果失败,则端口可能被关闭或被防火墙规则阻止。

    • 测试端口连接:

      telnet [IP地址] [端口号]
      
      1

      例如,测试本机的80端口:

      telnet 127.0.0.1 80
      
      1

      如果命令成功连接到指定端口,则表明该端口是开放的。

    telnet是一个简单而强大的网络工具,尽管它在现代操作系统中的使用越来越少,但在进行网络服务测试和故障诊断时,telnet仍然是一个非常有用的工具。

    # 5.4 telnet命令输出解释

    由于telnet命令的输出相对简单,并且主要反映的是尝试连接到指定主机和端口时的成功或失败状态,下面提供了一个模拟的telnet命令成功连接的输出示例及其解释。

    Trying 93.184.216.34...
    Connected to example.com.
    Escape character is '^]'.
    
    1
    2
    3
    • Trying [IP address]...:这一行表示telnet正在尝试连接到指定的IP地址。这是连接过程的开始。

    • Connected to [hostname].:当看到这一行时,表示telnet已成功建立到指定主机的连接。这里的主机名(hostname)是根据提供的IP地址解析得到的,如果telnet是直接使用主机名进行连接的,则这里显示的将是输入的那个主机名。

    • Escape character is '^]'.:这一行告诉用户,可以使用特定的转义字符(通常是Ctrl+])退出telnet会话。这个转义字符可以带你进入telnet命令行模式,从那里你可以关闭连接或进行其他操作。

    • 如果连接失败,telnet命令可能会显示如“Connection refused”或“Unable to connect to remote host”等消息,这表示目标端口可能不在监听状态,或者网络之间存在阻断(例如,防火墙规则)。

    注意事项

    • 权限:安装nmap和telnet可能需要管理员权限。使用sudo安装这些工具。
    • 安全性:在使用nmap对外部主机进行扫描时,请确保你有权限这么做,以避免法律问题。
    • 端口状态:开放的端口表示有应用程序监听在该端口上等待接收外部连接。这对于运行Web服务器、数据库等服务是必需的,但未使用的开放端口可能会增加安全风险。
    • 防火墙影响:即使服务在特定端口上监听,如果防火墙规则阻止了访问,该端口对外部检测仍然会显示为关闭。

    # 6. 查看端口占用情况(netstat)

    netstat是一个极其有用的网络工具,用于显示网络连接、路由表、接口统计、伪装连接以及多播成员资格等信息。对于查看端口占用情况,netstat提供了多个选项来帮助用户识别哪些端口正在使用以及这些端口被哪些进程使用。

    # 查看所有活动连接和监听端口
    netstat -a
    
    # 查看所有被占用的端口号和绑定的进程
    netstat -a -p
    
    # 查看指定端口的占用情况
    netstat -an | grep <端口号>
    
    # 除了显示与特定端口号相关的网络连接和监听端口外,还会显示相关进程的信息
    netstat -anp | grep <端口号>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    • -a:显示所有活动连接和监听端口,包括TCP和UDP协议的所有端口。

    • -n:以数字形式显示地址和端口号,而不是尝试解析主机名、服务名和协议名。这可以加速显示速度,避免不必要的名称解析。

    • -p:显示每个连接或监听端口对应的进程ID和进程名。这个选项通常需要管理员权限来查看其他用户的进程信息。

    注意事项

    • 要使用-p选项查看进程信息,您可能需要以root用户执行netstat命令,因为一些进程信息可能不对普通用户可见。

    • netstat命令是一种强大的工具,可以用来识别系统上可能存在的未授权的网络监听和连接,从而帮助识别潜在的安全威胁。

    • 在某些最新的Linux发行版中,netstat工具已被更现代的命令如ss取代。虽然ss命令提供了类似的功能,但netstat仍然在很多系统中可用,且因其易用性而广受欢迎。

    • 使用grep过滤netstat的输出可以帮助您快速定位到特定端口或进程的信息。这在诊断网络问题或检查系统上特定服务的状态时非常有用。

    # 6.1 netstat -an | grep 22输出解释

    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
    tcp6       0      0 :::22                   :::*                    LISTEN     
    
    1
    2
    • tcp:表示连接的协议类型是TCP。tcp6表示基于IPv6的TCP连接。

    • 0(第一个0):表示发送队列的大小。这里的0意味着没有数据正在等待被网络对方确认。

    • 0(第二个0):表示接收队列的大小。同样的,0意味着没有数据正在等待被本地进程读取。

    • 0.0.0.0:22:表示服务器正在监听的地址和端口。0.0.0.0意味着服务器在所有IPv4地址上的22端口监听连接请求。对于IPv6,使用:::22表示在所有IPv6地址上监听。

    • 0.0.0.0:*或:::*:表示远程地址和端口。*表示服务器愿意接受任何IP地址的连接请求。

    • LISTEN:表示套接字的状态,LISTEN状态意味着端口正在监听来自任何远程地址和端口的连接请求。

    # 7. 查看端口占用情况(ss)

    ss(Socket Statistics)命令是一个用于检查套接字(sockets)统计信息的工具,它被设计为netstat命令的更快更高效的替代品。ss命令能够显示有关TCP、UDP、ICMP、RAW等协议的信息,包括开放的端口、正在使用的端口、各种状态的连接等。

    # 7.1 ss命令的基本用法

    • 查看所有连接:

      ss
      
      1
    • 查看监听中的端口:

      ss -l
      
      1
    • 查看TCP连接:

      ss -t
      
      1
    • 查看UDP连接:

      ss -u
      
      1
    • 查看所有连接并显示进程名:

      ss -p
      
      1
    • 过滤显示特定状态的连接(例如:established, listening):

      ss state listening
      
      1
    • 查看特定端口的使用情况(例如:查看80端口):

      ss -ltn 'sport = :80'
      
      1

    # 7.2 常用选项解释

    • -l:仅显示处于监听状态的套接字。
    • -t:仅显示TCP套接字。
    • -u:仅显示UDP套接字。
    • -a:显示所有套接字(默认情况下,ss不会显示处于TIME-WAIT状态的套接字)。
    • -n:不尝试解析服务名称(显示端口号而非服务名)。
    • -p:显示套接字关联的进程信息。需要有相应的权限(通常是root)来查看其他用户的进程信息。
    • state:用于过滤显示特定状态的套接字,如established、listening等。

    注意事项

    • 在使用-p选项时,为了查看所有进程的信息,你可能需要以root权限运行ss命令。
    • ss命令是一个非常强大的工具,可以用来快速诊断系统上的网络问题或进行安全审核。
    • 相比于netstat,ss能够更快地提供大量的网络连接和统计信息,这在处理大量的网络连接时特别有用。
    • ss命令是iproute2软件包的一部分,在现代Linux发行版中通常预装了这个包。

    # 7.3 ss命令输出解释

    State       Recv-Q Send-Q        Local Address:Port          Peer Address:Port         
    ESTAB       0      0             192.168.1.100:ssh           192.168.1.200:50792       
    LISTEN      0      128           0.0.0.0:http                0.0.0.0:*                 
    LISTEN      0      128           [::]:http                   [::]:*                    
    CLOSE-WAIT  32     0             192.168.1.100:42330         93.184.216.34:http        
    
    1
    2
    3
    4
    5
    • State:表示套接字的状态。常见的状态有 LISTEN(监听中)、ESTAB(已建立连接)、CLOSE-WAIT(远端关闭,等待本地关闭)等。

    • Recv-Q 和 Send-Q:

      • Recv-Q:接收队列中的数据量,表示正在等待本地应用程序读取的数据。
      • Send-Q:发送队列中的数据量,表示尚未确认的数据,等待发送或确认。
    • Local Address:Port:本地端的地址和端口号。例如,192.168.1.100:ssh 表示本地地址是 192.168.1.100,端口是 SSH(22)。

    • Peer Address:Port:远端(对端)的地址和端口号。例如,192.168.1.200:50792 表示远端地址是 192.168.1.200,端口是 50792。

    • 0.0.0.0 和 [::]:0.0.0.0 表示监听所有IPv4地址,[::] 表示监听所有IPv6地址。

    • *(在端口后):表示套接字监听所有可能的远端端口。

    特别说明

    • ESTAB(Established)状态表示一个已经建立的连接,即数据可以在本地和远端之间传输。

    • LISTEN状态表示套接字正在监听进入连接请求;对于TCP,这意味着应用程序正在等待accept一个连接。

    • CLOSE-WAIT状态表示远端已经关闭了连接,本地端尚未关闭。

    • 0.0.0.0:http 和 [::]:http 这两行展示了服务既监听IPv4又监听IPv6上的HTTP(80)端口。

    # 8. 查看网络信息 (ifconfig)

    ifconfig(Interface Configuration)命令是Linux和Unix系统中用于配置、管理网络接口参数的传统工具。它可以显示和设置网络接口的各种网络参数,如IP地址、子网掩码、广播地址等。随着ip命令的推广,ifconfig逐渐被视为过时,但在很多系统和场景中仍然广泛使用。

    # 查看所有网络接口的配置信息
    ifconfig
    
    # 显示指定网络接口(例如:eth0)的统计信息
    ifconfig eth0
    
    # 为接口eth0配置IP地址
    ifconfig eth0 192.168.0.10
    
    # 为接口eth0配置子网掩码
    ifconfig eth0 netmask 255.255.255.0
    
    # 激活接口eth0
    ifconfig eth0 up
    
    # 禁用接口eth0
    ifconfig eth0 down
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    • 无参数:运行ifconfig命令而不带任何参数将列出系统中所有激活的网络接口及其配置。

    • 接口名称(如:eth0):指定要操作或查询的网络接口。在现代系统中,接口名称可能与传统的eth0、eth1等不同,采用新的命名规则如enp0s3。

    • IP地址:使用ifconfig命令为网络接口配置IP地址。格式为ifconfig <接口名称> <IP地址>。

    • 子网掩码:通过netmask选项为网络接口指定子网掩码。格式为ifconfig <接口名称> netmask <子网掩码>。

    • up和down:up选项用于激活网络接口,使其能够发送和接收数据。down选项则是禁用网络接口,使其停止工作。

    注意事项

    • 在大多数现代Linux发行版中,ifconfig命令可能不预装。在这些系统中,您可以使用ip命令作为替代,或安装net-tools包以获取ifconfig。

    • 为了修改网络接口设置,通常需要root权限,因此在执行上述命令时可能需要在前面加上sudo。

    • ifconfig命令提供的是即时的网络配置更改,这些更改在系统重启后不会保留。要使网络配置持久化,需要编辑系统的网络配置文件或使用网络管理器。

    • 对于复杂的网络配置任务,考虑使用更现代的工具如nmcli(NetworkManager的命令行界面)、nmtui(NetworkManager的文本用户界面)或直接编辑网络配置文件。

    通过使用ifconfig命令,用户和管理员可以管理系统的网络接口,进行故障排除和网络配置的调整。尽管ifconfig在新版系统中逐渐被ip命令取代,但它仍然是理解网络配置的一个重要工具。

    # 9. 网络状态监控(sar)

    查看网络的相关统计(sar命令非常复杂,这里仅简单用于统计网络)

    sar -n DEV num1 num2		# 查看网络情况
    
    1
    • 选项:-n ,查看网络,DEV表示查看网络接口

      image-20231215200604007

    # 10. 测试网络连接(ping)

    ping命令用于测试与目标主机之间的网络连接。它发送ICMP回显请求到目标主机,并等待接收回显应答。

    语法:ping [选项] 目标主机
    ping example.com                 # 向example.com发送ping请求。
    ping -c 5 -i 1 example.com    # 向example.com发送5个ping请求,每个请求间隔1秒。
    
    1
    2
    3
    • -c <次数>:指定发送ping请求的次数。
    • -i <间隔>:指定发送ping请求的时间间隔。
    • -s <大小>:指定ping请求的数据包大小。
    • -t <TTL>:指定ping请求的生存时间(TTL)。

    # 11. 发起网络请求(curl)

    curl命令用于在终端中进行网络请求。它支持多种协议,如HTTP、FTP、SMTP等,并提供了丰富的选项和功能。

    # 语法:curl [选项] URL
    curl https://example.com  # 向example.com发送GET请求
    # 向example.com发送POST请求,包含JSON数据。
    curl -X POST -H "Content-Type: application/json" -d '{"key": "value"}' https://example.com/api
    
    1
    2
    3
    4
    • -X <方法>:指定HTTP请求方法。
    • -H <头部信息>:指定HTTP请求头部信息。
    • -d <数据>:指定HTTP请求的数据。
    • -o <文件>:将服务器响应保存到指定文件。
    • -L:跟随重定向。

    # 12. 从网络上下载文件(wget)

    wget命令功能强大,支持多种下载操作和选项。它可以用于从网络上下载文件,支持断点续传、递归下载、限速等功能,是一个非常实用的命令行工具。

    image-20231212012215798

    # 13. 文件传输协议(ftp)

    FTP 是一种用于在网络上传输文件的标准协议。它允许用户通过网络在客户端和服务器之间传输文件。

    ftp IP/hostname    //连接到指定的 FTP 服务器。
    mls *.html -       //显示远程主机上文件列表
    
    1
    2

    # 14. 安全复制协议(scp)

    SCP 是一种在网络上安全地复制文件的协议,它使用 SSH(安全外壳协议)进行加密和身份验证。

    语法:scp [选项] 源文件 目标文件
    # 将本地文件复制到远程服务器
    scp local_file.txt user@remote_host:/remote/path/
    # 将远程文件复制到本地系统
    scp user@remote_host:/remote/path/remote_file.txt local_path/
    # 递归复制目录及其内容
    scp -r local_directory user@remote_host:/remote/path/ 
    
    1
    2
    3
    4
    5
    6
    7
    • -P:指定远程服务器的 SSH 端口号。
    • -r:递归地复制目录及其内容。
    • -p:保留文件的原始修改时间和权限。
    • -v:显示详细的调试信息。
    • -C:开启压缩传输,加快传输速度。
    • -i:指定用于身份验证的私钥文件。
    编辑此页 (opens new window)
    上次更新: 2024/12/28, 18:32:08
    系统管理
    磁盘分区管理

    ← 系统管理 磁盘分区管理→

    Theme by Vdoing | Copyright © 2019-2025 程序员scholar
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式