AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-189744

JoL's questions

Martin Hope
JoL
Asked: 2020-01-29 15:47:15 +0800 CST

tune2fs 默认挂载选项不出现在挂载输出中是否正常?

  • 2

我有一个带有 2 个分区的 SSD,用 ext4 格式化。在第二个分区上,我discard使用以下命令在文件系统级别启用了默认选项:

$ sudo tune2fs -o discard /dev/sda2
tune2fs 1.45.5 (07-Jan-2020)
$ sudo tune2fs -l /dev/sda2 | grep 'mount options'
Default mount options:    user_xattr acl discard

我还在以下discard两个分区中添加了选项/etc/fstab:

/dev/sda2 /     ext4 rw,relatime,discard,stripe=8191 0 1
/dev/sda1 /boot ext4 rw,relatime,discard,stripe=8191 0 2

但是,当我查看 的输出时mount,似乎只有一个没有discardfs-level 默认挂载选项的选项启用了它:

$ mount | grep '^/dev'
/dev/sda2 on / type ext4 (rw,relatime,stripe=8191)
/dev/sda1 on /boot type ext4 (rw,relatime,discard,stripe=8191)

我注意到tune2fs也没有提到提到的其他选项。

那么,尽管没有提及,我可以相信discard在当前安装中启用了它吗?有什么方法可以验证吗?我的意思是, even的输出与当前的安装无关。/dev/sda2mounttune2fs

编辑:我应该提到我也尝试mount -o discard在命令行中安装,但它仍然没有显示在mount输出中:

$ sudo tune2fs -o discard /dev/sda1
tune2fs 1.45.5 (07-Jan-2020)
$ sudo umount /boot
$ sudo mount -o discard /boot
$ mount | grep sda1
/dev/sda1 on /boot type ext4 (rw,relatime,stripe=8191)
linux ext4
  • 1 个回答
  • 920 Views
Martin Hope
JoL
Asked: 2019-07-14 08:31:48 +0800 CST

bash 中的“继承”;有没有办法在覆盖函数中调用 super(没有 eval)?

  • 1

给定文件m.sh:

f() {
  echo foo
}

g() {
  f | sed -r 's/^|$/:/g' # random work
}

和e.sh:

. m.sh

old_f="$(type f | sed '3,$!d')"

f() {
  echo "$(eval "$old_f")bar"
}

g

有没有比使用type和eval从覆盖函数调用旧函数更好的解决方案,同时保持相同的名称,以便其他函数中的引用仍然有效?

两者m.sh和e.sh都是同一个项目的一部分,所以我们可以m.sh放心地修改。

bash
  • 1 个回答
  • 491 Views
Martin Hope
JoL
Asked: 2019-01-23 18:07:59 +0800 CST

典型的系统调用接口是否允许减小文件的大小(而不用不同的 inode 替换它)?

  • 9

有没有办法让open()文件缩小?当然,可以以附加模式打开它们,或者寻找到最后并写入以使它们增长。但是,据我所知,没有任何方法可以通过典型的 unix 风格的系统调用接口来缩小文件。

据我所知,这样做的唯一方法是通过创建一个新的较短文件并将rename()其替换旧文件来伪造它。

我只是想确认一下,因为我看到一个答案暗示可以制作直接在文件上工作的文件编辑器,而不是经历制作新文件并在适当位置重命名的过程。

我一直认为 libc 和 unix 风格的系统调用接口中的文件 api 不允许缩小文件以简化文件系统的实现,并且可能避免可能导致碎片的使用模式。

files filesystems
  • 2 个回答
  • 1016 Views
Martin Hope
JoL
Asked: 2019-01-19 09:42:31 +0800 CST

为什么`... | 当 `... > >(sed 's/^/stdout: /')` 不打印时,sed 's/^/stdout: /'` 在空标准输入上打印?

  • 4

我试图了解是什么导致了我认为在功能上等效的这两个构造的差异:

$ ( echo foo >&2 ) 2> >(sed 's/^/stderr: /') | sed 's/^/stdout: /'   
stdout: stderr: foo
$ ( echo foo >&2 ) 2> >(sed 's/^/stderr: /') > >(sed 's/^/stdout: /')
stderr: foo

编辑:如果我理解 user1133275 正确,他建议>(sed 's/^/stdout: /')不要运行,除非子外壳( echo foo >&2 )输出到标准输出。但是,这将意味着以下内容:

$ ( echo foo >&2 ) 2> >(sed 's/^/stderr: /') > >(echo baz)   
baz
stderr: foo

不应该显示baz。

编辑 2:也许也很有趣, sed 不会stdout:在空输入上输出,即使是通过管道传输的:

$ sed 's/^/stdout: /' < /dev/null
$ printf "" | sed 's/^/stdout: /'
$
bash sed
  • 4 个回答
  • 1857 Views
Martin Hope
JoL
Asked: 2018-12-11 16:06:58 +0800 CST

没有 systemd/init 时如何关机(例如使用 init=/bin/bash)?

  • 11

poweroff抱怨它无法通过 DBus 连接到 systemd(当然,它不存在)。我确实sync跟着kill $$,认为 pid 1 死亡会提示内核关闭电源,但这会导致内核恐慌。然后我按住电源按钮强制关机。

在这种情况下,最合适的关机方式是什么?

linux systemd
  • 5 个回答
  • 6971 Views
Martin Hope
JoL
Asked: 2018-08-18 16:02:40 +0800 CST

是否有更短的 long/path/**/^*.(complex|pattern)~long/path/(bad-1|bad-2)/*(.) 不需要重复 long/path/ ?

  • 3

这是一个 zsh 扩展的 glob 模式。重点是将目录层次结构下的所有文件与模式匹配,特定子层次结构除外。标题中的模式有效,但我想要一些不需要重复的东西long/path/。

我尝试了以下方法:

long/path/(^(bad-1|bad-2)/|)**/^*.(complex|pattern)(.)
long/path/(**~(bad-1|bad-2)/*)/^*.(complex|pattern)(.)

添加KSH_GLOB:

long/path/?(^(bad-1|bad-2)/)**/^*.(complex|pattern)(.)

它们都会导致错误模式错误。看来问题出/在括号中。文件说:

如上所述,用作目录分隔符的“/”可能不会出现在括号内

这让我感到困惑,因为这(dir/)#是一个很好的模式。它甚至在文档中提到:

`(foo/)#' 形式的路径名组件匹配由零个或多个匹配模式 foo 的目录组成的路径。

我想这是个例外。

明确地说,我正在寻找等价物。这不包括:

long/path/^(bad-1|bad-2)/**/^*.(complex|pattern)(.)

因为它排除了诸如long/path/good.pattern, 和

long/path/(^(bad-1|bad-2)/)#/^*.(complex|pattern)(.)
long/path/**/^*.(complex|pattern)~*/(bad-1|bad-2)/*(.)

因为那些排除了诸如 what's under 之类的东西long/path/good/bad-1。

编辑:只是提一下,解决方案不一定只需要使用通配符。如果可以通过添加大括号或历史扩展或其他一些 zsh 工具来完成,那就太好了。

编辑 2:按照我自己的想法,我尝试了历史扩展:

long/path/**/^*.(complex|pattern)~!{#$:s/\**//}/(bad-1|bad-2)/*(.)

然而,这失败了,因为 1) 当前行的最后一个字是扩展所在的那个之前的那个,以及 2) 因为历史替换似乎是在 glob 扩展之后完成的(我一定是误解了这里的某些东西,因为那似乎违背文档;也许所有扩展都是逐字逐句完成的)。

我也试过大括号扩展:

( IFS=\~; printf "%s\n" long/path/{**/^*.(complex|pattern),(bad-1|bad-2)/*(.)} )

它没有用。这 2 个 glob 模式仍然被视为单独的词,而不是被连接成一个单一的模式。我想IFS这里没有考虑。说得通。

我还尝试在 glob 限定符中进行替换:

+/**/^*.(complex|pattern)~+/(bad-1|bad-2)/*(.:s,+,long/path,)

但是,当然,那是行不通的,因为替换是在匹配之后而不是之前进行的。

zsh wildcards
  • 2 个回答
  • 119 Views
Martin Hope
JoL
Asked: 2018-06-14 08:01:39 +0800 CST

在脚本运行时解析脚本是普遍存在于 shell 中还是存在于其他解释器中,它是如何工作的?

  • 7

我一直认为 shell 会解析整个脚本,构建 AST,然后从内存中执行该 AST。但是,我刚刚阅读了 Stéphane Chazelas 的评论,并测试了执行此脚本 edit-while-executing.sh:

#!/bin/bash

echo start
sleep 10

然后在它睡觉时运行:

$ echo "echo end" >> edit-while-executing.sh

它的工作是让它在最后打印“结束”。

但是,在尝试修改时:

#!/bin/bash

while true; do
  echo yes
done

通过做:

$ printf "%s" "no " | dd of=edit-while-executing.sh conv=notrunc seek=35 bs=1

它没有用,并一直打印“是”。

我也想知道其他非shell解释器是否也这样工作,并用python尝试了第一个脚本的等价物,但没有用。不过,也许 python 不再是解释器,而更像是一个 JIT 编译器。

所以重申我的问题,这是一种普遍存在于 shell 中并仅限于它们的行为,还是也存在于其他解释器(那些不被视为 shell 的解释器)中?另外,这是如何工作的,我可以做第一次修改而不是第二次修改吗?

shell-script shell
  • 3 个回答
  • 351 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve