Pradeep Kumar 发布的文章

我们已经在先前的文章中看到如何安装 Debian 10(Buster)。今天,我们将学习如何从 Debian 9 升级为 Debian 10,虽然我们已将看到 Debian 10 和它的特色,所以这里我们不会深入介绍。但是可能读者没有机会读到那篇文章,让我们快速了解一下 Debian 10 和它的新功能。

在差不多两年的开发后,Debian 团队最终发布一个稳定版本,Debian 10 的代码名称是 Buster。Buster 是一个 LTS (长期支持支持)版本,因此未来将由 Debian 支持 5 年。

Debian 10(Buster)新的特色

Debian 10(Buster)回报给大多数 Debian 爱好者大量的新特色。一些特色包括:

  • GNOME 桌面 3.30
  • 默认启用 AppArmor
  • 支持 Linux 内核 4.19.0-4
  • 支持 OpenJDk 11.0
  • 从 Nodejs 4 ~ 8 升级到 Nodejs 10.15.2
  • Iptables 替换为 NFTables

等等。

从 Debian 9 到 Debian 10 的逐步升级指南

在我们开始升级 Debian 10 前,让我们看看升级需要的必备条件:

步骤 1) Debian 升级必备条件

  • 一个良好的网络连接
  • root 用户权限
  • 数据备份

备份你所有的应用程序代码库、数据文件、用户账号详细信息、配置文件是极其重要的,以便在升级出错时,你可以总是可以还原到先前的版本。

步骤 2) 升级 Debian 9 现有的软件包

接下来的步骤是升级你所有现有的软件包,因为一些软件包被标志为保留不能升级,从 Debian 9 升级为 Debian 10 有失败或引发一些问题的可能性。所以,我们不冒任何风险,更好地升级软件包。使用下面的代码来升级软件包:

root@linuxtechi:~$ sudo apt update && sudo apt upgrade -y

步骤 3) 修改软件包存储库文件 /etc/sources.list

接下来的步骤是修改软件包存储库文件 /etc/sources.list,你需要用文本 Buster 替换 Stretch

但是,在你更改任何东西前,确保如下创建一个 sources.list 文件的备份:

root@linuxtechi:~$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

现在使用下面的 sed 命令来在软件包存储库文件中使用 buster 替换 stretch,示例如下显示:

root@linuxtechi:~$ sudo sed -i 's/stretch/buster/g' /etc/apt/sources.list
root@linuxtechi:~$ sudo sed -i 's/stretch/buster/g' /etc/apt/sources.list.d/*.list

更新后,你需要如下更新软件包存储库索引:

root@linuxtechi:~$ sudo apt update

在开始升级你现有的 Debian 操作系统前,让我们使用下面的命令验证当前版本,

root@linuxtechi:~$ cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@linuxtechi:~$

步骤 4) 从 Debian 9 升级到 Debian 10

你做完所有的更改后,是时候从 Debian 9 升级到 Debian 10 了。但是在这之前,再次如下确保更新你的软件包:

root@linuxtechi:~$ sudo apt update && sudo apt upgrade -y

在软件包升级期间,你将被提示启动服务,所以选择你较喜欢的选项。

一旦你系统的所有软件包升级完成,就升级你的发行版的软件包。使用下面的代码来升级发行版:

root@linuxtechi:~$ sudo apt dist-upgrade -y

升级过程可能花费一些时间,取决于你的网络速度。记住在升级过程中,你将被询问一些问题,在软件包升级后是否需要重启服务、你是否需要保留现存的配置文件等。如果你不想进行一些自定义更改,简单地键入 “Y” ,来让升级过程继续。

步骤 5) 验证升级

一旦升级过程完成,重启你的机器,并使用下面的方法检测版本:

root@linuxtechi:~$ lsb_release -a

如果你获得如下输出:

Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster
root@linuxtechi:~$

是的,你已经成功地从 Debian 9 升级到 Debian 10。

验证升级的备用方法:

root@linuxtechi:~$ cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@linuxtechi:~$

结束

希望上面的逐步指南为你提供了从 Debian 9(Stretch)简单地升级为 Debian 10(Buster)的所有信息。在评论部分,请给予你使用 Debian 10 的反馈、建议、体验。


via: https://www.linuxtechi.com/upgrade-debian-9-to-debian-10-command-line/

作者:Pradeep Kumar 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Debian 项目发布了它的最新稳定版 Debian 10,其代号是 “Buster”,这个发布版将获得 5 年的支持。Debian 10 可用于 32 位和 64 位系统。这个发布版带来很多新的特色,列出下面一些特色:

  • 引入新的 Debian 10 的主题 “FuturePrototype”
  • 新版本的电脑桌面环境 GNOME 3.30、Cinnamon 3.8、KDE Plasma 5.14、MATE 1.20、Xfce 4.12
  • 长期支持版内核 4.19.0-4
  • 新的 Python 3 (3.7.2)、Perl 5.28、PHP 7.3
  • iptables 替换为 nftables
  • 更新 LibreOffice 6.1、GIMP 2.10.8
  • 更新 OpenJDK 11、MariaDB 10.3 和 Apache 2.4.38
  • 更新 Chromium 73.0、Firefox 60.7
  • 改进 UEFI 支持

在这篇文章中,我们将演示如何在你的笔记本电脑和台式电脑上安装 Debian 10 “Buster” 工作站。

Debian 10 建议系统要求:

  • 2 GB 内存
  • 2 GHz 双核处理器
  • 10 GB 可用硬盘空间
  • 可启动安装介质(USB / DVD)
  • 网络连接(可选)

让我们跳转到 Debian 10 的安装步骤。

步骤:1)下载 Debian 10 ISO 文件

从它的官方入口网站,下载 Debian 10 ISO 文件,

ISO 文件下载完成后刻录它到 USB 或 DVD,使其可用来启动。

步骤:2)使用安装可启动介质(USB / DVD)启动你的电脑系统

重启你将安装 Debian 10 的电脑,转到 BIOS 设置,并设置启动介质为 USB 或 DVD。 用可启动介质启动电脑后,那么我们将看到下面的屏幕。

选择第一个选项 “Graphical Install”。

步骤:3)选择你的首选语言、位置和键盘布局

在这个步骤中,你将被要求选择你的首选语言。

点击 “Continue”。

选择你的首选位置,电脑系统将依照位置自动设置时区。

现在选择适合于你安装设备的键盘布局。

点击 “Continue” 以继续。

步骤:4)为 Debian 10 系统设置主机名称和域名

设置适合于你的环境的主机名,然后在 “Continue” 上单击,就我而言, 我指定主机名为 “debian10-buster”。

指定适合于环境的域名,并安装,然后在 “Continue” 上单击。

步骤:5)指定 root 用户的密码

在下面的屏幕中指定 root 密码,然后在 “Continue” 上单击。

步骤:6)创建本地用户和它的密码

在这个步骤中,你将被提示指定本地用户具体信息,如完整的姓名、用户名和密码,

在 “Continue” 上单击。

在 “Continue” 上单击,并在接下来的窗口中指定密码。

步骤:7)为 Debian 10 选择硬盘分区方案

在这个步骤中,为 Debian 10 选择硬盘分区方案,就我而言,我有 40 GB 硬盘可用于操作系统安装。分区方案有两种类型:

  • 向导分区(安装器将自动创建需要的分区)
  • 手动分区(正如名字所示,使用这种方式,我们可以手动创建分区方案)

在这篇教程中,我们将在我 42 GB 硬盘上使用带有 LVM 的向导分区。

在 “Continue” 上单击来继续,

正如我们所视,我大约有 42 GB 硬盘空间,选择 “Continue”。

在接下来的屏幕中,你将被要求选择分区,如果是 Linux 新用户,那么选择第一个选项。假使你想要一个独立的 home 分区,那么选择第二种方案,否则选择第三种方案,它们将为 /home/var/tmp 创建独立的分区。

就我而言,我将通过选择第三种选项来为 /home/var/tmp 创建独立的分区。

在接下来的屏幕中,选择 “yes” 来将更改写到磁盘中,配置 LVM ,然后在 “Continue” 上单击。

在接下来的屏幕中,将显示分区表,验证分区大小、文件系统类型和挂载点。

在 “Continue” 上单击来继续,

在接下来的屏幕中,选择 “yes” 来写更改到磁盘中,

在 “Continue” 上单击来继续安装,

步骤:7)Debian 10 安装开始

在这一步骤中,Debian 10 的安装已经开始,并正在进行中,

在安装期间,安装器将提示你扫描 CD/DVD 以配置软件包管理器,选择 “No” ,然后在 “Continue” 上单击。

在接下来的屏幕中,如果你想配置基于网络的软件包管理器选择 “yes” ,但是为了使这个方式工作,要确保你的系统连接到了网络,否则选择 “No”。

在 “Continue” 上单击来配置基于你本地的软件包管理器,在接下来的几个屏幕中,你将被提示选择本地和 Debian 软件包存储库 URL ,然后你将获得下面的屏幕。

选择 “No” 来跳过软件包审查步骤,然后在 “Continue” 上单击。

在接下来的窗口中,你将被提示选择电脑桌面环境和其它软件包,就我而言,我选择 “Gnome Desktop” ,“SSH Server” 和 “Standard System utilities”。

在 “Continue” 上单击来继续安装,

选择选项 “yes” 来安装 Grub 引导加载程序。

在 “Continue” 上单击来继续,然后在接下来的窗口中选择将安装引导加载程序的磁盘(/dev/sda)。

在 “Continue” 上单击来继续安装,一旦安装完成,安装器将提示我们来重启系统,

在 “Continue” 上单击来重启你的系统,不要忘记在 BIOS 设置中更改启动介质,以便系统从我们已经安装 Debian 10 操作系统的硬盘启动。

步骤:8)启动你新安装的 Debian 10 系统

在成功安装后,一旦我们重启系统,我们将获取下面的引导加载程序屏幕。

选择第一个选项 “Debian GNU/Linux” 并敲击回车键。

一旦系统启动,使用我在安装期间创建的本地用户和它的密码。

在成功登录后,将看到如下电脑桌面屏幕,

这证实 Debian 10 已经成功安装,这就是本文的全部,探索这个令人激动的 Linux 发行版吧,玩得开心 ?


via: https://www.linuxtechi.com/debian-10-buster-installation-guide/

作者:Pradeep Kumar 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

现在,大多数公司都试图将它们的 IT 基础设施和电信设施迁移到私有云, 如 OpenStack。如果你打算面试 OpenStack 管理员这个岗位,那么下面列出的这些面试问题可能会帮助你通过面试。

Q:1 说一下 OpenStack 及其主要组件?

答: OpenStack 是一系列开源软件,这些软件组成了一个云供给软件,也就是 OpenStack,意即开源软件或项目栈。

下面是 OpenStack 的主要关键组件:

  • Nova – 用于在计算级别管理虚拟机,并在计算或管理程序级别执行其他计算任务。
  • Neutron – 为虚拟机、计算和控制节点提供网络功能。
  • Keystone – 为所有云用户和 OpenStack 云服务提供身份认证服务。换句话说,我们可以说 Keystone 是一个提供给云用户和云服务访问权限的方法。
  • Horizon – 用于提供图形用户界面。使用图形化管理界面可以很轻松地完成各种日常操作任务。
  • Cinder – 用于提供块存储功能。通常来说 OpenStack 的 Cinder 中集成了 Chef 和 ScaleIO 来共同为计算和控制节点提供块存储服务。
  • Swift – 用于提供对象存储功能。通常来说,Glance 管理的镜像是存储在对象存储空间的。像 ScaleIO 这样的外部存储也可以提供对象存储,可以很容易的集成 Glance 服务。
  • Glance – 用于提供镜像服务。使用 Glance 的管理平台来上传和下载云镜像。
  • Heat – 用于提供编排服务或功能。使用 Heat 管理平台可以轻松地将虚拟机作为堆栈,并且根据需要可以将虚拟机扩展或收缩。
  • Ceilometer – 用于提供计量与监控功能。

Q:2 什么服务通常在控制节点上运行?

答: 以下服务通常在控制节点上运行:

  • 认证服务(KeyStone)
  • 镜像服务(Glance)
  • Nova 服务比如 Nova API、Nova Scheduler 和 Nova DB
  • 块存储和对象存储服务
  • Ceilometer 服务
  • MariaDB / MySQL 和 RabbitMQ 服务
  • 网络(Neutron)和网络代理的管理服务
  • 编排服务(Heat)

Q:3 什么服务通常在计算节点上运行?

答: 以下服务通常在计算节点运行:

  • Nova 计算
  • 网络服务,比如 OVS

Q:4 计算节点上虚拟机的默认地址是什么?

答: 虚拟机存储在计算节点的 /var/lib/nova/instances

Q:5 Glance 镜像的默认地址是什么?

答: 因为 Glance 服务运行在控制节点上,所以 Glance 镜像都被存储在控制节点的 /var/lib/glance/images 文件夹下。

想了解更多请访问:在 OpenStack 中如何使用命令行创建和删除虚拟机

Q:6 说一下如何使用命令行启动一个虚拟机?

答: 我们可以使用如下 OpenStack 命令来启动一个新的虚拟机:

# openstack server create --flavor {flavor-name} --image {Image-Name-Or-Image-ID}  --nic net-id={Network-ID} --security-group {Security_Group_ID} –key-name {Keypair-Name} <VM_Name>

Q:7 如何在 OpenStack 中显示用户的网络命名空间列表?

答: 可以使用 ip net ns 命令来列出用户的网络命名空间。

~# ip netns list
qdhcp-a51635b1-d023-419a-93b5-39de47755d2d
haproxy
vrouter

Q:8 如何在 OpenStack 中执行网络命名空间内的命令?

答: 假设我们想在 qdhcp-a51635b1-d023-419a-93b5-39de47755d2d 网络命名空间中执行 ifconfig 命令,我们可以执行如下命令。

命令格式 : ip netns exec {network-space} <command>

~# ip netns exec qdhcp-a51635b1-d023-419a-93b5-39de47755d2d "ifconfig"

Q:9 在 Glance 服务中如何使用命令行上传和下载镜像?

答: Glance 服务中云镜像上传可以使用如下 OpenStack 命令:

~# openstack image create --disk-format qcow2 --container-format bare   --public --file {Name-Cloud-Image}.qcow2     <Cloud-Image-Name>

下载云镜像则使用如下命令:

~# glance image-download --file <Cloud-Image-Name> --progress  <Image-ID>

Q:10 OpenStack 如何将虚拟机从错误状态转换为活动状态?

答: 在某些情况下虚拟机可能会进入错误状态,可以使用如下命令将错误状态转换为活动状态:

~# nova reset-state --active {Instance_id}

Q:11 如何使用命令行来获取可使用的浮动 IP 列表?

答: 可使用如下命令来显示可用浮动 IP 列表:

~]# openstack ip floating list | grep None | head -10

Q:12 如何在特定可用区域中或在计算主机上配置虚拟机?

答: 假设我们想在 compute-02 中的可用区 NonProduction 上配置虚拟机,可以使用如下命令:

~]# openstack server create --flavor m1.tiny --image cirros --nic net-id=e0be93b8-728b-4d4d-a272-7d672b2560a6 --security-group NonProd_SG  --key-name linuxtec --availability-zone NonProduction:compute-02  nonprod_testvm

Q:13 如何在特定计算节点上获取配置的虚拟机列表?

答: 假设我们想要获取在 compute-0-19 中配置的虚拟机列表,可以使用如下命令:

命令格式: openstack server list –all-projects –long -c Name -c Host | grep -i {Compute-Node-Name}

~# openstack server list --all-projects --long -c Name -c Host | grep -i  compute-0-19

Q:14 如何使用命令行查看 OpenStack 实例的控制台日志?

答: 使用如下命令可查看实例的控制台日志。

首先获取实例的 ID,然后使用如下命令:

~# openstack console log show {Instance-id}

Q:15 如何获取 OpenStack 实例的控制台的 URL 地址?

答: 可以使用以下 OpenStack 命令从命令行检索实例的控制台 URL 地址:

~# openstack console url show {Instance-id}

Q:16 如何使用命令行创建可启动的 cinder / block 存储卷?

答: 假设创建一个 8GB 可启动存储卷,可参考如下步骤:

  • 使用如下命令获取镜像列表
~# openstack image list | grep -i cirros
| 89254d46-a54b-4bc8-8e4d-658287c7ee92 | cirros  | active |
  • 使用 cirros 镜像创建 8GB 的可启动存储卷
~# cinder create --image-id 89254d46-a54b-4bc8-8e4d-658287c7ee92 --display-name cirros-bootable-vol  8

Q:17 如何列出所有在你的 OpenStack 中创建的项目或用户?

答: 可以使用如下命令来检索所有项目和用户:

~# openstack project list --long

Q:18 如何显示 OpenStack 服务端点列表?

答: OpenStack 服务端点被分为 3 类:

  • 公共端点
  • 内部端点
  • 管理端点

使用如下 OpenStack 命令来查看各种 OpenStack 服务端点:

~# openstack catalog list

可通过以下命令来显示特定服务端点(比如说 keystone)列表:

~# openstack catalog show keystone

想了解更多请访问:OpenStack 中的实例创建流程

Q:19 在控制节点上你应该按照什么步骤来重启 nova 服务?

答: 应该按照如下步骤来重启 OpenStack 控制节点的 nova 服务:

  • service nova-api restart
  • service nova-cert restart
  • service nova-conductor restart
  • service nova-consoleauth restart
  • service nova-scheduler restart

Q:20 假如计算节点上为数据流量配置了一些 DPDK 端口,你如何检查 DPDK 端口的状态呢?

答: 因为我们使用 openvSwitch (OVS) 来配置 DPDK 端口,因此可以使用如下命令来检查端口的状态:

root@compute-0-15:~# ovs-appctl bond/show | grep dpdk
active slave mac: 90:38:09:ac:7a:99(dpdk0)
slave dpdk0: enabled
slave dpdk1: enabled
root@compute-0-15:~#
root@compute-0-15:~# dpdk-devbind.py --status

Q:21 如何使用命令行在 OpenStack 中向存在的安全组 SG(安全组)中添加新规则?

答: 可以使用 neutron 命令向 OpenStack 已存在的安全组中添加新规则:

~# neutron security-group-rule-create --protocol <tcp or udp>  --port-range-min <port-number> --port-range-max <port-number> --direction <ingress or egress>  --remote-ip-prefix <IP-address-or-range> Security-Group-Name

Q:22 如何查看控制节点和计算节点的 OVS 桥配置?

答: 控制节点和计算节点的 OVS 桥配置可使用以下命令来查看:

~]# ovs-vsctl show

Q:23 计算节点上的集成桥(br-int)的作用是什么?

答: 集成桥(br-int)对来自和运行在计算节点上的实例的流量执行 VLAN 标记和取消标记。

数据包从实例的 n/w 接口发出使用虚拟接口 qvo 通过 Linux 桥(qbr)。qvb 接口是用来连接 Linux 桥的,qvo 接口是用来连接集成桥的。集成桥上的 qvo 端口有一个内部 VLAN 标签,这个标签是用于当数据包到达集成桥的时候贴到数据包头部的。

Q:24 隧道桥(br-tun)在计算节点上的作用是什么?

答: 隧道桥(br-tun)根据 OpenFlow 规则将 VLAN 标记的流量从集成网桥转换为隧道 ID。

隧道桥允许不同网络的实例彼此进行通信。隧道有利于封装在非安全网络上传输的流量,它支持两层网络,即 GRE 和 VXLAN。

Q:25 外部 OVS 桥(br-ex)的作用是什么?

答: 顾名思义,此网桥转发来往网络的流量,以允许外部访问实例。br-ex 连接物理接口比如 eth2,这样用户网络的浮动 IP 数据从物理网络接收并路由到用户网络端口。

Q:26 OpenStack 网络中 OpenFlow 规则的作用是什么?

答: OpenFlow 规则是一种机制,这种机制定义了一个数据包如何从源到达目的地。OpenFlow 规则存储在 flow 表中。flow 表是 OpenFlow 交换机的一部分。

当一个数据包到达交换机就会被第一个 flow 表检查,如果不匹配 flow 表中的任何入口,那这个数据包就会被丢弃或者转发到其他 flow 表中。

Q:27 怎样查看 OpenFlow 交换机的信息(比如端口、表编号、缓存编号等)?

答: 假如我们要显示 OpenFlow 交换机的信息(br-int),需要执行如下命令:

root@compute-0-15# ovs-ofctl show br-int
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000fe981785c443
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
 1(patch-tun): addr:3a:c6:4f:bd:3e:3b
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 2(qvob35d2d65-f3): addr:b2:83:c4:0b:42:3a
     config:     0
     state:      0
     current:    10GB-FD COPPER
     speed: 10000 Mbps now, 0 Mbps max
 ………………………………………

Q:28 如何显示交换机中的所有 flow 的入口?

答: 可以使用命令 ovs-ofctl dump-flows 来查看交换机的 flow 入口。

假设我们想显示 OVS 集成桥(br-int)的所有 flow 入口,可以使用如下命令:

[root@compute01 ~]# ovs-ofctl dump-flows br-int

Q:29 什么是 Neutron 代理?如何显示所有 Neutron 代理?

答: OpenStack Neutron 服务器充当中心控制器,实际网络配置是在计算节点或者网络节点上执行的。Neutron 代理是计算节点或者网络节点上进行配置更新的软件实体。Neutron 代理通过 Neuron 服务和消息队列来和中心 Neutron 服务通信。

可通过如下命令查看 Neutron 代理列表:

~# openstack network agent list -c ‘Agent type’ -c Host -c Alive -c State

Q:30 CPU Pinning 是什么?

答: CPU Pinning 是指为某个虚拟机保留物理核心。它也称为 CPU 隔离或处理器关联。有两个目的:

  • 它确保虚拟机只能在专用核心上运行
  • 它还确保公共主机进程不在这些核心上运行

我们也可以认为 Pinning 是物理核心到一个用户虚拟 CPU(vCPU)的一对一映射。


via: https://www.linuxtechi.com/openstack-interview-questions-answers/

作者:Pradeep Kumar 选题:lujun9972 译者:ScarboroughCoral 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

将 Linux 服务器引导到单用户模式或 救援模式 rescue mode 是 Linux 管理员在关键时刻恢复服务器时通常使用的重要故障排除方法之一。在 Ubuntu 18.04 和 Debian 9 中,单用户模式被称为救援模式。

除了救援模式外,Linux 服务器可以在 紧急模式 emergency mode 下启动,它们之间的主要区别在于,紧急模式加载了带有只读根文件系统文件系统的最小环境,没有启用任何网络或其他服务。但救援模式尝试挂载所有本地文件系统并尝试启动一些重要的服务,包括网络。

在本文中,我们将讨论如何在救援模式和紧急模式下启动 Ubuntu 18.04 LTS/Debian 9 服务器。

在单用户/救援模式下启动 Ubuntu 18.04 LTS 服务器:

重启服务器并进入启动加载程序 (Grub) 屏幕并选择 “Ubuntu”,启动加载器页面如下所示,

按下 e,然后移动到以 linux 开头的行尾,并添加 systemd.unit=rescue.target。如果存在单词 $vt_handoff 就删除它。

现在按 Ctrl-xF10 启动,

现在按回车键,然后你将得到所有文件系统都以读写模式挂载的 shell 并进行故障排除。完成故障排除后,可以使用 reboot 命令重新启动服务器。

在紧急模式下启动 Ubuntu 18.04 LTS 服务器

重启服务器并进入启动加载程序页面并选择 “Ubuntu”,然后按 e 并移动到以 linux 开头的行尾,并添加 systemd.unit=emergency.target

现在按 Ctrl-xF10 以紧急模式启动,你将获得一个 shell 并从那里进行故障排除。正如我们已经讨论过的那样,在紧急模式下,文件系统将以只读模式挂载,并且在这种模式下也不会有网络,

使用以下命令将根文件系统挂载到读写模式,

# mount -o remount,rw /

同样,你可以在读写模式下重新挂载其余文件系统。

将 Debian 9 引导到救援和紧急模式

重启 Debian 9.x 服务器并进入 grub页面选择 “Debian GNU/Linux”。

按下 e 并移动到 linux 开头的行尾并添加 systemd.unit=rescue.target 以在救援模式下启动系统, 要在紧急模式下启动,那就添加 systemd.unit=emergency.target

救援模式:

现在按 Ctrl-xF10 以救援模式启动

按下回车键以获取 shell,然后从这里开始故障排除。

紧急模式:

现在按下 ctrl-xF10 以紧急模式启动系统

按下回车获取 shell 并使用 mount -o remount,rw / 命令以读写模式挂载根文件系统。

注意:如果已经在 Ubuntu 18.04 和 Debian 9 Server 中设置了 root 密码,那么你必须输入 root 密码才能在救援和紧急模式下获得 shell

就是这些了,如果您喜欢这篇文章,请分享你的反馈和评论。


via: https://www.linuxtechi.com/boot-ubuntu-18-04-debian-9-rescue-emergency-mode/

作者:Pradeep Kumar 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

wireshark-Debian-9-Ubuntu 16.04 -17.10

Wireshark 是自由开源的、跨平台的基于 GUI 的网络数据包分析器,可用于 Linux、Windows、MacOS、Solaris 等。它可以实时捕获网络数据包,并以人性化的格式呈现。Wireshark 允许我们监控网络数据包直到其微观层面。Wireshark 还有一个名为 tshark 的命令行实用程序,它与 Wireshark 执行相同的功能,但它是通过终端而不是 GUI。

Wireshark 可用于网络故障排除、分析、软件和通信协议开发以及用于教育目的。Wireshark 使用 pcap 库来捕获网络数据包。

Wireshark 具有许多功能:

  • 支持数百项协议检查
  • 能够实时捕获数据包并保存,以便以后进行离线分析
  • 许多用于分析数据的过滤器
  • 捕获的数据可以即时压缩和解压缩
  • 支持各种文件格式的数据分析,输出也可以保存为 XML、CSV 和纯文本格式
  • 数据可以从以太网、wifi、蓝牙、USB、帧中继、令牌环等多个接口中捕获

在本文中,我们将讨论如何在 Ubuntu/Debian 上安装 Wireshark,并将学习如何使用 Wireshark 捕获网络数据包。

在 Ubuntu 16.04 / 17.10 上安装 Wireshark

Wireshark 在 Ubuntu 默认仓库中可用,只需使用以下命令即可安装。但有可能得不到最新版本的 wireshark。

linuxtechi@nixworld:~$ sudo apt-get update
linuxtechi@nixworld:~$ sudo apt-get install wireshark -y

因此,要安装最新版本的 wireshark,我们必须启用或配置官方 wireshark 仓库。

使用下面的命令来配置仓库并安装最新版本的 wireshark 实用程序。

linuxtechi@nixworld:~$ sudo add-apt-repository ppa:wireshark-dev/stable
linuxtechi@nixworld:~$ sudo apt-get update
linuxtechi@nixworld:~$ sudo apt-get install wireshark -y

一旦安装了 wireshark,执行以下命令,以便非 root 用户也可以捕获接口的实时数据包。

linuxtechi@nixworld:~$ sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap

在 Debian 9 上安装 Wireshark

Wireshark 包及其依赖项已存在于 debian 9 的默认仓库中,因此要在 Debian 9 上安装最新且稳定版本的 Wireshark,请使用以下命令:

linuxtechi@nixhome:~$ sudo apt-get update
linuxtechi@nixhome:~$ sudo apt-get install wireshark -y

在安装过程中,它会提示我们为非超级用户配置 dumpcap,

选择 yes 并回车。

Configure-Wireshark-Debian9

安装完成后,执行以下命令,以便非 root 用户也可以捕获接口的实时数据包。

linuxtechi@nixhome:~$ sudo chmod +x /usr/bin/dumpcap

我们还可以使用最新的源代码包在 Ubuntu/Debian 和其它 Linux 发行版上安装 wireshark。

在 Debian / Ubuntu 系统上使用源代码安装 Wireshark

首先下载最新的源代码包(写这篇文章时它的最新版本是 2.4.2),使用以下命令:

linuxtechi@nixhome:~$ wget https://1.as.dl.wireshark.org/src/wireshark-2.4.2.tar.xz

然后解压缩包,进入解压缩的目录:

linuxtechi@nixhome:~$ tar -xf wireshark-2.4.2.tar.xz -C /tmp
linuxtechi@nixhome:~$ cd /tmp/wireshark-2.4.2

现在我们使用以下命令编译代码:

linuxtechi@nixhome:/tmp/wireshark-2.4.2$ ./configure --enable-setcap-install
linuxtechi@nixhome:/tmp/wireshark-2.4.2$ make

最后安装已编译的软件包以便在系统上安装 Wireshark:

linuxtechi@nixhome:/tmp/wireshark-2.4.2$ sudo make install
linuxtechi@nixhome:/tmp/wireshark-2.4.2$ sudo ldconfig

在安装后,它将创建一个单独的 Wireshark 组,我们现在将我们的用户添加到组中,以便它可以与 Wireshark 一起使用,否则在启动 wireshark 时可能会出现 “permission denied(权限被拒绝)”错误。

要将用户添加到 wireshark 组,执行以下命令:

linuxtechi@nixhome:~$ sudo usermod -a -G wireshark linuxtechi

现在我们可以使用以下命令从 GUI 菜单或终端启动 wireshark:

linuxtechi@nixhome:~$ wireshark

在 Debian 9 系统上使用 Wireshark

Access-wireshark-debian9

点击 Wireshark 图标。

Wireshark-window-debian9

在 Ubuntu 16.04 / 17.10 上使用 Wireshark

Access-wireshark-Ubuntu

点击 Wireshark 图标。

Wireshark-window-Ubuntu

捕获并分析数据包

一旦 wireshark 启动,我们就会看到 wireshark 窗口,上面有 Ubuntu 和 Debian 系统的示例。

wireshark-Linux-system

所有这些都是我们可以捕获网络数据包的接口。根据你系统上的接口,此屏幕可能与你的不同。

我们选择 enp0s3 来捕获该接口的网络流量。选择接口后,在我们网络上所有设备的网络数据包开始填充(参考下面的屏幕截图):

Capturing-Packet-from-enp0s3-Ubuntu-Wireshark

第一次看到这个屏幕,我们可能会被这个屏幕上显示的数据所淹没,并且可能已经想过如何整理这些数据,但不用担心,Wireshark 的最佳功能之一就是它的过滤器。

我们可以根据 IP 地址、端口号,也可以使用来源和目标过滤器、数据包大小等对数据进行排序和过滤,也可以将两个或多个过滤器组合在一起以创建更全面的搜索。我们也可以在 “Apply a Display Filter(应用显示过滤器)”选项卡中编写过滤规则,也可以选择已创建的规则。要选择之前构建的过滤器,请单击 “Apply a Display Filter(应用显示过滤器)”选项卡旁边的旗帜图标。

Filter-in-wireshark-Ubuntu

我们还可以根据颜色编码过滤数据,默认情况下,浅紫色是 TCP 流量,浅蓝色是 UDP 流量,黑色标识有错误的数据包,看看这些编码是什么意思,点击 “View -> Coloring Rules”,我们也可以改变这些编码。

Packet-Colouring-Wireshark

在我们得到我们需要的结果之后,我们可以点击任何捕获的数据包以获得有关该数据包的更多详细信息,这将显示该网络数据包的所有数据。

Wireshark 是一个非常强大的工具,需要一些时间来习惯并对其进行命令操作,本教程将帮助你入门。请随时在下面的评论框中提出你的疑问或建议。


via: https://www.linuxtechi.com/install-use-wireshark-debian-9-ubuntu/

作者:Pradeep Kumar 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

tcpdump 是一个有名的命令行数据包分析工具。我们可以使用 tcpdump 命令捕获实时 TCP/IP 数据包,这些数据包也可以保存到文件中。之后这些捕获的数据包可以通过 tcpdump 命令进行分析。tcpdump 命令在网络层面进行故障排除时变得非常方便。

tcpdump 在大多数 Linux 发行版中都能用,对于基于 Debian 的Linux,可以使用 apt 命令安装它。

# apt install tcpdump -y

在基于 RPM 的 Linux 操作系统上,可以使用下面的 yum 命令安装 tcpdump

# yum install tcpdump -y

当我们在没用任何选项的情况下运行 tcpdump 命令时,它将捕获所有接口的数据包。因此,要停止或取消 tcpdump 命令,请键入 ctrl+c。在本教程中,我们将使用不同的实例来讨论如何捕获和分析数据包。

示例:1)从特定接口捕获数据包

当我们在没用任何选项的情况下运行 tcpdump 命令时,它将捕获所有接口上的数据包,因此,要从特定接口捕获数据包,请使用选项 -i,后跟接口名称。

语法:

# tcpdump -i {接口名}

假设我想从接口 enp0s3 捕获数据包。

输出将如下所示,

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
06:43:22.905890 IP compute-0-1.example.com.ssh > 169.144.0.1.39374: Flags [P.], seq 21952160:21952540, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 380
06:43:22.906045 IP compute-0-1.example.com.ssh > 169.144.0.1.39374: Flags [P.], seq 21952540:21952760, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 220
06:43:22.906150 IP compute-0-1.example.com.ssh > 169.144.0.1.39374: Flags [P.], seq 21952760:21952980, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 220
06:43:22.906291 IP 169.144.0.1.39374 > compute-0-1.example.com.ssh: Flags [.], ack 21952980, win 13094, options [nop,nop,TS val 6580205 ecr 26164373], length 0
06:43:22.906303 IP 169.144.0.1.39374 > compute-0-1.example.com.ssh: Flags [P.], seq 13537:13609, ack 21952980, win 13094, options [nop,nop,TS val 6580205 ecr 26164373], length 72
06:43:22.906322 IP compute-0-1.example.com.ssh > 169.144.0.1.39374: Flags [P.], seq 21952980:21953200, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 220
^C
109930 packets captured
110065 packets received by filter
133 packets dropped by kernel
[[email protected] ~]#

示例:2)从特定接口捕获特定数量数据包

假设我们想从特定接口(如 enp0s3)捕获 12 个数据包,这可以使用选项 -c {数量} -I {接口名称} 轻松实现。

root@compute-0-1 ~]# tcpdump -c 12 -i enp0s3

上面的命令将生成如下所示的输出,

N-Number-Packsets-tcpdump-interface

示例:3)显示 tcpdump 的所有可用接口

使用 -D 选项显示 tcpdump 命令的所有可用接口,

[root@compute-0-1 ~]# tcpdump -D
1.enp0s3
2.enp0s8
3.ovs-system
4.br-int
5.br-tun
6.nflog (Linux netfilter log (NFLOG) interface)
7.nfqueue (Linux netfilter queue (NFQUEUE) interface)
8.usbmon1 (USB bus number 1)
9.usbmon2 (USB bus number 2)
10.qbra692e993-28
11.qvoa692e993-28
12.qvba692e993-28
13.tapa692e993-28
14.vxlan_sys_4789
15.any (Pseudo-device that captures on all interfaces)
16.lo [Loopback]
[[email protected] ~]#

我正在我的一个 openstack 计算节点上运行 tcpdump 命令,这就是为什么在输出中你会看到数字接口、标签接口、网桥和 vxlan 接口

示例:4)捕获带有可读时间戳的数据包(-tttt 选项)

默认情况下,在 tcpdump 命令输出中,不显示可读性好的时间戳,如果您想将可读性好的时间戳与每个捕获的数据包相关联,那么使用 -tttt 选项,示例如下所示,

[[email protected] ~]# tcpdump -c 8 -tttt -i enp0s3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
2018-08-25 23:23:36.954883 IP compute-0-1.example.com.ssh > 169.144.0.1.39406: Flags [P.], seq 1449206247:1449206435, ack 3062020950, win 291, options [nop,nop,TS val 86178422 ecr 21583714], length 188
2018-08-25 23:23:36.955046 IP 169.144.0.1.39406 > compute-0-1.example.com.ssh: Flags [.], ack 188, win 13585, options [nop,nop,TS val 21583717 ecr 86178422], length 0
2018-08-25 23:23:37.140097 IP controller0.example.com.amqp > compute-0-1.example.com.57818: Flags [P.], seq 814607956:814607964, ack 2387094506, win 252, options [nop,nop,TS val 86172228 ecr 86176695], length 8
2018-08-25 23:23:37.140175 IP compute-0-1.example.com.57818 > controller0.example.com.amqp: Flags [.], ack 8, win 237, options [nop,nop,TS val 86178607 ecr 86172228], length 0
2018-08-25 23:23:37.355238 IP compute-0-1.example.com.57836 > controller0.example.com.amqp: Flags [P.], seq 1080415080:1080417400, ack 1690909362, win 237, options [nop,nop,TS val 86178822 ecr 86163054], length 2320
2018-08-25 23:23:37.357119 IP controller0.example.com.amqp > compute-0-1.example.com.57836: Flags [.], ack 2320, win 1432, options [nop,nop,TS val 86172448 ecr 86178822], length 0
2018-08-25 23:23:37.357545 IP controller0.example.com.amqp > compute-0-1.example.com.57836: Flags [P.], seq 1:22, ack 2320, win 1432, options [nop,nop,TS val 86172449 ecr 86178822], length 21
2018-08-25 23:23:37.357572 IP compute-0-1.example.com.57836 > controller0.example.com.amqp: Flags [.], ack 22, win 237, options [nop,nop,TS val 86178825 ecr 86172449], length 0
8 packets captured
134 packets received by filter
69 packets dropped by kernel
[[email protected] ~]#

示例:5)捕获数据包并将其保存到文件(-w 选项)

使用 tcpdump 命令中的 -w 选项将捕获的 TCP/IP 数据包保存到一个文件中,以便我们可以在将来分析这些数据包以供进一步分析。

语法:

# tcpdump -w 文件名.pcap -i {接口名}

注意:文件扩展名必须为 .pcap

假设我要把 enp0s3 接口捕获到的包保存到文件名为 enp0s3-26082018.pcap

[root@compute-0-1 ~]# tcpdump -w enp0s3-26082018.pcap -i enp0s3

上述命令将生成如下所示的输出,

[root@compute-0-1  ~]# tcpdump -w enp0s3-26082018.pcap -i enp0s3
tcpdump: listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
^C841 packets captured
845 packets received by filter
0 packets dropped by kernel
[root@compute-0-1  ~]# ls
anaconda-ks.cfg enp0s3-26082018.pcap
[root@compute-0-1  ~]#

捕获并保存大小大于 N 字节的数据包。

[root@compute-0-1  ~]# tcpdump -w enp0s3-26082018-2.pcap greater 1024

捕获并保存大小小于 N 字节的数据包。

[root@compute-0-1  ~]# tcpdump -w enp0s3-26082018-3.pcap less 1024

示例:6)从保存的文件中读取数据包(-r 选项)

在上面的例子中,我们已经将捕获的数据包保存到文件中,我们可以使用选项 -r 从文件中读取这些数据包,例子如下所示,

[root@compute-0-1 ~]# tcpdump -r enp0s3-26082018.pcap

用可读性高的时间戳读取包内容,

[root@compute-0-1  ~]# tcpdump -tttt -r enp0s3-26082018.pcap
reading from file enp0s3-26082018.pcap, link-type EN10MB (Ethernet)
2018-08-25 22:03:17.249648 IP compute-0-1.example.com.ssh > 169.144.0.1.39406: Flags [P.], seq 1426167803:1426167927, ack 3061962134, win 291, options
[nop,nop,TS val 81358717 ecr 20378789], length 124
2018-08-25 22:03:17.249840 IP 169.144.0.1.39406 > compute-0-1.example.com.ssh: Flags [.], ack 124, win 564, options [nop,nop,TS val 20378791 ecr 81358
717], length 0
2018-08-25 22:03:17.454559 IP controller0.example.com.amqp > compute-0-1.example.com.57836: Flags [.], ack 1079416895, win 1432, options [nop,nop,TS v
al 81352560 ecr 81353913], length 0
2018-08-25 22:03:17.454642 IP compute-0-1.example.com.57836 > controller0.example.com.amqp: Flags [.], ack 1, win 237, options [nop,nop,TS val 8135892
2 ecr 81317504], length 0
2018-08-25 22:03:17.646945 IP compute-0-1.example.com.57788 > controller0.example.com.amqp: Flags [.], seq 106760587:106762035, ack 688390730, win 237
, options [nop,nop,TS val 81359114 ecr 81350901], length 1448
2018-08-25 22:03:17.647043 IP compute-0-1.example.com.57788 > controller0.example.com.amqp: Flags [P.], seq 1448:1956, ack 1, win 237, options [nop,no
p,TS val 81359114 ecr 81350901], length 508
2018-08-25 22:03:17.647502 IP controller0.example.com.amqp > compute-0-1.example.com.57788: Flags [.], ack 1956, win 1432, options [nop,nop,TS val 813
52753 ecr 81359114], length 0
.........................................................................................................................

示例:7)仅捕获特定接口上的 IP 地址数据包(-n 选项)

使用 tcpdump 命令中的 -n 选项,我们能只捕获特定接口上的 IP 地址数据包,示例如下所示,

[root@compute-0-1 ~]# tcpdump -n -i enp0s3

上述命令输出如下,

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
22:22:28.537904 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 1433301395:1433301583, ack 3061976250, win 291, options [nop,nop,TS val 82510005 ecr 20666610], length 188
22:22:28.538173 IP 169.144.0.1.39406 > 169.144.0.20.ssh: Flags [.], ack 188, win 9086, options [nop,nop,TS val 20666613 ecr 82510005], length 0
22:22:28.538573 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 188:552, ack 1, win 291, options [nop,nop,TS val 82510006 ecr 20666613], length 364
22:22:28.538736 IP 169.144.0.1.39406 > 169.144.0.20.ssh: Flags [.], ack 552, win 9086, options [nop,nop,TS val 20666613 ecr 82510006], length 0
22:22:28.538874 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 552:892, ack 1, win 291, options [nop,nop,TS val 82510006 ecr 20666613], length 340
22:22:28.539042 IP 169.144.0.1.39406 > 169.144.0.20.ssh: Flags [.], ack 892, win 9086, options [nop,nop,TS val 20666613 ecr 82510006], length 0
22:22:28.539178 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 892:1232, ack 1, win 291, options [nop,nop,TS val 82510006 ecr 20666613], length 340
22:22:28.539282 IP 169.144.0.1.39406 > 169.144.0.20.ssh: Flags [.], ack 1232, win 9086, options [nop,nop,TS val 20666614 ecr 82510006], length 0
22:22:28.539479 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 1232:1572, ack 1, win 291, options [nop,nop,TS val 82510006 ecr 20666614], length 340
22:22:28.539595 IP 169.144.0.1.39406 > 169.144.0.20.ssh: Flags [.], ack 1572, win 9086, options [nop,nop,TS val 20666614 ecr 82510006], length 0
22:22:28.539760 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 1572:1912, ack 1, win 291, options [nop,nop,TS val 82510007 ecr 20666614], length 340
.........................................................................

您还可以使用 tcpdump 命令中的 -c-N 选项捕获 N 个 IP 地址包,

[root@compute-0-1  ~]# tcpdump -c 25 -n -i enp0s3

示例:8)仅捕获特定接口上的 TCP 数据包

tcpdump 命令中,我们能使用 tcp 选项来只捕获 TCP 数据包,

[root@compute-0-1  ~]# tcpdump -i enp0s3 tcp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
22:36:54.521053 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 1433336467:1433336655, ack 3061986618, win 291, options [nop,nop,TS val 83375988 ecr 20883106], length 188
22:36:54.521474 IP 169.144.0.1.39406 > 169.144.0.20.ssh: Flags [.], ack 188, win 9086, options [nop,nop,TS val 20883109 ecr 83375988], length 0
22:36:54.522214 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 188:552, ack 1, win 291, options [nop,nop,TS val 83375989 ecr 20883109], length 364
22:36:54.522508 IP 169.144.0.1.39406 > 169.144.0.20.ssh: Flags [.], ack 552, win 9086, options [nop,nop,TS val 20883109 ecr 83375989], length 0
22:36:54.522867 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 552:892, ack 1, win 291, options [nop,nop,TS val 83375990 ecr 20883109], length 340
22:36:54.523006 IP 169.144.0.1.39406 > 169.144.0.20.ssh: Flags [.], ack 892, win 9086, options [nop,nop,TS val 20883109 ecr 83375990], length 0
22:36:54.523304 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 892:1232, ack 1, win 291, options [nop,nop,TS val 83375990 ecr 20883109], length 340
22:36:54.523461 IP 169.144.0.1.39406 > 169.144.0.20.ssh: Flags [.], ack 1232, win 9086, options [nop,nop,TS val 20883110 ecr 83375990], length 0
22:36:54.523604 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 1232:1572, ack 1, win 291, options [nop,nop,TS val 83375991 ecr 20883110], length 340
...................................................................................................................................................

示例:9)从特定接口上的特定端口捕获数据包

使用 tcpdump 命令,我们可以从特定接口 enp0s3 上的特定端口(例如 22)捕获数据包。

语法:

# tcpdump -i {interface-name} port {Port_Number}
[root@compute-0-1  ~]# tcpdump -i enp0s3 port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
22:54:45.032412 IP compute-0-1.example.com.ssh > 169.144.0.1.39406: Flags [P.], seq 1435010787:1435010975, ack 3061993834, win 291, options [nop,nop,TS val 84446499 ecr 21150734], length 188
22:54:45.032631 IP 169.144.0.1.39406 > compute-0-1.example.com.ssh: Flags [.], ack 188, win 9131, options [nop,nop,TS val 21150737 ecr 84446499], length 0
22:54:55.037926 IP compute-0-1.example.com.ssh > 169.144.0.1.39406: Flags [P.], seq 188:576, ack 1, win 291, options [nop,nop,TS val 84456505 ecr 21150737], length 388
22:54:55.038106 IP 169.144.0.1.39406 > compute-0-1.example.com.ssh: Flags [.], ack 576, win 9154, options [nop,nop,TS val 21153238 ecr 84456505], length 0
22:54:55.038286 IP compute-0-1.example.com.ssh > 169.144.0.1.39406: Flags [P.], seq 576:940, ack 1, win 291, options [nop,nop,TS val 84456505 ecr 21153238], length 364
22:54:55.038564 IP 169.144.0.1.39406 > compute-0-1.example.com.ssh: Flags [.], ack 940, win 9177, options [nop,nop,TS val 21153238 ecr 84456505], length 0
22:54:55.038708 IP compute-0-1.example.com.ssh > 169.144.0.1.39406: Flags [P.], seq 940:1304, ack 1, win 291, options [nop,nop,TS val 84456506 ecr 21153238], length 364
............................................................................................................................

示例:10)在特定接口上捕获来自特定来源 IP 的数据包

tcpdump 命令中,使用 src 关键字后跟 IP 地址,我们可以捕获来自特定来源 IP 的数据包,

语法:

# tcpdump -n -i {接口名} src {IP 地址}

例子如下,

[root@compute-0-1  ~]# tcpdump -n -i enp0s3 src 169.144.0.10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
23:03:45.912733 IP 169.144.0.10.amqp > 169.144.0.20.57800: Flags [.], ack 526623844, win 243, options [nop,nop,TS val 84981008 ecr 84982372], length 0
23:03:46.136757 IP 169.144.0.10.amqp > 169.144.0.20.57796: Flags [.], ack 2535995970, win 252, options [nop,nop,TS val 84981232 ecr 84982596], length 0
23:03:46.153398 IP 169.144.0.10.amqp > 169.144.0.20.57798: Flags [.], ack 3623063621, win 243, options [nop,nop,TS val 84981248 ecr 84982612], length 0
23:03:46.361160 IP 169.144.0.10.amqp > 169.144.0.20.57802: Flags [.], ack 2140263945, win 252, options [nop,nop,TS val 84981456 ecr 84982821], length 0
23:03:46.376926 IP 169.144.0.10.amqp > 169.144.0.20.57808: Flags [.], ack 175946224, win 252, options [nop,nop,TS val 84981472 ecr 84982836], length 0
23:03:46.505242 IP 169.144.0.10.amqp > 169.144.0.20.57810: Flags [.], ack 1016089556, win 252, options [nop,nop,TS val 84981600 ecr 84982965], length 0
23:03:46.616994 IP 169.144.0.10.amqp > 169.144.0.20.57812: Flags [.], ack 832263835, win 252, options [nop,nop,TS val 84981712 ecr 84983076], length 0
23:03:46.809344 IP 169.144.0.10.amqp > 169.144.0.20.57814: Flags [.], ack 2781799939, win 252, options [nop,nop,TS val 84981904 ecr 84983268], length 0
23:03:46.809485 IP 169.144.0.10.amqp > 169.144.0.20.57816: Flags [.], ack 1662816815, win 252, options [nop,nop,TS val 84981904 ecr 84983268], length 0
23:03:47.033301 IP 169.144.0.10.amqp > 169.144.0.20.57818: Flags [.], ack 2387094362, win 252, options [nop,nop,TS val 84982128 ecr 84983492], length 0
^C
10 packets captured
12 packets received by filter
0 packets dropped by kernel

示例:11)在特定接口上捕获来自特定目的 IP 的数据包

语法:

# tcpdump -n -i {接口名} dst {IP 地址}
[root@compute-0-1  ~]# tcpdump -n -i enp0s3 dst 169.144.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
23:10:43.520967 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 1439564171:1439564359, ack 3062005550, win 291, options [nop,nop,TS val 85404988 ecr 21390356], length 188
23:10:43.521441 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 188:408, ack 1, win 291, options [nop,nop,TS val 85404988 ecr 21390359], length 220
23:10:43.521719 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 408:604, ack 1, win 291, options [nop,nop,TS val 85404989 ecr 21390359], length 196
23:10:43.521993 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 604:800, ack 1, win 291, options [nop,nop,TS val 85404989 ecr 21390359], length 196
23:10:43.522157 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 800:996, ack 1, win 291, options [nop,nop,TS val 85404989 ecr 21390359], length 196
23:10:43.522346 IP 169.144.0.20.ssh > 169.144.0.1.39406: Flags [P.], seq 996:1192, ack 1, win 291, options [nop,nop,TS val 85404989 ecr 21390359], length 196
.........................................................................................

示例:12)捕获两台主机之间的 TCP 数据包通信

假设我想捕获两台主机 169.144.0.1 和 169.144.0.20 之间的 TCP 数据包,示例如下所示,

[root@compute-0-1  ~]# tcpdump -w two-host-tcp-comm.pcap -i enp0s3 tcp and \(host 169.144.0.1 or host 169.144.0.20\)

使用 tcpdump 命令只捕获两台主机之间的 SSH 数据包流,

[root@compute-0-1  ~]# tcpdump -w ssh-comm-two-hosts.pcap -i enp0s3 src 169.144.0.1 and port 22 and dst 169.144.0.20 and port 22

示例:13)捕获两台主机之间(来回)的 UDP 网络数据包

语法:

# tcpdump -w -s -i udp and \(host and host \)
[root@compute-0-1  ~]# tcpdump -w two-host-comm.pcap -s 1000 -i enp0s3 udp and \(host 169.144.0.10 and host 169.144.0.20\)

示例:14)捕获十六进制和 ASCII 格式的数据包

使用 tcpdump 命令,我们可以以 ASCII 和十六进制格式捕获 TCP/IP 数据包,

要使用 -A 选项捕获 ASCII 格式的数据包,示例如下所示:

[root@compute-0-1  ~]# tcpdump -c 10 -A -i enp0s3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
00:37:10.520060 IP compute-0-1.example.com.ssh > 169.144.0.1.39406: Flags [P.], seq 1452637331:1452637519, ack 3062125586, win 333, options [nop,nop,TS val 90591987 ecr 22687106], length 188
E...[root@compute-0-1 @...............V.|...T....MT......
.fR..Z-....b.:..Z5...{.'p....]."}...Z..9.?......."root@compute-0-1 <.....V..C.....{,...OKP.2.*...`..-sS..1S...........:.O[.....{G..%ze.Pn.T..N.... ....qB..5...n.....`...:=...[..0....k.....S.:..5!.9..G....!-..'..
00:37:10.520319 IP 169.144.0.1.39406 > compute-0-1.example.com.ssh: Flags [.], ack 188, win 13930, options [nop,nop,TS val 22687109 ecr 90591987], length 0
root@compute-0-1 @.|+..............T.V.}O..6j.d.....
.Z-..fR.
00:37:11.687543 IP controller0.example.com.amqp > compute-0-1.example.com.57800: Flags [.], ack 526624548, win 243, options [nop,nop,TS val 90586768 ecr 90588146], length 0
root@compute-0-1 @.!L...
.....(..g....c.$...........
.f>..fC.
00:37:11.687612 IP compute-0-1.example.com.57800 > controller0.example.com.amqp: Flags [.], ack 1, win 237, options [nop,nop,TS val 90593155 ecr 90551716], length 0
root@compute-0-1 @..........
...(.c.$g.......Se.....
.fW..e..
..................................................................................................................................................

要同时以十六进制和 ASCII 格式捕获数据包,请使用 -XX 选项。

[root@compute-0-1  ~]# tcpdump -c 10 -XX -i enp0s3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
00:39:15.124363 IP compute-0-1.example.com.ssh > 169.144.0.1.39406: Flags [P.], seq 1452640859:1452641047, ack 3062126346, win 333, options [nop,nop,TS val 90716591 ecr 22718257], length 188
0x0000: 0a00 2700 0000 0800 27f4 f935 0800 4510 ..'.....'..5..E.
0x0010: 00f0 5bc6 4000 4006 8afc a990 0014 a990 ..[root@compute-0-1 @.........
0x0020: 0001 0016 99ee 5695 8a5b b684 570a 8018 ......V..[..W...
0x0030: 014d 5418 0000 0101 080a 0568 39af 015a .MT........h9..Z
0x0040: a731 adb7 58b6 1a0f 2006 df67 c9b6 4479 .1..X......g..Dy
0x0050: 19fd 2c3d 2042 3313 35b9 a160 fa87 d42c ..,=.B3.5..`...,
0x0060: 89a9 3d7d dfbf 980d 2596 4f2a 99ba c92a ..=}....%.O*...*
0x0070: 3e1e 7bf7 3af2 a5cc ee4f 10bc 7dfc 630d >.{.:....O..}.c.
0x0080: 898a 0e16 6825 56c7 b683 1de4 3526 ff04 ....h%V.....5&..
0x0090: 68d1 4f7d babd 27ba 84ae c5d3 750b 01bd h.O}..'.....u...
0x00a0: 9c43 e10a 33a6 8df2 a9f0 c052 c7ed 2ff5 .C..3......R../.
0x00b0: bfb1 ce84 edfc c141 6dad fa19 0702 62a7 .......Am.....b.
0x00c0: 306c db6b 2eea 824e eea5 acd7 f92e 6de3 0l.k...N......m.
0x00d0: 85d0 222d f8bf 9051 2c37 93c8 506d 5cb5 .."-...Q,7..Pm\.
0x00e0: 3b4a 2a80 d027 49f2 c996 d2d9 a9eb c1c4 ;J*..'I.........
0x00f0: 7719 c615 8486 d84c e42d 0ba3 698c w......L.-..i.
00:39:15.124648 IP 169.144.0.1.39406 > compute-0-1.example.com.ssh: Flags [.], ack 188, win 13971, options [nop,nop,TS val 22718260 ecr 90716591], length 0
0x0000: 0800 27f4 f935 0a00 2700 0000 0800 4510 ..'..5..'.....E.
0x0010: 0034 6b70 4000 4006 7c0e a990 0001 a990 root@compute-0-1 @.|.......
0x0020: 0014 99ee 0016 b684 570a 5695 8b17 8010 ........W.V.....
0x0030: 3693 7c0e 0000 0101 080a 015a a734 0568 6.|........Z.4.h
0x0040: 39af
.......................................................................

这就是本文的全部内容,我希望您能了解如何使用 tcpdump 命令捕获和分析 TCP/IP 数据包。请分享你的反馈和评论。


via: https://www.linuxtechi.com/capture-analyze-packets-tcpdump-command-linux/

作者:Pradeep Kumar
选题:lujun9972
译者:ypingcn
校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出