我对 systemd 比较陌生,正在学习它的架构。
现在,我正试图弄清楚如何使自定义 shell 脚本运行。该脚本需要运行后,网络层已启动。
我正在运行 Arch,使用 systemd 和 netctl。
为了测试,我编写了一个简单的脚本,它只执行ip addr list > /tmp/ip.txt. 我为此脚本创建了以下服务文件。
(/etc/systemd/system/test.service)
[Unit]
Description=test service
[Service]
ExecStart=/root/test.script
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
然后我启用了脚本,
systemctl enable test
Run Code Online (Sandbox Code Playgroud)
重新启动后,脚本确实会运行,但它会在网络启动之前运行。换句话说,中的输出ip.txt显示没有分配给主接口的 IPv4 地址。到我登录时,IPv4 地址确实已分配并且网络已启动。
我猜我可以通过弄乱WantedBy参数来改变脚本运行的点,但我不知道该怎么做。
有人能指出我正确的方向吗?
我正在学习关于Linux的Kubuntu我18.04工作站上的网络,我看到有两个NetworkManager和networkd-dispatcher正在运行:
oleg@eclectic:~$ sudo ps -ef | grep -i net
root 56 2 0 Oct11 ? 00:00:00 [netns]
root 1097 1 0 Oct11 ? 00:00:02 /usr/sbin/NetworkManager --no-daemon
root 1098 1 0 Oct11 ? 00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root 1250 1 0 Oct11 ? 00:00:02 /usr/sbin/inetd
root 1593 1097 0 Oct11 ? 00:00:00 /sbin/dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper...
Run Code Online (Sandbox Code Playgroud)
NetworkManager似乎被配置为通过netplan以下方式处理“一切” :
oleg@eclectic:~$ cat /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
version: 2 …Run Code Online (Sandbox Code Playgroud) networking networkmanager linux-kernel systemd-networkd netplan
您如何使用nmcli按名称删除wifi连接?
从我读过的内容来看,它只允许通过 UUID 删除:
nmcli connection delete <uuid>
Run Code Online (Sandbox Code Playgroud)
我发现按名称删除的最简单方法是从名称中查找 UUID 并将其传入:
nmcli con delete `nmcli --fields NAME,UUID con list | grep -i mynetworkname | awk '{print $2}'`
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法?
在 MacBookPro14,3 上的 Arch Linux 上使用 NetworkManager,我无法连接到任何无线网络。我尝试连接到许多不同的 WiFi 网络(家庭、移动热点、工作),结果都一样。我试过用nmcli和来做这件事nmtui。例子:
$ nmcli dev wifi connect <SSID> password <password>
Error: Connection activation failed: (7) Secrets were required, but not provided.
Run Code Online (Sandbox Code Playgroud)
查看带有journalctl显示的日志:
wpa_supplicant[PID]: wlp3s0: CTRL-EVENT-ASSOC-REJECT bssid=00:00:00:00:00:00 status_code=16
Run Code Online (Sandbox Code Playgroud)
和
NetworkManager[PID]: <info> [TIMESTAMP] device (wlp3s0): state change: need-auth -> failed (reason 'no-secrets', sys-iface-state: 'managed')
Run Code Online (Sandbox Code Playgroud)
Macbook 有一个带有驱动程序 brcmfmac 的 Broadcom BCM43602。NetworkManager 和 wpa_supplicant 已安装并启用。
如何将 NetworkManager 设置导出和迁移到新系统?
用例是:
应迁移所有设置,其中包括:
我在 Arch wiki 上查了一下,没有关于迁移的内容,所以我在这里问你们。
简短版本:如何在 Fedora 系统上禁用审计消息 (dmesg)?
Fedora 系统不断在 dmesg 中记录“审计:成功”消息 - 以一种极端的方式,dmesg 变得无法使用,因为它被这些消息填满(dmesg | grep -v audit为空)。这些消息完全没有用,因为它们显然想通知用户一些日常内部过程已经成功(在调试某些东西时可能会感兴趣,但在这种情况下它只是噪音)。
甚至命令行界面(切换到与非X TTY当Ctrl+ Alt+ F2)变得不可使用,因为它总是与这些审核消息混乱,这是不可能的读取实际上是由用户运行的命令的输出。例如,输入用户名(登录)后,会喷出一条审核消息(显然是告诉用户某些内容已格式化/打印成功):
审计:类型=1131审计(1446913801.945:10129):pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=fprintd comm="systemd" exe="/usr/lib/systemd/systemd" 主机名 地址=? 终端=?资源=成功'
似乎这些消息中的大多数表示“成功”,但是也有许多审核消息不包含此关键字。运行 Chromium 会触发数百个:
审计:类型=1326审计(1446932349.568:10307):auid=500 uid=500 gid=500 ses=2 pid=1593 comm="chrome" exe="/usr/lib64/chromium/chrome" sig=0 arch=c000003e系统调用=273 兼容=0 ip=0x7f9a1d0a34f4 代码=0x50000
其他消息包括:
审计:类型=1131审计(1446934361.948:10327):pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=NetworkManager-dispatcher comm="systemd" exe="/usr/lib/systemd/systemd" =?地址=? 终端=?资源=成功'
审计:类型=1103 审计(1446926401.821:10253):pid=28148 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:setcred grantors=p am_env,pam_unix"exe acct/="user/usr /crond”主机名=?地址=? 终端=cron res=成功'
通常,大多数最近的审计消息(在撰写本文时)都包含关键字“ NetworkManager ”或“ chrome ”。
如何完全禁用这些消息?
附加点:
我的 Centos 7 服务器无法正确解析域名。据我所知,在现代 Linux 系统/etc/resolv.conf中,通常使用dhclient, dnsmasq或Network Manager.
因此,我有一个关于现代 Linux 中网络堆栈的一般理论问题:
谁负责阅读/etc/resolv.conf?域名解析涉及哪些参与者(服务或内核子系统)?
简短回答: Arch linux 手册说域名解析的高级配置是 /etc/nsswitch.conf在名称服务切换glibcAPI 中完成并依赖的。
glibc使用nss-resolve函数向 DNS 服务器发送 DNS 请求。
通常现代 CentOS 系统nss-resolve 依赖于 systemd-resolved服务。If/etc/resolv.conf是由类似的东西生成的dhclient-script,systemd-resolved读取它并在兼容模式下工作,模拟旧系统(如BINDDNS 客户端)的行为。
我想试用 Google 公共 DNS。为此,我需要更改名称服务器地址。我知道它在文件中/etc/resolv.conf,但是每当我启动时network-manager,它都会用它通过使用 DHCP 获得的值覆盖该文件中的值。
我怎么告诉它不要这样做?我查看了 GUI,但我只能找到添加更多 IP 地址的选项。
下面是奖杯:)

当我使用 NetworkManager 命令工具扫描无线网络时,输出为空。
root@radxa:~# nmcli dev wifi list
SSID BSSID MODE FREQ RATE SIGNAL SECURITY ACTIVE
root@radxa:~#
Run Code Online (Sandbox Code Playgroud)
但如果使用iwlist,扫描就可以了:
root@radxa:~# iwlist wlan0 scan
Cell 01 - Address: 78:A1:06:7F:CF:C9
ESSID:"olivia"
Protocol:IEEE 802.11bgn
Mode:Master
Frequency:2.462 GHz (Channel 11)
Encryption key:on
Bit Rates:300 Mb/s
IE: WPA Version 1
Group Cipher : CCMP
Pairwise Ciphers (1) : CCMP
Authentication Suites (1) : PSK
Extra:rsn_ie=30140100000fac040100000fac040100000fac020000
IE: IEEE 802.11i/WPA2 Version 1
Group Cipher : CCMP
Pairwise Ciphers (1) : CCMP
Authentication Suites (1) : PSK …Run Code Online (Sandbox Code Playgroud) 我可以在命令行中查看检测到的 WiFi 网络详细信息(如信号强度、加密等)吗?越详细——越好。
networkmanager ×10
networking ×5
linux ×3
dns ×2
fedora ×2
systemd ×2
wifi ×2
arch-linux ×1
audit ×1
linux-kernel ×1
macintosh ×1
netplan ×1
nmcli ×1
resolv.conf ×1