小编fro*_*age的帖子

为什么“sudo -i”登录 shell 会破坏 here-doc 命令字符串参数?

在下面的五个命令序列中,所有命令都依赖单引号将可能的变量替换传递给被调用的bashshell,而不是调用的 shell。调用用户是xx,但被调用的 shell 将以用户yy运行。第一个命令将 $HOME 替换为调用 shell 的值,因为被调用的 shell 不是登录 shell。第二个命令替换登录 shell 加载的 $HOME 的值,因此它是属于用户yy的值。第三个命令不依赖于 $HOME 值,而是在用户yy的猜测主目录中创建一个文件。

为什么第四个命令失败?目的是写入相同的文件,但依靠属于用户yy的 $HOME 变量来确保它确实最终位于她的主目录中。我不明白为什么登录 shell 会破坏作为静态单引号字符串传入的 here-doc 命令的行为。第五个命令的失败验证了这个问题与变量替换无关。

xx@host ~ $ sudo -u yy bash -c 'echo HOME=$HOME'
HOME=/home/xx
xx@host ~ $ sudo -iu yy bash -c 'echo HOME=$HOME'
HOME=/home/yy
xx@host ~ $ sudo -u yy bash -c 'cat > /home/yy/test.sh << "EOF"
> script-content
> EOF
> '
xx@host ~ $ …
Run Code Online (Sandbox Code Playgroud)

bash sudo here-document

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

如何递归地将目录的默认 ACL 应用于其后代?

如果我有一个分配了默认 ACL 条目的目录,但其部分或全部后代文件和子目录具有访问权限或默认 ACL 与这些默认值不一致,我如何递归(重新)应用这些默认 ACL 条目给所有后代?有资格。我希望完全替换所有现有的后代 ACL,除了文件的现有执行状态。否则的目的是所有后代都应该拥有在其当前位置新创建的 ACL。

Rogach 询问“如何在目录上递归设置权限(启用 ACL)?” 但希望以递归方式添加新的ACL 条目,而不是(重新)应用现有的默认 ACL。尽管 Rogach 没有要求,富兰克林·皮亚特 (Franklin Piat) 对该问题的回答也为我的问题提供了解决方案,但我认为他的解决方案存在缺陷。Piat 建议使用以下命令:

find . -mindepth 1 -type d| xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')
find . -mindepth 1 -type f| xargs -n 50 setfacl -b --set-file=<(getfacl . | grep -v '^default:' | sed -e 's/x$/X/')
Run Code Online (Sandbox Code Playgroud)

我想修复的缺陷:

  • 当前目录的访问 ACL 被传播到后代而不是它的默认 ACL,这不是我理解的 ACL 应该如何工作。
  • 所有文件的执行位都被清除(sed无效)。
  • 当需要 root 权限时,典型的sudoer …

command-line bash acl permissions

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

与 Linux Mint 的“mintupdate”等效的命令行是什么?

Linux Mint 有一个不错的基于 GUI 的更新管理器,带有可选的更新层。默认值是级别 1 到 3 我们可能的 5 个级别。但是,我经常使用 SSH 而不是访问物理机来处理许多 Linux Mint 桌面系统的管理任务。如何从命令行实现相同的功能?

我已经知道apt-get updateapt-get upgrade命令,但据我所知,这些命令仍然没有与更新管理器 ( /usr/lib/linuxmint/mintUpdate/mintUpdate.py)的五层行为等效的任何功能。

更新:当我最初提出这个问题时,我正在寻找 Linux Mint 17 解决方案。我现在在我们的一些系统上运行 18.3,并且已经能够为这些系统提供答案。

command-line upgrade linux-mint

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

here-docs 的 bash shell 长度限制是什么?

使用 here-docs 作为bash命令行的一部分有什么长度限制?我发现简短的 here-docs 工作得很好,但是当它们变长时,就会出现某些点或结构,然后它们就会中断。当它失败时,有两个症状。一是here-doc被提前放弃。另一种是输出中的一个或多个here-doc行被截断,不一定是最后一行。

下面你会看到一个人为的示例命令,我可以用它来重现问题。here-doc 是乏味的 58 行,每行包含 79 个“x”字符和一个换行符。如果我将所有 60 行(包括 , 中的换行符)复制并粘贴EOF到交互式bashshell,那么我必须手动点击Enter并且整个命令每次都会成功运行。但是,如果我复制和粘贴的所有60线,其中包括EOF新行,那么这是在发生故障时。如果我在桌面上的终端应用程序中执行后者,它总是失败。如果我在远程 SSH 客户端执行此操作,它有时会工作,有时会失败。显着减少 here-doc 行的数量,问题就消失了。中途放弃 here-doc 意味着所有剩余的 here-doc 行EOF行都被视为bash新的单独命令行,这只会导致一系列“未找到命令”错误(或者可能更糟,如果here-doc 包含合法的命令行)。

cat > ~/test.txt << 'EOF'
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx …
Run Code Online (Sandbox Code Playgroud)

command-line bash limit readline here-document

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