Python là ngôn ngữ lập trình tuyệt vời tự động hóa tác vụ quản trị hệ thống trên Linux. Với thư viện đa dạng, nhiều trong số đó cải thiện hiệu quả các tác vụ khác nhau. Sử dụng các ví dụ dưới đây, bạn dễ dàng chạy lệnh hệ thống Linux, làm việc với file và thư mục, thực hiện tác vụ mạng và tự động hóa quy trình xác thực chỉ trong vài giây.
Python là gì?
Python được mô tả tốt nhất là ngôn ngữ lập trình đa mục đích. Được phát triển bởi nhà khoa học máy tính người Hà Lan Guido van Rossum cuối thập niên 1980 và đầu 1990 để là ngôn ngữ lập trình kiểu động (dynamically-typed) và kế thừa ngôn ngữ "ABC".
Ngày nay nó được coi là một trong những ngôn ngữ lập trình phổ biến nhất thế giới, với trường hợp sử dụng từ phát triển web đến toán học phức tạp và tính toán khoa học. Cũng được trân trọng vì cú pháp thanh lịch và dễ học tương đối.
Cài đặt Python trên Linux
Nhiều bản phân phối Linux đã cài sẵn Python mặc định. Kiểm tra xem hệ thống có Python 3 không bằng lệnh python3 với cờ --version:
python3 --version
Nếu Python đã cài, lệnh hiển thị phiên bản cấu hình Python.
Cài Python trên Ubuntu và Debian:
sudo apt update && sudo apt upgrade -y sudo apt install python3.10
Thay vào đó, Python cũng tải được dưới dạng file ".tgz" hoặc ".xz".
Sử dụng module "os"
Một trong những thư viện Python tốt nhất cho quản trị viên hệ thống Linux là module "os". Dùng nó tự động hóa nhiều loại tác vụ khác nhau, như xử lý thư mục và file. Nó cũng chạy lệnh hệ thống.
Ví dụ, dùng module tạo thư mục mới:
# Import module OS
import os
# Tên thư mục mới
dir_name = "example"
try:
# Tạo thư mục mới
os.mkdir(dir_name)
# In kết quả, nếu thư mục tạo thành công
print(f"Directory '{dir_name}' created successfully")
# In kết quả, nếu thư mục đã tồn tại
except FileExistsError:
print(f"Directory '{dir_name}' already exists")
Cũng xóa thư mục bằng module:
# Import module OS
import os
# Tên thư mục cần xóa
dir_name = "example"
try:
# Xóa thư mục
os.rmdir(dir_name)
# In kết quả, nếu xóa thành công
print(f"Directory '{dir_name}' deleted successfully")
# In kết quả, nếu thư mục không tồn tại
except FileNotFoundError:
print(f"Directory '{dir_name}' doesn't exist")
Đổi tên file và thư mục:
# Import module OS
import os
# Tên hiện tại của thư mục hoặc file
current_name = "example"
new_name = "example2.0"
try:
# Đổi tên thư mục hoặc file
content = os.rename(current_name, new_name)
# In nội dung thư mục
print(f"Directory/File '{current_name}' was successfully renamed to '{new_name}'")
# In thông báo lỗi, nếu thư mục hoặc file không tồn tại
except FileNotFoundError:
print(f"Directory/File '{current_name}' doesn't exist")
File dễ dàng xóa bằng module:
# Import module OS
import os
# Tên file cần xóa
file_name = "example.txt"
try:
# Xóa file
os.remove(file_name)
# In kết quả, nếu xóa thành công
print(f"File '{file_name}' deleted successfully")
# In kết quả, nếu file không tồn tại
except FileNotFoundError:
print(f"File '{file_name}' doesn't exist")
Thư mục làm việc hiện tại dễ dàng in ra:
# Import module OS
import os
try:
# Lấy thư mục làm việc hiện tại
cwd = os.getcwd()
# In tên thư mục làm việc hiện tại
print(cwd)
# Nếu lỗi xảy ra, in ra
except:
print("An error occurred")
Nội dung thư mục, như file và thư mục con, kiểm tra dễ dàng:
# Import module OS
import os
# Tên thư mục
dir_name = "example"
try:
# Lấy nội dung thư mục
content = os.listdir(dir_name)
# In nội dung thư mục
print(content)
# In lỗi, nếu thư mục không tồn tại
except FileNotFoundError:
print(f"Directory '{dir_name}' doesn't exist")
Dùng module in ra người dùng hiện tại:
# Import module OS
import os
try:
# Lấy tên người dùng hiện tại
user = os.getlogin()
# In tên người dùng hiện tại
print(user)
# In thông báo lỗi, nếu có
except:
print("An error occurred")
Chạy lệnh shell Linux dùng module:
# Import module OS
import os
# Lệnh shell cần chạy
command = "sudo apt update && sudo apt upgrade -y"
try:
# Chạy lệnh hệ thống
result = os.system(command)
# In kết quả lệnh
print(result)
# In thông báo lỗi, nếu có lỗi
except:
print("An error occurred")
Thực hiện tác vụ mạng dùng module "socket"
Python có module xây dựng thực hiện tác vụ mạng khác nhau và tạo tiện ích mạng phức tạp, như quét cổng và máy chủ game video. Không ngạc nhiên module "socket" cũng dùng cho tác vụ mạng phổ biến và cơ bản trên hệ thống.
Ví dụ, kiểm tra địa chỉ IP và hostname hệ thống:
# Import module socket
import socket
try:
# Lấy hostname
host = socket.gethostname()
# Lấy địa chỉ IP của host
ip = socket.gethostbyname(host)
# In địa chỉ IP
print(f"IP address: {ip}")
# In hostname
print(f"Hostname: {host}")
# In thông báo lỗi, nếu có lỗi
except:
print("An error occurred")
Cũng dùng module kiểm tra địa chỉ IP trang web:
# Import module socket
import socket
try:
# Tên miền cần kiểm tra
domain = "duckduckgo.com"
# Lấy địa chỉ IP tên miền
ip = socket.gethostbyname(domain)
# In địa chỉ IP
print(f"IP address: {ip}")
# In thông báo lỗi, nếu có lỗi
except:
print("An error occurred")
Dùng Paramiko đăng nhập SSH Server và chạy lệnh
Nếu muốn tự động hóa quy trình đăng nhập SSH server và chạy lệnh đó, thư viện Python "Paramiko" cực kỳ hữu ích.
Trước hết tải thư viện bằng trình quản lý gói pip3 của Python:
pip3 install paramiko
Dùng module đăng nhập SSH server và chạy lệnh:
# Import thư viện Paramiko
import paramiko
# Chỉ định IP và thông tin đăng nhập
ip = '127.0.0.1'
port = 22
user = 'example'
password = 'example'
command = "uname -a"
try:
# Khởi tạo client Paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# Kết nối SSH server
ssh.connect(ip, port, user, password)
# Chạy lệnh trên hệ thống
stdin, stdout, stderr = ssh.exec_command(command)
# In kết quả lệnh
print(stdout.read().decode())
# In thông báo lỗi, nếu có lỗi
except:
print("An error occurred")
Câu hỏi thường gặp
1. Cần Python 3 để dùng các module và thư viện này không?
Mặc dù hầu hết thư viện và module này hoạt động với Python 2, có khác biệt về cú pháp và các đoạn code này không chạy. Với vài thay đổi, bạn có thể điều chỉnh chạy Python 2. Tuy nhiên, Python 2 đã lỗi thời, nên dùng Python 3.
2. Cần cài module "os" và "socket" không?
Chung chung, không. Hầu hết cài đặt Python đi kèm các module này sẵn.
3. Có dùng Paramiko đăng nhập hệ thống non-Unix không?
Theo nhà phát triển Paramiko, hiện tại thư viện không dùng được đăng nhập hệ thống non-Unix qua SSH.