Linux Căn Bản – Bài 8: Cấu trúc của hệ thống file trong Linux và các lệnh cd, mkdir, cp, mv, và rm

Chào các bạn,

Hôm nay chúng ta sẽ học sơ lược về cấu trúc của hệ thống file trong Linux cùng các câu lệnh như cd, mkdir, cp, mv và rm nhé. Đây cũng là một bài khá quan trọng có tính ứng dụng cao khi pentest, nên các bạn cần chú ý kỹ.

Chúng ta cùng vào bài.


1/ Cấu trúc của hệ thống file trong Linux

Hệ thống file và directory trong Linux sẽ có cấu trúc theo sơ đồ nhìn như hình bên dưới (Lưu ý, mỗi distro khác nhau sẽ có các directories hệ thống khác nhau một tí). Các bạn có thể thấy, bên dưới directory root là những directories con được sử dụng bởi hệ thống Linux, mỗi directory sẽ có một chức năng riêng biệt.

Và phần lớn các directories này (ngoại trừ /tmp), chỉ có root account mới có phân quyền thay đổi, chỉnh sửa, thêm bớt nội dung được chứa bên trong; nhằm hạn chế tình trạng hệ thống bị lỗi do một người dùng không phải root nào đó vô tình thay đổi dữ liệu bên trong các directories này.

Tuy nhiên, trong bài hôm nay, chúng ta sẽ không đi qua tất cả directory bên dưới mà sẽ chỉ tìm hiểu sơ lược một vài những directory quan trọng nhất thôi. Bạn nào muốn tìm hiểu thêm có thể theo dõi tại link sau. Nguyên nhân là vì để có thể hiểu rõ tường tận chức năng của mỗi directory, bạn cần phải có kiến thức về cách thức hệ điều hành Linux vận hành, đó là một mảng kiến thức khá lớn và nằm ngoài series này nên mình xin phép không đề cập đến. Nhưng nếu bạn nào muốn tìm hiểu, có thể thao khảo quyển sách How Linux Works, 2nd Edition: What Every Superuser Should Know nhé.

H1.1

1a/ Directory /

Nằm ở đỉnh của sơ đồ là directory /, hay còn được biết đến với cái tên root directory. Tất cả các directories hệ thống của Linux đều là con của directory root.

Nếu bạn dùng lệnh ls -ld để kiểm tra directory root, bạn sẽ thấy chỉ có account root mới có quyền thay đổi nội dung được chứa trong root directory (quyền w).

ls -ld /
H1a.1

Lưu ý:

Directory / không phải là HOME directory của root user. HOME directory của root user sẽ nằm bên trong directory / và có path là /root

H1a.2

1b/ Directory /bin

Tất cả những câu lệnh phổ thông các bạn đã và đang sử dụng ví dụ như ls, cat, v.v. bản chất là những phần mềm máy tính được viết ra để tương tác với hệ thống Linux. Những ứng dụng đó được chứa bên trong file /bin và có thể được sử dụng bởi tất cả account người dùng.

Lưu ý:

Tuy nhiên, như ở bài 7 chúng ta đã học, nếu một account người dùng không được cấp quyền thực thi một hoặc nhiều câu lệnh, ví dụ ls, account đó sẽ không thể sử dụng câu lệnh ls và các câu lệnh không được cấp phép khác.

1c/ Directory /boot

Directory /boot sẽ chứa những files cần trong quá trình khởi động máy tính ví dụ như kernel, initrd, grub v.v.

1d/ Directory /dev

Dev viết tắt của device. Khi bạn kết nối một thiết bị (device), ví dụ bàn phím, vào hệ thống Linux, để bàn phím có thể hoạt động, hệ thống sẽ cần driver của bàn phím. Bạn có thể tương tác với driver bàn phím thông qua những file thiết bị (device files) hoặc nút thiết bị (device nodes) được lưu trữ trong directory /dev.

Directory /dev đồng thời còn chứa cả những pseudo-devices hay còn được gọi là thiết bị ảo (không có phần cứng nhìn thấy được như USB hay ổ cứng) ví dụ như /dev/null. Dành cho bạn nào chưa biết thì /dev/null là một thiết bị đặc biệt được dùng để hủy toàn bộ kết quả trả về của một câu lệnh.

Chúng ta có thể thí nghiệm chức năng của /dev/null như sau:

H1d.1

B1: Chúng ta sẽ chuyển toàn bộ kết quả trả về của lệnh ls -l vào /dev/null

ls -l > /dev/null

B2: Kiểm tra nội dung của /dev/null ta sẽ thấy không có kết quả trả về

cat /dev/null

B3: Sử dụng lại lệnh ls -l một lần nữa nhưng không chuyển kết quả vào /dev/null ta thấy kết quả trả về như hình trên

ls -l

Ta có thể kết luận, /dev/null đã hủy kết quả được chuyển tới cho nó.

Bạn nào muốn tìm hiểu thêm về /dev có thể theo dõi trang sau.

1e/ Directory /etc

Etc là viết tắt của “edit to config”. Đây là nơi chứa những file thiết lập cần thiết cho một phần mềm nào đó trong hệ thống Linux. Không những thế, những file thiết lập cần cho cả hệ thống Linux và người dùng cũng được chứa tại directory /etc. Các bạn còn nhớ những directories như:

  • /etc/passwd
  • /etc/shadow
  • /etc/group

Đã được đề cập ở bài 7 hôm trước không? Tất cả đều được chứa trong directory /etc này.

Ngoài ra, directory /etc còn chứa những đoạn scripts được sử dụng để chạy hoặc dừng một chương trình riêng lẻ nào đó.

Directory /etc cũng chỉ cho phép root có quyền thay đổi nội dung file mà thôi. Và vì đây là một file khá quan trọng với hệ thống Linux, nên thay đổi nội dung của một file trong directory /etc sẽ ảnh hưởng đến vận hành của cả hệ thống. Do đó, việc thay đổi nội dung của /etc đòi hỏi bạn phải có đủ kiến thức về hệ thống cũng như hiểu rõ mình đang làm gì để tránh hệ thống hư hại.

H1e.1

1f/ Directory /home

Directory /home chứa HOME directories của tất cả những account người dùng bình thường trong hệ thống Linux, ngoại trừ root account. Chúng ta đã làm việc với directory /home một lần trong bài Tấn công server Pickle Rick (Phần 2).

Mỗi account user sẽ chỉ có quyền write đối với chính HOME directory của account đó. Riêng đối với directory /home, sẽ chỉ có root mới được phép thêm bớt các directories chứa bên trong /home.

H1f.1

1g/ Directory /lib

Lib viết tắt của library. Directory /lib là nơi chứa những thư viện cần để chạy những phần mềm cũng chính là các câu lệnh trong directory /bin và những ứng dụng trong directory /sbin.

1h/ Directory /media

Được sử dụng để chứa những directories con cũng chính là những thiết bị được kết nối vào hệ thống Linux ví dụ như USB, ổ cứng rời, v.v. Khi bạn kết nối một thiết bị, ví dụ như USB, vào hệ thống Linux, một directory sẽ được tạo ra bên trong directory /media cho phép bạn truy cập vào những nội dung được chứa bên trong USB đó.

1i/ Directory /opt

Opt viết tắt của Optional application software package. Directory /opt là nơi chứa những directories con vốn là những phần mềm của bên thứ ba ví dụ như Libreoffice, Chrome, v.v.

H1i.1

1j/ Directory /proc

Proc viết tắt của process. Directory /proc là nơi chứa thông tin về hệ thống cũng như các process đang chạy trong hệ thống.

Các bạn có thể dùng lệnh

cat /proc/version 

Để kiểm tra version của hệ điều hành Linux đang được sử dụng nhằm phục vụ cho mục đích priv escalation.

H1j.1

1k/ Directory /sbin

Sbin là viết tắt của System binaries. Đây là directory chứa những phần mềm của các câu lệnh được sử dụng chủ yếu bởi Linux system admin để quản trị hệ thống, ví dụ như reboot, ifconfig, fdisk, v.v.

1l/ Directory /tmp

Tmp viết tắt của temporary. Đây là directory cấp toàn quyền (rwx) cho mọi account người dùng trên hệ thống Linux và hay được dùng làm bàn đạp để vận chuyển các file mã độc/tấn công từ máy hacker đến máy nạn nhân. Chúng ta đã thực hành một lần việc chuyển file trong bài Tấn công server Pickle Rick (phần 2).

Directory /tmp được dùng bởi các ứng dụng trong hệ thống Linux để lưu trữ dữ liệu tạm thời ví dụ như ảnh chụp màn hình, v.v. Những dữ liệu này sẽ bị xóa tự động khi ta khởi động lại hệ thống hoặc cho chạy tính năng tmpwatch để hẹn giờ xóa dữ liệu trong /tmp.

H1l.1

1m/ Directory /usr

Usr là viết tắt của user. Đây là cũng là một nơi chứa những phần mềm được sử dụng trong hệ thống Linux. Khác biệt chính ở đây đó là:

  • /bin: Chứa các phần mềm câu lệnh phổ thông. Ví dụ như ls, cat, ping, ls, mkdir, v.v.
  • /sbin: Chứa các phần mềm câu lệnh được sử dụng bởi system admin. Ví dụ như: init, ifconfig, fdisk, v.v.
  • /opt: Chứa những phần mềm bên thứ 3. Ví dụ như : office, broswer, v.v.
  • /usr/…: Chứa những phần mềm dành riêng cho distro Linux. Ví dụ như với Kali Linux, các công cụ như nmap, gobuster, wfuzz, v.v. dành cho việc pentest đều được tập trung bên trong những directories con của directory /usr

Bên trong directory /usr có các directories con như:

  • /usr/bin: Chứa các phần mềm dành cho người dùng như nmap, gobuster, v.v.
  • /usr/sbin: Chứa các phần mềm dành để quản trị hệ thống
  • /usr/share: Nơi chứa những file hỗ trợ dành cho các phần mềm bên trong /usr
    • Các bạn cần ghi nhớ directory /usr/share/wordlists trên Kali Linux, đây là directory chứa các từ điển dùng để tấn công dictionary attack, tìm file ẩn trên website, v.v.
H1m.1

Lưu ý 1:

Thực tế sẽ rất khó để biết được một phần mềm câu lệnh nào đó là câu lệnh phổ thông, câu lệnh dành cho quản trị hệ thống, hay bên thứ ba v.v. Vì một lí do đơn giản đó là số lượng câu lệnh là quá nhiều để có thể nhớ hết phân loại của chúng. Thế nên, nếu bạn muốn tìm nơi chứa file phần mềm của một câu lệnh nào đó, bạn cứ tìm trong cả:

  • /bin
  • /sbin
  • /opt
  • /usr/bin
  • /usr/sbin

Hoặc một cách dễ hơn là sử dụng các câu lệnh tìm kiếm nhé (mình sẽ đề cập về các câu lệnh này trong bài tiếp theo)

Lưu ý 2:

Trong quá khứ, khi hệ thống máy tính còn ở giai đoạn sơ khai khi dung lượng bộ nhớ còn giới hạn. Sự khác biệt giữa /bin và /usr/bin khá rõ. Khi /bin được dùng để chứa những phần mềm căn bản với dung lượng nhỏ được dùng trong hệ thống, trong khi /usr/bin được dùng để chứa những phần mềm có dung lượng lớn. Tuy nhiên, ở thời điểm hiện tại, khi các hệ thống máy tính có thể mang trên mình dung lượng vài TB, thì sự khác biệt giữa /bin và /usr/bin ngày càng thu hẹp dần. Thậm chí có nhiều người đang đề xuất gộp /bin và /usr/bin lại thành một.

1n/ Directory /var

Var là viết tắt của variables. Directory /var là nơi chứa những biến như log, mail, cache, v.v. mà giá trị được chứa bên trong của nó sẽ thay đổi liên tục trong suốt quá trình vận hành của hệ thống.

H1n.1

2/ Câu lệnh cd và mkdir (task 29)

Để cho các bạn dễ thực hành hơn, mình sẽ bắt đầu từ task 29, sau đó quay lại task 26, 27 và 28 nhé.

2a/ Câu lệnh cd

Mặc dù chưa giới thiệu chính thức, nhưng chúng ta đã sử dụng câu lệnh cd khá nhiều trước đây. Chức năng của của câu lệnh cd (viết tắt của change directory) là để chuyển từ directory hiện tại sang directory khác.

Cú pháp của câu lệnh cd như sau

cd <path>

Ví dụ 1: Bạn đang ở HOME directory của shiba3 và muốn đến directory /tmp

H2a.1

Câu lệnh đã dùng

cd /tmp

Ví dụ 2: Từ /tmp, quay trở về HOME directory của shiba3

H2a.2

Câu lệnh đã dùng

cd

Khi bạn dùng lệnh cd nhưng không có path của directory cần đến liền sau, lệnh cd sẽ tự động đưa bạn trở về HOME directory của account hiện tại.

Ví dụ 3: Tiến và lùi với lệnh cd

B1: Các bạn cd đến directory /usr

cd /usr 

B2: Các bạn liệt kê các directories và files đang chứa bên trong /usr

ls

B3: Các bạn tiếp tục cd đến directory bin nằm bên trong /usr

cd /usr/bin

B4: Các bạn quay lại directory /usr

cd ..

“..” là kiến thức của relative path. Bạn nào quên có thể xem lại phần 7 của bài sau.

H2a.1

2b/ Câu lệnh mkdir

Câu lệnh mkdir (viết tắt của make directory) được sử dụng để tạo một directory mới. Cú pháp như sau:

mkdir <tên-directory>

Ví dụ 1: Tạo một directory tên test tại HOME directory của shiba3

mkdir sample 

Sau đó kiểm tra lại bằng ls

H2b.1

Ví dụ 2: Tạo một directory tại /tmp tên sample2

mkdir /tmp/sample2

Sau đó kiểm tra lại bằng lệnh ls

H2b.2

Dựa vào các kiến thức trên, các bạn tự trả lời 2 câu hỏi ở task 29 nhé.

3/ Câu lệnh rm (task 26)

Câu lệnh rm (viết tắt của remove) được dùng để xóa một file hoặc một directory kèm theo toàn bộ file trong directory đó.

Cú pháp của câu lệnh rm

rm <tên-file>

Ví dụ 1: Xóa một file text

B1: Tạo một file text tên sample1.txt

touch sample1.txt

B2: Kiểm tra xem file đã được tạo hay chưa

ls

B3: Xóa file sample1.txt

rm sample1.txt

B4: Kiểm tra lại bằng lệnh ls

ls
H3.1

Ví dụ 2: Xóa một directory kèm dữ liệu bên trong

B1: Tạo một directory tên hello

mkdir hello

B2: Tạo một directory tên world bên trong directory hello

mkdir hello/world

B3: Tạo một file text tên vietnam.txt bên trong directory hello

touch hello/vietnam.txt

B4: Kiểm tra lại bằng câu lệnh ls

ls hello

B5: Xóa toàn bộ directory hello kèm nội dung bên trong

Lúc này, nếu bạn dùng lệnh

rm hello 

Bạn sẽ nhận được báo lỗi sau

H3.2

Lỗi xảy ra vì để xóa được directory, chúng ta phải thêm flag -r theo sau lệnh rm.

rm -r hello 

Kiểm tra lại bằng lệnh ls

ls
H3.3

Ví dụ 3: Xóa toàn bộ file bên trong một directory

B1: Tạo một directory ten tuhoc

mkdir tuhoc

B2: Tạo 3 directory tên cybersecurity, linux và networking bên trong directory tuhoc

mkdir tuhoc/cybersecurity tuhoc/linux tuhoc/networking

B3: Kiểm tra lại directory đã tạo

ls tuhoc

B4: Xóa tòan bộ directories con bên trong tuhoc

rm -r tuhoc/*

B5: Kiểm tra lại bằng lệnh ls

ls tuhoc
H3.4

Để bỏ qua tất cả những cảnh báo, chúng ta có thể dùng thêm flag -f.

Với những kiến thức trên, các bạn thử trả lời 2 câu hỏi trong task 26 xem sao nhé.

Lưu ý:

Dấu “/” rất quan trọng. Khi xóa nội dung, nếu không có dấu “/”

Ví dụ

rm -rf abc

Nghĩa là bạn đang xóa directory abc. Còn nếu có dấu “/”

rm -rf abc/

Nghĩa là bạn đang xóa nhiều nội dung chứa bên trong directory abc. Ví dụ như

rm -rf abc/hello.txt abc/world.txt  

Câu lệnh trên có nghĩa là bạn đang xóa file hello.txt và world.txt được chứa bên trong directory abc.

4/ Lệnh mv và cp (task 27 và 28)

4a/ Lệnh mv

Lệnh mv (viết tắt của move) có 2 chức năng chính:

  1. Chuyển file/directory từ directory này sang directory khác. Giống với chức năng cut trên Windows
  2. Đổi tên file hoặc directory

Cú pháp khi chuyển file/directory như sau

mv <tên-file> <địa-chỉ-đến>

Cú pháp khi đổi tên

mv <tên-file> <tên-mới>

Ví dụ 1: Chuyển file

B1: Tạo 2 directories sample1 và sample2

mkdir sample1 sample2

B2: Tạo một file tên hello.txt trong sample1

touch sample1/hello.txt

B3: Kiểm tra lại bằng lệnh ls

ls

B4: Chuyển file hello.txt từ sample1 sang sample2

mv sample1/hello.txt sample2/

B5: Kiểm tra lại bằng lệnh ls

ls
H4a.1

Ví dụ 2: Chuyển directory có kèm files

Chúng ta sẽ chuyển toàn bộ directory kèm file hello.txt từ HOME directory của shiba3 sang directory sample1

mv sample2 sample1/

Kiểm tra lại bằng lệnh ls

ls
H4a.2

Ví dụ 3: Đổi tên directory

Chúng ta sẽ đổi tên directory sample1 thành tự học

mv sample1 tuhoc

Sau đó, kiểm tra lại bằng lệnh ls

ls
H4a.3

Với kiến thức này, các bạn hãy trả lời câu hỏi ở task 27 nhé.

4b/ Lệnh cp

Lệnh cp (viết tắt của copy) cho phép bạn tạo ra một bản sao dữ liệu từ bản dữ liệu gốc. Tương tự như chức năng copy trên Windows.

Cú pháp

cp <tên-file> <địa-chỉ-đến>

Ví dụ 1: Copy file

Chúng ta sẽ thực hành copy file hello.txt từ directory sample2 và lưu ở HOME directory của shiba3. Chúng ta sẽ sử dụng lại những directories và file đã tạo khi thực hành câu lệnh mv nhé. Để thực hành ví dụ này, ta sử dụng câu lệnh sau

cp tuhoc/sample2/hello.txt .

“.” Là kiến thức của phần relative path. Bạn nào quên có thể xem lại phần 7 của bài sau.

H4b.1

Ví dụ 2: Copy directory

Chúng ta sẽ copy directory sample2 kèm nội dung ra HOME directory của shiba3. Câu lệnh như sau

cp -r tuhoc/sample2 .

Sau đó, chúng ta dùng lệnh ls để kiểm tra lại

ls
H4b.2


Cám ơn các bạn đã theo dõi,

Vincent Nguyễn

Source:

https://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/var.html
https://thesagediary.com/2020/04/14/linux-file-system-directory-architecture/
https://www.quora.com/Whats-the-difference-between-bin-and-usr-bin-in-Linux

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s