logsaveコマンドでコマンド実行結果をログファイルに保存する

はじめに

今回もUbuntu Packagesを見ていたらlogsaveというコマンドを見つけたのでこれを試してみる。

logsaveコマンドは、コマンドの実行結果を指定したログファイルに自動的に保存するユーティリティである。
標準出力と標準エラー出力の両方をキャプチャしてコマンドの実行記録を残すことができるとのこと。

環境

Windows 11 Professional
WSL2 Ubuntu 24.04 LTS
logsave (e2fsprogs) 1.47.0

logsaveのインストール

logsavee2fsprogsパッケージに含まれているため、Ubuntuでは標準でインストールされている。
もしインストールされていない場合は、以下のコマンドでインストールができる。

※今回はインストール済みだったため以下のコマンドは実施していない。

sudo apt update
sudo apt install e2fsprogs
man logsave
詳細
LOGSAVE(8)                               System Manager's Manual                               LOGSAVE(8)

NAME
       logsave - save the output of a command in a logfile

SYNOPSIS
       logsave [ -asv ] logfile cmd_prog [ ... ]

DESCRIPTION
       The  logsave  program will execute cmd_prog with the specified argument(s), and save a copy of its
       output to logfile.  If the containing directory for logfile does not exist, logsave  will  accumu‐
       late  the output in memory until it can be written out.  A copy of the output will also be written
       to standard output.

       If cmd_prog is a single hyphen ('-'), then instead of executing a program, logsave will  take  its
       input from standard input and save it in logfile

       logsave  is  useful  for  saving  the  output  of initial boot scripts until the /var partition is
       mounted, so the output can be written to /var/log.


OPTIONS
       -a     This option will cause the output to be appended to logfile, instead of replacing its  cur‐
              rent contents.

       -s     This option will cause logsave to skip writing to the log file text which is bracketed with
              a  control-A  (ASCII  001  or  Start of Header) and control-B (ASCII 002 or Start of Text).
              This allows progress bar information to be visible to the user on the  console,  while  not
              being written to the log file.

       -v     This option will make logsave to be more verbose in its output to the user.

AUTHOR
       Theodore Ts'o ([email protected])

SEE ALSO
       fsck(8)

E2fsprogs version 1.47.0                      February 2023                                    LOGSAVE(8)

logsaveを使ってみる

コマンド書式

logsave [オプション] ログファイル名 実行するコマンド

試してみる

logsave test.log echo "Hello,World!"
結果
~ logsave test.log echo "Hello,World"
Hello,World

~ cat test.log

Log of echo Hello,World
Sun Jun  8 05:04:59 2025

Hello,World

Sun Jun  8 05:04:59 2025
----------------

これでtest.logファイルに"Hello, World!“の出力が保存される。

ファイルシステムチェックの例

logsaveは元々ファイルシステムツールと一緒に使用されることを想定して作られている。 ※fsck(ファイルシステムチェック)など、起動時や回復時の重要コマンドの出力をログとして残すため

/dev/sdc は各自のデバイスを確認すること(dfコマンドなど)

sudo logsave fsck.log sudo fsck -y /dev/sdc

この例では、/dev/sdcのファイルシステムチェック結果をfsck.logに保存する。

実用例

システムメンテナンス作業の記録例

システムメンテナンス作業で、作業履歴および時間を計測することができる。

# パッケージアップデートの記録
sudo logsave /var/log/system-update.log sudo apt update && sudo apt upgrade -y

# ディスク使用量チェックの記録
logsave disk-usage.log df -h

# システム情報の記録
logsave system-info.log uname -a

バックアップ作業の記録例

# rsyncを使ったバックアップの記録
logsave backup-$(date +%Y%m%d).log rsync -av /home/user/documents/ /backup/documents/

# tarを使ったアーカイブ作成の記録
logsave archive-$(date +%Y%m%d).log tar -czf backup.tar.gz /important/data/

長時間実行されるコマンドの監視例

# 大きなファイルのダウンロード記録
logsave download.log wget https://example.com/largefile.zip

# データベースダンプの記録
logsave db-backup.log mysqldump -u user -p database_name > backup.sql

便利なオプション

-a オプション(追記モード)

既存のログファイルに追記したい場合は-aオプションを使用する。

logsave -a system-check.log echo "=== System Check Started ==="
logsave -a system-check.log free -h
logsave -a system-check.log ps aux | head -10
logsave -a system-check.log echo "=== System Check Completed ==="

他のログ取得方法との比較

teeコマンドとの違い

# teeの場合(標準出力とファイルの両方に出力)
echo "Hello" | tee output.log

# logsaveの場合(標準出力とファイルの両方に出力、コマンドを直接指定)
logsave output.log echo "Hello"

teeはパイプラインで使用し、logsaveはコマンドを直接実行する。

リダイレクトとの違い

# リダイレクトの場合(標準出力のみ)
echo "Hello" > output.log

# logsaveの場合(標準出力と標準エラー出力の両方)
logsave output.log echo "Hello"

logsaveは標準エラー出力も自動的にキャプチャする。 とはいえ、リダイレクトであれば 2>&1を指定すれば標準出力にエラー出力も含められるので、標準出力をファイルに保存するという観点であればあまり変わらない。

参考

おわりに

logsaveコマンドは、コマンドの実行結果を確実にログファイルに保存する便利なツールである。
基本的にリダイレクト機能使えばコマンドの結果自体は保存できるが、タイムスタンプなども記録したい場合はlogsaveを使うとよさそう。
使う機会は多くないと思うがログ取りや時間を計測したいコマンドのログをとりたいというときに便利そうだなと思った。

実用例でも記載したが、特に以下の場面で有効と思う。

  • システムメンテナンスの作業履歴と時間 (アップデートされるパッケージなど)
  • 定期的なバックアップ処理
  • 長時間実行されるバッチ処理

機会があれば使っていこうと思う。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。