Linux Shell腳本實(shí)現(xiàn)文件備份功能
引言
在現(xiàn)代運(yùn)維與開(kāi)發(fā)工作中,數(shù)據(jù)安全是生命線。無(wú)論是個(gè)人筆記、項(xiàng)目源碼還是生產(chǎn)數(shù)據(jù)庫(kù),一旦丟失都可能造成不可逆的損失。Linux Shell 腳本作為系統(tǒng)管理的“瑞士軍刀”,天然適合承擔(dān)自動(dòng)化備份任務(wù)。本文將帶你從零構(gòu)建一個(gè)功能完備、穩(wěn)定可靠的備份腳本,并結(jié)合 Java 程序?qū)崿F(xiàn)跨語(yǔ)言調(diào)度與監(jiān)控,打造企業(yè)級(jí)備份解決方案。
為什么選擇 Shell 做備份?
Shell 是 Linux/Unix 系統(tǒng)的原生腳本語(yǔ)言,具有以下無(wú)可替代的優(yōu)勢(shì):
- ? 無(wú)需額外依賴:系統(tǒng)自帶,開(kāi)箱即用。
- ? 高效執(zhí)行:直接調(diào)用系統(tǒng)命令(如
cp,tar,rsync),性能優(yōu)異。 - ? 靈活組合:可輕松集成
cron、find、gzip等工具。 - ? 權(quán)限控制強(qiáng):支持 root 權(quán)限操作,適用于全系統(tǒng)備份。
- ? 日志與通知友好:可直接輸出到 syslog 或郵件系統(tǒng)。
第一步:基礎(chǔ)備份腳本搭建
我們從最簡(jiǎn)單的單文件備份開(kāi)始,逐步迭代功能。
#!/bin/bash # simple_backup.sh - 最簡(jiǎn)備份腳本 v0.1 SOURCE_FILE="/home/user/myproject/config.json" BACKUP_DIR="/home/user/backups" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_FILE="$BACKUP_DIR/config_$TIMESTAMP.json" # 創(chuàng)建備份目錄(如果不存在) mkdir -p "$BACKUP_DIR" # 執(zhí)行復(fù)制 cp "$SOURCE_FILE" "$BACKUP_FILE" echo "? 備份完成: $BACKUP_FILE"
這個(gè)腳本雖然簡(jiǎn)單,但已具備核心要素:
- 時(shí)間戳命名 → 避免覆蓋
- 自動(dòng)創(chuàng)建目錄 → 提高健壯性
- 輸出提示 → 便于人工確認(rèn)
第二步:支持目錄打包壓縮
現(xiàn)實(shí)場(chǎng)景中,我們往往需要備份整個(gè)項(xiàng)目目錄,這時(shí)候 tar + gzip 是黃金搭檔。
#!/bin/bash
# dir_backup.sh - 目錄壓縮備份 v1.0
PROJECT_DIR="/home/user/myproject"
BACKUP_ROOT="/mnt/backups"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
ARCHIVE_NAME="myproject_$TIMESTAMP.tar.gz"
BACKUP_PATH="$BACKUP_ROOT/$ARCHIVE_NAME"
mkdir -p "$BACKUP_ROOT"
# 使用 tar + gzip 打包壓縮
tar -czf "$BACKUP_PATH" -C "$(dirname "$PROJECT_DIR")" "$(basename "$PROJECT_DIR")"
if [ $? -eq 0 ]; then
echo "?? 成功備份目錄至: $BACKUP_PATH"
ls -lh "$BACKUP_PATH"
else
echo "? 備份失?。≌?qǐng)檢查源路徑是否存在。"
exit 1
fi關(guān)鍵參數(shù)說(shuō)明:
-c:創(chuàng)建歸檔-z:使用 gzip 壓縮-f:指定輸出文件名-C:切換工作目錄,避免打包絕對(duì)路徑
注意:-C 參數(shù)非常重要!它確保解壓時(shí)不會(huì)覆蓋系統(tǒng)根目錄。
第三步:增加配置文件支持
硬編碼路徑不利于復(fù)用。我們引入 .ini 格式的配置文件,讓腳本更具通用性。
config.ini
[backup] source_dir = /home/user/myproject backup_dir = /mnt/backups max_backups = 5 compress = true
enhanced_backup.sh
#!/bin/bash
# enhanced_backup.sh - 支持配置文件的備份腳本 v2.0
CONFIG_FILE="./config.ini"
# 讀取配置(簡(jiǎn)易版,不依賴外部工具)
get_config() {
section=$1
key=$2
result=$(awk -F ' *= *' "/\[$section\]/,/\[.*\]/{if (\$1==\"$key\") print \$2}" "$CONFIG_FILE")
echo "$result"
}
SOURCE_DIR=$(get_config "backup" "source_dir")
BACKUP_DIR=$(get_config "backup" "backup_dir")
MAX_BACKUPS=$(get_config "backup" "max_backups")
COMPRESS=$(get_config "backup" "compress")
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BASENAME=$(basename "$SOURCE_DIR")
if [ "$COMPRESS" = "true" ]; then
ARCHIVE_NAME="${BASENAME}_${TIMESTAMP}.tar.gz"
BACKUP_PATH="$BACKUP_DIR/$ARCHIVE_NAME"
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_PATH" -C "$(dirname "$SOURCE_DIR")" "$BASENAME"
else
BACKUP_PATH="$BACKUP_DIR/${BASENAME}_${TIMESTAMP}"
mkdir -p "$BACKUP_PATH"
cp -r "$SOURCE_DIR" "$BACKUP_PATH"
fi
# 清理舊備份(保留最新 N 個(gè))
cd "$BACKUP_DIR" || exit 1
ls -t | tail -n +$((MAX_BACKUPS + 1)) | xargs -r rm -rf
echo "?? 備份成功: $BACKUP_PATH"
du -sh "$BACKUP_PATH"
第四步:增量備份與 rsync 同步
對(duì)于大文件或頻繁變更的目錄,全量備份效率低下。此時(shí)應(yīng)使用 rsync 實(shí)現(xiàn)增量同步。
#!/bin/bash
# incremental_backup.sh - 增量備份腳本 v3.0
SOURCE="/home/user/photos"
DEST="/backup/photos_$(date +%Y%m%d)"
# 使用 rsync 進(jìn)行增量同步
rsync -av --delete "$SOURCE/" "$DEST/"
# -a: archive mode (保留權(quán)限、時(shí)間等)
# -v: verbose 輸出詳情
# --delete: 刪除目標(biāo)端多余文件(保持完全一致)
if [ $? -eq 0 ]; then
echo "?? 增量同步完成: $DEST"
else
echo "?? 同步過(guò)程中出現(xiàn)錯(cuò)誤,請(qǐng)檢查網(wǎng)絡(luò)或權(quán)限。"
fi
第五步:定時(shí)任務(wù)集成(crontab)
再?gòu)?qiáng)大的腳本,不自動(dòng)運(yùn)行也是擺設(shè)。Linux 的 cron 是最佳搭檔。
編輯定時(shí)任務(wù):
crontab -e
添加如下行(每天凌晨 2 點(diǎn)執(zhí)行):
0 2 * * * /path/to/your/backup_script.sh >> /var/log/backup.log 2>&1
你也可以設(shè)置更復(fù)雜的策略:
# 工作日每小時(shí)備份一次 0 * * * 1-5 /opt/scripts/hourly_backup.sh # 周末凌晨全量備份 0 3 * * 6,0 /opt/scripts/full_backup.sh
查看當(dāng)前用戶的 cron 任務(wù):
crontab -l
數(shù)據(jù)可視化:備份狀態(tài)監(jiān)控圖表
為了直觀展示備份歷史和成功率,我們可以生成一個(gè)簡(jiǎn)單的統(tǒng)計(jì)報(bào)告。下面使用 mermaid 圖表在 Markdown 中渲染備份趨勢(shì):
渲染錯(cuò)誤: Mermaid 渲染失敗: Parse error on line 5: ... section 成功備份 2024-06-01 :done, ----------------------^ Expecting 'EOF', 'SPACE', 'NL', 'weekday_monday', 'weekday_tuesday', 'weekday_wednesday', 'weekday_thursday', 'weekday_friday', 'weekday_saturday', 'weekday_sunday', 'weekend_friday', 'weekend_saturday', 'dateFormat', 'inclusiveEndDates', 'topAxis', 'axisFormat', 'tickInterval', 'excludes', 'includes', 'todayMarker', 'title', 'acc_title', 'acc_descr', 'acc_descr_multiline_value', 'section', 'taskTxt', 'click', got 'date'
此圖可用于內(nèi)部 Wiki 或運(yùn)維看板,一目了然掌握系統(tǒng)健康度。
第六步:失敗告警與郵件通知
無(wú)人值守的備份必須有告警機(jī)制。我們可以借助 mail 或 sendmail 發(fā)送通知。
#!/bin/bash
# alert_backup.sh - 帶郵件告警的備份腳本
EMAIL="admin@company.com"
SUBJECT="【備份告警】$(hostname) - $(date)"
backup_and_alert() {
# 執(zhí)行備份命令
/path/to/real_backup.sh 2>&1
local exit_code=$?
if [ $exit_code -ne 0 ]; then
echo "?? 備份失??!退出碼: $exit_code" | mail -s "$SUBJECT" "$EMAIL"
echo "?? 告警郵件已發(fā)送至 $EMAIL"
else
echo "? 備份成功,無(wú)需告警。"
fi
return $exit_code
}
backup_and_alert
如果你沒(méi)有配置本地郵件服務(wù),也可以使用 curl 調(diào)用第三方 API(如 Mailgun、SendGrid):
curl -s --user 'api:YOUR_API_KEY' \
https://api.mailgun.net/v3/YOUR_DOMAIN/messages \
-F from='Backup Bot <backup@yourdomain.com>' \
-F to="$EMAIL" \
-F subject="$SUBJECT" \
-F text="備份任務(wù)執(zhí)行失敗,請(qǐng)立即檢查!"
第七步:遠(yuǎn)程備份與云存儲(chǔ)集成
除了本地磁盤,現(xiàn)代備份方案必須考慮異地容災(zāi)。我們可以將備份文件上傳至云存儲(chǔ)(如 AWS S3、阿里云 OSS)。
以 AWS CLI 為例:
#!/bin/bash
# cloud_backup.sh - 上傳至 S3 的備份腳本
BUCKET_NAME="mycompany-backups"
LOCAL_BACKUP="/mnt/backups/latest.tar.gz"
S3_PATH="s3://$BUCKET_NAME/$(date +%Y/%m)/latest_$(date +%Y%m%d).tar.gz"
aws s3 cp "$LOCAL_BACKUP" "$S3_PATH" --storage-class STANDARD_IA
if [ $? -eq 0 ]; then
echo "?? 文件已成功上傳至 S3: $S3_PATH"
else
echo "? 上傳失敗,請(qǐng)檢查 AWS 憑證或網(wǎng)絡(luò)連接。"
fi
第八步:?jiǎn)卧獪y(cè)試與異常處理
工業(yè)級(jí)腳本必須包含錯(cuò)誤處理和自檢邏輯。
#!/bin/bash
# robust_backup.sh - 健壯型備份腳本 v4.0
set -euo pipefail # 嚴(yán)格模式:遇到錯(cuò)誤/未定義變量/管道失敗時(shí)立即退出
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >&2
}
die() {
log "? ERROR: $*"
exit 1
}
# 參數(shù)校驗(yàn)
[ -z "$SOURCE_DIR" ] && die "SOURCE_DIR 未設(shè)置"
[ ! -d "$SOURCE_DIR" ] && die "源目錄不存在: $SOURCE_DIR"
[ -z "$BACKUP_DIR" ] && die "BACKUP_DIR 未設(shè)置"
# 磁盤空間檢查
required_space=$(du -sb "$SOURCE_DIR" | cut -f1)
available_space=$(df -B1 "$BACKUP_DIR" | tail -1 | awk '{print $4}')
if [ "$available_space" -lt "$required_space" ]; then
die "目標(biāo)磁盤空間不足!需要: $required_space, 可用: $available_space"
fi
# 執(zhí)行備份...
log "開(kāi)始備份 $SOURCE_DIR → $BACKUP_DIR"
# ... 實(shí)際備份邏輯 ...
log "? 備份任務(wù)成功完成"
第九步:Java 調(diào)度器聯(lián)動(dòng)實(shí)戰(zhàn)
雖然 Shell 強(qiáng)大,但在復(fù)雜業(yè)務(wù)系統(tǒng)中,我們常需通過(guò) Java 應(yīng)用觸發(fā)或監(jiān)控備份任務(wù)。下面是一個(gè) Spring Boot 示例:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.InputStreamReader;
@Component
public class BackupScheduler {
@Scheduled(cron = "0 0 2 * * ?") // 每天凌晨2點(diǎn)
public void triggerDailyBackup() {
try {
ProcessBuilder pb = new ProcessBuilder("/opt/scripts/daily_backup.sh");
pb.redirectErrorStream(true); // 合并 stderr 和 stdout
Process process = pb.start();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream())
);
String line;
while ((line = reader.readLine()) != null) {
System.out.println("[Backup Script]: " + line);
}
int exitCode = process.waitFor();
if (exitCode == 0) {
System.out.println("? Java調(diào)度:備份任務(wù)成功完成");
} else {
System.err.println("? Java調(diào)度:備份腳本執(zhí)行失敗,退出碼:" + exitCode);
// 可在此處集成企業(yè)微信/釘釘告警
}
} catch (Exception e) {
System.err.println("?? Java調(diào)度異常:" + e.getMessage());
e.printStackTrace();
}
}
}Maven 依賴(如需異步或高級(jí)調(diào)度):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>第十步:備份日志分析與報(bào)表生成
我們可以編寫一個(gè) Java 工具類,定期分析備份日志,生成 HTML 報(bào)表。
import java.nio.file.*;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
public class BackupLogAnalyzer {
public static void generateReport(String logPath, String outputPath) {
try {
List<String> lines = Files.readAllLines(Paths.get(logPath));
Map<LocalDate, Long> successByDay = new TreeMap<>();
Map<LocalDate, Long> failureByDay = new TreeMap<>();
for (String line : lines) {
if (line.contains("?")) {
LocalDate date = extractDate(line);
successByDay.merge(date, 1L, Long::sum);
} else if (line.contains("?")) {
LocalDate date = extractDate(line);
failureByDay.merge(date, 1L, Long::sum);
}
}
StringBuilder html = new StringBuilder();
html.append("<html><head><title>備份日?qǐng)?bào)表</title></head><body>");
html.append("<h1>?? 近期備份統(tǒng)計(jì)</h1><table border='1'>");
html.append("<tr><th>日期</th><th>成功次數(shù)</th><th>失敗次數(shù)</th></tr>");
for (LocalDate date : successByDay.keySet()) {
long success = successByDay.getOrDefault(date, 0L);
long failure = failureByDay.getOrDefault(date, 0L);
html.append(String.format(
"<tr><td>%s</td><td>%d</td><td>%d</td></tr>",
date, success, failure
));
}
html.append("</table></body></html>");
Files.write(Paths.get(outputPath), html.toString().getBytes());
System.out.println("?? 報(bào)表已生成:" + outputPath);
} catch (Exception e) {
e.printStackTrace();
}
}
private static LocalDate extractDate(String line) {
// 假設(shè)日志格式:[2024-06-01 02:00:00] ? 備份完成...
int start = line.indexOf('[') + 1;
int end = line.indexOf(' ', start);
String dateStr = line.substring(start, end);
return LocalDate.parse(dateStr);
}
}調(diào)用方式:
BackupLogAnalyzer.generateReport(
"/var/log/backup.log",
"/var/www/html/backup_report.html"
);第十一步:多環(huán)境適配(開(kāi)發(fā)/測(cè)試/生產(chǎn))
企業(yè)環(huán)境中,同一套腳本需適應(yīng)不同部署環(huán)境。我們可以通過(guò)環(huán)境變量或參數(shù)注入實(shí)現(xiàn)。
#!/bin/bash
# multi_env_backup.sh
ENV=${BACKUP_ENV:-development} # 默認(rèn) development
CONFIG_FILE="config.$ENV.ini"
if [ ! -f "$CONFIG_FILE" ]; then
echo "? 配置文件不存在: $CONFIG_FILE"
exit 1
fi
# 加載對(duì)應(yīng)環(huán)境配置
source "$CONFIG_FILE"
case "$ENV" in
production)
echo "?? 生產(chǎn)環(huán)境備份啟動(dòng)..."
MAX_BACKUPS=30
;;
staging)
echo "?? 預(yù)發(fā)布環(huán)境備份啟動(dòng)..."
MAX_BACKUPS=10
;;
development)
echo "?? 開(kāi)發(fā)環(huán)境備份啟動(dòng)..."
MAX_BACKUPS=5
;;
*)
echo "?? 未知環(huán)境: $ENV"
exit 1
;;
esac
# ... 執(zhí)行備份邏輯 ...
對(duì)應(yīng)的配置文件:
config.production.ini
source_dir=/opt/app/data backup_dir=/mnt/nas/prod_backups compress=true
config.development.ini
source_dir=/home/dev/project backup_dir=/tmp/dev_backups compress=false
第十二步:加密與安全性增強(qiáng)
敏感數(shù)據(jù)備份必須加密。我們可以使用 gpg 或 openssl。
#!/bin/bash # encrypted_backup.sh PASSPHRASE="your-secret-passphrase" # 生產(chǎn)環(huán)境應(yīng)從密鑰管理服務(wù)獲取 BACKUP_FILE="/tmp/data_$(date +%Y%m%d).tar.gz" ENCRYPTED_FILE="$BACKUP_FILE.enc" # 1. 打包壓縮 tar -czf "$BACKUP_FILE" /path/to/data # 2. 使用 openssl 加密 openssl enc -aes-256-cbc -salt -in "$BACKUP_FILE" -out "$ENCRYPTED_FILE" -k "$PASSPHRASE" # 3. 安全刪除原始文件 shred -u "$BACKUP_FILE" echo "?? 備份文件已加密并保存為: $ENCRYPTED_FILE"
解密命令:
openssl enc -d -aes-256-cbc -in backup.tar.gz.enc -out backup.tar.gz -k "your-secret-passphrase"
生產(chǎn)建議:使用 HashiCorp Vault 或 AWS KMS 管理密鑰,而非硬編碼。
第十三步:Docker 環(huán)境下的備份策略
容器化時(shí)代,數(shù)據(jù)卷(Volume)的備份尤為重要。
#!/bin/bash
# docker_volume_backup.sh
CONTAINER_NAME="mysql_db"
VOLUME_NAME="db_data"
BACKUP_DIR="/backups/mysql"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
# 1. 進(jìn)入容器執(zhí)行 mysqldump
docker exec "$CONTAINER_NAME" mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" --all-databases > "$BACKUP_DIR/all_dbs_$TIMESTAMP.sql"
# 2. 壓縮
gzip "$BACKUP_DIR/all_dbs_$TIMESTAMP.sql"
# 3. 備份整個(gè) volume(可選)
docker run --rm \
-v "$VOLUME_NAME:/volume" \
-v "$BACKUP_DIR:/backup" \
alpine tar -czf "/backup/volume_${TIMESTAMP}.tar.gz" -C /volume .
echo "?? Docker 數(shù)據(jù)卷備份完成"
第十四步:合規(guī)性與審計(jì)追蹤
金融、醫(yī)療等行業(yè)需滿足 GDPR、HIPAA 等法規(guī),要求備份可審計(jì)。
我們?cè)谀_本中加入審計(jì)日志:
AUDIT_LOG="/var/log/backup_audit.log"
audit_log() {
echo "$(date '+%Y-%m-%d %H:%M:%S'),$USER,$(hostname),$1,$2" >> "$AUDIT_LOG"
}
# 在關(guān)鍵操作前后調(diào)用
audit_log "START" "/home/user/docs"
# ... 執(zhí)行備份 ...
audit_log "SUCCESS" "/home/user/docs"
生成的審計(jì)日志示例:
2024-06-01 02:00:01,root,server01,START,/home/user/docs 2024-06-01 02:00:45,root,server01,SUCCESS,/home/user/docs 2024-06-02 02:00:02,root,server01,START,/home/user/docs 2024-06-02 02:00:51,root,server01,FAILED,/home/user/docs
第十五步:交互式備份工具(進(jìn)階)
為方便非技術(shù)人員使用,我們可以構(gòu)建一個(gè)帶菜單的交互式腳本:
#!/bin/bash
# interactive_backup.sh
show_menu() {
clear
echo "??? 文件備份管理系統(tǒng) v1.0"
echo "========================="
echo "1) 備份文檔目錄"
echo "2) 備份圖片目錄"
echo "3) 查看備份歷史"
echo "4) 恢復(fù)最近備份"
echo "5) 退出"
echo
read -p "請(qǐng)選擇操作 (1-5): " choice
}
while true; do
show_menu
case $choice in
1)
./backup_docs.sh
read -p "按回車鍵返回主菜單..."
;;
2)
./backup_photos.sh
read -p "按回車鍵返回主菜單..."
;;
3)
ls -lt /backups/ | head -10
read -p "按回車鍵返回主菜單..."
;;
4)
echo "正在恢復(fù)最近的文檔備份..."
# 恢復(fù)邏輯
read -p "按回車鍵返回主菜單..."
;;
5)
echo "?? 感謝使用,再見(jiàn)!"
break
;;
*)
echo "? 無(wú)效選擇,請(qǐng)輸入 1-5"
sleep 2
;;
esac
done
總結(jié):構(gòu)建企業(yè)級(jí)備份體系的 7 大原則
- 自動(dòng)化 —— 無(wú)人值守,定時(shí)執(zhí)行
- 可驗(yàn)證 —— 每次備份后校驗(yàn)完整性
- 可恢復(fù) —— 定期演練恢復(fù)流程
- 異地多副本 —— 至少 3 副本,2 種介質(zhì),1 份異地
- 加密安全 —— 敏感數(shù)據(jù)必須加密存儲(chǔ)
- 監(jiān)控告警 —— 失敗立即通知責(zé)任人
- 文檔化 —— 操作手冊(cè)、恢復(fù)步驟清晰可查
下一步:擁抱 DevOps 與 GitOps
現(xiàn)代備份不應(yīng)孤立存在。將其納入 CI/CD 流水線,配合基礎(chǔ)設(shè)施即代碼(IaC),才能實(shí)現(xiàn)真正的“韌性架構(gòu)”。
例如,在 Terraform 中聲明備份策略:
resource "aws_backup_plan" "daily" {
name = "Daily-Backups"
rule {
rule_name = "Daily-Rule"
target_vault_name = aws_backup_vault.main.name
schedule = "cron(0 2 * * ? *)"
lifecycle {
delete_after = 30
}
}
}
結(jié)語(yǔ)
備份不是“有了就行”,而是“隨時(shí)能用才叫備份”。通過(guò)本文的 Shell 腳本 + Java 聯(lián)動(dòng)方案,你可以構(gòu)建出適應(yīng)中小型企業(yè)需求的自動(dòng)化備份系統(tǒng)。記?。?strong>最好的備份策略,是在災(zāi)難發(fā)生前就已經(jīng)驗(yàn)證過(guò)恢復(fù)流程的策略。
現(xiàn)在就開(kāi)始行動(dòng)吧 —— 今天的一行腳本,可能是明天拯救項(xiàng)目的救命稻草。
以上就是Linux Shell腳本實(shí)現(xiàn)文件備份功能的詳細(xì)內(nèi)容,更多關(guān)于Linux Shell腳本文件備份的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Shell腳本傳遞參數(shù)的4種方式實(shí)例說(shuō)明
Shell腳本是一種命令語(yǔ)言,可以用于自動(dòng)化執(zhí)行各種任務(wù),在腳本中,我們可以通過(guò)參數(shù)來(lái)傳遞信息,本文將介紹如何在shell腳本中傳遞參數(shù),包括位置參數(shù)、特殊變量、環(huán)境變量和命名參數(shù),需要的朋友可以參考下2023-06-06
利用shell刪除數(shù)據(jù)表中指定信息和字段對(duì)應(yīng)的文件
這篇文章主要介紹了利用shell刪除數(shù)據(jù)表中指定信息和字段對(duì)應(yīng)的文件,需要的朋友可以參考下2014-04-04
詳解Linux Shell 實(shí)現(xiàn)一個(gè)獲取任意位數(shù)的隨機(jī)密碼的腳本
這篇文章主要介紹了詳解Linux Shell 實(shí)現(xiàn)一個(gè)獲取任意位數(shù)的隨機(jī)密碼的腳本的相關(guān)資料,本文提供實(shí)現(xiàn)方法及實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-08-08
用于檢測(cè)進(jìn)程的shell腳本代碼小結(jié)
本文介紹一段shell腳本,它可以檢測(cè)某進(jìn)程或某服務(wù)是否正在運(yùn)行,然后以郵件通知。有需要的朋友參考下2013-11-11
Linux環(huán)境下tcpdump網(wǎng)絡(luò)協(xié)議抓包與解析
這篇文章主要為大家介紹了Linux環(huán)境下tcpdump網(wǎng)絡(luò)協(xié)議抓包與解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09

