鉴于这个例子:
mkdir a
ln -s a b
ln -s b c
ln -s c d
Run Code Online (Sandbox Code Playgroud)
如果我执行:
ls -l d
Run Code Online (Sandbox Code Playgroud)
它会显示:
d -> c
Run Code Online (Sandbox Code Playgroud)
有没有办法ls或任何其他linux命令来d -> c -> b -> a代替显示?
我当然想在这里实现一些奇怪的东西,但我想在 GNU/Linux 上为 shell 会话在本地伪造日期。我需要对程序在不同日期的行为进行黑盒测试,修改系统范围的日期可能会产生不需要的副作用(cron 作业、混乱的日志等)。
有任何想法吗 ?
将 ACDC 替换为 AC-DC
例如我们有这些文件
ACDC - 摇滚乐不是噪音污染.xxx
ACDC - Rocker.xxx
ACDC - Shoot To Thrill.xxx
我希望他们成为:
AC-DC - 摇滚乐不是噪音污染.xxx
AC-DC - Rocker.xxx
AC-DC - 惊险刺激.xxx
我知道 sed 或 awk 用于此操作。我无法用谷歌搜索任何东西,所以我在寻求你的帮助 =) 你能为此任务提供完整的 shell 命令吗?
反馈:OSX 用户的解决方案
我通常使用 Ubuntu LTS 服务器,从我理解的符号链接/bin/sh到/bin/dash. 许多其他发行版虽然符号链接/bin/sh到/bin/bash.
#!/bin/sh由此我了解到,如果脚本在顶部使用,它可能不会在所有服务器上以相同的方式运行?
当您希望在服务器之间最大程度地可移植这些脚本时,是否有建议将哪个 shell 用于脚本?
我很好奇为什么要运行 bash 而不是 zsh。我的意思是 zsh 与 bash 完全向后兼容。不要误会我的意思:我不喜欢 bash 或任何东西。我只是真的想知道使用它是否比 zsh 有任何优势。
那么有什么理由使用 bash 而不是 zsh 呢?
我在 Ubuntu 11.04 ( adduser --system) 中创建了一个“系统”用户来运行某些 cron 作业,但有时我想通过以该用户身份手动运行命令来测试一下。什么是最简单的方法来做到这一点?
su不起作用,因为用户有/bin/false它的外壳(这对 cron 很好)。我一直在手动更改外壳以/bin/bash进行测试,然后再次将其更改回来,但我想知道有没有更简单的方法?
尝试运行一个简单的 AWS CLI 备份脚本。它遍历包含文件中的行,将这些路径备份到 S3,并将输出转储到日志文件。当我直接运行此命令时,它运行没有任何错误。当我通过 CRON 运行它时,我的输出日志中出现“无法找到凭据”错误。
外壳脚本:
AWS_CONFIG_FILE="~/.aws/config"
while read p; do
/usr/local/bin/aws s3 cp $p s3://PATH/TO/BUCKET --recursive >> /PATH/TO/LOG 2>&1
done </PATH/TO/INCLUDE/include.txt
Run Code Online (Sandbox Code Playgroud)
我只是在开始看到错误后才将这一行添加到配置文件中,我认为这可能会解决它(尽管我很确定这是 AWS 默认的样子)。
Shell 脚本以 root 身份运行。我可以在指定位置看到 AWS 配置文件。我觉得这一切都很好(就像我说的,它在 CRON 之外运行良好)。
有没有人有一个工具或脚本可以递归地纠正目录上的文件权限?
在一台 Ubuntu Linux 机器上,一堆文件被错误地复制到一个具有完整 777 权限(用户、组、其他 - 读取、写入、执行)的 USB 磁盘。我想将它们放回已更正的用户目录中。
目录应该是775,所有其他文件可以是664。所有文件都是图像、文档或MP3,所以它们都不需要可执行。如果设置了目录位,则它需要执行,否则它只需要用户和组,读取和写入。
我认为在编写 shell 脚本之前检查是否存在这样的实用程序是值得的:)
有没有办法强制 SSH 在远程端使用特定的 shell,而不管用户的默认 shell 是什么?
我尝试过类似的解决方案:
ssh host.domain.com /bin/bash -c 'complicated, multi-line command'
Run Code Online (Sandbox Code Playgroud)
但不幸的是,远程端的默认 shell 负责解析“复杂的多行命令”部分,我很难充分地转义它以供 Bash 和 C shell 用户使用。
在 linux 中,我该如何做类似的事情
echo 'hello world' > log.txt
Run Code Online (Sandbox Code Playgroud)
但它不是覆盖 log.txt 的内容,而是附加到 log.txt 的末尾?