我正在创建一个脚本,用于在两个系统之间同步我的重要文档。我希望我的脚本能够为上一个操作生成一个日志文件。您能建议我实现此目的的方法吗?
问题:如果我使用 -v 标志执行 rsync 命令,它会在控制台上打印大量消息。有什么办法吗?那么,我可以将这些日志重定向到文件吗?
答案1
您可以调用脚本并将“标准输出”(又称 STDOUT)重定向到日志文件。使用“>>”附加到日志文件或使用“>”覆盖日志文件。如果文件尚不存在,则会创建该文件(如果其目录上的权限允许)。如果文件已存在,请确保您(或运行脚本的人)可以写入它。
如果您总是将内容附加到日志文件而不是覆盖它,那么最好从一开始就确保某些东西会“轮换”您的日志文件,即,将其移动到其他名称并删除较旧的日志文件。如果日志文件对于您的脚本是唯一的,您可以让脚本负责日志文件轮换。
通常,首选方法是使用重定向的 STDOUT 调用脚本,但有时您可能希望在脚本本身内对一个或多个命令进行重定向。您可以在 shell 脚本中的任何语句后添加“>> logfile”,以将该命令的 STDOUT 附加到日志文件。您可以将其更改为“2>&1 >> logfile”,以附加“标准错误”(又称 STDERR)和STDOUT 到日志文件。您通常不希望 STDERR 也转到日志文件,因为 STDERR 通常用于通知正在运行脚本的任何人/任何人员出现问题。但有时和某些情况下您确实需要这样做。如果您愿意,您可以在脚本中的 { 和 } 内对命令进行分组,并通过将重定向放在右括号后一次性重定向整个组的 STDOUT。
答案2
使用>
运算符:
rsync -v > log.txt
会将 rsync 命令的输出写入名为 的文件log.txt
。
答案3
除了上述内容之外,如果您希望看到输出打印到屏幕上以及存档/grepping/等文件中,您可能需要“球座“输出。这是一个很棒的命令,以现实世界管道中的 T 管道命名,并且适用于 mysql 等“子控制台”。
命令是球座...这里有一个从名为“托伊迪“:
同时显示和记录命令的输出:
ls -l | tee -a file.log
在此示例中,它将显示目录列表输出,并将输出保存到 file.log 中。选项 -a 指示命令追加而不是覆盖文件。
另外,查看维基百科上的图片,可以清楚地了解 tee 的工作原理。我会链接到它,但我没有足够的“声誉点”来发布超过 1 个链接,我觉得“toydi”应该获得链接信用 :)
答案4
如果你想记录你输入的每个命令,你可以使用脚本命令。