一等匠 發表於 2023-5-9 00:00:00

利用logsave如何将命令输出保存起来

<p>
        <span><strong>前言</strong></span></p>
<p>
        如果想要把命令的输出保存到文件中,你会怎么做?</p>
<p>
        一个常用的方法就是使用IO重定向吧</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_873148">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash functions">ls</code> <code class="bash plain">&gt;</code><code class="bash plain">/tmp/ls</code><code class="bash plain">.txt 2&gt;&amp;1</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        如果需要在将命令输出保存到文件中的同时还需要将内容也输出到屏幕中的话,那么我们可以使用 tee 命令</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_439167">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash functions">ls</code> <code class="bash plain">|</code><code class="bash functions">tee</code> <code class="bash plain">/tmp/ls</code><code class="bash plain">.txt</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        不过,我今天发现还有一个 logsave 的命令,也可以做到将命令输出保存到文件的同时将内容页输出到屏幕中。</p>
<p>
        <strong>logsave 的语法非常简单:</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_439109">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">logsave [ -asv ] logfile cmd_prog </code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>选项</strong></span></p>
<p>
        -a:追加信息到指定的日志文件中。</p>
<p>
        <span><strong>参数</strong></span></p>
<ul>
<li>
                日志文件:指定记录运行信息的日志文件;</li>
        <li>
                指令:需要执行的指令。</li>
</ul>
<p>
        logsave 会执行 cmd_prog args... 并将命令输出的副本保存到 logfile 中. 而它厉害的地方在于 即使logfile所在的目录不存在,logsave也会将输出保存到内存中,等到logfile所在的目录建立后再将内容写入到日志文件中</p>
<p>
        logsave 的这个特性使得它很适合用于系统启动脚本中,将输出的内容保存到内存中,直到 /var/ 目录挂载后再将内容写入 /var/log/ 中</p>
<p>
        比如下面这个例子</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_374950">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash comments"># 删除存放logfile的目录</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash functions">rm</code> <code class="bash plain">-rf </code><code class="bash plain">/tmp/logdir</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash comments"># 使用logsave保存logfile</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">logsave </code><code class="bash plain">/tmp/logdir/logfile</code> <code class="bash functions">bash</code> <code class="bash plain">-c </code><code class="bash string">"sleep 2;date"</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash comments"># 创建logdir</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash functions">mkdir</code> <code class="bash plain">/tmp/logdir</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash functions">echo</code> <code class="bash plain">查看logfile是否生成:</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash functions">ls</code> <code class="bash plain">-l </code><code class="bash plain">/tmp/logdir</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="bash functions">echo</code> <code class="bash plain">等待2s后:</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="bash functions">sleep</code> <code class="bash plain">2</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="bash functions">echo</code> <code class="bash plain">再次查看logfile是否生成:</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="bash functions">ls</code> <code class="bash plain">-l </code><code class="bash plain">/tmp/logdir</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="bash functions">echo</code> <code class="bash plain">查看logfile的内容:</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="bash functions">cat</code> <code class="bash plain">/tmp/logdir/logfile</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_132403">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">2018年 05月 14日 星期一 16:31:44 CST</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">查看logfile是否生成:</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">总用量 0</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">等待2s后:</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">再次查看logfile是否生成:</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash plain">总用量 4</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">-rw-r--r-- 1 lujun9972 lujun9972 141 5月 14 16:31 logfile</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">查看logfile的内容:</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="bash plain">Log of </code><code class="bash functions">bash</code> <code class="bash plain">-c </code><code class="bash functions">sleep</code> <code class="bash plain">2;</code><code class="bash functions">date</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="bash plain">Mon May 14 16:31:42 2018</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                         </div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="bash plain">2018年 05月 14日 星期一 16:31:44 CST</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                         </div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="bash plain">Mon May 14 16:31:44 2018</code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="bash plain">----------------</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>从中可以看到:</strong></p>
<ul>
<li>
                虽然一开始logfile由于logdir不存在而无法生成,但是在创建logdir后, logsave 最终依然成功的生成了logfile,并将 date 命令的执行结果写入其中。</li>
        <li>
                logsave 不仅仅将命令的输出内容写入logfile中,而且还包括了执行的命令,命令执行的开始时间和命令执行结束的时间.</li>
</ul>
<p>
        logsave 中的 cmd_prog 可以是一个特殊的 - ,这表示 logsave 从标准输入中获取要记录日志的内容,这使得 logsave 可以像 tee 一样被使用</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_532236">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash functions">ls</code> <code class="bash plain">|</code><code class="bash functions">wc</code> <code class="bash plain">-l |logsave </code><code class="bash plain">/tmp/1</code><code class="bash plain">.txt - &gt;</code><code class="bash plain">/dev/null</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash functions">cat</code> <code class="bash plain">/tmp/1</code><code class="bash plain">.txt</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>总结</strong></span></p>
<p>
        以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
        原文链接:https://lujun9972.github.io/blog/2018/05/14/使用logsave将命令输出保存起来/</p>
頁: [1]
查看完整版本: 利用logsave如何将命令输出保存起来