4.3 Bài 1
Chứng chỉ: |
Linux Essentials |
---|---|
Phiên bản: |
1.6 |
Chủ đề: |
4 Hệ điều hành Linux |
Mục tiêu: |
4.3 Nơi lưu trữ Dữ liệu |
Bài: |
1 trên 2 |
Giới thiệu
Đối với một hệ điều hành, mọi thứ đều được coi là dữ liệu. Đối với Linux, tất cả mọi thứ đều được coi là tệp: chương trình, tệp thông thường, thư mục, thiết bị khối (ổ cứng, v.v.), thiết bị kiểu ký tự (bảng điều khiển, v.v.), các quy trình của hạt nhân, ổ cắm, phân vùng, liên kết, v.v. Cấu trúc của thư mục trong Linux được bắt đầu từ gốc (root) /
; đây là một tập hợp các tệp chứa dữ liệu. Việc mọi thứ đều là một tệp chính là một tính năng mạnh mẽ của Linux vì điều này cho phép ta tinh chỉnh hầu như mọi khía cạnh của hệ thống.
Trong bài học này, chúng ta sẽ thảo luận về các vị trí khác nhau mà trong đó dữ liệu quan trọng được lưu trữ theo thiết lập Tiêu chuẩn Phân cấp Hệ thống Tệp Linux (FHS). Một trong số các vị trí này là các thư mục thực lưu trữ dữ liệu liên tục trên đĩa, trong khi các vị trí khác lại là hệ thống tệp giả được tải trong bộ nhớ và cho phép chúng ta truy cập vào dữ liệu hệ thống con của hạt nhân như các quy trình đang chạy, việc sử dụng bộ nhớ, cấu hình phần cứng, v.v. Dữ liệu được lưu trữ trong các thư mục ảo này được sử dụng bởi một số lệnh cho phép chúng ta theo dõi và xử lý chúng.
Các Chương trình và Cấu hình của chúng
Các dữ liệu quan trọng trên hệ thống Linux — không cần phải tranh cãi — chính là các chương trình và tệp cấu hình của chúng. Các chương trình chính là các tệp thực thi chứa các tâp lệnh được chạy bởi bộ xử lý của máy tính, trong khi các tệp cấu hình thường là những tài liệu văn bản điều khiển hoạt động của chương trình. Các tệp thực thi có thể là tệp nhị phân hoặc tệp văn bản. Các tệp văn bản có thể thực thi được gọi là tệp lệnh. Dữ liệu cấu hình trên Linux thường cũng được lưu trữ trong các tệp văn bản dù vẫn có nhiều cách biểu diễn dữ liệu cấu hình khác nữa.
Nơi lưu trữ Tệp Nhị phân
Giống như bất kỳ một tệp nào khác, các tệp thực thi sẽ nằm trong các thư mục từ /
. Cụ thể hơn, các chương trình sẽ được phân phối theo cấu trúc ba tầng: tầng thứ nhất (/
) bao gồm các chương trình có thể sẽ cần thiết cho chế độ một người dùng; tầng thứ hai (/usr
) chứa hầu hết các chương trình đa người dùng; tầng thứ ba (/usr/local
) được sử dụng để lưu trữ các phần mềm không được cung cấp bởi bản phân phối và đã được biên dịch cục bộ.
Các vị trí điển hình cho các chương trình bao gồm:
/sbin
-
Chứa các tệp nhị phân cần thiết để quản trị hệ thống, chẳng hạn như
parted
hoặcip
. /bin
-
Chứa các tệp nhị phân cần thiết cho tất cả người dùng, chẳng hạn như
ls
,mv
hoặcmkdir
. /usr/sbin
-
Lưu trữ các tệp nhị phân để quản trị hệ thống, chẳng hạn như
deluser
hoặcgroupadd
. /usr/bin
-
Bao gồm hầu hết các tệp thực thi — chẳng hạn như
free
,pstree
,sudo
hoặcman
— có thể được sử dụng bởi tất cả người dùng. /usr/local/sbin
-
Được sử dụng để lưu trữ các chương trình được cài đặt cục bộ để quản trị hệ thống và không được quản lý bởi trình quản lý gói của hệ thống.
/usr/local/bin
-
Phục vụ mục đích tương tự như
/usr/local/sbin
nhưng dành cho các chương trình người dùng thông thường.
Gần đây, một số bản phân phối đã bắt đầu thay thế /bin
và /sbin
bằng các liên kết tượng trưng đến /usr/bin
và /usr/sbin
.
Note
|
Thư mục |
Ngoài các thư mục này, người dùng thông thường có thể có các chương trình của riêng họ trong một trong hai địa chỉ sau đây:
-
/home/$USER/bin
-
/home/$USER/.local/bin
Tip
|
Bạn có thể tìm ra những thư mục nào có sẵn để từ đó chạy các tệp nhị phân bằng cách tham chiếu biến |
Chúng ta có thể tìm thấy vị trí của các chương trình bằng lệnh ` which`:
$ which git /usr/bin/git
Nơi lưu trữ Tệp Cấu hình
Thư mục /etc
Trong những ngày đầu, Unix sẽ có thư mục riêng cho từng loại dữ liệu, chẳng hạn như /bin
cho các tệp nhị phân và /boot
cho hạt nhân. Tuy nhiên, /etc
(có nghĩa là vân vân) được tạo dưới dạng thư mục tổng hợp để lưu trữ bất kỳ tệp nào không thuộc các danh mục trên. Hầu hết các tệp này đều là tệp cấu hình. Theo thời gian, ngày càng có nhiều tệp cấu hình đã được thêm vào nên /etc
đã trở thành thư mục chính cho các tệp cấu hình của các chương trình. Như đã nói ở trên, một tệp cấu hình thường là một văn bản (trái ngược với tệp nhị phân) thuần túy cục bộ điều khiển hoạt động của một chương trình.
Trong /etc
, chúng ta có thể tìm thấy các mẫu khác nhau cho tên tệp cấu hình:
-
Các tệp có phần mở rộng ad hoc hoặc không có phần mở rộng nào, chẳng hạn như:
group
-
Cơ sở dữ liệu nhóm hệ thống.
hostname
-
Tên của máy chủ.
hosts
-
Danh sách địa chỉ IP và bản dịch tên máy chủ của chúng.
passwd
-
Cơ sở dữ liệu người dùng hệ thống — bao gồm bảy trường được phân tách bằng dấu hai chấm cung cấp thông tin về người dùng.
profile
-
Tệp cấu hình toàn hệ thống cho Bash.
shadow
-
Tệp được mã hóa cho mật khẩu người dùng.
-
Các tệp khởi tạo kết thúc bằng
rc
:bash.bashrc
-
Tệp
.bashrc
trên toàn hệ thống dành cho trình vỏ bash tương tác. nanorc
-
Tệp khởi tạo mẫu cho GNU nano (một trình soạn thảo văn bản đơn giản thường đi kèm với bất kỳ bản phân phối nào).
-
Các tệp kết thúc bằng
.conf
:resolv.conf
-
Tệp cấu hình cho trình phân giải — cung cấp quyền truy cập vào Hệ thống tên miền Internet (DNS - Domain Name System).
sysctl.conf
-
Tệp cấu hình để đặt các biến hệ thống cho nhân.
-
Các thư mục có đuôi
.d
:Một số chương trình có một tệp cấu hình duy nhất (
*.conf
hoặc khác) đã phát triển để có thư mục*.d
chuyên dụng giúp xây dựng các cấu hình mô-đun mạnh mẽ hơn. Ví dụ: để định cấu hình logrotate, bạn sẽ tìmlogrotate.conf
cũng như các thư mụclogrotate.d
.Cách tiếp cận này khá là hữu ích trong những trường hợp mà các ứng dụng khác nhau cần cấu hình cho cùng một dịch vụ cụ thể. Ví dụ: nếu một gói máy chủ web chứa cấu hình logrotate thì tức là cấu hình có thể hiện đang được đặt trong một tệp chuyên dụng trong thư mục
logrotate.d
. Tệp này có thể được cập nhật bởi gói máy chủ web mà không phải cần phải can thiệp vào cấu hình logrotate còn lại. Tương tự như vậy, các gói có thể thêm các tác vụ cụ thể bằng cách đặt các tệp trong thư mục/etc/cron.d
thay vì sửa đổi/etc/crontab
.Trong Debian — cũng như các phái sinh của nó — cách tiếp cận như vậy đã được áp dụng cho danh sách các nguồn đáng tin cậy được đọc bởi công cụ quản lý gói
apt
: ngoài/etc/apt/sources.list
cổ điển, giờ đây chúng ta có thể tìm thư mục/etc/apt/sources.list.d
:$ ls /etc/apt/sources* /etc/apt/sources.list /etc/apt/sources.list.d:
Tệp cấu hình trong HOME
(Dotfiles)
Ở cấp độ người dùng, các chương trình lưu trữ cấu hình và thiết lập của chúng trong các tệp ẩn trong thư mục chính của người dùng (cũng được biểu thị bằng ~
). Hãy nhớ rằng, các tệp ẩn sẽ được bắt đầu bằng dấu chấm (.
- dot) — do đó tên của chúng là dotfiles.
Một số tệp dotfile này là các tệp lệnh Bash sẽ tùy chỉnh phiên vỏ của người dùng và được cung cấp ngay sau khi người dùng đăng nhập vào hệ thống:
.bash_history
-
Lưu trữ lịch sử dòng lệnh.
.bash_logout
-
Bao gồm các lệnh để thực thi khi rời khỏi vỏ đăng nhập.
.bashrc
-
Tệp lệnh khởi tạo của Bash cho vỏ không đăng nhập.
.profile
-
Tệp lệnh khởi tạo của Bash cho các vỏ đăng nhập.
Note
|
Tham khảo bài học về “Khái niệm cơ bản về Dòng lệnh” để tìm hiểu thêm về Bash và các tệp khởi tạo của nó. |
Các tệp cấu hình của những chương trình dành riêng cho từng người dùng khác sẽ được lấy nguồn khi các chương trình tương ứng của chúng được khởi động: .gitconfig
, .emacs.d
, .ssh
, v.v.
Nhân Linux
Trước khi bất kỳ quy trình nào có thể chạy, hạt nhân phải được tải vào một vùng bộ nhớ được bảo vệ. Sau đó, quy trình với PID 1
(ngày nay thường là systemd
) sẽ khởi động chuỗi quy trình, tức là một quy trình sẽ bắt đầu (các) quy trình khác và cứ tiếp tục như vậy. Khi các quy trình đang hoạt động, nhân Linux sẽ chịu trách nhiệm phân bổ tài nguyên cho chúng (bàn phím, chuột, đĩa, bộ nhớ, giao diện mạng, v.v.).
Note
|
Trước |
Nơi lưu trữ Hạt nhân: /boot
Hạt nhân nằm trong /boot
— cùng với các tệp liên quan đến tác vụ khởi động khác. Hầu hết các tệp này đều có các thành phần số phiên bản của hạt nhân trong tên của chúng (phiên bản hạt nhân, bản sửa đổi chính, bản sửa đổi phụ và số bản vá).
Thư mục /boot
sẽ bao gồm các loại tệp sau với tên tương ứng với phiên bản của hạt nhân:
config-4.9.0-9-amd64
-
Cài đặt cấu hình cho hạt nhân, chẳng hạn như các tùy chọn và mô-đun được biên dịch cùng với hạt nhân.
initrd.img-4.9.0-9-amd64
-
Hình ảnh đĩa RAM ban đầu giúp ích trong quá trình khởi động bằng cách tải hệ thống tệp gốc tạm thời vào bộ nhớ.
System-map-4.9.0-9-amd64
-
Tệp
System-map
(trên một số hệ thống sẽ được đặt tên làSystem.map
) có chứa các địa chỉ bộ nhớ cho các tên ký hiệu của hạt nhân. Mỗi khi hạt nhân được xây dựng lại, nội dung của tệp sẽ thay đổi do các địa chỉ bộ nhớ có thể sẽ khác nhau. Hạt nhân sẽ sử dụng tệp này để tra cứu các địa chỉ bộ nhớ cho một ký hiệu hạt nhân cụ thể hoặc ngược lại. vmlinuz-4.9.0-9-amd64
-
Hạt nhân thích hợp ở định dạng tự giải nén, tiết kiệm không gian và nén (nên ta có
z
trongvmlinuz
;vm
là viết tắt của bộ nhớ ảo — virtual memory --và sẽ bắt đầu được sử dụng khi hạt nhân lần đầu tiên nhận được hỗ trợ cho bộ nhớ ảo). grub
-
Thư mục cấu hình cho bộ nạp khởi động
grub2
.
Tip
|
Bởi là một tính năng quan trọng của hệ điều hành nên nhiều hơn một hạt nhân và các tệp liên quan của nó sẽ được giữ trong |
Thư mục /proc
Thư mục /proc
là một trong những hệ thống tệp ảo hoặc hệ thống tệp giả vì nội dung của nó không được ghi vào đĩa mà sẽ được tải trong bộ nhớ. Nó sẽ được điền động mỗi khi máy tính khởi động và sẽ liên tục phản ánh trạng thái hiện tại của hệ thống. /proc
sẽ bao gồm các thông tin về:
-
Các quy trình đang chạy
-
Cấu hình nhân
-
Phần cứng hệ thống
Bên cạnh tất cả các dữ liệu liên quan đến các quy trình mà chúng ta sẽ thấy trong bài học tiếp theo, thư mục này cũng lưu trữ các tệp có thông tin về phần cứng của hệ thống và cài đặt cấu hình của hạt nhân. Một số tệp này sẽ bao gồm:
/proc/cpuinfo
-
Nó lưu trữ thông tin về CPU của hệ thống:
$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 158 model name : Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz stepping : 10 cpu MHz : 3696.000 cache size : 12288 KB (...)
/proc/cmdline
-
Nó lưu trữ các chuỗi được chuyển đến hạt nhân khi khởi động:
$ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet
/proc/modules
-
Nó hiển thị danh sách các mô-đun được tải vào hạt nhân:
$ cat /proc/modules nls_utf8 16384 1 - Live 0xffffffffc0644000 isofs 40960 1 - Live 0xffffffffc0635000 udf 90112 0 - Live 0xffffffffc061e000 crc_itu_t 16384 1 udf, Live 0xffffffffc04be000 fuse 98304 3 - Live 0xffffffffc0605000 vboxsf 45056 0 - Live 0xffffffffc05f9000 (O) joydev 20480 0 - Live 0xffffffffc056e000 vboxguest 327680 5 vboxsf, Live 0xffffffffc05a8000 (O) hid_generic 16384 0 - Live 0xffffffffc0569000 (...)
Thư mục /proc/sys
Thư mục này bao gồm các thiết lập về cấu hình của hạt nhân trong các tệp được phân loại thành các danh mục trên mỗi thư mục con:
$ ls /proc/sys abi debug dev fs kernel net user vm
Hầu hết các tệp này hoạt động giống như một công tắc và — do đó — chỉ chứa một trong hai giá trị: 0
hoặc 1
(“bật” hoặc “tắt”). Ví dụ:
/proc/sys/net/ipv4/ip_forward
-
Giá trị cho phép hoặc vô hiệu hóa máy của người dùng hoạt động như một bộ định tuyến (có thể chuyển tiếp các gói):
$ cat /proc/sys/net/ipv4/ip_forward 0
Tuy nhiên cũng có một số trường hợp ngoại lệ:
/proc/sys/kernel/pid_max
-
PID tối đa cho phép:
$ cat /proc/sys/kernel/pid_max 32768
Warning
|
Hãy hết sức cẩn thận khi thay đổi cài đặt nhân vì giá trị sai có thể dẫn đến một hệ thống không ổn định. |
Thiết bị Phần Cứng
Hãy nhớ rằng, trong Linux, “mọi thứ đều là tệp”. Điều này ngụ ý rằng thông tin thiết bị phần cứng cũng như cài đặt cấu hình riêng của hạt nhân đều sẽ được lưu trữ trong các tệp đặc biệt nằm trong các thư mục ảo.
Thư mục /dev
Thư mục thiết bị /dev
chứa các tệp thiết bị (hoặc các nút) dành cho tất cả các thiết bị phần cứng được kết nối. Các tệp thiết bị này được sử dụng làm giao diện giữa các thiết bị và quy trình sử dụng chúng. Mỗi tệp thiết bị sẽ thuộc một trong hai loại sau:
- Thiết bị khối
-
Là những dữ liệu được đọc và ghi trong các khối có thể được xử lý riêng lẻ. Ví dụ: ổ cứng (và các phân vùng của chúng, như
/dev/sda1
), ổ flash USB, CD, DVD, v.v.
Thiết bị kiểu ký tự:
Là những dữ liệu mà trong đó dữ liệu được đọc và ghi tuần tự từng ký tự một. Các ví dụ có thể bao gồm bàn phím, bảng điều khiển văn bản (/dev/console
), cổng nối tiếp (chẳng hạn như /dev/ttyS0
, v.v.), v.v.
Khi liệt kê các tệp thiết bị, hãy đảm bảo rằng bạn có sử dụng ls
với khóa chuyển -l
để phân biệt giữa hai tệp. Ví dụ, chúng ta có thể kiểm tra ổ cứng và các phân vùng:
# ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 may 25 17:02 /dev/sda brw-rw---- 1 root disk 8, 1 may 25 17:02 /dev/sda1 brw-rw---- 1 root disk 8, 2 may 25 17:02 /dev/sda2 (...)
Hoặc cho các chương trình cửa sổ dòng lệnh nối tiếp (TeleTYpewriter):
# ls -l /dev/tty* crw-rw-rw- 1 root tty 5, 0 may 25 17:26 /dev/tty crw--w---- 1 root tty 4, 0 may 25 17:26 /dev/tty0 crw--w---- 1 root tty 4, 1 may 25 17:26 /dev/tty1 (...)
Hãy lưu ý ký tự đầu tiên là b
cho thiết bị khối (block devices) và c
cho thiết bị ký tự (character devices).
Tip
|
Dấu hoa thị ( |
Hơn nữa, /dev
bao gồm một số tệp đặc biệt khá hữu ích cho các mục đích lập trình khác nhau:
/dev/zero
-
Cung cấp ký tự rỗng theo yêu cầu.
/dev/null
-
Tức bit bucket. Nó loại bỏ tất cả các thông tin được gửi đến mình.
/dev/urandom
-
Tạo ra các số giả ngẫu nhiên.
Thư mục /sys
Hệ thống tệp sys (sysfs
) được gắn với /sys
. Nó được giới thiệu cùng lúc với sự ra đời của hạt nhân 2.6 và đại diện cho một cải tiến lớn trên /proc/sys
.
Các quy trình cần tương tác với các thiết bị trong /dev
và do đó, hạt nhân cần có một thư mục chứa thông tin về các thiết bị phần cứng này. Thư mục này là /sys
và dữ liệu của nó sẽ được sắp xếp theo thứ tự thành các danh mục. Chẳng hạn, để kiểm tra địa chỉ MAC của thẻ mạng của bạn (enp0s3
), bạn sẽ sử dụng lệnh cat
với tệp sau:
$ cat /sys/class/net/enp0s3/address 08:00:27:02:b2:74
Bộ nhớ và các loại Bộ nhớ
Về cơ bản, để một chương trình bắt đầu chạy, nó phải được tải vào bộ nhớ. Nhìn chung, khi nói về bộ nhớ tức là chúng ta đang đề cập đến Bộ nhớ truy cập ngẫu nhiên (RAM) và — khi so sánh với các ổ cứng cơ học — nó có ưu điểm là nhanh hơn rất nhiều. Tuy vậy, nó lại không được ổn định (tức là khi máy tính tắt, dữ liệu sẽ biến mất).
Mặc dù đã nói ở trên — khi nói đến bộ nhớ — chúng ta có thể phân biệt thành hai loại chính trong hệ thống Linux:
- Bộ nhớ vật lý
-
Còn được gọi là RAM; nó có dạng chip được tạo thành từ các mạch tích hợp chứa hàng triệu bóng bán dẫn và tụ điện. Chúng sẽ tạo thành các ô nhớ (khối xây dựng cơ bản của bộ nhớ máy tính). Mỗi ô này có một mã thập lục phân đính kèm — tức một địa chỉ bộ nhớ — để nó có thể được tham chiếu khi cần.
- Bộ nhớ Trao đổi
-
Còn được gọi là không gian trao đổi, đây là phần bộ nhớ ảo nằm trên ổ cứng và được sử dụng khi không còn RAM.
Mặt khác, ta có một khái niệm về bộ nhớ ảo: là sự trừu tượng hóa tổng dung lượng bộ nhớ có thể sử dụng được và có địa chỉ (RAM, cũng như dung lượng ổ đĩa) mà các ứng dụng có thể nhìn thấy.
Lệnh free
sẽ phân tích cú pháp /proc/meminfo
và hiển thị lượng bộ nhớ trống và đã sử dụng trong hệ thống một cách rất rõ ràng:
$ free total used free shared buff/cache available Mem: 4050960 1474960 1482260 96900 1093740 2246372 Swap: 4192252 0 4192252
Hãy cùng diễn giải các cột này:
total
-
Tổng dung lượng bộ nhớ vật lý và trao đổi được cài đặt.
used
-
Dung lượng bộ nhớ vật lý và trao đổi hiện đang được sử dụng.
free
-
Dung lượng bộ nhớ vật lý và trao đổi hiện đang không được sử dụng.
shared
-
Dung lượng bộ nhớ vật lý được sử dụng — chủ yếu — bởi
tmpfs
. buff/cache
-
Dung lượng bộ nhớ vật lý hiện đang được sử dụng bởi bộ đệm hạt nhân, các bộ nhớ mảnh và bộ đệm trang.
available
-
Ước tính dung lượng bộ nhớ vật lý có sẵn cho các quy trình mới.
Theo mặc định, lệnh free
sẽ hiển thị các giá trị theo kibibyte, nhưng nó cũng cho phép nhiều tuỳ chọn hiển thị kết quả của nó theo các đơn vị đo lường khác nhau. Một số tùy chọn này bao gồm:
-b
-
Bytes.
-m
-
Mebibytes.
-g
-
Gibibytes.
-h
-
Định dạng con người có thể đọc được.
-h
thì sẽ luôn luôn dễ đọc:
$ free -h total used free shared buff/cache available Mem: 3,9G 1,4G 1,5G 75M 1,0G 2,2G Swap: 4,0G 0B 4,0G
Note
|
Một kibibyte (KiB) bằng 1.024 byte trong khi một kilobyte (KB) bằng 1000 byte. Tương tự như vậy với mebibytes, gibibytes, v.v. |
Bài tập Hướng dẫn
-
Hãy sử dụng lệnh ` which` để tìm ra vị trí của các chương trình sau và hoàn thành bảng:
Chương trình Lệnh which
Đường dẫn đến Tệp Thực thi (đầu ra) Người dùng cần đặc quyền hệ thống? swapon
kill
cut
usermod
cron
ps
-
Các tệp sau đây được tìm thấy ở đâu?
Tệp /etc
~
.bashrc
bash.bashrc
passwd
.profile
resolv.conf
sysctl.conf
-
Hãy giải thích ý nghĩa của các phần tử số của tệp hạt nhân
vmlinuz-4.15.0-50-generic
được tìm thấy trong/boot
:Phần Tử Số Ý nghĩa 4
15
0
50
-
Bạn sẽ sử dụng lệnh nào để liệt kê tất cả các ổ cứng và phân vùng trong
/dev
?
Bài tập Mở rộng
-
Các tệp thiết bị của ổ cứng được trình bày dựa trên bộ điều khiển mà chúng sử dụng — chúng ta đã thấy
/dev/sd*
cho các ổ đĩa sử dụng SCSI (Giao diện Hệ thống Máy tính nhỏ) và SATA (Phần đính kèm Công nghệ Nâng cao Nối tiếp), nhưng-
Các ổ đĩa IDE (Điện tử truyền động tích hợp) cũ được trình bày như thế nào?
-
Và Ổ đĩa NVMe (Bộ nhớ nhanh ổn định) hiện đại thì sao?
-
-
Hãy xem tệp
/proc/meminfo
. Hãy so sánh nội dung của tệp này với đầu ra của lệnhfree
và xác định khóa nào từ/proc/meminfo
sẽ tương ứng với các trường sau trong đầu ra củafree
:đầu ra free
trường /proc/meminfo
total
free
shared
buff/cache
available
Tóm tắt
Trong bài học này, bạn đã học về vị trí của các chương trình và các tệp cấu hình của chúng trong hệ thống Linux. Những điều quan trọng ta cần nhớ là:
-
Về cơ bản, các chương trình có thể được tìm thấy trong cấu trúc thư mục ba cấp:
/
,/usr
và/usr/local
. Mỗi cấp độ này có thể chứa các thư mụcbin
vàsbin
. -
Các tệp cấu hình được lưu trữ trong
/etc
và~
. -
Dotfiles là những tệp ẩn bắt đầu bằng dấu chấm (
.
).
Chúng ta cũng đã thảo luận về nhân Linux. Các vấn đề quan trọng cần nhớ là:
* Đối với Linux, mọi thứ đều là tệp.
* Nhân Linux nằm trong /boot
cùng với các tệp liên quan đến khởi động khác.
* Để các quy trình bắt đầu tiến hành, trước tiên hạt nhân phải được tải vào vùng bộ nhớ được bảo vệ.
* Công việc của hạt nhân là phân bổ tài nguyên hệ thống cho các quy trình.
* Hệ thống tệp ảo (hoặc giả) /proc
sẽ lưu trữ dữ liệu hệ thống và hạt nhân quan trọng theo một cách không ổn định.
Tương tự như vậy, chúng ta cũng đã khám phá các thiết bị phần cứng và học được những điều sau:
-
Thư mục
/dev
lưu trữ các tệp đặc biệt (còn gọi là các nút) cho tất cả các thiết bị phần cứng được kết nối: thiết bị khối hoặc thiết bị kiểu ký tự. Thiết bị khối truyền dữ liệu theo khối; thiết bị kiểu ký tự truyền từng ký tự một. -
Thư mục
/dev
cũng chứa các tệp đặc biệt khác như/dev/zero
,/dev/null
hoặc/dev/urandom
. -
Thư mục
/sys
lưu trữ thông tin về các thiết bị phần cứng được sắp xếp thành các danh mục.
Cuối cùng, chúng ta đã tìm hiểu về bộ nhớ. Chúng ta đã học về:
-
Một chương trình sẽ chạy khi nó được nạp vào bộ nhớ.
-
RAM (Bộ nhớ truy cập ngẫu nhiên) là gì.
-
Bộ nhớ trao đổi là gì.
-
Cách hiển thị việc sử dụng bộ nhớ.
Các lệnh được dùng trong bài này:
cat
-
Nối/in nội dung tệp.
free
-
Hiển thị dung lượng bộ nhớ trống và đã sử dụng trong hệ thống.
ls
-
Liệt kê nội dung thư mục.
which
-
Hiển thị vị trí của chương trình.
Đáp án Bài tập Hướng dẫn
-
Hãy sử dụng lệnh ` which` để tìm ra vị trí của các chương trình sau và hoàn thành bảng:
Chương trình Lệnh which
Đường dẫn đến Tệp Thực thi (đầu ra) Người dùng cần đặc quyền hệ thống? swapon
which swapon
/sbin/swapon
Có
kill
which kill
/bin/kill
Không
cut
which cut
/usr/bin/cut
Không
usermod
which usermod
/usr/sbin/usermod
Có
cron
which cron
/usr/sbin/cron
Có
ps
which ps
/bin/ps
Không
-
Các tệp sau đây được tìm thấy ở đâu?
Tệp /etc
~
.bashrc
Không
Có
bash.bashrc
Có
Không
passwd
Có
Không
.profile
Không
Có
resolv.conf
Có
Không
sysctl.conf
Có
Không
-
Hãy giải thích ý nghĩa của các phần tử số của tệp hạt nhân
vmlinuz-4.15.0-50-generic
được tìm thấy trong/boot
:Phần Tử Số Ý nghĩa 4
Phiên bản Hạt Nhân
15
Bản chỉnh sửa Chính
0
Bản chỉnh sửa Phụ
50
Số bản vá
-
Bạn sẽ sử dụng lệnh nào để liệt kê tất cả các ổ cứng và phân vùng trong
/dev
?ls /dev/sd*
Đáp án Bài tập Mở rộng
-
Các tệp thiết bị của ổ cứng được trình bày dựa trên bộ điều khiển mà chúng sử dụng — chúng ta đã thấy
/dev/sd*
cho các ổ đĩa sử dụng SCSI (Giao diện Hệ thống Máy tính nhỏ) và SATA (Phần đính kèm Công nghệ Nâng cao Nối tiếp), nhưng-
Các ổ đĩa IDE (Điện tử truyền động tích hợp) cũ được trình bày như thế nào?
/dev/hd*
-
Và Ổ đĩa NVMe (Bộ nhớ nhanh ổn định) hiện đại thì sao?
/dev/nvme*
-
-
Hãy xem tệp
/proc/meminfo
. Hãy so sánh nội dung của tệp này với đầu ra của lệnhfree
và xác định khóa nào từ/proc/meminfo
tương ứng với các trường sau trong đầu ra củafree
:đầu ra free
trường /proc/meminfo
total
MemTotal
/SwapTotal
free
MemFree
/SwapFree
shared
Shmem
buff/cache
Buffers
,Cached
vàSReclaimable
available
MemAvailable