「logrotate」- 日志轮转
什么是日志轮转?
重命名旧的日志文件,写入新的日志文件,防止日志文件沾满磁盘空间。
在重命名时,使用日期作为文件扩展名,比如 /var/log/message 重命名为 /var/log/message-20190710
当日志论转产生一定量的日志文件时,会删除旧的日志文件,将日志文件控制在一定数量。
如何进行日志轮转?
通常使用 logrotate 工具进行日志论转,由 cron 负责执行该程序。
有关内容可以参考 logrotate(8) 手册。[……]
「Linux」- 内存管理 / 交换分区
该部分笔记介绍与交换分区有关的内容。
SWAP 是否属于文件系统?
What file system is swap on Linux Does swap space have a filesystem?
严格讲 SWAP 并不算是文件系统。
相关链接
How to change the Swappiness of your Linux system
参考文献
LINFO/Swap Space Definition How can I check if swap is active from the command line?[……]
「Linux」- 创建 SWAP 分区
注意事项
磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!
第一步、创建新分区,以用作交换分区
该步骤的目的是创建新分区,用作交换分区。你可以使用 cfdisk、sfdisk、fdisk 进行创建。
创建分区
下面是使用 fdisk 的示例:
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.32).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n // —————————————————————————- 创建一个分区
All primary partitions are in use.
Adding logical partition 6
First sector (199235584-234441647, default 199235584): [ENTER] // ————————————- 分区起始位置,使用默认值即可
Last sector, +sectors or +size{K,M,G,T,P} (199235584-234441647, default 234441647): +8G // ———— 分区大小
Created a new partition 6 of type ‘Linux’ and of size 8 GiB.
Command (m for help): t // —————————————————————————- 修改分区类型
Partition number[……]
「SWAP」- 关于交换分区的大小
问题描述
交换分区是一种磁盘分区,它被当作“备用内存”使用。内核将内存中的“冷”数据换下来,写入「交换分区」,以腾出内存空间用于其他需求。 有人推荐「交换分区」的大小应该为「物理内存」的1/2倍、1倍、2倍。
那「交换分区」应该设置多大才合适呢?
解决方案
先说结论:针对现在的计算机硬件,内存容量已经不再是,可以直接禁用交换分区。
如果一定要开启交换分区:
那交换分区应该设置多大?
关于「交换大小」问题没有明确的答案,只有建议。(每次听到这种话都感觉是屁话……)
在Red Hat的「Do we really need swap on modern systems?」中:
对于现代系统(即4GB或更高的内存),建议交换大小为内存的20%。
在CentOS的建议中:
如果内存小于2 GB,则交换分区的大小是RAM的两倍
如果内存大于2 GB,则大小为内存大小加上2 GB。例如,如果是3GB内存,则配置5GB交换分区
但是如果是作为笔记本系统的话,又有不同的地方。例如,休眠是写入交换分区的,所以这也要考虑进去。
在Ubuntu中:
如果RAM小于1 GB,则交换分区的大小应至少应为RAM的大小,并且最多为RAM大小的两倍;
如果RAM大于1 GB,则交换分区的大小应至少等于RAM大小的平方根,并且最多为RAM大小的两倍;
如果使用休眠,则交换大小应等于RAM的大小,再加上RAM大小的平方根;
在很长一段时间中,交换分区的建议大小通常是RAM的两倍。
在 Raspbian 中,禁用交换分区
How do I permanently disable the swap service? – Forum – Raspberry Pi – element14 Community
sudo sync
sudo swapoff -a
sudo apt-get purge -y dphys-swapfile
sudo rm /var/swap
sudo sync
reboot
swapon -s
参考文献
How Much Swap Should You Use in Linux?[……]
「Linux」- 将SWAP写回MEMORY中
内容简介
本文将介绍如何在有足够内存空间的情况下,希望将SWAP分区中的数据读回内存。
问题描述
当执行「占用大量内存的程序」时,「其他应用程序」所占用的内存就会被写入SWAP分区。当需要执行这些「其他应用程序」的时候,内核会把SWAP分区中的数据“换”回内存,受到磁盘IO的影响,应用程序的响应可能会比较慢。
当我们关闭「占用大量内存的程序」时,内存资源被释放,但是之前“换入”SWAP分区的数据并不会被重新“换回”内存中。
我们的诉求是:当有足够内存空间的情况下,希望将SWAP分区中的数据读回内存。
解决办法
但这样做的前提是:你有足够的备用物理内存来包含SWAP中的所有内容,否则内核将启动致命的OOM Killer功能。
需要将这些SWAP中的数据写回到内存中,这一执行如下命令:
#!/bin/sh
swapoff -a
swapon -a
当关闭交换分区时,数据会被读回内容,然后我们再重新打开交换分区。
相关链接
如果你希望将SWAP的内容复制回内存,但是保留SWAP的内容,可以参考「Making Linux read swap back into memory」一文。
参考文献
Making Linux read swap back into memory Linux: how to explicitly unswap everything possible? How do I read from /proc/$pid/mem under Linux?[……]
「Linux」- 作为系统管理员,应该如何进行操作系统网络配置
问题描述
创建这篇笔记,是因为我们遇到一个问题,这个问题与 CentOS Stream 发行版有关。自从出现 CentOS Stream 版本之后,我们直接跳过 CentOS 8 版本,便开始选择其他 Linux 发行版。我们认为短期之内不能指望使用 Rocky Linux 来替代 CentOS 发行版。最后经过一番权衡,我们选择 Ubuntu Server TLS 系列发行版。我们安装 Ubuntu 18.04 TLS 发行版,以完成相关工作任务。然而,在配置网络时,我们便遇到问题:Ubuntu 没有使用 NetworkManager 管理网络配置?
不同于 CentOS 6.x 发行版,在 CentOS 7.x 中,开始使用 NetworkManager 进行网络管理。在 RHCE 的官方课程中,也是力推 NetworkManager 进行管理管理,取代以往修改配置文件的网络管理方式。而使用 NetworkManager 进行网络管理,需要使用 nmctl 命令来操纵 NetworkManager.service 实现网络配置。但是,在 Ubuntu 18.04 TLS 中,没有 nmctl 命令,也没有 NetworkManager.service(network-manager.service) 在运行。经过官方文档查找,我们发现在 Ubuntu 18.04 TLS 中使用 Netplan 进行网络管理,而 Netplan 是个前端程序,它会调用 NetworkManager 或者 systemd-networkd 完成网络配置。哦,原来 Ubuntu 使用其他管理工具来管理网络。
然后,我们便开始回忆其他 Linux 发行版,我们逐渐发现:现在,工具越来越多,每个发行版都有自己的管理方法,都有自己的管理工具。防火墙,虽然底层使用相同的技术,但是各发行版均采用不同的前端管理工具。网络管理,各个发行版也采用不同的配置工具。文件系统,各个发行版默认采用不同的文件系统,那么管理工具也不相同。这些便催生这篇笔记,我们需要汇总各个发行版中管理网络的工具,否则将来维护系统时将无从下手(虽然底层原理没有过多变化,但是这些五花八门的工具的用法已经足够让人焦头烂额)。
该笔记将记录:概述各种 Linux 发行版的默认配置网络的工具、相关的学习资料,以及要面对的问题。
解决方案
该部分笔记将包含如下内容:
基础配置,仅与操作系统相关,能够完成网络连接(访问外网),比如 IP-Address、Gateway、DNS 等等配置。高级网络特性可能需要与网络设备联动,
网络管理的方式
在 Linux 中,管理网络方式分为两种:
1)通过修改配置文件(废弃)
在以前维护 CentOS 6.x 网络[……]
「Linux」- 通过使用 NetworkManager 管理网络
问题描述
NetworkManager,是标准的 Linux 网络配置工具集,其支持从 Desktop 到 Server 和 Mobile Device 的各种网络设置,并与流行的桌面环境和服务器配置管理工具很好地集成。
该笔记将记录:在 Linux 中,如何使用 NetworkManager 管理网络(偏向与服务器网络设置,而非桌面环境),以及常见问题处理。
解决方案
Ubuntu 18.04 TLS
安装 NetworkManager 服务:
apt-get install network-manager
apt-get install network-manager-* # 安装全家桶
systemctl start NetworkManager.service
systemctl enable NetworkManager.service
如果 NetwrokManager 无法管理网络接口,可能需要进行如下处理: 1)修改 /etc/network/interfaces 文件,注释全部与接口配置有关的行(但除 lo 接口)
相关链接
官方站点:https://networkmanager.dev/ NetworkManager Reference Manual – GNOME Developer Center
How do I prevent Network Manager from controlling an interface? Disable network manager for a particular interface Ignore interface in NetworkManager
参考文献
NetworkManager – Community Help Wiki[……]
「NetworkManager」- 常见问题
Q:用户的网络配置保存在哪里?
NetworkManager – Debian Wiki
由 NetworkManager 创建的连接信息都保存在 /etc/NetworkManager/system-connections/ 中,一般文件名为连接名。
Ubuntu 20.04 LTS, /etc/NetworkManager/system-connections/
Q:如何实现多个链路自动切换?
Network failover
Ubuntu 20.04 LTS
在 Wifi 与 Ethernet 间,链路的切换是通过 route metric(路由优先级,即浮动路由技术)实现的: 1)当 connection.autoconnect = yes 时,链路都会启动,但默认路由优先级不同(命令 ip route 查看); 2)当高优先级的链路断开(或消失)后,其默认路由消失,另条链路的默认路由“浮出”成为默认路由; 3)在 Ubuntu 20.04 LTS 中,来自 Wifi 的默认路由优先级为 600,来自 Eth 的默认路由优先级为 100;
配置 Wifi 优先级高于 Ethernet 链路:
nmcli connection modify ‘<Your Ethernet Connection>’ ipv4.route-metric 200
nmcli connection modify ‘<Your Wireless Connection>’ ipv4.route-metric 300[……]
「Linux」- 通过 NetworkManager 配置网络地址
问题描述
该笔记将记录:如何使用 NetworkManager 配置网络,以及常见问题处理。
解决方案
IPv4, DHCP
nmcli connection add \
connection.type ‘802-3-ethernet’ \
connection.id ‘conn-name’ \
connection.interface-name ‘eth0’ \
ipv4.method auto
nmcli connection up ‘conn-name’
IPv4, Static
nmcli connection add connection.type ‘802-3-ethernet’ \
connection.id ‘conn-name’ \
connection.interface-name eth0 \
connection.autoconnect yes \
ipv4.method manual \
ipv4.addresses “192.168.1.134/24” \
ipv4.dns “192.168.1.10 192.168.1.11” \
ipv4.gateway “192.168.1.5”
nmcli connection up ‘conn-name’
添加(或删除)多个地址:
#### 添加
nmcli connection modify “connection-name” \
ipv4.addresses ‘78.34.56.23/20, 78.34.56.24/20’ # 设置多个地址
nmcli connection modify “connection-name” \
+ipv4.addresses ‘78.34.56.23/20’ # 追加新的地址
nmcli connection up “connection-name” # 应用配置(直接 UP 即可,无需 DOWN 操作)
ip address “<interface-name>” # 验证地址已绑定到网卡
#### 删除
nmcli connection modify “connection-name” \
-ipv4.addre[……]
「Linux」- 禁止 NetworkManager 修改 /etc/resolv.conf 配置
问题描述
当我们使用 NetworkManager 修改网络配置之后,命令 nmcli connection up xxx 会修改 /etc/resolv.conf 配置文件。
但是在某些场景下,我们并不希望 NetworkManager 修改 /etc/resov.conf 配置文件。
该笔记将记录:如何禁止 NetworkManager 修改 /etc/resolv.conf 文件
解决方法
如果使用 NetworkMnager 服务管理网络,在 /etc/NetworkManager/NetworkManager.conf 的 [main] 部分配置 dns=none 行,然后重启 NetworkManager 服务。
如果在 Debian-like 发行版中,还可以考虑使用 resolvconf 软件包。
附加说明
还有另外两种解决方案,1)设置链接的 ipv4.dns-priority 以控制多个连接的 ipv4.dns 在 /etc/resolv.conf 中的显示顺序,2)或者不指定连接的 ipv4.dns 选项
具体使用哪个方案,取决于我们是否明确需求与问题。
参考文献
network manager: how to stop nm updating /etc/resolv.conf ipv4: NetworkManager Reference Manual[……]
「NetworkManager」- 网络连接检查功能
网络连接检查功能
在 NetworkManager 中,有个功能:允许 NetworkManager 检测系统是否可以实际访问互联网。
就是说,虽然网络正常配置,也正常启动,但是它还是会尝试使用 HTTP 请求一个 URL 来判断到能不能访问外部网络。
默认的配置信息
这个 URL 可以在配置文件中设置。在 Debian 中,默认配置文件位于 /usr/lib/NetworkManager/conf.d/20-connectivity-debian.conf 中。
[connectivity]
uri=http://network-test.debian.org/nm
如何调整该配置?
可以在 /etc/NetworkManager/conf.d/ 中常见配置文件进行覆盖。
如果要禁用该功能,可以在配置文件使用一个空的 [connectivity] 部分,即没有任何参数。
我们是怎么发现这个功能的?
我们没有完整的读过 NetworkManager 的手册,也是碰巧发现这个功能的。
在处理别的问题的时候,使用 tcpdump -X -vv 抓包,发现了有发往Debain服务器的数据包。在 tcpdump 的输出中,显示访问 http://network-test.debian.org/nm 地址,然后去 Google 搜索。然后就发现此功能,最后阅读 man 5 NetworkManager 手册进行深度了解。
参考文献
ArchWiki/NetworkManager/Checking connectivity Debian Bug report logs – #859934 enable captive portal checking by default Debian Bug report logs – #729783 network-manager: Add network connectivy test using http://network-test.debian.org/nm what will network-manager-config-connectivity-debian do?[……]
「NetworkManager」- 通过命令 nmcli conneciton modify 配置无效
问题描述
在 CentOS 7.x 中,当我们使用 nmcli connection modify 修改网络配置时,未生效。即使重启 NetworkManager 服务,也无法生效
问题原因
解决方案
# 03/28/2021 我们仅能通过删除旧连接并重新创建连接来解决该问题。[……]
「NetworkManage」- 设备未被管理(unmanaged devices)
问题描述
在某些情况下,网卡为 ummanaged 状态。如下所示,无线 wlan0 未管理:
# nmcli device
DEVICE TYPE STATE CONNECTION
wlan0 wifi unmanaged —
lo loopback unmanaged —
无线网卡 wlan0 处于 unmanaged 状态,这表示此设备不被 Networkmanager 管理。
解决方案
临时让 NetworkManager 管理此设备,执行如下命令:
nmcli dev set wlan0 managed yes
如果希望使配置永久(持久化)生效:
# vim /etc/NetworkManager/NetworkManager.conf
…
[ifupdown]
managed=true
…
如果上述配置方法不生效,则(Bug #1658921):
# 在 Ubuntu 20.04 LTS 中,我们需要创建该文件才能解决问题
touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf
如果有些设备不需要被 NetworkManager 管理,则可以: 1)使用 nmcli 命令: 2)或修改配置文件。配置文件的修改参考 NetworkManager.conf 手册中的 unmanaged-devices 指令。
参考文献
Ethernet device not managed Bug #1658921 “NetworkManager does not manage wired connection” : Bugs : network-manager package : Ubuntu[……]
「Netplan」- 操作系统网络配置工具(Ubuntu)
Netplan,网络配置抽象渲染器,是个用于在 Linux 系统上轻松配置网络的实用程序。只需创建所需网络接口的YAML描述以及每个接口应配置的内容。 根据此描述,Netplan将为您选择的渲染器工具生成所有必要的配置。
常见问题记录
# 04/02/2021 在 Ubuntu 18.4 TLS / Netplan 1.10.1 中,无法配置 /etc/resolv.conf 的 options single-request 选项。
参考文献
Netplan | Backend-agnostic network configuration in YAML
章节列表
「Linux」- 通过 Netplan 配置网络地址 「Netplan」 – 修改网络接口名称[……]
「Linux」- 通过 Netplan 配置网络地址
问题描述
在 Ubuntu 18.04 中,默认的网络配置工具为 Netplan,并使用 systemd-networkd 作为后端配置工具。
该笔记将记录:在 Ubuntu 18.04 中,如何使用 Netplan 配置网络地址,以及常见问题处理。
解决方案
更多使用方法,参考 Netplan | Backend-agnostic network configuration in YAML 文档。
静态地址绑定
# 添加配置
cat > /etc/netplan/01-static.yaml <<EOF
network:
version: 2
# renderer: NetworkManager
renderer: networkd
ethernets:
enp3s0:
addresses:
– 192.168.10.126/24
gateway4: 192.168.10.1
nameservers:
addresses: [223.6.6.6, 223.5.5.5]
EOF
# 应用配置
netplan apply
动态分配(DHCP)
# 添加配置
cat > /etc/netplan/01-static.yaml <<EOF
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true
EOF
# 应用配置
netplan apply
参考文献
Netplan | Backend-agnostic network configuration in YAML[……]
「Netplan」 – 修改网络接口名称
根据 Netplan 文档,通过 MAC Address 匹配设备,然后修改名称:
network:
ethernets:
eth0:
match:
macaddress: b4:05:5d:02:d5:6c
set-name: eth0
eth1:
match:
macaddress: b4:05:5d:02:d5:6d
set-name: eth1
fibre0:
match:
macaddress: b4:05:5d:02:d5:6a
set-name: fibre0
fibre1:
match:
macaddress: b4:05:5d:02:d5:6b
set-name: fibre1
version: 2
参考文献
networking – How to rename a network interface in 20.04 – Ask Ubuntu[……]
「Linux」- 通过 systemd.network 管理网络
如果没有 resolvctl 命令,亦可使用 systemd-resolve –status 命令查看状态
参考文献
Ubuntu Manpage: systemd.network – Network configuration How to troubleshoot DNS with systemd-resolved? – Unix & Linux Stack Exchange
章节列表
「Linux」- 禁止 NetworkManager 设置 /etc/resolv.conf 使用 127.0.0.53 地址 「systemd」- 可预测网络接口名[……]
「systemd」- 可预测网络接口名
问题描述
传统的网络接口命名方式(eth0, eth1, …)与驱动的探测顺序有关,这样带来的问题是: 1)如果有多张网卡,某个接口是以 eth0 命名,重启后下次就可能变成以 eth1 命名; 2)再比如,当做 Bonding 时候,怎么能接受网卡名变来变去呢? 3)再比如,防火墙,接口命名发生变化,但是防火墙还作用于原来的接口,这就会导致安全问题;
解决方案
可预测网络接口名
从 systemd v197 开始,会给网络设备一个稳定的、可预测的命名。这区别于传统的 eth0、eth1、wlan0 之类的命名规则;
关于可预测网络接口名的命名规则,参考源码说明:https://github.com/systemd/systemd/blob/master/src/udev/udev-builtin-net_id.c#L20
如何启用
首先,要确保的系统使用 systemd 为初始化进程,这是 systemd 197 引入的功能;
在 /etc/default/grup 中,参数 GRUB_CMDLINE_LINUX_DEFAULT=”” 不要添加 net.ifnames=0 参数(而添加表示禁用); 确保 /etc/systemd/network/99-default.link 没有指向 /dev/null 设备(这是用于禁用可预测网络接口名功能的); 最后,确保没有使用 /etc/systemd/network/ 中没有自定义的命名规则文件(扩展名为.link 的文件);
1)在 Debian 中,通过命令 update-grub 来更新引导,这一步是为了修改传递给内核的启动参数(net.ifnames=0); 2)至于其他的发行版配置方法,需要参考发行版的文档说明;
如何禁用
如果觉得这种命名比较傻,可以使用下面的三种方式来使用旧的网卡命名方式:
掩盖网络设备配置文件
You disable the assignment of fixed names, so that the unpredictable kernel names are used again. For this, simply mask udev’s .link file for the default policy:
# ln -s /dev/null /etc/systemd/network/99-default.link
创建上述的软链接即可;
自定义命名方案
You create your own manual naming scheme, for example by naming your interfaces “internet0”, “dmz[……]
「Linux」- 禁止 NetworkManager 设置 /etc/resolv.conf 使用 127.0.0.53 地址
问题描述
在 Ubuntu 20.04 LTS 中,当使用 NetworkManager 正确配置并启用(nmcli connection up)网卡之后,DNS 配置没有生效,/etc/resolv.conf 坚持使用 127.0.0.53 地址的 DNS 服务。即便没有该服务(127.0.0.53:53),NetworkManager 也坚持使用该地址。并且 /etc/resolv.conf 包含 # Generated by NetworkManager 文本,就表明这是 NetworkManager 生成的。
该问题可能并不常见,只会在某些 Linux 发行版中出现,我们是在 Ubuntu 20.04 LTS 中遇到该问题。
原因分析
该问题的原因非常多,我们无法一一列举,只能描述我们的场景。
经过一番 Google 之后,各种解决方案并不适用于我们的场景,我们只能求助于官方 NetworkManager.conf(1.22) 文档对 dns 处理模式的设置:
Set the DNS processing mode.
If the key is unspecified, default is used, unless /etc/resolv.conf is a symlink to /run/systemd/resolve/stub-resolv.conf, /run/systemd/resolve/resolv.conf, /lib/systemd/resolv.conf or /usr/lib/systemd/resolv.conf. In that case, systemd-resolved is chosen automatically.
default: NetworkManager will update /etc/resolv.conf to reflect the nameservers provided by currently active connections.
dnsmasq: NetworkManager will run dnsmasq as a local caching nameserver, using “Conditional Forwarding” if you are connected to a VPN, and then update resolv.conf to point to the local nameserver. It is possible to pass custom options to the dnsmasq instance by adding[……]
「Liunx」- 将网络接口连接到串行线路
当时在整理slattach(1)命令,不明白其含义,因此到网上查了一下。作为一名Web开发,看到这些东西还是很新奇的。
串行接口简称串口,也称“串行通信接口”或“串行通讯接口”(通常指“COM接口”),是采用串行通信方式的扩展接口。
不过,现在基本没有COM口设备了,串口已经很少见了。COM口通信速度慢,以前COM口主要是用来接鼠标或调制解调器,不过那种设备早淘汰了,笔记本减轻重量,没必要加COM了。而USB比它快得多,又通用,还支持热插拔,而且也是串行通信的。
以下内容完全是复制过来的。
如何使用串口建立网络连接
SLIP, 即Serial Line IP(串行线路IP), 是一个数据链路层协议,用于在串行线路上传输IP数据报。
本文讲述如何在两台用串口线(RS232)连接的Linux机器之间配置SLIP链路。
设两台机器为A, B。首先,将两台机器用串口线连接好,然后在A机器上依次运行如下指令:
slattach /dev/ttyS0 -p slip -s 9600 -m -d &
ifconfig sl0 192.168.1.1 pointopoint 192.168.1.2 up
route add default gw 192.168.1.2
其中,/dev/ttyS0是第1上串口设备,如果有多个串口,则依次是/dev/ttyS1, /dev/ttyS2…,要视情况而定。
slattach的-p选项指定要使用的数据链路层协议,可以是slip, cslip, ppp等; -s指定传输速率,可以是9600,115200等;
-m告诉串口设备不要工作在RAW data模式,而是要工作在协议驱动模式;-d输出调试信息。
ifconfig用于配置串行接口的ip信息等。sl0代表第一个串行接口,如果有更多,依次是sl1, sl2…。
route将对方ip添加为默认网关。
然后在B机器上依次运行以下指令:
slattach /dev/ttyS0 -p slip -s 9600 -m -d &
ifconfig sl0 192.168.1.2 pointopoint 192.168.1.1 up
route add default gw 192.168.1.1
指令和A一样,要注意的是ip地址要设对。还有就是两边所用的协议、传输速率也要一样。
好了,如果没有出错,连接就建立成功了。
可以用在A或B上运行“ping 对方地址”来测试[……]
「Linux」- 修改 DNS 配置
管理 Linux 系统 DNS 设置的方法: 1)NetworkManager 2)systemd-resolved – ArchWiki
常见问题处理
持久化DNS配置(Debian-like OS)
配置文件/etc/resolv.conf在每次重新配置网络后,里面的内容都会被覆盖。尤其是DHCP获取IP地址后,该文件的内容会被覆盖。
如何进行持久化配置呢?使用 resolvconf 软件包。 How to make name server address permanent in /etc/resolv.conf? DNS in Ubuntu 12.04[……]
「Linux」- 修改主机名
问题描述
假如 pc 为原主机名,而我们现在要将 laptop 作为主机名。
该笔记将记录:在 Linux 中,如何修改主机名,以及常见问题处理方法。
解决方案
CentOS 6.10
# 临时修改,重启后会丢失
hostname laptop
# 持久配置
sed ‘s/HOSTNAME=.+/HOSTNAME=laptop/g’ -i /etc/sysconfig/network
# 修改/etc/hosts文件
sed ‘s/ pc / laptop /g’
# 如果你的命令行提示符还显示以前的主机名,重新登录即可。
System V
### #1 执行hostname命令
hostname laptop
### #2 修改/etc/hostname文件,将该文件中的pc修改为laptop。
sed -i ‘s/pc/laptop/g’ ‘/etc/hostname’
### #3 修改/etc/hosts文件,将改文件中的127.0.0.1 pc修改为127.0.0.1 laptop即可。
# 这是一个附加步骤,某些程序需要。
sed -i ‘s/ pc / laptop /g’ /etc/hosts
在其他的Linux发行版中也应该是有效的,毕竟发行版太多了,使用和其机制上也有不同的地方,不敢保证。
# systemd
安装 systemd 的 Debian 版本可以使用 hostnamectl 命令来更新主机名:
# 该命令依赖于 dbus 服务,所以要先确保dbus可以正常工作
# hostnamectl set-hostname laptop
该命令会自动修改主机名,并修改 /etc/hostname 文件,但是该命令不会修改 /etc/hosts 文件,这可能需要手动完成。
注意事项
有的教程中说要执行/etc/init.d/hostname.sh start命令。emmmm….,一言难尽,不同的发行版里的系统初始进程不同,有用systemd进行管理的,有用SysV风格(init)进行管理的。操作上也由出入。因此,是否要执行该命令与你的修改方法以及你所使用的系统版本有关。该hostname.sh脚本的start方法执行的操作如下(来自于Kali Linux Rolling源):
#!/bin/bash
do_start () {
[ -f /etc/hostname ] && HOSTNAME=”$(cat /etc/hostname)”
# Keep current name if /etc/hostname is missing.[……]
「Linux」- 禁用 IPv6 协议栈
问题描述
为什么禁用 IPv6 协议栈?因为很多配套的基础设置还未到位,因此使用 IPv6 会遇到很多问题,比如 a 5-second delay 问题。
该笔记将记录:在 Linux 中,如何禁用 IPv6 协议栈,以及相关问题处理。
解决方案
RHEL/CentOS
# sysctl -w net.ipv6.conf.all.disable_ipv6=1
# sysctl -w net.ipv6.conf.default.disable_ipv6=1
cat > /etc/sysctl.d/99-disable-ipv6.conf <<EOF
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
EOF
sysctl –load /etc/sysctl.d/99-disable-ipv6.conf
Ubuntu 18.04
在 Ubuntu 18.04 中,修改 sysctl 是无效的,因为 Netplan 会为其分配 Link-local 地址。解决方法:
方法一、彻底禁止 IPv6 协议栈
# vim /etc/default/grub
…
GRUB_CMDLINE_LINUX_DEFAULT=”ipv6.disable=1″
GRUB_CMDLINE_LINUX=”ipv6.disable=1″
…
# update-grub
方法二、通过 Netplan 禁止
network:
version: 2
ethernets:
enp0s2:
…
link-local: []
…
我们不得不说,“回”字又多了一种写法 :-)
参考文献
Disabling IPv6 in Ubuntu Server 18.04 – Ask Ubuntu Disabling IPv6 on Ubuntu 18.04: The Netplan Version | P. S. Clarke How to disable IPv6 address on Ubuntu 18.04 Bionic Beaver Linux – LinuxConfig.org How to disable IPv6 on Linux How to Disable IPv6 on Ubuntu Linux IPv6 – ArchWiki Link-local address – Wikipedia[……]
「Linux」- 从MAC地址中获取IP地址
方法一、ping & arp
向ping一次目标主机,然后使用arp命令:
#!/bin/sh
ping -c 7 “<ip-address>”
# !!!fping!!!
# 如果有有必要的话,可以使用fping -g “<ip-address>/<prefix>”来探测整个网段
# 仅打印可达主机:fping -g “<ip-address>/<prefix>” 2>/dev/null
arp -an | grep “<ip-address>”
方法二、arping
#!/bin/sh
arping -I <interface> <host>
# !!!「arping」有两个版本:一个是iputils;另一个Thomas Habets开发,功能更多。
方法三、namp
有些主机可能屏蔽了ICPM报文,所以使用ping可能会无效。
可以使用nmap来扫描服务:
#!/bin/sh
nmap -sP -PE -PA21,23,80,3389 192.168.1.*
# -sP 跳过端口扫描
# -PE 使用ICMP echo request行为
# -PA 扫描特定的端口
# 192.168.1.* 网段
参考文献
Resolving MAC Address from IP Address in Linux Arping – To Discover Hosts on a Computer Network Wikipedia/arping fping usage to show only reachble hosts[……]
「Linux」- 添加虚拟网卡
方法一、使用ifconfig命令
# 在eth0网卡上创建一个叫eth0:0的虚拟网卡,虚拟网卡的地址是:192.168.10.10
ifconfig eth0:0 192.168.10.10 up
# 可以使用如下命令删除该网卡
sudo ifconfig eth0:0 down
# 当然,这属于临时配置,重启之后,前面的配置就消失了。如果要持久化配置,需要修改相应的网
# 络配置文件。配置文件的格式与路径因发行版的不同而异。不再展开说明。
# 比如:Debian修改/etc/network/interfaces配置文件。
这种方法有一个问题:网卡的MAC地址是相同的。即,不能为eth0和eth0:0设置不同的MAC地址。
方法二、使用TUN/TAP
# 安装uml-utilities工具
apt-get install uml-utilities
# 创建虚拟网卡 eth2
tunctl -t eth2
# 为虚拟网卡eth2固定一个MAC地址
ifconfig eth2 down
ifconfig eth2 hw ether 00:11:22:33:44:55
# 启用虚拟网卡eth2
ifconfig eth2 up
注意,这种虚拟网卡是不能绑定物理网卡的(也就是说不能通过该网卡访问外部网络),是在隧道技术中使用的虚拟网卡。以下的一段话引用子stackoverflow的“which physical interface tun/tap device attached to”问题,该问题解释了原因:
There is no inherent relation.
It is important to understand that neither TUN/TAP nor any other device does routing. Internet Protocol (IP) routing is handled by the IP stack, and it can’t really tell the difference between a TAP interface and a real Ethernet interface. Packets received by the IP stack from TUN/TAP interfaces are generated by a program on that same machine, and when the IP stack routes packets out a TUN or TAP interface they are received only by the software[……]
「interfaces-old」
/etc/network/interfaces : ifup(man 8) 和 ifdown(man 8) 命令所使用的配置文件;
注释
`#’ 来注释行;不支持行尾注释,注释必须独占一行;
`\’ 用在行尾表示换行;
文件组成
文件由组成”iface”, “mapping”, “auto”, “allow-“, “source” and “source-directory” 关键字开始的小节组成。例如:
auto eth0
allow-hotplug eth1
source interfaces.d/machine-dependent
source-directory interfaces.d
iface eth0 inet dhcp
iface eth0 inet6 auto
mapping eth1
script /usr/local/sbin/map-scheme
map HOME eth0-home
map WORK eth0-work
iface eth1-home inet static
address 192.168.1.2/24
gateway 192.168.1.1
up flush-mail
iface eth1-work inet dhcp
auto
以 “auto” 开始的行,表示网卡会在执行 ifup -a 时启动。(系统启动脚本中使用了这个选项。)
网卡名要跟在 “auto” 后面。可以有多个 “auto” 部分。按照顺序,依次启动网卡。
allow-
以 “allow-” 开始的行,表示网卡会被各个子系统启动。This may be done using a command such as “ifup –allow=hotplug eth0 eth1”, which
will only bring up eth0 or eth1 if it is listed in an “allow-hotplug” line. Note that “allow-auto” 与 “auto” 同义.
no-auto-down
以 “no-auto-down” 开始的行,表示这些网口在执行 ifdown -a 时不关闭。[……]
「APK」- 常用设置(Alpine Linux)
该笔记将记录:在 Alpine Linux 中,APK 包管理器的常用设置及使用方法。
修改软件源(用于 Docker Image 构建)
Alpine Linux 源使用帮助
sed -i ‘s%dl-cdn.alpinelinux.org%mirrors.ustc.edu.cn%g’ ‘/etc/apk/repositories'[……]
「Pkg-config」
Pkg-config,软件包包含了一个工具,用于:在configure和make执行期间,向构建工具传递include或lib的路径。
pkg-config是在编译应用程序和库时使用的辅助工具。它可以帮助你在命令行中插入正确的编译选项,减少硬编码。比如:
可以使用gcc -o test test.c `pkg-config –libs –cflags glib-2.0`,而不是通过硬编码的方式找到glib(或其他库)。
这是语言无关的,所以它可以用于定义文档工具的位置。
从发行版的源中安装
# Kali GNU/Linux Rolling
apt-get install pkg-config
使用源码编译安装
参考:LFS/Pkg-config-0.29.1:http://www.linuxfromscratch.org/lfs/view/7.10/chapter06/pkg-config.html
安装的可执行程序
pkg-config,输出指定的库或者包的元数据信息。
参考文献
LFS / Pkg-config-0.29.1 Homepage: http://pkg-config.freedesktop.org[……]
「RPM, YUM and DNF」
YUM – Yellowdog Updater, Modified
RPM – RPM Package Manager
rpm,软件包管理系统
相关链接
Create Local Repos
参考文献
Wikipedia/RPM Package Manager[……]
「YUM」- 使用代理服务(“提高下载速度”)
问题描述
1)由于网络原因,官方仓库下载比较慢。即使可以使用国内镜像站点, 2)仍旧存在部分第三方仓库没有国内镜像站点
解决办法
可以配置 YUM 使用代理服务(HTTP、HTTPS、SOCKS5)。
注意事项,不同版本的 YUM 对代理协议的支持情况不同,下面将分别讨论。
CentOS 6.5 and YUM 3.2.29
方法一、使用 SOCKS 协议
该版本不支持 SOCKS 协议,只支持 http https ftp 协议:
Options Error: Error parsing “proxy = ‘socks5://<ip>:<port>'”: URL must be http, ftp or https not “socks5″
方法二、使用 HTTP(S) 协议
该协议无法通过命令行指定,即 HTTP_PROXY=’http://<ip>:<port>’ yum makecache 是无效的。
但是可以通过修改 /etc/yum.conf 配置文件,添加如下行:
# 必须使用完整地址,包含端口号
proxy=http://ip:port
# 指定用户名密码
proxy_username=your username
proxy_password=your password
CentOS 7.4 and YUM 3.4.3
该版本可以使用 SOCKS/HTTP(S) 协议
方法一、通过命令行指定
ALL_PROXY=”socks5://<ip>:<port>” yum makecache
方法二、通过配置文件
也可以修改 /etc/yum.conf 配置文件,添加如下行:
# 必须使用完整地址,包含端口号
proxy=socks5://ip:port
# 指定用户名密码
proxy_username=your username
proxy_password=your password
参考文献
How to use SOCKS proxy with yum? 10. Using yum with a Proxy Server[……]