Khi làm việc với Linux, chúng ta phải sử dụng nhiều loại file khác nhau, bao gồm cả file văn bản và file nhị phân. Ví dụ, các chương trình trong Linux được phân phối dưới dạng file nhị phân, trong khi mã nguồn của chúng được lưu dưới dạng file văn bản. Là người dùng hệ điều hành, chúng ta cũng tạo ra nhiều file để phục vụ cho các hoạt động hằng ngày — như tài liệu Word, bảng tính Excel, bài thuyết trình PowerPoint và nhiều loại file văn bản khác.
Trong chương này, chúng ta sẽ tìm hiểu chi tiết về cách quản lý file trong Linux/Unix. Tất cả dữ liệu trong Linux đều được tổ chức thành các file, và các file này được nhóm lại trong các thư mục. Các thư mục đó được sắp xếp theo một cấu trúc dạng cây, gọi là hệ thống file (filesystem).
Các loại Files trong Linux
Trong Linux, mọi thứ đều được xem như file. Do đó, khi làm việc với Linux, theo cách này hay cách khác, bạn sẽ dành phần lớn thời gian để thao tác với các file. Hướng dẫn này sẽ giúp bạn hiểu cách tạo và xóa, sao chép và đổi tên.
Trong Linux, có ba loại file cơ bản:
Ordinary Files − Đây là các file trên hệ thống chứa dữ liệu, văn bản hoặc các chỉ dẫn chương trình. Trong hướng dẫn này, bạn sẽ tìm hiểu cách làm việc với các file thông thường.
Directories − Thư mục lưu trữ cả file đặc biệt và file thông thường. Đối với người dùng quen thuộc với Windows hoặc macOS, thư mục trong Unix tương đương với thư mục (folder).
Special Files − Một số file đặc biệt cung cấp quyền truy cập vào phần cứng như ổ cứng, ổ CD-ROM, modem hoặc bộ điều hợp Ethernet. Một số file đặc biệt khác hoạt động tương tự như alias hoặc shortcut, cho phép bạn truy cập cùng một file thông qua nhiều tên khác nhau
Liệt kê file và thuộc tính của chúng
Để list tất cả các file và thư mục ở trong thư mục hiện tại, các bạn có thể dùng câu lệnh sau:
$ ls
Output của câu lệnh sẽ có dạng như sau:
.png)
Bạn có thể thêm tuỳ chọn -l để xem được đầy đủ thông tin hơn về file:

Dưới đây là thông tin mô tả về từng cột được liệt kê:
- Cột thứ nhất − Thể hiện loại tệp và các quyền được gán cho tệp. Bên dưới là mô tả về tất cả các loại tệp.
- Cột thứ hai − Thể hiện số khối bộ nhớ (memory blocks) mà tệp hoặc thư mục chiếm.
- Cột thứ ba − Thể hiện chủ sở hữu của tệp. Đây là người dùng Linux đã tạo ra tệp.
- Cột thứ tư − Thể hiện nhóm của chủ sở hữu. Mỗi người dùng Linux đều thuộc về một nhóm nhất định.
- Cột thứ năm − Thể hiện kích thước tệp tính theo byte.
- Cột thứ sáu − Thể hiện ngày và giờ mà tệp được tạo hoặc được chỉnh sửa lần cuối.
- Cột thứ bảy − Thể hiện tên của tệp hoặc thư mục.
Quyền truy cập của file
Trong ví dụ liệt kê bằng lệnh ls -l, mỗi dòng thông tin của tệp đều bắt đầu bằng một ký tự như d, -, hoặc l. Những ký tự này cho biết loại của tệp đang được liệt kê.
- Tệp thông thường (Regular file), ví dụ tệp văn bản ASCII, tệp nhị phân thực thi, hoặc hard link.
b Tệp đặc biệt dạng khối (Block special file). Đây là các thiết bị I/O theo khối như ổ cứng vật lý.
c Tệp đặc biệt dạng ký tự (Character special file). Đây là các thiết bị I/O theo ký tự như một số thiết bị phần cứng.
d Thư mục (Directory), chứa danh sách các tệp và thư mục khác.
l Tệp liên kết tượng trưng (Symbolic link). Liên kết đến bất kỳ tệp thông thường nào.
p Named pipe. Cơ chế giao tiếp giữa các tiến trình (IPC).
s Socket, được dùng cho giao tiếp giữa các tiến trình (IPC).
Tiếp theo sẽ là các quyền (permissions) được chia thành từng nhóm gồm ba ký tự, và mỗi vị trí trong nhóm tương ứng với một quyền nhất định theo thứ tự: đọc (r), ghi (w), và thực thi (x).
Ba ký tự đầu tiên (vị trí 2–4) biểu thị quyền của chủ sở hữu (owner) của tệp.
(Ví dụ: -rwxr-xr-- cho thấy owner có đầy đủ quyền đọc (r), ghi (w) và thực thi (x).)
Nhóm ba ký tự tiếp theo (vị trí 5–7) thể hiện quyền của nhóm (group) mà tệp thuộc về.
(Ví dụ: trong -rwxr-xr--, nhóm có quyền đọc (r) và thực thi (x), nhưng không có quyền ghi (w).)
Ba ký tự cuối cùng (vị trí 8–10) biểu thị quyền của những người còn lại (others).
(Ví dụ: -rwxr-xr-- cho thấy mọi người khác chỉ có quyền đọc (r).)
Có một số điểm khác nhau giữa quyền truy cập file và folders như sau:
- Chế độ truy cập tệp (File Access Modes): Quyền truy cập của một tệp là lớp bảo vệ đầu tiên trong hệ thống bảo mật của Unix. Các thành phần cơ bản của quyền trong Unix bao gồm quyền đọc, ghi và thực thi:
- Read (r): Cho phép người dùng đọc, tức là xem nội dung của tệp.
- Write (w): Cho phép người dùng sửa đổi hoặc xóa nội dung của tệp.
- Execute (x): Cho phép người dùng chạy tệp như một chương trình.
- Chế độ truy cập thư mục (Directory Access Modes): Quyền truy cập thư mục được liệt kê và tổ chức tương tự như đối với tệp, nhưng có một số điểm khác biệt cần lưu ý:
- Read (r): Quyền đọc một thư mục cho phép người dùng xem danh sách các tệp và thư mục con bên trong. Nghĩa là người dùng có thể xem tên các mục trong thư mục.
- Write (w): Quyền ghi vào thư mục cho phép người dùng thêm hoặc xóa tệp bên trong thư mục.
- Execute (x): Thao tác “thực thi” đối với thư mục không mang ý nghĩa chạy như chương trình; thay vào đó, nó được hiểu là quyền traverse — cho phép người dùng đi vào thư mục hoặc truy cập nội dung nếu biết tên tệp.
Ví dụ: Người dùng phải có quyền execute trên thư mục bin thì mới có thể thực thi lệnh ls hoặc sử dụng lệnh cd để truy cập thư mục đó.
Thay đổi quyền và sở hữu của file
1. chmod (change mode)
Một cách khác để thay đổi quyền là dùng mã số (octal).
Mỗi quyền được gán một giá trị:
Số Quyền Dạng ký hiệu
0 Không quyền ---
1 Thực thi (execute) --x
2 Ghi (write) -w-
3 Ghi + thực thi (2 + 1) -wx
4 Đọc (read) r--
5 Đọc + thực thi (4 + 1) r-x
6 Đọc + ghi (4 + 2) rw-
7 Đọc + ghi + thực thi (4 + 2 + 1) rwx
Ví dụ, quyền ban đầu:
$ ls -l testfile
-rwxrwxr-- 1 users users 1024 Nov 2 00:10 testfile
$ chmod 755 testfile
$ ls -l testfile
-rwxr-xr-x 1 users users 1024 Nov 2 00:10 testfile
$ chmod 743 testfile
$ ls -l testfile
-rwxr---wx 1 users users 1024 Nov 2 00:10 testfile
$ chmod 043 testfile
$ ls -l testfile
----r---wx 1 users users 1024 Nov 2 00:10 testfile
Khi tạo tài khoản trong Unix, mỗi người dùng được gán user ID (UID) và group ID (GID). Quyền truy cập cũng dựa trên hai thông tin này.
2. chown (change owner).
Dùng để thay đổi chủ sở hữu của tệp.
Cú pháp:
$ chown user filelist
user có thể là tên đăng nhập hoặc UID.
Ví dụ:
$ chown amrood testfile
Thay đổi chủ sở hữu của tệp testfile thành người dùng amrood.
Lưu ý: chỉ người dùng root mới có quyền thay đổi chủ sở hữu của bất kỳ tệp nào.
3. chgrp (change group).
Dùng để thay đổi nhóm sở hữu của tệp.
Cú pháp:
$ chgrp group filelist
group có thể là tên nhóm hoặc GID.
$ chgrp special testfile
Thay đổi group của tệp thành nhóm special.
Tạo File trong Linux
Có rất nhiều trình soạn thảo văn bản (file editors) được cài sẵn trên các hệ thống Linux. Trình yêu thích của tôi là vim hoặc vi, thường dùng để tạo và chỉnh sửa các file text trên Ubuntu.
Để tạo một file thông thường trong Linux bằng vi, bạn chỉ cần nhập lệnh:
$ vi filename
Lệnh trên sẽ mở một file với tên filename. Bây giờ, nhấn phím I để vào chế độ chỉnh sửa (insert mode). Khi đã vào chế độ này, bạn có thể bắt đầu nhập nội dung.
Ví dụ, chúng ta nhập nội dung:
This is a text file in Linux.
.png)
Sau khi hoàn tất, làm theo các bước sau:
- Nhấn Esc để rời khỏi chế độ chỉnh sửa.
- Gõ :wq rồi Enter để lưu và thoát hoàn toàn khỏi file.
.png)
Hiển thị nội dung file
Bạn có thể sử dụng lệnh cat để xem nội dung của một file. Dưới đây là một ví dụ đơn giản để xem nội dung của file đã tạo ở trên:
$ cat filename This is a text file in Linux
.png)
Sao chép File trong Linux
Để tạo một bản sao của file hiện có, hãy sử dụng lệnh cp trong Linux. Cú pháp cơ bản của lệnh như sau:
$ cp source_file destination_file
Ví dụ:
$ cp filename copyfile
Bây giờ bạn sẽ thấy có thêm một file copyfile trong thư mục hiện tại. File này sẽ hoàn toàn giống với file gốc filename.
Đổi tên File trong Linux
Để đổi tên một file hiện có, hãy sử dụng lệnh mv trong Linux. Cú pháp cơ bản như sau:
$ mv old_file new_file
Chương trình sau sẽ đổi tên file hiện có filename thành newfile:
$ mv filename newfile
Lệnh mv sẽ di chuyển file hiện có sang tên mới hoàn toàn. Trong trường hợp này, bạn sẽ chỉ thấy newfile trong thư mục hiện tại.
Xóa File trong Linux
Để xóa một file hiện có khỏi hệ thống file Linux, hãy sử dụng lệnh rm. Cú pháp cơ bản như sau:
$ rm filename
Dưới đây là ví dụ minh họa cách xóa hoàn toàn file hiện có filename:
$ rm -i filename
Lưu ý: không giống các hệ điều hành khác, trong Linux một khi đã xoá sẽ mất hoàn toàn chứ không có backup ở thùng rác.


