【しぇ】Bashで作ったお手軽簡単バックアップスクリプト@MyBackup.sh
追記:README.md書いた
追記:GitHubで公開しました
https://github.com/nabeky/MyBackup/
うっし、すんげー時間を掛けてしまいましたが。。。
(;´∀`)
デバッグに十分に時間を使いましたし、ドキュメントも必要十分に入れ込みました。
これで、公開する事が出来そうで御座います。
これまでの経緯は以下。
【す】ただ単純にバックアップしたいだけBashスクリプト拗らす
定期的なバックアップ処理としても、都度手軽に使えるバックアップとしても使えます。
SHファイル1本の手軽さ。
∠( ゚д゚)/
シェル操作に不慣れな方でも、簡単に使えるし、解凍も同じスクリプトで行えます。
※パスワードやコマンドの引数とか調べる手間が無くなる
暗号化、動的マウント、アップロード転送&同期、リポート機能、古バックアップ削除、偽ファイル生成、ユーザー定義など思い付くまま機能を入れ込みました。
MITライセンスとしましたので、ご自由に使ってください。
今夜辺りにでも、Git Hubに公開登録してみます。どうやるんだっけ?
(;´Д`) いつになったら日本語対応すんの
公開出来たら、こちらにリンクを貼りますね。
追記:GitHubで公開しました
何時間掛かったよ。。をぃ
(;´∀`)
ただただファイルをアップロードして、公開状態にすんのに、数時間を要してしまいました。
1ファイルだけ追跡してりゃいいものを、とんでもない数のファイルがリポジトリ内に入ってましたよ。
経緯:必死にコマンド使わず、VSCodeからだけの操作で出来ないものか、四苦八苦して結果、無理だと分かった。
どないしてもプッシュできんし、ID/PWはダメなので、Token作って・・とか。
覚える気の無いGitなので、正直、今後の更新がスムーズに行くのか、とっても不安でありますw
READMEとか書いたほうが良さそうなので、今後の課題として。
Markdownだっけか、これ。
追記:README.md書いた
2-3種類のMD記法だけ覚えて、なんとかUsageの内容を手動変換しました。
段落とか・・・末尾に空白2文字か"\"を書けとか、面倒この上無い。空行を置いても良いらしいので、なんとかこれで対処。
あー、疲れた。
(;´Д`) まんじゅう食わしてくれ
以下、スクリプトのUsage(ヘルプ)を転載。
MyBackup (personal backup script)
暗号バックアップスクリプト for Ubuntu Linux
(上下左右にスクロール出来ます)
.
Copyright:
MyBackup.sh Version 0.20250410
(C)2025 quawaz,watanabe
Lisense:
This project is licensed under the MIT License
.
2025/6, Ubuntu 24.04LTS, bash ver.5.2.21
—
Usage:
定期&手動お手軽暗号バックアップスクリプト
Tar/Zipで丸め暗号化、偽ファイル生成、外部ストレージや
他ホストへアップロード、レポート報告、動的マウントなど
普段のバックアップ用途でも手軽に使えるように配慮しました
本ファイル、Config:欄 にて、事前設定しご利用ください
貴方お好みに改修してお使いください
Ubuntu24.04LTS及びWSL2にて、動作確認しております
.
パスワードが記載されるため権限設定は確実に!
chmod 0700 ./MyBackup.sh
.
* cronでの定期実行
crontab -e
(super user) sudoedit /etc/cron. (daily,monthry..)
* logoff時の自動実行
.bashrc:trap '/home/user/MyBackup.sh’ EXIT
* クイックバックアップ
好きなタイミングで適当なDirをバックアップ
MyBackup.sh ./pictures
* 簡単解凍
解凍も同じスクリプトで簡単
MyBackup.sh ./buckup20250701.tar.gzc
.
—
注意
.
通常、表示は行いませんので、実運用に移行する前は、
“-v"オプションを付けて、テストしてください
(_DEBUGフラグもtrueを推奨。後述)
.
一部機能の利用には、別途パッケージ導入が必要になります
必要な場合、事前に導入ください
mailutils、smbclient、curl、特殊なmount関連 など
.
各部の動作テスト用のオプションを用意しています
–test-upload など
.
利用による結果には責任を負いません
利用者様の自己責任において、十分に留意の上ご利用ください
—
flow / 処理内容
.
以下、処理の流れになります
.
-モード切替
-マウント
-空き容量確認
-古いバックアップ削除
-Tar又はZip丸め
-Tar又はZip丸め(ユーザー定義*1)
-暗号化
-Tar又はZip生成ファイル削除
-他ホストへアップロード(scp/samba/ユーザー定義*2他)
-生成ファイル削除
-偽ファイル生成(default:off)
.
*trap:EXIT
-後処理
-書込フラッシュ
-アンマウント
-レポート(syslog/chat/mail/ユーザー定義*3他)
-ユーザー定義*4
.
*trap:ERR
-エラー表示(DEBUG情報)
.
※ 各工程のON/OFF可
※ 途中でエラー時は終了(DEBUGモードによる)
ユーザー定義
*1:fn_ex_build_balls()
*2:fn_ex_upload()
*3:fn_ex_report()
*4:fn_ex_exit()
.
—
mount / マウント
.
様々な保存先があるかと想定、セキュリティ的にも?
マウント関連も制御出来るように致しました
一般ユーザーで利用される場合は、予め /etc/fstab に設定が必要になります
マウント後、空き容量確認などが行われます(ON/OFF可)
後述のアップロード機能で、他ホストへ転送される場合は、これらは不要になります
.
—
output / 出力ファイル
.
[prefix][target dir name][time stamp][ext]
.
例) Backup_Document_20250101.tar.gzc
※ 各部位変更可
.
—
decode / 手動による解凍
.
生成したファイルを展開するには、先に復号化が必要になります
(デフォルト設定の場合は以下)
-in 対象のファイル名
-out 出力ファイル名
openssl enc -d -aes-256-cbc -pbkdf2 -in xxx.tar.gzc -out xxx.tar.gz
(パスワード入力)
.
その後、Tar又はZipにて展開します
カレントに、ディレクトリが生成され、その中に展開されます
(Tarは標準的な gzip 圧縮限定となります)
tar -xvf xxx.tar.gz
unzip xxx.zip
.
*デフォルト設定は標準的な暗号化(AES/256bit)となります
.
—
簡単解凍
.
解凍も当スクリプトにて簡単に行う事が出来ます
パスワードや、コマンドの引数などを再度調べ直す手間が省けます
Tarデフォルト設定という条件で、その場に簡単に解凍出来ます
(既に設定済みのもので解凍を試みます、途中で変更された場合は不可能)
複数指定が可能、オプション指定はありません
_ez_decodeというディレクトリが作られ、その中に展開されます
.
例) ./MyBackup.sh ./xxxx.tar.gzc
例) ./MyBackup.sh ./*.tar.gzc
.
—
クイックバックアップ
.
直接ディレクトリを指定して、バックアップを行えます
予め設定された場所に保存されます
複数指定が可能、オプション指定はありません
ディレクトリ毎に1ファイル生成されます
.
例) ./MyBackup.sh ./work
例) ./MyBackup.sh ./dir*
.
—
アップロード
.
生成ファイルを他ホストなどへ転送(冗長)を行えます
方法は以下の種類、他、ユーザー定義も指定できます
アップロード後、ローカル生成ファイルを削除する事ができます
通信経路上のセキュリティや、通信負荷も考慮してください
事前にセキュリティ設定やコマンド導入が必要になります
–test-upload にて動作テストが行えます
.
scp
SSHファイル転送(scp)
samba
Windowsファイル送信(smbclient)
http
HTTPによるアップロード(curl)
ftp
FTPによるファイル転送(curl)
sftp
SFTPによるファイル転送(sftp)
rsync
ファイル同期(rsync)
メール添付による送信(mail)
user
ユーザー定義(fn_ex_upload)
.
* 括弧内は利用するコマンド
.
—
[_AE_TITLE2]
レポート
.
バックアップ結果を報告する事が出来ます
方法は以下の種類、他、ユーザー定義も指定できます
事前にセキュリティ設定やコマンド導入が必要になります
通常バックアップ動作モードのみ動作します
–test-report にて動作テストが行えます
.
chat
現在ログイン中のユーザーに報告(wall)
log
syslogに記録(logger)
メールによる送信
http
HTTPアクセス(apiなどに)(curl)
user
ユーザー定義(fn_ex_report)(curl)
.
—
運用前・改造・ユーザー定義関数他
.
複雑なコードは御座いませんので、ご自由に改変ください
十分なデバッグを行っておりますが、複数の環境想定、全パターンでの確認は実施しておりません
バグは含んでいるものとして、お考えください
本運用に入る前に、十分なテストを行ってください
_DEBUG に true を設定する事で、その場で動作を停止する事ができます
エラー内容や場所、グローバル変数値が表示されます
テスト完了後には、_DEBUG に、false を設定してください
テスト時のパスワード情報の削除なども忘れず(history -c など)
.
ユーザー定義関数は以下になります
独自の処理を導入されたい場合に、記述ください
.
バックアップファイル生成
fn_ex_build_balls
アップロード
fn_ex_upload
リポート
fn_ex_report
終了時(通常バックアップモード時)
fn_ex_exit
.
ライセンスは、広く利用されている MITライセンス となります
商用、改変なども自由に利用頂けます
配布の際、著作権表記が必要になります
.
一見、プログラミング言語の様に見えるのは罠ですのでご注意ください
シェル上で動作しているイメージを忘れずコーディングください
.
もともとサーバのバックアップ用にと、数行のスクリプトでしたが、
こつこつと機能を加え続け、現在のような形になって行き
公開するに当たって、ドキュメント含め、全体的な見直しを幾度も行い、
より肥大化してしまいました
シェルに不慣れな方のために、コメントも多めに追加致しました
当初は、SSH上(Ubuntu24.04LTS実機)+Vimで、後半はWSL2(同24.04)+VSCodeで書きました
Bashやシェルコードの記事を公開して頂いている多くの先人様に感謝申し上げます
—
EOL
);readonly _USAGE_OPT=$(cat <<“EOL"
arguments / 引数
.
通常バックアップ
(規定場所のバックアップ)
例) ./MyBackup.sh
バックアップ、進捗表示、偽ファイル生成
例) ./MyBackup.sh -v -f
暗号化生成までで終わり、進捗表示
例) ./MyBackup.sh -v -e
.
mode:簡単解凍
例) ./MyBackup.sh backup_20250401.tar.gzc
mode:クイックバックアップ
例) ./MyBackup.sh ./work
.
options:
.
-b|–ball
build tar/zip only
Tar/Zip生成のみで終了します
-e|–encrypt
exit after encrypted
暗号化生成までで終了します
-g|–organize
do not remove older-backups
古いバックアップ削除を行いません
-h|man|–help|info|usage|ver
this document
ドキュメントを表示します
-v|–verbose
reporting
処理情報を表示します
*通常モード外では強制ONとなる場合有り
-f|–fake
added fake-file
偽バックアップファイルを追加生成
.
quick-modes:
*自動で、-vが付与されます
.
[filename] [filename] …
mode:簡単解凍、カレントの"_ez_decode"ディレクトリ内に解凍
他のオプションは機能しません
(Tar/Gzip関連デフォルト値限定)
.
[directory] [directory] …
mode:簡単クイックバックアップ
設定値で、対象をバックアップし保存します
他のオプションは機能しません
.
test-modes:
*自動で、-vが付与されます
.
–test-file
mode:動作テスト用のファイルを生成します
–remove-test-file
mode:動作テスト用のファイルを削除します
–test-mount
mode:マウントの動作テストを行います
–test-available
mode:ディスクチェックの動作テストを行います
–test-upload
mode:アップロードの動作テストを行います
ダミーファイルが用いられます
–test-report
mode:レポートの動作テストを行います
.
???-modes:
.
no|none|pass|null|nurupo|hoge*|fuga*
mode:何もしません
color|colors|ansi
mode:設定用カラーサンプル表示
–fuck|*fuck*
mode:気分転換にご利用ください
–poop|*poop*|*shit*|*ass*|*unko*|*kuso*
mode:1つだけ何か混じってます
sl|ls
mode:special animation. *require “sl"
.
Zz. (¦3[▓▓] press “Q" to exit























ディスカッション
コメント一覧
まだ、コメントがありません