CMD Master
ब्लॉग पर वापस जाएं
•अद्यतन•Arnošt Havelka

tar के साथ सुरक्षित Bash backup script कैसे लिखें

ऐसी Bash backup script बनाएँ जो source जाँचे, overwrite रोके, partial archive हटाए और tar file verify करे।

इंटरएक्टिव पाठ शुरू करें
tar के साथ सुरक्षित Bash backup script कैसे लिखें

उपयोगी backup script को missing source अस्वीकार करना चाहिए, destination को source के बाहर रखना चाहिए, पुराने archive को चुपचाप overwrite नहीं करना चाहिए, failure के बाद partial output हटाना चाहिए और success बताने से पहले archive जाँचना चाहिए। नीचे का learning example इन्हीं guardrails के साथ compressed tar archive बनाता है। यह पूर्ण backup system नहीं है। Bash scripting lesson में इसके हिस्सों का अभ्यास किया जा सकता है।

Source और destination साफ़-साफ़ तय करें

इसे backup.sh नाम से सहेजें:

#!/usr/bin/env bash
set -euo pipefail

source_dir="${1:-$HOME/data}"
backup_dir="${2:-$HOME/backups}"

if [[ ! -d "$source_dir" ]]; then
  printf 'Source directory not found: %s\n' "$source_dir" >&2
  exit 1
fi

mkdir -p "$backup_dir"

source_parent=$(dirname "$source_dir")
source_name=$(basename "$source_dir")
timestamp=$(date '+%Y%m%d-%H%M%S')
archive="$backup_dir/${source_name}-${timestamp}.tar.gz"
partial="$archive.partial"

if [[ -e "$archive" || -e "$partial" ]]; then
  printf 'Backup destination already exists: %s\n' "$archive" >&2
  exit 1
fi

trap 'rm -f "$partial"' EXIT
tar -czf "$partial" -C "$source_parent" "$source_name"
tar -tzf "$partial" >/dev/null
mv "$partial" "$archive"
trap - EXIT

printf 'Backup created: %s\n' "$archive"

पहला argument source directory और दूसरा archive directory चुनता है। Arguments न देने पर $HOME/data तथा $HOME/backups इस्तेमाल होते हैं। Backup directory को source के बाहर रखें, ताकि script अपने ही output को archive न करे।

Safety checks समझें

set -euo pipefail इस सरल sequence को unhandled command failure, unset variable या pipeline failure पर रोकता है। Expected failures को फिर भी अलग से जाँचना चाहिए।

Directory test source न मिलने पर tar से पहले रुकता है। Timestamp एक fixed name दोबारा इस्तेमाल होने से रोकता है और existence check same-second collision अस्वीकार करता है। Script पहले .partial path लिखता है। Failure पर EXIT trap partial file हटाता है। Readable archive ही final name पाता है।

tar में -C क्यों है

tar -czf "$partial" -C "$source_parent" "$source_name"

Options create (c), gzip compress (z) और अगली file में write (f) करते हैं। -C archive operation के लिए directory बदलता है, इसलिए absolute source path store नहीं होता।

Archive structure जाँचें:

tar -tzf "$archive"

यह बताता है कि tar archive पढ़ सकता है, लेकिन हर file के current होने या restore सफल होने का प्रमाण नहीं है।

Script और restore test चलाएँ

bash -n backup.sh
bash backup.sh "$HOME/data" "$HOME/backups"

फिर temporary directory में restore करें:

restore_dir=$(mktemp -d)
tar -xzf "$HOME/backups/data-YYYYMMDD-HHMMSS.tar.gz" -C "$restore_dir"
find "$restore_dir" -type f

Example archive name को script के output से बदलें। वास्तविक backup plan को independent destination, retention rules, monitoring, protected credentials और नियमित restore tests भी चाहिए।

Shebang या permissions के लिए पहली Bash script और archive अभ्यास के लिए tar lesson देखें। GNU tar manual पूरा व्यवहार बताता है।

संदर्भ

ये दस्तावेज़ लिंक इस लेख में उपयोग किए गए कमांड के लिए आधिकारिक विवरण प्रदान करते हैं।

अगला

Bash ओरिएंटेशन: CD लूप

चाइल्ड और पैरेंट डायरेक्टरी मूवमेंट का अभ्यास तब तक करें जब तक कि पाथ में बदलाव स्वचालित न लगने लगे।