小编Tal*_*Tal的帖子

如何仅清除特定单元的 journalctl 条目?

我花了几天时间编写了一个 python 脚本,并为它创建了一个 systemd 单元文件。在测试期间,该脚本将大量错误记录到 journald。现在我已经完成了,我想从日记中清除这些错误。

有多种方法可以清除整个日志,如下所述:如何清除 journalctl 包括使用journalctl --vacuum-time=2d、使用journalctl --vacuum-size=500M和临时设置SystemMaxUse=/etc/systemd/journald.conf 中的为一个非常低的值。

所有这些似乎都会清除整个日志,影响所有单位。我只需要清除单个单元的条目。这可能吗?

logs systemd systemd-journald

26
推荐指数
3
解决办法
2万
查看次数

有没有办法防止 sed 解释替换字符串?

如果您想使用 sed 用字符串替换关键字,sed 会努力解释您的替换字符串。如果替换字符串碰巧包含 sed 认为特殊的字符,例如 '/' 字符,它将失败,除非您当然希望替换字符串包含告诉 sed 如何操作的字符。

前任:

VAR="hi/"

sed "s/KEYWORD/$VAR/g" somefile
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉 sed 不要尝试解释特殊字符的替换字符串?我想要的只是能够用变量的内容替换文件中的关键字,无论该内容是什么。

bash sed shell-script

21
推荐指数
3
解决办法
2万
查看次数

启用 btrfs 配额对系统有何影响?

我经常使用 btrfs 快照,我感兴趣的一件事是给定快照占用了多少空间 - 或者更具体地说 - btrfs 快照占用了多少独占数据,以便我知道是否删除快照,我会释放多少空间。

我知道找出这些信息的唯一方法是启用 b​​trfs 配额

# btrfs quota enable /
Run Code Online (Sandbox Code Playgroud)

和跑步

# btrfs qgroup show /
Run Code Online (Sandbox Code Playgroud)

这是非常有效的。问题是 - 我实际上并没有将 btrfs 配额用于除此之外的任何其他用途,这意味着我可以选择始终启用 btrfs 配额,或者在运行“btrfs qgroup show /”命令之前暂时启用它们,并且立即禁用它们。另外,最后我听说,btrfs 配额仍然是实验性的(我错了吗?)。

基本上我想知道的是:

  1. 保持启用 btrfs 配额会影响系统稳定性吗?
  2. 保持启用 btrfs 配额会影响系统性能吗?

我意识到“安全起见”的答案是只在我需要时启用配额,但我实际上正在制作一个运行“btrfs qgroup show /”的脚本并以更易读的形式打印输出,并添加代码始终启用和禁用配额会大大减慢脚本的速度,并增加复杂性,所以我宁愿一直启用配额,但我不知道它是否有缺点。

btrfs

13
推荐指数
1
解决办法
3775
查看次数

我如何找出是什么导致了我的机器冻结?

我在这台机器上运行 Arch:

3.40GHz i7 六核 (4930K)

16GB DDR3 1600MHz 内存

Raid0 中的 2 个三星 840 EVO SSD(使用 BTRFS raid)

当我在我的 Arch 上使用几个虚拟机(2 或 3 个)运行 VMware 时,每个虚拟机大约有 2-4 个内核,每个内核有 2GB 内存,我的系统开始随机冻结。每隔几分钟,系统就会冻结 10 到 30 秒,然后再次开始移动,仅在 30 秒后冻结,直到我关闭虚拟机。当系统冻结时,鼠标仍然可以正常移动,但主机上的应用程序停止响应 - vmware 没有响应,firefox(也在主机上打开)没有响应,等等。

当冻结发生时,如果我正在运行进程监视器,它确实会显示 vmware 使几个内核最大化,但同时,还有其他未使用的内核。我也有足够多的内存——虚拟机总共使用了 6GB,主机还剩下 10GB。我有 0 个交换空间,因此交换不会减慢任何速度。

有报道称,由于 btrfs 导致文件系统级别的文件碎片化,虚拟机可能运行缓慢。然而,据我所知,碎片只是传统硬盘上的一个问题 - SSD 没有可搜索的读头,所以他们不在乎文件是否高度碎片化。

这在我运行 Debian 7 时从未发生过,所以我很确定这不是硬件问题。

我可以运行哪些工具来找出为什么我的系统一直死机?我已经尝试过 top/htop 和 iotop(当系统冻结时,没有过多的写入或读取)。btrfs 似乎没有任何类型的活动监视器来判断它是否在跟上写入/读取任何内容时遇到问题。还有什么我可以尝试的吗?

arch-linux vmware btrfs freeze

10
推荐指数
1
解决办法
5180
查看次数

为什么这两个日期命令给出不同的结果?

$ date -d "Apr 1 2016 - 1 month" +%B
Run Code Online (Sandbox Code Playgroud)

给了我“三月”,这很棒 - 四月之前的月份是三月。但是,如果我这样做:

$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B
Run Code Online (Sandbox Code Playgroud)

它给了我“二月”。这在我拥有的一些更复杂的代码中导致了一个错误。为什么这两个命令显示不同的结果?

date

9
推荐指数
1
解决办法
455
查看次数

如何解释 iperf3 结果?

我不想做任何疯狂的事情 - 只是测量客户端到服务器的下载和上传速度。

在服务器上我运行:

iperf3 -s
Run Code Online (Sandbox Code Playgroud)

在客户端我运行:

iperf3 -c IP_ADDESS
Run Code Online (Sandbox Code Playgroud)

这些是我的结果:

Connecting to host IP_ADDRESS, port 5201
[  4] local LAN_IP port 2722 connected to IP_ADDRESS port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.01   sec   256 KBytes  2.08 Mbits/sec
[  4]   1.01-2.01   sec   128 KBytes  1.05 Mbits/sec
[  4]   2.01-3.01   sec   128 KBytes  1.05 Mbits/sec
[  4]   3.01-4.01   sec   128 KBytes  1.05 Mbits/sec
[  4]   4.01-5.01   sec   128 KBytes  1.05 Mbits/sec
[  4]   5.01-6.01   sec   128 KBytes  1.05 …
Run Code Online (Sandbox Code Playgroud)

performance networking

7
推荐指数
1
解决办法
2万
查看次数

为什么我的 grep 表达式需要使用 $'string' 来匹配制表符?

如果您使用此代码:

echo -e '\t\t\tString' | grep '^[\t]*String'
Run Code Online (Sandbox Code Playgroud)

结果是空白,因为它不匹配,但是:

echo -e '\t\t\tString' | grep $'^[\t]*String'
Run Code Online (Sandbox Code Playgroud)

作品。我发誓我一定在我的脚本和终端中使用了第一行的代码一百次,从来没有使用过这样的“$”字符,而且它似乎总是有效。最近有什么变化吗?为什么需要“$”字符?还是我做错了什么?

bash quoting regular-expression

6
推荐指数
1
解决办法
1522
查看次数

为什么 sed 会更改 cifs 挂载共享上文件的权限?

我有一台 Arch linux 机器,它使用以下 fstab 条目来挂载共享:

//192.168.3.1/Documents        /mnt/  cifs    credentials=/home/tal/.smbcredentials,rw,x-systemd.automount,iocharset=utf8,file_mode=0600,dir_mode=0700,uid=tal 0 0
Run Code Online (Sandbox Code Playgroud)

共享文件夹的服务器是 Windows 服务器,共享文件夹所在的分区是 NTFS。

使用上面的 fstab 条目,共享在启动时挂载就好了。正如预期的那样,所有文件 at at/mnt/似乎都归 'tal' 所有,并且权限为 0600。/mnt 下新创建的文件也归 tal(无论它们是由 root 还是 tal 创建),并且按预期具有 0600 权限.

问题是,如果我在 /mnt 下有一个文件:

-rw------- tal root 1000 test.txt
Run Code Online (Sandbox Code Playgroud)

我在上面运行这个:

sed -i -e '1,2d' test.txt
Run Code Online (Sandbox Code Playgroud)

要删除前 2 行,将删除 2 行,但文件的权限更改为:

-r-------- tal root 1000 test.txt
Run Code Online (Sandbox Code Playgroud)

为什么 sed 会更改文件权限?查看 test.txt 的 inode,我可以看出 sed 的-i选项使用新内容重新创建文件而不是修改文件,但这应该无关紧要 - 所有新创建的文件/mnt都应该获得 0600 权限。

作为测试,我用 vim 修改了同一个文件并检查了 inode。Vim 也会就地重新创建文件而不是修改它,但是当 vim …

permissions sed samba cifs smb

6
推荐指数
1
解决办法
1091
查看次数

如何在不在子 shell 中运行命令的情况下将命令的输出分配给变量?

如果我有这样的功能:

TEST()
{
    if [[ "$1" == "hi" ]]
    then
        exit 1
    fi

    echo "Some text"
}
Run Code Online (Sandbox Code Playgroud)

如果我在当前 shell 中运行该函数:

TEST "hi"
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作。函数中的 if 语句为真,整个脚本将退出。另一方面,如果我这样做:

FUNCTION_OUTPUT=$(TEST "hi")
Run Code Online (Sandbox Code Playgroud)

这样我就可以在变量中从函数中捕获标准输出,函数内的 if 语句仍然为真,“exit 1”仍将触发,但由于我们在子 shell 中运行,脚本将继续运行。

不是使用 VAR_NAME=$() 在子shell中运行某些东西并将其分配给变量,有没有办法在当前shell中运行它,以便我的函数中的“exit 1”行实际上退出整个脚本?

bash shell-script variable

5
推荐指数
1
解决办法
2675
查看次数

SSLH的透明模式如何工作?

我有一台服务器需要在端口 443 上接受 TCP 连接,确定连接是 OpenVPN 客户端还是 HTTPS 客户端,然后将其转发到我的 Web 服务器或 OpenVPN 服务器。

SSLH 是专门为此目的而设计的,并且看起来效果很好。唯一的问题是,虽然将其设置为非透明模式对我来说效果很好,但使用透明模式却给我带来了麻烦。

有人可以解释透明模式应该如何工作背后的理论吗?

SSLH指南说,为了透明地使用 SSLH,您需要:

  • 将 sslh.cfg 设置为transparent: true;
    • 我已经这样做了
  • sslh 需要扩展权限 (CAP_NET_ADMIN)
    • 我从 CentOS 7 的存储库安装了 sslh,它附带了用于 systemd 的 sslh.service。该服务文件包含该行CapabilityBoundingSet=... CAP_NET_ADMIN ...,所以我假设这已经由 SystemD 完成
  • 设置标记数据包的 iptables 规则以及某种本地路由
    • 这是我不太清楚的。这些是否在 SSLH 服务器上进行设置?或者他们是否在 OpenVPN 和 HTTPS 服务器上进行设置?

我在示例中了解到,iptables 被告知用 0x1 标记标记源端口为 22 或 4443 的任何数据包,创建一条规则以使任何标记为 0x1 的数据包使用路由表 100,并创建路由表 100设置某种执行某些操作的本地路由。

为什么这些 iptables 规则和路由是必要的?该路线实际上在做什么?我认为路由应该位于 Web 服务器和 OpenVPN 服务器上,并指向 SSLH ip,但这似乎对我也不起作用。

===

更新:我突然想到,这可能是一条指向本地主机的路由,因为在示例中,服务器都在同一台计算机上,并且它们希望来自实际服务器的回复数据包在离开之前通过 SSLH机器。听起来对吗?如果是这样,如果我的服务器位于不同的机器上,我该怎么办?在这些机器上设置流量标记和返回 SSLH 服务器的路由?

更新 …

networking routing iptables

5
推荐指数
1
解决办法
6198
查看次数