Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Bảo vệ hệ thống: Tầm quan trọng của quoting đường dẫn file trong Shell Script

Tôi tình cờ thấy thread về lỗi lập trình kinh khủng và tìm thấy:

https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commit/a047be85247755cdbe0acce6f1dafc8beb84f2ac

Chứa dòng:

rm -rf /foo-bar-usr /lib/nvidia-current/xorg/xorg

Lưu ý – tôi thêm foo-bar- vào chuỗi để nếu bạn chạy thử, nó không làm điều tôi cảnh báo – chỉ có nó trên clipboard đã khiến tôi lo lắng!.

Chạy thì sao? Xóa sạch thư mục /usr/ – basically biến máy thành gạch! Chỉ vì một dấu cách đơn độc.

Do dấu cách sau /usr, lệnh rm hiểu là 2 thư mục riêng biệt cần xóa, không phải 1 đường dẫn gõ sai.

Nếu đường dẫn được bọc trong quotes để truyền như 1 tham số đơn, chuyện này không xảy ra.

Hầu hết ví dụ dòng lệnh không làm thế vì che nghĩa script hoặc khó đọc – nhưng nếu viết script thay vì chạy lệnh trực tiếp và đặc biệt nếu nhận input user có thể gõ space vô tình (không bao giờ tin user), đáng giá bọc đường dẫn file để phòng ngừa.

Bạn không muốn mất dữ liệu, và chắc chắn không muốn mất dữ liệu người khác.

Và như luôn – backup file và hệ thống thường xuyên! Bạn không bao giờ biết khi nào lỗi như này lọt qua – có thể không phải lỗi của bạn.