2.3 Bài 2
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: |
2 trên 2 |
Giới thiệu
Hệ điều hành Unix ban đầu được thiết kế cho các máy tính hệ thống lớn vào giữa những năm 1960. Những máy tính này được chia sẻ giữa nhiều người dùng, những người này truy cập vào tài nguyên của hệ thống thông qua cửa sổ dòng lệnh. Những ý tưởng cơ bản này vẫn được áp dụng xuyên suốt đến các hệ thống Linux ngày nay. Giờ đây, chúng ta vẫn nói về việc sử dụng “cửa sổ dòng lệnh” để nhập lệnh trong vỏ như thế nào, và mọi hệ thống Linux đều được tổ chức ra sao để dễ dàng tạo được nhiều người dùng trên cùng một hệ thống.
Thư mục Chính
Sau đây là một ví dụ về hệ thống tệp thông thường trong Linux:
$ tree -L 1 / / ├── bin ├── boot ├── cdrom ├── dev ├── etc ├── home ├── lib ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin ├── srv ├── sys ├── tmp ├── usr └── var
Hầu hết các thư mục này đều sẽ nhất quán trên tất cả các hệ thống Linux. Từ máy chủ đến siêu máy tính cho đến hệ thống nhúng nhỏ, người dùng Linux dày dạn kinh nghiệm có thể tự tin rằng họ có thể tìm thấy lệnh ls
bên trong /bin
, có thể thay đổi cấu hình hệ thống bằng cách sửa đổi tệp trong /etc
và đọc nhật ký hệ thống trong /var
. Vị trí tiêu chuẩn của các tệp và thư mục này được xác định bởi Tiêu chuẩn Phân cấp Hệ thống Tệp (FHS - Filesystem Hierarchy Standard) sẽ được thảo luận trong bài học sau. Ta sẽ tìm hiểu thêm về nội dung của các thư mục này trong quá trình học về Linux; nhưng hiện tại, ta đã biết rằng:
-
những thay đổi mà bạn thực hiện trong hệ thống tệp gốc sẽ ảnh hưởng đến tất cả người dùng;
-
việc thay đổi tệp trong hệ thống tệp gốc sẽ yêu cầu quyền của quản trị viên. Điều này có nghĩa là người dùng bình thường sẽ bị cấm sửa đổi các tệp này và thậm chí có thể bị cấm đọc các tệp này. Ta sẽ đề cập đến chủ đề về quyền trong phần sau. Bây giờ, chúng ta sẽ tập trung vào thư mục mà giờ đây đã trở nên khá quen thuộc là
/home
:
$ tree -L 1 /home /home ├── user ├── michael └── lara
Hệ thống ví dụ của chúng ta có ba người dùng bình thường và mỗi người dùng đều có vị trí dành riêng cho họ; đó nơi họ có thể tạo và sửa đổi các tệp và thư mục mà không ảnh hưởng đến hàng xóm của mình. Ví dụ, trong bài học trước, chúng ta đã làm việc với cấu trúc tệp sau:
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt
Trên thực tế, hệ thống tệp có thể sẽ trông như thế này:
$ tree /home /home ├── user │ └── Documents │ ├── Mission-Statement │ └── Reports │ └── report2018.txt ├── michael │ ├── Documents │ │ └── presentation-for-clients.odp │ └── Music
…và tiếp tục tiếp diễn như vậy với lara
.
Trong Linux, /home
cũng tương tự như một tòa nhà chung cư. Nhiều người dùng có thể có không gian riêng của họ ở đây, được chia thành các căn hộ chuyên dụng. Các tiện ích và việc bảo trì tòa nhà là trách nhiệm của người dùng gốc, tức chính chủ sở hữu của toà nhà.
Đường dẫn Tương đối Đặc biệt cho Trang chủ chủ
Khi bạn bắt đầu một phiên mới trong cửa sổ dòng lệnh của Linux, bạn sẽ thấy một dấu nhắc lệnh tương tự như sau:
user@hostname ~ $
Dấu ngã (~
) ở đây đại diện cho thư mục chính của chúng ta. Nếu chạy lệnh ls
, bạn sẽ thấy một số kết quả quen thuộc:
$ cd ~ $ ls Documents
Hãy so sánh điều này với hệ thống tệp ở trên để kiểm tra kiến thức của bạn.
Bây giờ hãy cùng xem xét những gì chúng ta đã biết về Linux: nó tương tự như một tòa nhà chung cư với nhiều người dùng cư trú tại /home
. Vì vậy, nhà của user
sẽ khác với nhà của người dùng michael
. Để chứng minh cho điều này, chúng ta sẽ sử dụng lệnh su
để đổi người dùng.
user@hostname ~ $ pwd /home/user user@hostname ~ $ su - michael Password: michael@hostname ~ $ pwd /home/michael
Ý nghĩa của ~
sẽ thay đổi tùy thuộc vào người dùng là ai. Đối với michael
,
đường dẫn tuyệt đối của ~
là /home/michael
. Đối với lara
, đường dẫn tuyệt đối của ~
là /home/lara
, v.v.
Đường dẫn tệp từ Tương-đối-đến-Trang-chủ
Việc sử dụng ~
cho các lệnh là rất tiện dụng, miễn là bạn không chuyển đổi người dùng. Chúng ta sẽ cùng xem xét ví dụ sau cho user
khi người dùng này bắt đầu một phiên làm việc mới:
$ ls Documents $ cd Documents $ ls Mission-Statement Reports $ cd Reports $ ls report2018.txt $ cd ~ $ ls Documents
Hãy lưu ý rằng người dùng sẽ luôn bắt đầu một phiên mới trong thư mục chính của họ. Trong ví dụ này, user
đã đi vào thư mục con Documents/Reports
của họ và với lệnh cd ~
, họ đã quay lại vị trí ban đầu. Bạn có thể thực hiện thao tác tương tự bằng cách sử dụng lệnh cd
mà không cần đối số:
$ cd Documents/Reports $ pwd /home/user/Documents/Reports $ cd $ pwd /home/user
Một điều cuối cùng cần lưu ý: chúng ta có thể chỉ định thư mục chính của những người dùng khác bằng cách chỉ định tên người dùng sau dấu ngã. Ví dụ:
$ ls ~michael Documents Music
Hãy lưu ý rằng điều này sẽ chỉ có tác dụng nếu michael
đã cho phép chúng ta xem nội dung trong thư mục chính của anh ấy.
Hãy cùng xem xét tình huống mà trong đó michael
muốn xem tệp report2018.txt
trong thư mục chính của user
. Giả sử rằng michael
được cấp quyền để làm như vậy, anh ấy có thể sử dụng lệnh less
.
$ less ~user/Documents/Reports/report2018.txt
Bất kỳ đường dẫn tệp nào chứa ký tự ~
đều được gọi là đường dẫn tương đối đến trang chủ.
Tệp và Thư mục ẩn
Trong bài học trước, ta đã giới thiệu tùy chọn -a
cho lệnh ls
. Ta đã sử dụng ls -a
để giới thiệu hai đường dẫn tương đối đặc biệt: .
và ..
. Tùy chọn -a
sẽ liệt kê tất cả các tệp và thư mục, bao gồm cả các tệp và thư mục ẩn.
$ ls -a ~ . .. .bash_history .bash_logout .bash-profile .bashrc Documents
Các tệp và thư mục ẩn sẽ luôn bắt đầu bằng dấu chấm (.
). Theo mặc định, thư mục chính của người dùng sẽ bao gồm nhiều tệp ẩn. Chúng thường được sử dụng để đặt cài đặt cấu hình dành riêng cho người dùng và chỉ người dùng có kinh nghiệm mới sửa đổi được.
Tùy chọn Danh sách Dài
Lệnh ls
có nhiều tùy chọn để thay đổi hành vi của nó. Hãy cùng xem một trong những lựa chọn phổ biến nhất:
$ ls -l -rw-r--r-- 1 user staff 3606 Jan 13 2017 report2018.txt
-l
tạo một danh sách dài. Mỗi tệp và thư mục sẽ chiếm một dòng, nhưng thông tin bổ sung về từng tệp và thư mục cũng sẽ được hiển thị.
-rw-r—r--
-
Loại tệp và quyền của tệp. Hãy lưu ý rằng một tệp thông thường sẽ bắt đầu bằng dấu gạch ngang và một thư mục sẽ bắt đầu bằng
d
. 1
-
Số lượng liên kết đến tệp.
user staff
-
Chỉ định quyền sở hữu của tệp.
user
là chủ sở hữu của tệp và tệp cũng được liên kết với nhómstaff
. 3606
-
Kích thước của tệp tính bằng byte.
Jan 13 2017
-
Dấu thời gian của lần sửa đổi tệp cuối cùng.
report2018.txt
-
Tên của tệp.
Các vấn đề về quyền sở hữu, quyền hạn truy cập và liên kết sẽ được đề cập tới sau này. Như có thể thấy, phiên bản danh sách dài của lệnh ls
đôi khi sẽ tối ưu hơn so với mặc định.
Các Tùy chọn ls Bổ sung
Dưới đây là một số cách mà chúng ta thường sử dụng lệnh ls
nhất. Như có thể thấy, người dùng có thể kết hợp nhiều tùy chọn với nhau để có được đầu ra mong muốn.
ls -lh
-
Kết hợp danh sách dài với kích thước tệp con người có thể đọc được sẽ cung cấp cho chúng ta các hậu tố hữu ích, chẳng hạn như
M
cho megabyte hoặcK
cho kilobyte. ls -d */
-
Tùy chọn
-d
sẽ liệt kê các thư mục nhưng không liệt kê nội dung của chúng. Kết hợp nó với*/
sẽ chỉ hiển thị các thư mục con mà không có tệp. ls -lt
-
Kết hợp danh sách dài với tùy chọn sắp xếp theo thời gian sửa đổi. Các tệp có thay đổi gần đây nhất sẽ ở trên cùng và các tệp có thay đổi cũ nhất sẽ ở dưới cùng. Nhưng thứ tự này có thể được đảo ngược với:
ls -lrt
-
Kết hợp danh sách dài với sắp xếp theo thời gian (sửa đổi) _, kết hợp với
-r
sẽ _đảo ngược thứ tự sắp xếp. Bây giờ các tệp có thay đổi gần đây nhất sẽ nằm ở cuối danh sách. Ngoài việc sắp xếp theo thời gian sửa đổi, các tệp cũng có thể được sắp xếp theo thời gian truy cập hoặc theo thời gian trạng thái. ls -lX
-
Kết hợp danh sách dài với tùy chọn sắp xếp theo phần mở rộng của tệp. Ví dụ: điều này sẽ nhóm tất cả các tệp kết thúc bằng
.txt
hoặc bằng.jpg
lại với nhau, v.v. ls -S
-
-S
sẽ sắp xếp theo kích thước tệp, gần giống với-t
và-X
tương ứng là sắp xếp theo thời gian (time) và phần mở rộng (eXtension). Các tệp có kích thước lớn nhất sẽ xuất hiện trước và kích thước nhỏ nhất sẽ xuất hiện sau cùng. Hãy lưu ý rằng nội dung của các thư mục con sẽ không được bao gồm trong thứ tự sắp xếp. ls -R
-
Tùy chọn
-R
sẽ sửa đổi lệnhls
để hiển thị danh sách đệ quy. Điều này có nghĩa là gì?
Đệ quy trong Bash
Đệ quy được định nghĩa là một tình huống khi “một thứ gì đó được định nghĩa dựa trên chính nó”. Đệ quy là một khái niệm rất quan trọng trong khoa học máy tính, nhưng ở đây ý nghĩa của nó sẽ đơn giản hơn nhiều. Hãy xem xét ví dụ từ trước của chúng ta:
$ ls ~ Documents
Trước đây chúng ta đã biết rằng user
có một thư mục chính và trong thư mục này có một thư mục con. ls
cho đến nay chỉ hiển thị cho ta các tệp và thư mục con của một vị trí chứ không thể cho ta biết nội dung của các thư mục con này. Trong các bài học, chúng ta đã sử dụng lệnh tree
khi muốn hiển thị nội dung của nhiều thư mục. Thật không may, tree
không phải là một trong những tiện ích cốt lõi của Linux và do đó không phải lúc nào cũng có sẵn. Hãy so sánh đầu ra của tree
với đầu ra của ls -R
trong các ví dụ sau:
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt $ ls -R ~ /home/user/: Documents /home/user/Documents: Mission-Statement Reports /home/user/Documents/Reports: report2018.txt
Như có thể thấy, với tùy chọn đệ quy, chúng ta sẽ nhận được một danh sách tệp dài hơn nhiều. Trên thực tế, nó giống như thể chúng ta đã chạy lệnh ls
trong thư mục chính của user
và bắt gặp một thư mục con. Sau đó, chúng ta đã vào thư mục con đó và chạy lại lệnh ls
. Ta đã gặp tệp Mission-Statement
và một thư mục con khác có tên là Reports
. Và một lần nữa, ta lại truy cập vào thư mục con và chạy lại lệnh ls
. Về cơ bản, chạy ls -R
giống như nói với Bash: “Chạy ls
tại đây và lặp lại lệnh trong mọi thư mục con mà bạn tìm thấy.”
Đệ quy đặc biệt quan trọng trong các lệnh sửa đổi tệp như sao chép hoặc xóa thư mục. Ví dụ: nếu bạn muốn sao chép thư mục con Documents
, bạn cần chỉ định một bản sao đệ quy để mở rộng lệnh này cho tất cả các thư mục con.
Bài tập Hướng dẫn
-
Hãy sử dụng cấu trúc tệp sau để trả lời ba câu hỏi sau:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
Lệnh nào sẽ điều hướng vào thư mục
network
bất kể vị trí hiện tại của bạn là gì? -
user
có thể nhập lệnh nào để điều hướng vào thư mụcDocuments
của nó từ/etc/udev
? Hãy sử dụng đường dẫn ngắn nhất có thể. -
user
có thể nhập lệnh nào để điều hướng vào thư mụcMusic
củamichael
? Hãy sử dụng đường dẫn ngắn nhất có thể.
-
-
Hãy xem xét đầu ra sau của
ls -lh
để trả lời hai câu hỏi tiếp theo. Hãy lưu ý rằng các thư mục sẽ được biểu thị bằngd
ở đầu dòng.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Khi chạy lệnh
ls -lrS
thì file nào đứng đầu? -
Hãy mô tả những gì bạn muốn thấy trong đầu ra của
ls -ad */
.
-
Bài tập Mở rộng
-
Hãy chạy lệnh
ls -lh
trong thư mục chứa các thư mục con. Hãy lưu ý kích thước được liệt kê của các thư mục này. Kích thước của các tệp này trông có hợp lý hay không? Chúng có thể hiện chính xác nội dung của tất cả các tệp bên trong thư mục đó không? -
Đây là một lệnh mới để thử:
du -h
. Hãy chạy lệnh này và mô tả đầu ra của nó. -
Trên nhiều hệ thống Linux, bạn có thể nhập
ll
và nhận được kết quả giống như khi bạn nhậpls -l
. Tuy nhiên, hãy lưu ý rằngll
không phải là một lệnh. Ví dụ:man ll
sẽ cho ra thông báo rằng không có mục nhập thủ công nào cho nó. Đây là một ví dụ về bí danh. Tại sao bí danh có thể trở nên hữu ích cho người dùng?
Tóm tắt
Trong bài học này, bạn đã học được: * mỗi người dùng Linux sẽ có một thư mục chính,
-
có thể truy cập thư mục chính của người dùng hiện tại bằng cách sử dụng
~
, -
bất kỳ đường dẫn tệp nào sử dụng
~
đều được gọi là đường dẫn tương đối đến trang chủ.
Bạn cũng đã học về một số cách phổ biến nhất để sửa đổi lệnh `ls.
-a
(all)-
in tất cả các tệp/thư mục, bao gồm cả các thành phần ẩn
-d
(directories)-
liệt kê các thư mục chứ không phải nội dung của chúng
-h
(human readable)-
in kích thước tệp ở định dạng con người có thể đọc được
-l
(long list)-
cung cấp thêm chi tiết, mỗi một tệp/thư mục trên mỗi dòng
-r
(reverse)-
đảo ngược thứ tự sắp xếp
-R
(recursive)-
liệt kê mọi tệp, bao gồm cả các tệp trong mỗi thư mục con
-S
(size)-
sắp xếp theo kích thước tệp
-t
(time)-
sắp xếp theo thời gian sửa đổi
-X
(eXtension)-
sắp xếp theo phần mở rộng tệp
Đáp án Bài tập Hướng dẫn
-
Hãy sử dụng cấu trúc tệp sau để trả lời ba câu hỏi sau:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
Lệnh nào sẽ điều hướng vào thư mục
network
bất kể vị trí hiện tại của bạn là gì?cd /etc/network
-
user
có thể nhập lệnh nào để điều hướng vào thư mụcDocuments
của nó từ/etc/udev
? Hãy sử dụng đường dẫn ngắn nhất có thể.cd ~/Documents
-
user
có thể nhập lệnh nào để điều hướng vào thư mụcMusic
củamichael
? Hãy sử dụng đường dẫn ngắn nhất có thể.cd ~michael/Music
-
-
Hãy xem xét đầu ra sau của
ls -lh
để trả lời hai câu hỏi tiếp theo. Hãy lưu ý rằng các thư mục sẽ được biểu thị bằngd
ở đầu dòng.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Khi chạy lệnh
ls -lrS
thì file nào đứng đầu?Cả ba thư mục đều là 4.0K, đây là kích thước tệp nhỏ nhất.
ls
sau đó sẽ sắp xếp các thư mục theo thứ tự bảng chứ cái theo mặc định. Câu trả lời đúng ở đây là tệpscary.jpg
. -
Hãy mô tả những gì bạn muốn thấy trong đầu ra của
ls -ad */
.Lệnh này sẽ hiển thị tất cả các thư mục con, kể cả các thư mục con ẩn.
-
Đáp án Bài tập Mở rộng
-
Hãy chạy lệnh
ls -lh
trong thư mục chứa các thư mục con. Hãy lưu ý kích thước được liệt kê của các thư mục này. Kích thước của các tệp này trông có hợp lý hay không? Chúng có thể hiện chính xác nội dung của tất cả các tệp bên trong thư mục đó không?Không. Mỗi thư mục đều có kích thước tệp được liệt kê là 4096 byte. Điều này là do các thư mục ở đây là dạng trừu tượng: chúng không tồn tại dưới dạng cấu trúc cây trên đĩa. Khi bạn thấy một thư mục được liệt kê tức là bạn đang thấy một liên kết tới một danh sách các tệp. Kích thước của các liên kết này là 4096 byte.
-
Đây là một lệnh mới để thử:
du -h
. Hãy chạy lệnh này và mô tả đầu ra của nó.Lệnh
du
sẽ hiển thị danh sách tất cả các tệp và thư mục, đồng thời cho biết kích thước của từng tệp. Ví dụ:du -s
sẽ hiển thị kích thước tệp của tất cả các tệp, thư mục và thư mục con cho một vị trí nhất định. -
Trên nhiều hệ thống Linux, bạn có thể nhập
ll
và nhận được kết quả giống như khi bạn nhậpls -l
. Tuy nhiên, hãy lưu ý rằngll
không phải là một lệnh. Ví dụ:man ll
sẽ cho ra thông báo rằng không có mục nhập thủ công nào cho nó. Đây là một ví dụ về bí danh. Tại sao bí danh có thể trở nên hữu ích cho người dùng?ll
là bí danh củals -l
. Trong Bash, chúng ta có thể sử dụng bí danh để đơn giản hóa các lệnh thường được sử dụng.ll
thường được định sẵn cho bạn trong Linux, nhưng bạn cũng có thể tạo các bí danh của riêng mình.