返回文章列表

Linux系統管理指令碼實務

本文介紹一系列 Linux 系統管理指令碼,涵蓋磁碟空間管理、使用者帳戶維護、程式管理、crontab 驗證等導向,並提供程式碼解析和執行說明,協助系統管理員提升工作效率和系統可靠性。文章也探討了 Python 網路爬蟲、API 呼叫、資料儲存、網頁管理及雲端運算自動化等主題,提供實務案例和程式碼範例。

系統管理 Linux

系統管理工作繁雜且重複性高,仰賴有效工具至關重要。本文提供一系列 Shell 指令碼,自動化處理磁碟空間檢查、使用者帳戶新增與刪除、程式終止及 crontab 設定驗證等日常任務,並搭配程式碼解析,讓系統管理員能快速上手,提升工作效率。同時,文章也涵蓋 Python 網路爬蟲與 API 實作,以及網頁管理的自動化技巧,例如損壞連結檢測和伺服器日誌分析,提供更全面的系統管理解決方案。此外,文章也介紹了雲端運算的自動化指令碼實務,包含 Dropbox 和 Google Drive 的同步與管理,協助讀者應對日趨複雜的 IT 環境。

系統管理:磁碟管理與使用者帳戶維護

在系統管理中,磁碟空間的管理和使用者帳戶的維護是兩個重要的任務。本篇文章將探討如何使用指令碼自動化這些任務,以提高系統管理的效率和安全性。

磁碟空間管理

檢查可用磁碟空間

檢查磁碟空間是系統管理中的一項基本任務。以下是一個簡單的指令碼,用於檢查檔案系統的可用空間:

#!/bin/bash

# 取得檔案系統的列表
df -h | awk '{print $1, $5, $6}' | while read filesystem used mountpoint
do
  # 檢查使用率是否超過80%
  if [ $(echo $used | cut -d '%' -f 1) -ge 80 ]; then
    echo "警告:$mountpoint 使用率已達 $used"
  fi
done

內容解密:

  1. df -h 命令:用於顯示檔案系統的磁碟使用情況,-h 引數表示以人類可讀的格式顯示(如 GB、MB 等)。
  2. awk '{print $1, $5, $6}' 命令:用於提取 df -h 輸出中的檔案系統名稱、使用率和掛載點。
  3. while 迴圈:遍歷每一行輸出,檢查使用率是否超過 80%。
  4. if 條件判斷:如果使用率超過 80%,則輸出警告訊息。

使用者帳戶維護

新增使用者帳戶

新增使用者帳戶是系統管理中的常見任務。以下是一個指令碼,用於新增使用者帳戶並設定初始密碼:

#!/bin/bash

# 設定新使用者名稱和初始密碼
username=$1
password=$2

# 新增使用者帳戶
useradd -m -s /bin/bash $username

# 設定初始密碼
echo "$username:$password" | chpasswd

echo "使用者 $username 已新增,初始密碼為 $password"

內容解密:

  1. useradd 命令:用於新增使用者帳戶,-m 引數表示建立家目錄,-s /bin/bash 表示設定預設 shell 為 Bash。
  2. chpasswd 命令:用於變更使用者密碼,從標準輸入讀取使用者名稱和密碼。
  3. $1$2 變數:表示指令碼的第一個和第二個命令列引數,即新使用者名稱和初始密碼。

使用者帳戶管理進階操作

暫停使用者帳戶

暫停使用者帳戶可以防止使用者登入系統。以下是一個指令碼,用於暫停指定的使用者帳戶:

#!/bin/bash

# 設定要暫停的使用者名稱
username=$1

# 暫停使用者帳戶
usermod -L $username

echo "使用者 $username 已暫停"

內容解密:

  1. usermod -L 命令:用於鎖定使用者帳戶,禁止使用者登入。

刪除使用者帳戶

刪除使用者帳戶可以徹底移除使用者的系統資源佔用。以下是一個指令碼,用於刪除指定的使用者帳戶及其家目錄:

#!/bin/bash

# 設定要刪除的使用者名稱
username=$1

# 刪除使用者帳戶及其家目錄
userdel -r $username

echo "使用者 $username 已刪除"

內容解密:

  1. userdel -r 命令:用於刪除使用者帳戶,-r 引數表示同時刪除使用者的家目錄。

進階系統管理指令碼實戰:自動化任務與網路應用

前言

在現代的IT環境中,系統管理員面臨著越來越複雜的挑戰。如何有效地管理和維護系統,確保其穩定性和安全性,是每個管理員都需要思考的問題。本文將介紹一系列進階的系統管理指令碼,涵蓋自動化任務、程式管理、備份與還原等主題,幫助讀者提升工作效率並增強系統的可靠性。

#47 根據名稱終止程式

程式碼解析

#!/bin/bash

# 根據名稱終止程式
kill_by_name() {
  for pid in $(ps aux | grep "$1" | grep -v grep | awk '{print $2}'); do
    kill -9 $pid
  done
}

# 主函式
main() {
  if [ $# -eq 0 ]; then
    echo "請提供程式名稱"
    exit 1
  fi
  
  kill_by_name "$1"
}

main "$@"

內容解密:

  1. 指令碼功能:此指令碼的主要功能是根據給定的程式名稱,查詢並終止相關的程式。
  2. kill_by_name函式:透過ps aux命令列出所有程式,使用grep篩選出與給定名稱匹配的程式,並排除grep自身。然後使用awk提取程式ID,最後透過kill -9強制終止這些程式。
  3. main函式:檢查是否提供了程式名稱引數,若未提供則提示並離開。呼叫kill_by_name函式執行終止操作。

#48 驗證使用者crontab設定

程式碼解析

#!/bin/bash

# 驗證使用者crontab設定
validate_crontab() {
  crontab -l | while read line; do
    # 解析crontab行,檢查其合法性
    if [[ $line =~ ^# ]]; then
      continue
    fi
    
    # 簡單的驗證邏輯,可根據需求擴充套件
    echo "驗證: $line"
  done
}

# 主函式
main() {
  validate_crontab
}

main

內容解密:

  1. 指令碼功能:此指令碼用於驗證當前使用者的crontab設定。
  2. validate_crontab函式:透過crontab -l列出當前使用者的crontab條目,並逐行讀取。忽略以#開頭的註解行,對其他行進行簡單的驗證(可根據需求擴充套件驗證邏輯)。
  3. main函式:呼叫validate_crontab執行驗證操作。
此圖示說明:
  1. 流程開始:首先讀取指令碼,判斷是否為自動化任務。
  2. 任務執行:如果是自動化任務,則執行相關操作。
  3. 結果檢查:檢查任務執行結果,根據成功或失敗記錄相應的日誌。
  4. 流程結束:最後結束整個流程。

隨著技術的發展,系統管理將越來越依賴於自動化和智慧化工具。未來,我們可以期待更多創新的指令碼和工具出現,以幫助管理員更好地管理和維護複雜的IT環境。

Python 網路爬蟲與API實作

在現代軟體開發中,網路爬蟲與API的應用變得越來越普遍。無論是資料收集、資料分析,還是自動化任務處理,這些技術都扮演著重要的角色。本文將探討如何使用Python進行網路爬蟲和API呼叫的實作。

網路爬蟲基礎

網路爬蟲是一種自動化程式,用於從網頁中提取資料。Python提供了多種函式庫來實作網路爬蟲,如requestsBeautifulSoup

使用Requests和BeautifulSoup

首先,我們需要安裝必要的函式庫:

pip install requests beautifulsoup4

下面是一個簡單的範例,展示如何使用requestsBeautifulSoup來抓取網頁內容:

import requests
from bs4 import BeautifulSoup

# 傳送HTTP請求
url = 'https://example.com'
response = requests.get(url)

# 解析HTML內容
soup = BeautifulSoup(response.text, 'html.parser')

# 提取標題
title = soup.title.text
print(title)

內容解密:

  1. requests.get(url):傳送GET請求到指定的URL,並取得伺服器的回應。
  2. BeautifulSoup(response.text, 'html.parser'):使用html.parser解析HTML內容。
  3. soup.title.text:提取網頁的標題文字。

API呼叫實作

API(應用程式介面)允許不同的軟體系統之間進行互動。Python可以輕鬆地呼叫各種API來取得或傳送資料。

使用Requests呼叫API

以下是一個呼叫GitHub API來取得使用者資訊的範例:

import requests

# GitHub使用者名稱
username = 'your_username'

# 傳送GET請求到GitHub API
url = f'https://api.github.com/users/{username}'
response = requests.get(url)

# 解析JSON回應
user_info = response.json()

# 列印使用者資訊
print(user_info)

內容解密:

  1. requests.get(url):向GitHub API傳送GET請求,取得指定使用者的資訊。
  2. response.json():將JSON格式的回應解析為Python字典。
  3. user_info:包含了使用者的詳細資訊,如名稱、公開倉函式庫數量等。

資料儲存與處理

抓取或取得的資料通常需要進一步處理和儲存。常見的做法是將資料儲存到資料函式庫或檔案中。

將資料儲存到CSV檔案

以下是一個將資料儲存到CSV檔案的範例:

import csv

# 假設data是我們要儲存的資料
data = [
    ['Name', 'Age'],
    ['Alice', 30],
    ['Bob', 25]
]

# 開啟檔案並寫入資料
with open('data.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)

內容解密:

  1. csv.writer(file):建立一個CSV寫入器。
  2. writer.writerows(data):將資料寫入CSV檔案。

隨著網路技術的不斷發展,網路爬蟲和API的應用場景將會越來越廣泛。未來,我們可以期待更多高效、智慧的資料抓取和分析工具的出現。同時,如何在遵守法律法規的前提下,使用這些技術也將是一個重要的課題。

參考資源

網頁管理技巧與網路伺服器管理實務

網頁管理自動化指令碼例項

自動化檢測內部損壞連結

在網站管理中,內部連結的管理是至關重要的一環。內部連結的損壞不僅會影響使用者經驗,也會對搜尋引擎最佳化(SEO)產生負面影響。以下是一個用於檢測網站內部損壞連結的自動化指令碼。

指令碼程式碼
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse

def check_broken_links(url):
    try:
        response = requests.get(url)
        soup = BeautifulSoup(response.text, 'html.parser')
        links = soup.find_all('a', href=True)
        broken_links = []

        for link in links:
            href = link['href']
            if href.startswith('http'):
                try:
                    result = requests.head(href)
                    if result.status_code >= 400:
                        broken_links.append(href)
                except requests.RequestException:
                    broken_links.append(href)
            else:
                absolute_url = urljoin(url, href)
                try:
                    result = requests.head(absolute_url)
                    if result.status_code >= 400:
                        broken_links.append(absolute_url)
                except requests.RequestException:
                    broken_links.append(absolute_url)

        return broken_links
    except requests.RequestException as e:
        print(f"Error checking {url}: {e}")
        return []

#### 內容解密:
此指令碼首先傳送GET請求到指定的URL並使用BeautifulSoup解析HTML內容它找出所有包含`href`屬性的`<a>`標籤接著檢查這些連結的有效性對於相對路徑的連結使用`urljoin`轉換為絕對路徑後再進行檢查如果連結傳回的HTTP狀態碼大於或等於400則被視為損壞連結

##### 如何執行指令碼
1. 將指令碼儲存為`.py`檔案
2. 安裝必要的函式庫:`requests``beautifulsoup4`。
3. 執行指令碼並提供要檢查的URL作為輸入

##### 執行結果
指令碼將輸出指定URL頁面中所有損壞的內部連結

#### 最佳化與擴充套件
- 可以擴充套件此指令碼使其遞迴檢查整個網站的所有頁面
- 增加對不同型別資源例如圖片CSS檔案的檢查

### 網路伺服器日誌分析

網路伺服器日誌包含了豐富的資訊用於瞭解伺服器的執行狀態訪客行為等以下是分析Apache伺服器`access_log`的例項

##### 指令碼程式碼
```python
import re

def analyze_access_log(file_path):
    with open(file_path, 'r') as file:
        logs = file.readlines()

    ip_pattern = re.compile(r'^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})')
    ip_counts = {}

    for log in logs:
        match = ip_pattern.match(log)
        if match:
            ip = match.group(1)
            ip_counts[ip] = ip_counts.get(ip, 0) + 1

    sorted_ip_counts = sorted(ip_counts.items(), key=lambda x: x[1], reverse=True)
    return sorted_ip_counts

#### 內容解密:
此指令碼讀取Apache的`access_log`檔案並使用正規表示式提取每個請求的IP地址它統計每個IP的出現次數並按次數降序排列輸出結果可用於分析訪客來源檢測可能的惡意存取模式

##### 如何執行指令碼
1. 將指令碼儲存為`.py`檔案
2. 指定Apache `access_log`檔案的路徑
3. 執行指令碼

##### 執行結果
指令碼將輸出按存取次數排序的IP地址列表

#### 最佳化與擴充套件
- 可以進一步分析這些IP的日誌提取更詳細的資訊如存取時間請求資源等
- 結合地理位置資訊將IP轉換為實際的位置以獲得更直觀的訪客來源資訊

## 雲端運算與自動化指令碼實務

### 前言
在現今的數位時代雲端運算已成為企業與個人不可或缺的一部分如何有效利用雲端服務並自動化相關任務是提升工作效率的關鍵本文將探討如何透過指令碼實作雲端運算的自動化並介紹相關的實務案例

### 自動化 Dropbox 運作

#### 保持 Dropbox 執行

為了確保 Dropbox 持續執行我們可以建立一個簡單的指令碼來監控其狀態並在必要時重新啟動它

```bash
#!/bin/bash

# 檢查 Dropbox 是否正在執行
if ! pgrep -x "Dropbox" > /dev/null; then
    # 如果 Dropbox 未執行,則啟動它
    echo "Dropbox 未執行,正在啟動..."
    dropbox start
else
    echo "Dropbox 已在執行。"
fi

內容解密:

  1. pgrep -x "Dropbox":使用 pgrep 命令檢查是否有名為 “Dropbox” 的程式正在執行。-x 選項確保完全匹配程式名稱。
  2. dropbox start:如果 Dropbox 未執行,此命令將啟動 Dropbox 服務。
  3. 邏輯判斷:指令碼透過檢查程式是否存在來決定是否需要啟動 Dropbox。

同步 Dropbox

為了確保檔案在不同裝置間同步,我們可以編寫一個指令碼來手動觸發 Dropbox 同步。

#!/bin/bash

# 觸發 Dropbox 同步
dropbox sync start
echo "Dropbox 同步已啟動。"

內容解密:

  1. dropbox sync start:此命令手動觸發 Dropbox 的同步功能。
  2. 同步邏輯:透過呼叫 Dropbox 的同步命令,確保本地檔案與雲端儲存保持一致。

從雲端照片流建立投影片

我們可以建立一個指令碼,從雲端照片流中提取圖片並生成投影片。

#!/bin/bash

# 定義照片流目錄
PHOTO_DIR="/path/to/your/photos"

# 生成投影片
slideshow_generator "$PHOTO_DIR"
echo "投影片已生成。"

內容解密:

  1. PHOTO_DIR="/path/to/your/photos":定義存放照片的目錄路徑。
  2. slideshow_generator "$PHOTO_DIR":呼叫一個假設的 slideshow_generator 命令來生成投影片。
  3. 自定義擴充套件:您可以根據實際需求替換 slideshow_generator 為合適的工具或指令碼。

與 Google Drive 同步檔案

為了與 Google Drive 同步檔案,我們可以使用 gdrive 命令列工具。

#!/bin/bash

# 同步本地檔案到 Google Drive
gdrive sync upload "/path/to/local/file" "Google Drive Folder ID"
echo "檔案已同步到 Google Drive。"

內容解密:

  1. gdrive sync upload:使用 gdrive 工具將本地檔案上傳到指定的 Google Drive 資料夾。
  2. 引陣列態:需要替換 "/path/to/local/file" 為本地檔案路徑,並將 "Google Drive Folder ID" 替換為目標資料夾的 ID。