やりたかったこと
サーバー上のファイルをまとめてバックアップしたり、ログを圧縮して容量を節約したかった。 tarとzipはどちらもよく使うのに、オプションが多くていつも調べ直していた。
tarコマンドの基本
アーカイブを作成する(圧縮なし)
tar -cvf archive.tar ./mydir
-c: 作成(create)-v: 詳細表示(verbose)-f: ファイル名を指定
gzip圧縮で作成する(.tar.gz)
tar -czvf archive.tar.gz ./mydir
bzip2圧縮で作成する(.tar.bz2)
tar -cjvf archive.tar.bz2 ./mydir
tarで解凍する
# .tar を展開
tar -xvf archive.tar
# .tar.gz を展開
tar -xzvf archive.tar.gz
# .tar.bz2 を展開
tar -xjvf archive.tar.bz2
# 展開先ディレクトリを指定する
tar -xzvf archive.tar.gz -C /tmp/
tarの中身を確認する(展開せずに)
tar -tzvf archive.tar.gz
zipコマンドの基本
# ファイルを圧縮
zip archive.zip file1.txt file2.txt
# ディレクトリごと圧縮(再帰的に)
zip -r archive.zip ./mydir
# 圧縮レベルを指定(0〜9、デフォルトは6)
zip -r -9 archive.zip ./mydir
unzipで解凍する
# カレントディレクトリに解凍
unzip archive.zip
# 解凍先を指定する
unzip archive.zip -d /tmp/output
# 中身を確認する(解凍せずに)
unzip -l archive.zip
よく使うパターン
ログを日付付きでアーカイブする
tar -czvf "logs-$(date +%Y%m%d).tar.gz" /var/log/nginx/
特定のファイルを除外して圧縮する
tar -czvf archive.tar.gz ./mydir --exclude='*.log' --exclude='node_modules'
圧縮率を確認する
ls -lh archive.tar.gz
du -sh ./mydir
ハマったポイント
tar -xzvfのfオプションは必ず最後にする(-fの直後にファイル名が来る)zip -rの-rを忘れるとディレクトリの中身が入らない.tar.gzと.tgzは同じ形式なのでどちらのオプションでも展開できる- Linuxサーバーに
unzipが入っていないことがある(apt install unzipで入れる) tarでパスを指定する際、先頭の/があると絶対パスで展開されて危険なことがある(-Pオプションで解除可能)
定期的なバックアップを自動化したい場合はLinuxでCronジョブを設定して定期実行する方法と組み合わせてtarコマンドをcronで実行するのが定番だ。
関連記事
- Linuxの基本コマンド(ls/cd/mkdir/rm)まとめ
- rsyncでファイルを同期・バックアップする方法
- LinuxのSSH接続の基本(VPSに接続する方法)
- Linuxでpermission deniedエラーが出た時の対処法
おすすめのVPS/ドメイン/スクール
VPSを使って本番環境を構築するなら、以下のサービスがおすすめです。