【问题标题】:Can someone explain me these "sed" commands and what they are doing?有人可以解释一下这些“sed”命令以及它们在做什么吗?
【发布时间】:2018-09-24 18:34:14
【问题描述】:

谁能给我一个快速的解释这些线在做什么以及它们的影响是什么?

1)sed -i "/^exampleusername/s/:1000:1000:/:${UID}:${GID}:/g" /etc/passwd

2)sed -i "/^examplegroupname/s/:1000:/:${GID}:/g" /etc/group

如果您对更多上下文感兴趣,我看到他们here

【问题讨论】:

  • 您好,您是否尝试过阅读sed 的手册页?它很好地描述了它的语言
  • 是的,但我也不明白这些命令会添加什么样的权限或其他东西
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。

标签: linux bash sed sh


【解决方案1】:

您应该查看 sed 教程或手册页。这是#1分解(不再有效sed)。第二个具有相同的一般形式:

/^exampleusername/      # Perform a command on matching lines (address)
    s/                  # Substitute command with / as delimiter
      :1000:1000:       # Pattern to find
      /                 # Delimiter
      :${UID}:${GID}:   # String to replace with (expanded by bash)
      /                 # Terminating delimiter
      g                 # Regex flag (global: replace all matches in line)

所以它只找到以exampleusername 开头的行,并将所有出现的:1000:1000: 替换为您当前用户的UID/GID。

这实际上使exampleusername 与您当前的用户相同。

【讨论】:

  • 您可能会提到,/g 在这里没有多大意义,因此它看起来好像是某个货物狂热的程序员编写了该代码,在不确切知道他是什么的情况下对其进行了调整做。
  • 如果这是一次代码审查,确实值得一提的是 plus 前缀匹配用户名,假设现有 uid/gid,使用 sh 中不存在的变量,而不仅仅是使用usermod 之类的工具。
  • 在链接的 Dockerfile 上下文中,他们确保 Docker 映像中的用户帐户与您在构建映像的主机系统上具有相同的 UID 和 GID。
  • 仅供参考,因为 Alpine 没有 usermod 命令,所以密码文件破解是必要的。
  • ...并在此处评论并删除了 g 标志github.com/itzg/dockerfiles/blob/…
猜你喜欢
  • 2014-12-06
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 2018-04-26
  • 2017-07-24
  • 1970-01-01
  • 2021-06-28
相关资源
最近更新 更多