Process
Mỗi tiến trình có các đặc điểm như:
- PID (Process ID): Mã định danh duy nhất của tiến trình.
- PPID (Parent Process ID): Mã định danh của tiến trình cha.
- User: Người dùng hoặc tài khoản chạy tiến trình.
- Trạng thái: Ví dụ, chạy (running), ngủ (sleeping), zombie, v.v.
- Tài nguyên: CPU, RAM, I/O mà tiến trình sử dụng.
- Command: Lệnh hoặc chương trình khởi tạo tiến trình.
Lệnh để kiểm tra tiến trình trong Linux:
- ps (process status) là một trong những công cụ cơ bản nhất để liệt kê các tiến trình đang chạy trên hệ thống. Lệnh này cho phép người dùng xem thông tin chi tiết về tiến trình như PID, PPID, trạng thái, tài nguyên sử dụng, và lệnh khởi tạo
- pstree hiển thị các tiến trình dưới dạng cây phân cấp, giúp dễ dàng hình dung mối quan hệ cha-con giữa các tiến trình
- top: Cung cấp giao diện thời gian thực để giám sát các tiến trình
- ps aux cung cấp thông tin đầy đủ về tất cả các tiến trình
File
Trong hệ điều hành Linux, một nguyên tắc cốt lõi của thiết kế là "mọi thứ là tệp" (everything is a file). Điều này có nghĩa là hầu hết các thành phần trong hệ thống, từ tệp thông thường, thư mục, đến các thiết bị phần cứng, ổ đĩa, socket, và thậm chí các tiến trình, đều được biểu diễn dưới dạng tệp trong hệ thống tệp. Điều này giúp đơn giản hóa việc tương tác với các thành phần khác nhau bằng cách sử dụng các công cụ và giao diện chung.
- Tệp thông thường: Là các tệp chứa dữ liệu, như văn bản, hình ảnh, hoặc mã nhị phân (ví dụ: document.txt, image.jpg, script.sh)
- Thư mục (directory): Là một loại tệp đặc biệt chứa danh sách các tệp hoặc thư mục con khác.
- Thiết bị (device files): Các thiết bị phần cứng như ổ đĩa (/dev/sda), bàn phím (/dev/input), hoặc cổng USB được biểu diễn dưới dạng tệp trong thư mục /dev
- Tệp hệ thống proc: Các thông tin về tiến trình và hệ thống (như /proc/cpuinfo, /proc/PID) được biểu diễn dưới dạng tệp trong thư mục /proc, mặc dù chúng không thực sự tồn tại trên đĩa mà được tạo động bởi nhân Linux.
Trong Linux, các tệp có tên bắt đầu bằng dấu chấm (.) được coi là tệp ẩn (hidden files). Những tệp này thường được sử dụng để lưu trữ cấu hình hoặc dữ liệu tạm thời, và chúng không hiển thị khi sử dụng lệnh ls thông thường
Để xem các tệp ẩn, có thể sử dụng các lệnh như ls -a hoặc find với các tùy chọn phù hợp
Trong Linux, mỗi tệp có một loại tệp (file type) được xác định bởi hệ thống tệp và hiển thị trong cột đầu tiên của kết quả lệnh ls -l
- Normal File (-) : các tệp thông thường chứa dữ liệu, như văn bản, hình ảnh, mã nhị phân, hoặc script. Chúng không phải là thư mục, thiết bị, hay liên kết
- Directory (d) : một loại tệp đặc biệt chứa danh sách các tệp hoặc thư mục con khác
- Symbolic Link (l) : Liên kết tượng trưng (symbolic link, hoặc soft link) là một tệp đặc biệt chứa đường dẫn đến một tệp hoặc thư mục khác. Nó hoạt động như một "phím tắt" (shortcut). Nếu tệp gốc bị xóa, symbolic link trở thành "liên kết hỏng" (broken link)
- Hard Link (h) : một tham chiếu trực tiếp đến cùng một inode (cấu trúc dữ liệu lưu trữ thông tin tệp) với tệp gốc. Hard link không phải là một tệp riêng biệt mà là một tên khác cho cùng một dữ liệu. Nếu tệp gốc bị xóa, hard link vẫn trỏ đến dữ liệu.
Permission
Trong Linux, quyền truy cập (permissions) xác định ai có thể thực hiện các hành động như đọc (read), ghi (write), hoặc thực thi (execute) trên một tệp hoặc thư mục. Quyền được hiển thị khi sử dụng lệnh ls -l. Quyền được chia thành ba nhóm chính:
- User (owner): Người sở hữu tệp hoặc thư mục
- Group: Nhóm người dùng được gán quyền trên tệp/thư mục
- Other (everyone): Tất cả các người dùng khác không thuộc nhóm hoặc không phải chủ sở hữu
Mã số quyền (rwx = 421). Quyền được biểu diễn dưới dạng số nhị phân hoặc thập phân dựa trên giá trị:
- r (đọc) = 4
- w (ghi) = 2
- x (thực thi) = 1
-
- (không có) = 0
Thay đổi quyền bằng chmod
Thay đổi chủ sở hữu bằng chown
Quản lý nhóm: Dùng usermod -aG để thêm người dùng vào nhóm. Một user có thể là thành viên của một hoặc nhiều group
Persistence
Quản lý Dịch vụ (Service)
- Kiểm tra trạng thái dịch vụ: service --status-all: Hiển thị trạng thái của tất cả các dịch vụ được quản lý bởi init hoặc systemd
- Quản lý dịch vụ với systemctl: <enable/disable/start/restart/stop> <service_name>
Lập lịch tiến trình: Lập lịch tiến trình trong Linux cho phép thực thi các tác vụ định kỳ hoặc tự động, sử dụng công cụ cron
- /etc/crontab: tệp cấu hình hệ thống cho các tác vụ cron toàn cục
- /etc/cron.d: Thư mục chứa các tệp cron bổ sung, mỗi tệp đại diện cho một tác vụ cụ thể
- /var/spool/cron/crontabs/root: chứa các tác vụ cron cá nhân cho từng user
- crontab -l: Hiển thị danh sách các tác vụ cron của user hiện tại
Các tệp cấu hình môi trường shell (Bash) khi người dùng đăng nhập hoặc mở terminal, đảm bảo các thiết lập được duy trì
- .bashrc: Chạy mỗi khi mở một terminal tương tác mới (không phải đăng nhập)
- .bash_profile: Chạy khi người dùng đăng nhập (login shell), thường chứa các lệnh khởi tạo session.
- .profile: Tệp chung cho các shell (không chỉ Bash), chạy khi đăng nhập
Các thư mục và tệp này chứa kịch bản khởi động để chạy khi hệ thống boot
- /etc/init.d: Thư mục chứa các kịch bản khởi động cho các dịch vụ (dùng với SysVinit)
- /etc/rc.local: Tệp kịch bản chạy cuối cùng trong quá trình khởi động (trước khi login)
Log
-
Access log ghi lại mọi yêu cầu được gửi đến web server (như Apache, Nginx), giúp theo dõi truy cập và gỡ lỗi:
- Apache: Thường nằm ở /var/log/apache2/access.log (trên Ubuntu/Debian) hoặc /var/log/httpd/access_log (trên CentOS/RHEL).
- Nginx: Thường nằm ở /var/log/nginx/access.log.
-
auth.log ghi lại các sự kiện xác thực, như đăng nhập SSH, sudo, hoặc thay đổi mật khẩu: /var/log/auth.log (Ubuntu/Debian) hoặc /var/log/secure (CentOS/RHEL)
-
syslog ghi lại các sự kiện hệ thống chung, như khởi động, lỗi kernel, hoặc thông báo từ dịch vụ: /var/log/syslog (Ubuntu/Debian) hoặc /var/log/messages (CentOS/RHEL)
-
/var/log/
Authentication
Để bảo mật, mật khẩu không được lưu trữ dưới dạng văn bản thuần túy mà được mã hóa dưới dạng hash kết hợp với salt, và thông tin này được lưu trong tệp /etc/shadow
Shell
- SSH không phải là một shell mà là một giao thức mạng an toàn, sử dụng để kết nối từ xa đến máy Linux. Tuy nhiên, nó thường được liên kết với shell vì nó cung cấp một terminal để người dùng tương tác với shell từ xa (thường là Bash hoặc ZSH)
- SH (Bourne Shell) là shell gốc, được phát triển bởi Stephen Bourne tại Bell Labs, được sử dụng trong hệ điều hành Unix ban đầu và kế thừa trong Linux
- ZSH là một shell nâng cao, mở rộng từ Bourne Shell (SH), nổi tiếng với tính năng tùy chỉnh và giao diện thân thiện