2.3 Bài 1
Giới thiệu
Chứng chỉ: |
Linux Essentials |
---|---|
Phiên bản: |
1.6 |
Chủ đề: |
2 Tìm đường trong Hệ thống Linux |
Mục tiêu: |
2.3 Sử dụng Thư mục và Tệp Liệt kê |
Bài: |
1 trên 2 |
Tệp và Thư mục
Hệ thống tệp của Linux cũng giống như các hệ thống tệp của các hệ điều hành khác ở chỗ nó cũng chứa các tệp và thư mục. Các tệp thường chứa dữ liệu như văn bản mà con người có thể đọc được, các chương trình thực thi được hoặc dữ liệu nhị phân được máy tính sử dụng. Các thư mục được sử dụng để tổ chức bên trong hệ thống tệp. Các thư mục có thể chứa các tệp và thư mục khác.
$ tree Documents ├── Mission-Statement.txt └── Reports └── report2018.txt 1 directory, 2 files
Trong ví dụ này, Documents
là một thư mục chứa một tệp (Mission-Statement.txt
) và một thư mục con (Reports
). Thư mục Reports
cũng chứa một tệp có tên report2018.txt
. Thư mục Documents
được coi là thư mục mẹ của thư mục Reports
.
Tip
|
Nếu lệnh |
Tên Tệp và Thư mục
Tên tệp và thư mục trong Linux có thể chứa chữ thường, chữ hoa, số, dấu cách và ký tự đặc biệt. Tuy nhiên, vì nhiều ký tự đặc biệt có ý nghĩa đặc biệt trong vỏ Linux nên tốt nhất là không sử dụng dấu cách hoặc ký tự đặc biệt khi đặt tên tệp hoặc thư mục. Ví dụ, phím cách cần phải có thêm ký tự thoát \
để được nhập chính xác:
$ cd Mission\ Statements
Ngoài ra, hãy xem tên tệp report2018.txt
. Tên tệp có thể chứa một hậu tố đứng sau dấu chấm (.
). Không giống như Windows, hậu tố này không có ý nghĩa đặc biệt trong Linux; nó ở đó chỉ để giúp con người đọc hiểu. Trong ví dụ của chúng ta, .txt
cho ta biết rằng đây là tệp văn bản gốc (mặc dù về mặt kỹ thuật thì nó có thể chứa bất kỳ loại dữ liệu nào).
Điều hướng Hệ thống tệp
Nhận Vị trí Hiện tại
Vì các vỏ Linux như Bash đều dựa trên văn bản nên điều quan trọng là phải nhớ vị trí hiện tại của bạn khi điều hướng hệ thống tệp. Dấu nhắc Lệnh sẽ cung cấp thông tin này:
user@hostname ~/Documents/Reports $
Hãy lưu ý rằng các thông tin như user
(người dùng) và hostname
(tên máy chủ) sẽ được đề cập trong các phần sau. Từ dấu nhắc lệnh, bây giờ chúng ta đã biết được rằng vị trí hiện tại của ta là ở trong thư mục Reports
. Tương tự, lệnh pwd
sẽ in đường dẫn của thư mục làm việc:
user@hostname ~/Documents/Reports $ pwd /home/user/Documents/Reports
Mối quan hệ của các thư mục được thể hiện bằng dấu gạch chéo (/
). Ta biết rằng Reports
là thư mục con của Documents
; Documents
là thư mục con của user
nằm trong thư mục có tên home
. home
trông có vẻ như không có thư mục mẹ, nhưng điều đó hoàn toàn không đúng. Thư mục mẹ của home
được gọi là thư mục gốc (root) và được biểu thị bằng dấu gạch chéo đầu tiên (/
). Chúng ta sẽ thảo luận về thư mục gốc trong phần sau.
Hãy lưu ý rằng đầu ra của lệnh pwd
sẽ hơi khác so với đường dẫn được cung cấp trên dấu nhắc lệnh. Thay vì /home/user
, dấu nhắc lệnh sẽ chứa dấu ngã (~
). Dấu ngã là một ký tự đặc biệt đại diện cho thư mục chính của người dùng. Điều này sẽ được đề cập chi tiết hơn trong bài học tiếp theo.
Liệt kê Nội dung Thư mục
Nội dung của thư mục hiện tại được liệt kê bằng lệnh ls
:
user@hostname ~/Documents/Reports $ ls report2018.txt
Hãy lưu ý rằng ls
sẽ không cung cấp thông tin về thư mục mẹ. Tương tự, theo mặc định, ls
sẽ không hiển thị bất kỳ thông tin nào về nội dung của các thư mục con. ls
chỉ có thể “xem” những nội dung nào có ở trong thư mục hiện tại.
Thay đổi Thư mục hiện tại
Điều hướng trong Linux chủ yếu được thực hiện bằng lệnh cd
(changes directory). Lệnh này sẽ thay đổi thư mục hiện tại. Bằng cách sử dụng lệnh pwd
như đã biết, chúng ta có thể thấy thư mục hiện tại của mình là /home/user/Documents/Reports
. Ta có thể thay đổi thư mục hiện tại của mình bằng cách nhập một đường dẫn mới:
user@hostname ~ $ cd /home/user/Documents user@hostname ~/Documents $ pwd /home/user/Documents user@hostname ~/Documents $ ls Mission-Statement.txt Reports
Từ vị trí mới này, ta có thể “xem” Mission-Statement.txt
và thư mục con Reports
, nhưng không thể xem được nội dung của thư mục con. Chúng ta có thể điều hướng trở lại Reports
bằng cách như sau:
user@hostname ~/Documents $ cd Reports user@hostname ~/Documents/Reports $ pwd /home/user/Documents/Reports user@hostname ~/Documents/Reports $ ls report2018.txt
Bây giờ ta đã trở lại vị trí ban đầu.
Đường dẫn Tuyệt đối và Tương đối
Lệnh pwd
luôn in một đường dẫn tuyệt đối. Điều này có nghĩa là đường dẫn này chứa mọi bước của đường dẫn, từ đầu (/
) đến cuối (Reports
) hệ thống tệp. Đường dẫn tuyệt đối sẽ luôn bắt đầu bằng dấu /
.
/ └── home └── user └── Documents └── Reports
Đường dẫn tuyệt đối sẽ chứa tất cả những thông tin cần thiết để truy cập Reports
từ bất kỳ đâu trong hệ thống tệp. Hạn chế của nó là phải gõ toàn bộ đường dẫn bằng tay.
Ví dụ thứ hai là (cd Reports
) thì dễ gõ hơn nhiều. Đây là một ví dụ về đường dẫn tương đối. Đường dẫn tương đối sẽ ngắn hơn và ý nghĩa của nó chỉ liên quan đến vị trí hiện tại của bạn. Hãy cùng loại suy như thế này: Tôi đến chơi với bạn tại nhà của bạn. Bạn nói với tôi rằng bạn của bạn sống ở ngay bên cạnh. Tôi sẽ hiểu ngay vị trí của nhà người bạn đó là ở đâu vì nó có liên quan đến vị trí hiện tại của tôi. Nhưng nếu bạn nói với tôi điều này qua điện thoại, tôi sẽ không thể tìm thấy nhà của người bạn kia. Bạn sẽ phải cung cấp cho tôi một địa chỉ bao gồm thông tin đường phố đầy đủ.
Đường dẫn Tương đối Đặc biệt
Vỏ Linux cung cấp cho chúng ta các cách để rút ngắn đường dẫn khi điều hướng. Để đưa ra các đường dẫn đặc biệt đầu tiên, ta sẽ nhập lệnh ls
với cờ -a
. Cờ này sẽ sửa đổi lệnh ls
để tất cả các tệp và thư mục được liệt kê, bao gồm cả các tệp và thư mục ẩn:
user@hostname ~/Documents/Reports $ ls -a . .. report2018.txt
Note
|
Bạn có thể tham khảo trang hướng dẫn cho |
Lệnh này đã cho ta thấy hai kết quả bổ sung: Đây là những đường dẫn đặc biệt. Chúng không đại diện cho các tệp hoặc thư mục mới, mà chúng đại diện cho các thư mục mà bạn đã biết:
.
-
Cho biết vị trí hiện tại (trong trường hợp này là
Reports
). ..
-
Cho biết thư mục mẹ (trong trường hợp này là
Documents
).
Thông thường, ta không cần phải sử dụng đường dẫn tương đối đặc biệt cho vị trí hiện tại. Việc nhập report2018.txt
sẽ dễ dàng và dễ hiểu hơn so với việc nhập ./report2018.txt
. Nhưng .
có những cách sử dụng mà bạn có thể tìm hiểu trong các phần sau. Hiện tại, ta sẽ tập trung vào đường dẫn tương đối cho thư mục mẹ:
user@hostname ~/Documents/Reports $ cd .. user@hostname ~/Documents $ pwd /home/user/Documents
Ví dụ về cd
sẽ dễ dàng hơn nhiều khi sử dụng ..
thay vì đường dẫn tuyệt đối. Ngoài ra, chúng ta có thể kết hợp mẫu này để điều hướng cây tệp rất nhanh.
user@hostname ~/Documents $ cd ../.. $ pwd /home
Bài tập Hướng dẫn
-
Đối với mỗi đường dẫn sau, hãy xác định xem đó là đường dẫn tuyệt đối hay tương đối:
/home/user/Downloads
../Reports
/var
docs
/
-
Hãy quan sát cấu trúc tệp sau. Lưu ý: Các thư mục sẽ kết thúc bằng dấu gạch chéo (
/
) khitree
được gọi với tùy chọn-F
. Bạn sẽ phải có các đặc quyền nâng cao để chạy lệnhtree
trên thư mục gốc (/
). Sau đây là đầu ra ví dụ và nó không ám chỉ cấu trúc thư mục đầy đủ. Hãy sử dụng nó để trả lời các câu hỏi sau:$ sudo tree -F / / ├── etc/ │ ├── network/ │ │ └── interfaces │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d/ │ └── udev.conf └── home/ ├── lost+found/ └── user/ └── Documents/ 12 directories, 5 files
Hãy sử dụng cấu trúc này để trả lời các câu hỏi sau.
Người dùng nhập các lệnh sau:
$ cd /etc/udev $ ls -a
Đầu ra của lệnh
ls -a
sẽ là gì? -
Hãy nhập lệnh ngắn nhất có thể cho mỗi lệnh sau:
-
Vị trí hiện tại của bạn là root (
/
). Hãy nhập lệnh để điều hướng đếnlost+found
trong thư mụchome
(ví dụ):$ cd home/lost+found
-
Vị trí hiện tại của bạn là root (
/
). Hãy nhập lệnh để điều hướng đến thư mục có tên/etc/network/
. -
Vị trí hiện tại của bạn là
/home/user/Documents/
. Hãy điều hướng đến thư mục có tên/etc/
. -
Vị trí hiện tại của bạn là
/etc/systemd/system/
. Hãy điều hướng đến thư mục có tên/home/user/
.
-
-
Hãy xem xét các lệnh sau:
$ pwd /etc/udev/rules.d $ cd ../../systemd/user $ cd .. $ pwd
Đầu ra của lệnh
pwd
cuối cùng là gì?
Bài tập Mở rộng
-
Giả sử người dùng đã nhập các lệnh sau:
$ mkdir "this is a test" $ ls this is a test
Lệnh
cd
nào sẽ cho phép bạn vào thư mục này? -
Hãy thực hiện lại lần nữa, nhưng sau khi nhập
cd this
, hãy nhấn phím TAB. Lúc này điều gì đang được hiển thị trên dấu nhắc lệnh?Đây là một ví dụ về tính năng tự động hoàn thành; đây là một công cụ vô giá không chỉ giúp tiết kiệm thời gian mà còn ngăn ngừa lỗi chính tả.
-
Hãy thử tạo một thư mục có tên chứa ký tự
\
. Hãy hiển thị tên thư mục bằngls
và xóa thư mục.
Tóm tắt
Trong bài học này, bạn đã học về:
-
Nguyên tắc cơ bản của hệ thống tệp Linux
-
Sự khác biệt giữa thư mục mẹ và thư mục con
-
Sự khác biệt giữa đường dẫn tệp tuyệt đối và đường dẫn tệp tương đối
-
Các đường dẫn tương đối đặc biệt
.
và..
-
Điều hướng hệ thống tệp bằng cách sử dụng
cd
-
Hiển thị vị trí hiện tại của bạn bằng
pwd
-
Liệt kê tất cả các tệp và thư mục bằng cách sử dụng
ls -a
Các lệnh sau đã được thảo luận trong bài học này:
cd
-
Thay đổi thư mục hiện tại.
pwd
-
In đường dẫn của thư mục làm việc hiện tại
ls
-
Liệt kê nội dung của một thư mục và hiển thị thuộc tính của các tệp
mkdir
-
Tạo một thư mục mới
tree
-
Hiển thị danh sách phân cấp của cây thư mục
Đáp án Bài tập Hướng dẫn
-
Đối với mỗi đường dẫn sau, hãy xác định xem đó là đường dẫn tuyệt đối hay tương đối:
/home/user/Downloads
tuyệt đối
../Reports
tương đối
/var
tuyệt đối
docs
tương đối
/
tuyệt đối
-
Hãy quan sát cấu trúc tệp sau. Lưu ý: Các thư mục sẽ kết thúc bằng dấu gạch chéo (
/
) khitree
được gọi với tùy chọn-F
. Bạn sẽ phải có các đặc quyền nâng cao để chạy lệnhtree
trên thư mục gốc (/
). Sau đây là đầu ra ví dụ và nó không ám chỉ cấu trúc thư mục đầy đủ. Hãy sử dụng nó để trả lời các câu hỏi sau:$ sudo tree -F / / ├── etc/ │ ├── network/ │ │ └── interfaces │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d/ │ └── udev.conf └── home/ ├── lost+found/ └── user/ └── Documents/ 12 directories, 5 files
Người dùng nhập các lệnh sau:
$ cd /etc/udev $ ls -a
Đầu ra của lệnh
ls -a
sẽ là gì?. .. rules.d udev.conf
-
Hãy nhập lệnh ngắn nhất có thể cho mỗi lệnh sau:
-
Vị trí hiện tại của bạn là root (
/
). Hãy nhập lệnh để điều hướng đếnlost+found
trong thư mụchome
(ví dụ):$ cd home/lost+found
-
Vị trí hiện tại của bạn là root (
/
). Hãy nhập lệnh để điều hướng đến thư mục có tên/etc/network/
.$ cd etc/network
-
Vị trí hiện tại của bạn là
/home/user/Documents/
. Hãy điều hướng đến thư mục có tên/etc/
.$ cd /etc
-
Vị trí hiện tại của bạn là
/etc/systemd/system/
. Hãy điều hướng đến thư mục có tên/home/user/
$ cd /home/user
-
-
Hãy xem xét các lệnh sau:
$ pwd /etc/udev/rules.d $ cd ../../systemd/user $ cd .. $ pwd
Đầu ra của lệnh
pwd
cuối cùng là gì?/etc/systemd
Đáp án Bài tập Mở rộng
-
Giả sử người dùng đã nhập các lệnh sau:
$ mkdir "this is a test" $ ls this is a test
Lệnh
cd
nào sẽ cho phép bạn vào thư mục này?$ cd this\ is\ a\ test
-
Hãy thực hiện lại lần nữa, nhưng sau khi nhập
cd this
, hãy nhấn phím TAB. Lúc này điều gì đang được hiển thị trên dấu nhắc lệnh?$ cd this\ is\ a\ test
Đây là một ví dụ về tính năng tự động hoàn thành; đây là một công cụ vô giá không chỉ giúp tiết kiệm thời gian mà còn ngăn ngừa lỗi chính tả.
-
Hãy thử tạo một thư mục có tên chứa ký tự
\
. Hãy hiển thị tên thư mục bằngls
và xóa thư mục.Bạn có thể thoát dấu gạch chéo ngược bằng một dấu gạch chéo ngược khác (
\\
), hoặc sử dụng dấu trích dẫn đơn hoặc kép xung quanh toàn bộ tên thư mục:$ mkdir my\\dir $ ls 'my\dir' $ rmdir 'my\dir'