Vietnamese Developers' Blog

Các user ID của một tiến trình trong Unix

Posted in Unix/Linux/BSD by kiennguyen on the June 8th, 2009

Ba loại user ID của một tiến trình

Một tiến trình (process) trong Unix sở hữu 3 user ID sau đây:

Real user ID (user ID thật): Là user ID của người khởi động tiến trình.
Effective user ID (user ID hiệu dụng): Là một loại user ID được dùng trong những trường hợp sau đây:

  • Khi tiến trình truy nhập một file, hệ điều hành kiểm tra xem effective user của tiến trình có quyền truy nhập file hay không.
  • Khi tiến trình tạo mới một file, hệ điều hành lấy effective user của tiến trình làm chủ sở hữu (owner) của file.
  • Khi tiến trình muốn gửi tín hiệu đến một tiến trình khác, hệ điều hành kiểm tra xem effective user của tiến trình gửi có quyền gửi tín hiệu hay không.

Saved user ID: Là giá trị của effective user ID được lưu trong bảng các tiến trình (process table). Mỗi tiến trình có một vùng dữ liệu tương ứng trong bảng các tiến trình. Saved user ID đóng vai trò như một bản backup cho effective user ID, được dùng khi tiến trình muốn quay lại effective user ID ban đầu.

Tương ứng với 3 loại user ID này là ba loại group ID: real group ID, effective group ID và saved group ID.

Vì sao cần effective user ID?
Effective user là một cơ chế quản lí truy nhập của Unix (access control hay authorization). Xem ví dụ sau đây: Alice là một kế toán và cô ta cần có quyền thay đổi file dữ liệu kế toán account_data của công ty. Tuy nhiên, để đảm bảo tính toàn vẹn dữ liệu, Alice không được phép thay đổi dữ liệu kế toán một cách thủ công mà phải thông qua một chương trình tên là account_program. Như vậy:

  • Alice không có quyền ghi đối với account_data.
  • account_program có quyền ghi đối với account_data.
  • Alice có quyền chạy account_program.

Tuy nhiên, trong Unix chỉ có người dùng mới được coi là các chủ thể được cấp quyền sử dụng tài nguyên. Bởi vậy, giải pháp trong Unix là tạo ra một người dùng có quyền ghi đối với account_data, thiết lập effective user ID của account_program bằng ID của người dùng đó và trao cho Alice quyền chạy account_program. (more…)

The stream editor sed

Posted in Unix/Linux/BSD by kiennguyen on the December 22nd, 2007

Nguồn: Tổng hợp từ cuốn sách “The Unix Programming Environment” của Brian W. KernighanRob Pike.

Bài viết này giới thiệu những chức năng cơ bản nhất của sed, một chương trình xử lí văn bản cực mạnh trong Unix. Bài viết có sử dụng (mà không giải thích chi tiết) một số regular expression (cơ bản) và một số lệnh Unix (cũng cơ bản :-D )

Cú pháp chung của sed

Cú pháp chung của một lệnh sed là

sed 'danh sách các lệnh'  'danh sách các file đầu vào'

sed sẽ đọc từng dòng của các file đầu vào và thực hiện từng lệnh trong danh sách các lệnh đối với các dòng đó. Sau đó, sed ghi dữ liệu ra vào thiết bị đầu ra chuẩn.

Chẳng hạn, chúng ta có thể thay tất cả các từ UNIX trong một file thành UNIX(TM) bằng câu lệnh sau:

sed 's/UNIX/UNIX(TM)/g' filename

Khi thực hiện lệnh này, sed sẽ:

- Đọc vào từng dòng của filename

- Đối với mỗi dòng đọc vào, sed sẽ thực hiện lệnh s/UNIX/UNIX(TM)/g, tức là thay thế (s = substitute) tất cả (g = global) các từ UNIX bởi UNIX(TM).

s (substitute) là một lệnh của ed, chương trình tiền thân của sed.

Chú ý: sed không thay đổi nội dung của file đầu vào.

Chúng ta luôn sử dụng dấu nháy đơn (single quote) để bao quanh các lệnh của sed nhằm tránh trường hợp các kí tự đặc biệt bị dịch thành ý nghĩa khác bởi shell.

Sau đây là 1 số lệnh sed thú vị!!!

(more…)

Tagged with: , ,