4.3 Bài 2
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: |
2 trên 2 |
Giới thiệu
Sau khi đã khám phá các chương trình và tệp cấu hình của chúng, chúng ta sẽ cùng tìm hiểu về cách các lệnh được thực thi dưới dạng các quy trình trong bài học này. Tương tự, chúng ta sẽ thảo luận về thông báo của hệ thống, việc sử dụng bộ đệm vòng của hạt nhân và những sự thay đổi so với trước đây mà systemd
và journald
(nhật ký chạy nền của systemd
) đã đóng góp trong việc ghi nhật ký hệ thống.
Quy trình
Mỗi khi người dùng đưa ra một lệnh, một chương trình sẽ chạy và một hoặc nhiều quy trình sẽ được tạo ra.
Các quy trình tồn tại trong một hệ thống phân cấp. Sau khi hạt nhân được tải vào bộ nhớ khi khởi động, quy trình đầu tiên sẽ được bắt đầu; việc này sẽ kích hoạt các quy trình khác và các quy trình này cũng có thể lại tiếp tục kích hoạt các quy trình khác nữa. Mỗi quy trình có một mã định danh (PID
) và mã định danh quy trình gốc (PPID
) duy nhất. Đây là những số nguyên dương được gán theo thứ tự liên tiếp.
Khám phá các Quy trình Động: top
Bạn có thể nhận được danh sách động của tất cả các quy trình đang chạy bằng lệnh top
:
$ top top - 11:10:29 up 2:21, 1 user, load average: 0,11, 0,20, 0,14 Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie %Cpu(s): 0,0 us, 0,3 sy, 0,0 ni, 99,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st KiB Mem : 1020332 total, 909492 free, 38796 used, 72044 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 873264 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 436 carol 20 0 42696 3624 3060 R 0,7 0,4 0:00.30 top 4 root 20 0 0 0 0 S 0,3 0,0 0:00.12 kworker/0:0 399 root 20 0 95204 6748 5780 S 0,3 0,7 0:00.22 sshd 1 root 20 0 56872 6596 5208 S 0,0 0,6 0:01.29 systemd 2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0,0 0,0 0:00.02 ksoftirqd/0 5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H 6 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kworker/u2:0 7 root 20 0 0 0 0 S 0,0 0,0 0:00.08 rcu_sched 8 root 20 0 0 0 0 S 0,0 0,0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0,0 0,0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 lru-add-drain (...)
Như chúng ta đã thấy ở trên, lệnh top
cũng có thể cung cấp cho chúng ta thông tin về mức tiêu thụ bộ nhớ và CPU của toàn bộ hệ thống cũng như của từng quy trình.
Lệnh top
cũng cho phép người dùng thực hiện một số tương tác.
Theo mặc định, đầu ra sẽ được sắp xếp theo thứ tự giảm dần của tỷ lệ phần trăm thời gian CPU được sử dụng bởi mỗi quy trình. Hành vi này có thể được sửa đổi bằng cách nhấn các phím sau từ bên trong top
:
M
-
Sắp xếp theo mức sử dụng bộ nhớ.
N
-
Sắp xếp theo số ID của quy trình.
T
-
Sắp xếp theo thời gian chạy.
P
-
Sắp xếp theo phần trăm sử dụng CPU.
Để chuyển đổi giữa thứ tự giảm dần/tăng dần, ta chỉ cần nhấn R
.
Tip
|
Một phiên bản cao cấp và thân thiện với người dùng hơn của |
Hình ảnh tức thời của Các Quy trình: ps
Một lệnh rất hữu ích khác dùng để lấy thông tin về các quy trình là ps
. Trong khi top
cung cấp thông tin động, ps
lại cũng cấp các thông tin tĩnh.
Nếu ta gọi ps
mà không có tuỳ chọn, đầu ra của nó sẽ khá rời rạc và sẽ chỉ liên quan đến các quy trình được gắn với vỏ hiện tại:
$ ps PID TTY TIME CMD 2318 pts/0 00:00:00 bash 2443 pts/0 00:00:00 ps
Thông tin được hiển thị sẽ liên quan đến mã định danh quy trình (PID
), cửa sổ dòng lệnh mà trong đó quy trình được chạy (TTY
), thời gian quy trình sử dụng CPU (TIME
) và lệnh bắt đầu quy trình ( CMD
).
Một khoá chuyển hữu ích cho ps
là -f
được dùng để hiển thị danh sách định dạng đầy đủ:
$ ps -f UID PID PPID C STIME TTY TIME CMD carol 2318 1682 0 08:38 pts/1 00:00:00 bash carol 2443 2318 0 08:46 pts/1 00:00:00 ps -f
Khi kết hợp với các khoá chuyển khác, -f
sẽ hiển thị mối quan hệ giữa các quy trình mẹ và quy trình con:
$ ps -uf USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND carol 2318 0.0 0.1 21336 5140 pts/1 Ss 08:38 0:00 bash carol 2492 0.0 0.0 38304 3332 pts/1 R+ 08:51 0:00 \_ ps -uf carol 1780 0.0 0.1 21440 5412 pts/0 Ss 08:28 0:00 bash carol 2291 0.0 0.7 305352 28736 pts/0 Sl+ 08:35 0:00 \_ emacs index.en.adoc -nw (...)
Tương tự như vậy, ps
có thể hiển thị phần trăm bộ nhớ được sử dụng khi được gọi với khóa chuyển -v
:
$ ps -v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 1163 tty2 Ssl+ 0:00 1 67 201224 5576 0.1 /usr/lib/gdm3/gdm-x-session (...) (...)
Note
|
Một lệnh trực quan hấp dẫn khác có thể hiển thị hệ thống phân cấp của các quy trình là |
Thông tin Quy trình trong Thư mục /proc
Chúng ta đã biết hệ thống tệp /proc
. /proc
bao gồm một thư mục con được đánh số cho mọi quy trình đang chạy trong hệ thống (số này chính là PID
của quy trình):
carol@debian:~# ls /proc 1 108 13 17 21 27 354 41 665 8 9 10 109 14 173 22 28 355 42 7 804 915 103 11 140 18 23 29 356 428 749 810 918 104 111 148 181 24 3 367 432 75 811 105 112 149 19 244 349 370 433 768 83 106 115 15 195 25 350 371 5 797 838 107 12 16 2 26 353 404 507 798 899 (...)
Do đó, tất cả các thông tin về một quy trình cụ thể đều sẽ có trong thư mục của nó. Hãy cùng liệt kê nội dung của quy trình đầu tiên — với PID
là 1
(đầu ra đã được cắt bớt để dễ đọc hơn):
# ls /proc/1/ attr cmdline environ io mem ns autogroup comm exe limits mountinfo numa_maps auxv coredump_filter fd loginuid mounts oom_adj ...
Bạn có thể kiểm tra quá trình thực thi:
# cat /proc/1/cmdline; echo /sbin/init
Như bạn có thể thấy, mã nhị phân phân cấp các quy trình là /sbin/init
.
Note
|
Các lệnh có thể được nối bằng dấu chấm phẩy ( |
Tải Hệ thống
Mỗi quy trình trên một hệ thống đều có khả năng tiêu tốn tài nguyên hệ thống. Việc tải hệ thống sẽ tổng hợp tải trọng tổng thể của hệ thống thành một chỉ số duy nhất. Bạn có thể xem tải trọng hiện tại bằng lệnh uptime
:
$ uptime 22:12:54 up 13 days, 20:26, 1 user, load average: 2.91, 1.59, 0.39
Ba chữ số cuối cùng sẽ cho biết trọng tải trung bình tương ứng của hệ thống trong một phút vừa qua (2,91
), năm phút vừa qua (1,59
) và mười lăm phút vừa qua (0,39
).
Mỗi con số này sẽ cho ta biết có bao nhiêu quy trình đang chờ tài nguyên của CPU hoặc các hoạt động đầu vào/đầu ra hoàn tất. Điều này có nghĩa là các quy trình này đã sẵn sàng để chạy nếu chúng nhận được các tài nguyên tương ứng.
Ghi nhật ký Hệ thống và Thông báo của Hệ thống
Ngay khi hạt nhân và các quy trình bắt đầu thực thi và giao tiếp với nhau, rất nhiều thông tin sẽ được tạo ra. Hầu hết trong số chúng sẽ được gửi đến các tệp nhật ký, hoặc đơn giản hơn là logs.
Nếu không ghi nhật ký, việc tìm kiếm một sự kiện xảy ra trên máy chủ sẽ khiến các quản trị viên hệ thống phải đau đầu; do đó, việc có một cách thức chuẩn hóa và tập trung để theo dõi bất kỳ sự kiện nào đã xảy ra trên hệ thống là một việc rất quan trọng. Bên cạnh đó, nhật ký là yếu tố quyết định và hữu ích trong việc xử lý sự cố và bảo mật, cũng như là một nguồn dữ liệu đáng tin cậy để hiểu thống kê của hệ thống và đưa ra dự đoán xu hướng.
Ghi nhật ký bằng nhật ký hệ thống Daemon
Theo truyền thống, các thông báo của hệ thống vẫn sẽ được quản lý bởi cơ sở ghi nhật ký tiêu chuẩn — syslog — hoặc bất kỳ dẫn xuất nào của nó — syslog-ng hoặc rsyslog. Nhật ký Daemon sẽ thu thập thông báo từ các dịch vụ và chương trình khác và sẽ lưu trữ chúng trong tệp nhật ký, thường là /var/log
. Tuy nhiên, một số dịch vụ sẽ đảm nhận việc ghi nhật ký của riêng chúng (ví dụ như máy chủ web Apache HTTPD). Tương tự như vậy, nhân Linux sử dụng bộ đệm vòng trong bộ nhớ để lưu trữ dữ liệu nhật ký của nó.
Các Tệp Nhật ký trong /var/log
Vì nhật ký là dữ liệu sẽ thay đổi theo thời gian nên chúng thường được tìm thấy trong /var/log
.
Nếu bạn tìm hiểu về /var/log
, bạn sẽ nhận ra rằng tên của nhật ký — ở một mức độ nào đó — khá là dễ hiểu. Một số ví dụ bao gồm:
/var/log/auth.log
-
Lưu trữ thông tin về việc xác thực (authentication).
/var/log/kern.log
-
Lưu trữ thông tin về hạt nhân.
/var/log/syslog
-
Lưu trữ thông tin hệ thống.
/var/log/message
-
Lưu trữ dữ liệu hệ thống và ứng dụng.
Note
|
Tên và nội dung chính xác của các tệp nhật ký có thể sẽ khác nhau giữa các bản phân phối Linux. |
Truy cập Tệp Nhật ký
Khi tìm hiểu về các tệp nhật ký, hãy nhớ rằng bạn phải người dùng gốc (nếu bạn không có quyền đọc) và sử dụng một lệnh nhắn chẳng hạn như less
;
# less /var/log/messages Jun 4 18:22:48 debian liblogging-stdlog: [origin software="rsyslogd" swVersion="8.24.0" x-pid="285" x-info="http://www.rsyslog.com"] rsyslogd was HUPed Jun 29 16:57:10 debian kernel: [ 0.000000] Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.130-2 (2018-10-27) Jun 29 16:57:10 debian kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet
Ngoài ra, bạn có thể sử dụng tail
với khóa chuyển -f
để đọc các thông báo gần đây nhất của tệp và tự động hiển thị các dòng mới khi chúng được thêm vào:
# tail -f /var/log/messages Jul 9 18:39:37 debian kernel: [ 2.350572] RAPL PMU: hw unit of domain psys 2^-0 Joules Jul 9 18:39:37 debian kernel: [ 2.512802] input: VirtualBox USB Tablet as /devices/pci0000:00/0000:00:06.0/usb1/1-1/1-1:1.0/0003:80EE:0021.0001/input/input7 Jul 9 18:39:37 debian kernel: [ 2.513861] Adding 1046524k swap on /dev/sda5. Priority:-1 extents:1 across:1046524k FS Jul 9 18:39:37 debian kernel: [ 2.519301] hid-generic 0003:80EE:0021.0001: input,hidraw0: USB HID v1.10 Mouse [VirtualBox USB Tablet] on usb-0000:00:06.0-1/input0 Jul 9 18:39:37 debian kernel: [ 2.623947] snd_intel8x0 0000:00:05.0: white list rate for 1028:0177 is 48000 Jul 9 18:39:37 debian kernel: [ 2.914805] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready Jul 9 18:39:39 debian kernel: [ 4.937283] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX Jul 9 18:39:39 debian kernel: [ 4.938493] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready Jul 9 18:39:40 debian kernel: [ 5.315603] random: crng init done Jul 9 18:39:40 debian kernel: [ 5.315608] random: 7 urandom warning(s) missed due to ratelimiting
Bạn sẽ thấy đầu ra ở định dạng sau:
-
Dấu thời gian
-
Tên máy chủ mà tin nhắn đến từ đó
-
Tên chương trình/dịch vụ tạo ra thông báo
-
PID của chương trình đã tạo thông báo
-
Mô tả của hành động đã xảy ra
Hầu hết các tệp nhật ký sẽ được viết bằng văn bản thuần túy; tuy nhiên, một số tệp có thể sẽ chứa các dữ liệu nhị phân như trường hợp của /var/log/wtmp
— nó lưu trữ dữ liệu liên quan đến các lần đăng nhập thành công. Bạn có thể sử dụng lệnh file
để xác định cụ thể:
$ file /var/log/wtmp /var/log/wtmp: dBase III DBT, version number 0, next free block index 8
Các tệp này thường được đọc bằng các lệnh đặc biệt. Lệnh last
được sử dụng để diễn giải dữ liệu trong /var/log/wtmp
:
$ last carol tty2 :0 Thu May 30 10:53 still logged in reboot system boot 4.9.0-9-amd64 Thu May 30 10:52 still running carol tty2 :0 Thu May 30 10:47 - crash (00:05) reboot system boot 4.9.0-9-amd64 Thu May 30 09:11 still running carol tty2 :0 Tue May 28 08:28 - 14:11 (05:42) reboot system boot 4.9.0-9-amd64 Tue May 28 08:27 - 14:11 (05:43) carol tty2 :0 Mon May 27 19:40 - 19:52 (00:11) reboot system boot 4.9.0-9-amd64 Mon May 27 19:38 - 19:52 (00:13) carol tty2 :0 Mon May 27 19:35 - down (00:03) reboot system boot 4.9.0-9-amd64 Mon May 27 19:34 - 19:38 (00:04)
Note
|
Tương tự như |
Nhật ký Quay vòng
Các tệp nhật ký có thể sẽ tăng lên rất nhiều trong thời gian vài tuần hoặc vài tháng và sẽ chiếm hết dung lượng ổ đĩa trống. Để giải quyết vấn đề này, ta có thể sử dụng tiện ích logrotate
. Nó sẽ thực hiện luân chuyển hoặc quay vòng nhật ký, tức là di chuyển các tệp nhật ký sang một tên mới, lưu trữ và/hoặc nén chúng, đôi khi là gửi chúng qua email cho quản trị viên hệ thống và cuối cùng là xóa chúng đi khi chúng đã cũ. Các quy ước được sử dụng để đặt tên cho các tệp nhật ký quay vòng này rất đa dạng (ví dụ: thêm hậu tố ngày); tuy nhiên, cách phổ biến hơn là chỉ thêm một hậu tố là một số nguyên:
# ls /var/log/apache2/ access.log error.log error.log.1 error.log.2.gz other_vhosts_access.log
Hãy lưu ý cách error.log.2.gz
đã được nén bằng gzip (do đó có hậu tố .gz
).
Bộ đệm vòng của Hạt nhân
Bộ đệm vòng của hạt nhân là một cấu trúc dữ liệu có kích thước cố định để ghi lại các thông báo khởi động hạt nhân cũng như mọi thông báo của hạt nhân đang hoạt động. Chức năng của bộ đệm này — một chức năng rất quan trọng — là ghi nhật ký tất cả các thông báo của hạt nhân được tạo ra khi khởi động — khi syslog
chưa khả dụng. Lệnh dmesg
sẽ in bộ đệm vòng của hạt nhân (trước đây cũng được lưu trữ trong /var/log/dmesg
). Do phần mở rộng của bộ đệm vòng, lệnh này thường được sử dụng kết hợp với tiện ích lọc văn bản grep
hoặc lệnh nhắn như less
. Chẳng hạn, để tìm kiếm thông báo khởi động:
$ dmesg | grep boot [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.144986] AppArmor: AppArmor disabled by boot time parameter (...)
Note
|
Khi bộ đệm vòng của hạt nhân phát triển cùng với các thông báo mới theo thời gian, những thông báo cũ nhất sẽ mất đi. |
Nhật ký hệ thống: systemd-journald
Kể từ năm 2015, systemd đã thay thế SysV Init và trở thành trình quản lý dịch vụ và hệ thống thực tế trong hầu hết các bản phân phối Linux chính. Kết quả là trình nhật ký ẩn journald đã trở thành thành trình ghi nhật ký tiêu chuẩn, thay thế trình nhật ký hệ thống trong hầu hết các khía cạnh. Dữ liệu không còn được lưu trữ ở dạng văn bản thuần túy mà là ở dạng nhị phân. Do đó, tiện ích journalctl
sẽ cần thiết trong việc đọc nhật ký. Trên hết, journald tương thích với nhật ký hệ thống và có thể được tích hợp với nhật ký hệ thống.
journalctl
là tiện ích được sử dụng để đọc và truy vấn cơ sở dữ liệu nhật ký của systemd. Nếu được gọi mà không có tùy chọn, nó sẽ in toàn bộ nhật ký:
# journalctl -- Logs begin at Tue 2019-06-04 17:49:40 CEST, end at Tue 2019-06-04 18:13:10 CEST. -- jun 04 17:49:40 debian systemd-journald[339]: Runtime journal (/run/log/journal/) is 8.0M, max 159.6M, 151.6M free. jun 04 17:49:40 debian kernel: microcode: microcode updated early to revision 0xcc, date = 2019-04-01 Jun 04 17:49:40 debian kernel: Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) Jun 04 17:49:40 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet (...)
Tuy nhiên, nếu được gọi với khoá chuyển -k
hoặc --dmesg
, nó sẽ tương đương với việc sử dụng lệnh dmesg
:
# journalctl -k [ 0.000000] Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet (...)
Các tùy chọn thú vị khác cho journalctl
bao gồm:
-b
,--boot
-
Hiển thị thông tin khởi động.
-u
-
Hiển thị thông báo về một đơn vị được chỉ định. Một đơn vị có thể được định nghĩa đại khái là bất kỳ tài nguyên nào được xử lý bởi systemd. Ví dụ:
journalctl -u apache2.service
được sử dụng để đọc thông báo về máy chủ webapache2
. -f
-
Hiển thị các thông báo nhật ký gần đây nhất và tiếp tục in các mục mới khi chúng được thêm vào nhật ký — giống như
tail -f
.
Bài tập Hướng dẫn
-
Hãy xem phần liệt kê của lệnh
top
sau đây và trả lời các câu hỏi sau:carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
Quy trình nào đã được bắt đầu bởi người dùng
carol
? -
Bạn nên truy cập thư mục ảo nào của
/proc
để tìm kiếm dữ liệu liên quan đến lệnhtop
? -
Quy trình nào được chạy đầu tiên? Làm cách nào để biết?
-
Hãy hoàn thành bảng chỉ định các vùng của đầu ra của lệnh
top
có các thông tin sau:Thông tin về… Khu Tổng hợp Khu nhiệm vụ Bộ nhớ
Bộ nhớ trao đổi
PID
Thời lượng CPU
Lệnh
-
-
Lệnh nào được sử dụng để đọc nhật ký nhị phân sau đây?
-
/var/log/wtmp
-
/var/log/btmp
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
-
-
Kết hợp với lệnh
grep
, bạn sẽ sử dụng lệnh nào để tìm hiểu thông tin sau về hệ thống Linux của mình?-
Lần cuối cùng khi hệ thống được khởi động lại (
wtmp
) -
Ổ cứng nào được cài đặt (
kern.log
) -
Lần đăng nhập cuối cùng (
auth.log
)
-
-
Bạn sẽ sử dụng hai lệnh nào để hiển thị bộ đệm vòng của hạt nhân?
-
Hãy cho biết vị trí của các thông điệp nhật ký sau:
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
-
journalctl
có thông tin truy vấn về các đơn vị sau không?Đơn vị
Lệnh
ssh
networking
rsyslog
cron
Bài tập Mở rộng
-
Hãy xem lại đầu ra của lệnh
top
từ các bài tập hướng dẫn và trả lời các câu hỏi sau:-
Bạn sẽ làm theo hai bước nào để ngắt máy chủ web apache?
-
Trong phần tóm tắt, làm cách nào để có thể hiển thị thông tin về bộ nhớ vật lý và bộ nhớ trao đổi bằng các thanh quy trình?
-
Bây giờ, hãy sắp xếp các quy trình theo mức sử dụng bộ nhớ:
-
Bây giờ bạn đã có thông tin bộ nhớ được hiển thị trong thanh quy trình và các quy trình được sắp xếp theo mức sử dụng bộ nhớ; hãy lưu các cấu hình này để lấy chúng làm mặc định vào lần tới khi bạn sử dụng
top
: -
Tệp nào sẽ lưu cài đặt cấu hình của
top’s
? Nó ở đâu? Làm thế nào để có thể kiểm tra sự tồn tại của nó?
-
-
Hãy tìm hiểu về lệnh
exec
trong Bash. Hãy chứng minh chức năng của nó bằng cách bắt đầu một phiên Bash, tìm quy trình Bash bằngps
, sau đó chạyexec /bin/sh
và tìm kiếm lại quy trình có cùng PID. -
Hãy thực hiện theo các bước sau để khám phá các sự kiện của hạt nhân và trình quản lý thiết bị động của udev:
-
Hãy cắm nóng ổ USB vào máy tính của bạn, chạy
dmesg
và hãy chú ý đến những dòng cuối cùng. Dòng cuối cùng là gì? -
Ghi nhớ đầu ra từ lệnh trước, hãy chạy
ls /dev/sd*
và đảm bảo rằng ổ USB của bạn xuất hiện trong danh sách. Đầu ra sẽ là gì? -
Bây giờ, hãy tháo ổ USB và chạy lại
dmesg
. Dòng cuối cùng sẽ là gì? -
Hãy chạy lại
ls /dev/sd*
và đảm bảo rằng thiết bị của bạn đã biến mất khỏi danh sách. Đầu ra sẽ là gì?
-
Tóm tắt
Trong phạm vi của việc lưu trữ dữ liệu, các chủ đề sau đã được thảo luận trong bài học này: quản lý quy trình, ghi nhật ký và thông báo của hệ thống.
Về quản lý quy trình, chúng ta đã học được về:
-
Các chương trình sẽ tạo ra các quy trình và các quy trình tồn tại trong một hệ thống phân cấp.
-
Mỗi quy trình đều có một mã định danh duy nhất (
PID
) và một mã định danh quy trình gốc (PPID
). -
top
là một lệnh rất hữu ích để khám phá các quy trình đang chạy của hệ thống một cách linh hoạt và mang tính tương tác. -
ps
có thể được sử dụng để lấy hình ảnh tức thời của các quy trình đang chạy hiện tại trong hệ thống. -
Thư mục
/proc
bao gồm các thư mục cho mọi quy trình đang chạy trong hệ thống và được đặt tên theo các PID của chúng. -
Khái niệm về trung bình tải trọng hệ thống rất hữu ích trong việc kiểm tra việc sử dụng/ làm quá tải CPU.
Về tác vụ ghi nhật ký hệ thống, chúng ta phải nhớ rằng:
-
Nhật ký là một tệp ghi lại các sự kiện trong hệ thống. Nhật ký vô cùng quan trọng trong việc khắc phục sự cố.
-
Theo truyền thống, việc ghi nhật ký sẽ được xử lý bởi các dịch vụ đặc biệt như syslog, syslog-ng hoặc rsyslog. Tuy nhiên, một số chương trình lại sử dụng nhật ký ẩn của riêng chúng.
-
Vì nhật ký là dữ liệu dạng biến nên chúng được lưu trong
/var
và — đôi khi — tên của chúng có thể sẽ gợi ý cho ta về nội dung của chúng (kern.log
,auth.log
, v.v.) -
Hầu hết các nhật ký đều được viết bằng văn bản thuần túy và có thể được đọc bằng bất kỳ trình soạn thảo văn bản nào, miễn là bạn có quyền phù hợp. Tuy nhiên, một vài trong số chúng là dữ liệu nhị phân và phải được đọc bằng các lệnh đặc biệt.
-
Để tránh các vấn đề về dung lượng ổ đĩa, việc ghi nhật ký quay vòng có thể được thực hiện bởi tiện ích logrotate.
-
Đối với hạt nhân, nó sử dụng cấu trúc dữ liệu xoay vòng — bộ đệm vòng — để lưu giữ các thông báo khởi động (các thông báo cũ sẽ mất dần theo thời gian).
-
Trình quản lý hệ thống và dịch vụ systemd đã thay thế System V init trong hầu như tất cả các bản phân phối bằng journald và trở thành dịch vụ ghi nhật ký tiêu chuẩn.
-
Để đọc nhật ký của systemd, ta cần có tiện ích
journalctl
.
Các lệnh được dùng trong bài này:
cat
-
Nối/in nội dung tệp.
dmesg
-
In bộ đệm vòng cuả hạt nhân.
echo
-
Hiển thị một dòng văn bản hoặc một dòng mới.
file
-
Xác định loại tệp.
grep
-
In các dòng khớp với một mẫu.
last
-
Hiển thị danh sách người dùng đăng nhập lần cuối.
less
-
Hiển thị nội dung của tệp từng trang một.
ls
-
Liệt kê nội dung thư mục.
journalctl
-
Truy vấn nhật ký
systemd
. tail
-
Hiển thị các dòng cuối cùng của một tệp.
Đáp án Bài tập Hướng dẫn
-
Hãy xem phần liệt kê của
top
sau đây và trả lời các câu hỏi sau:carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
Các quy trình nào đã được bắt đầu bởi người dùng
carol
?Trả lời: Chỉ có một:
top
. -
Bạn nên truy cập thư mục ảo nào của
/proc
để tìm kiếm dữ liệu liên quan đến lệnhtop
?Trả lời:
/proc/887
-
Quy trình nào được chạy đầu tiên? Làm cách nào để biết?
Trả lời:
systemd
. Bởi vì nó là quy trình cóPID
#1. -
Hãy hoàn thành bảng chỉ định các vùng của đầu ra của lệnh
top
có các thông tin sau:Thông tin về… Khu Tổng hợp Khu nhiệm vụ Memory
Có
Có
Swap
Có
Không
PID
Không
Có
CPU time
Có
Có
Commands
Không
Có
-
-
Lệnh nào được sử dụng để đọc nhật ký nhị phân sau đây?
-
/var/log/wtmp
Trả lời:
last
-
/var/log/btmp
Trả lời:
lastb
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
Trả lời:
journalctl
-
-
Kết hợp với
grep
, bạn sẽ sử dụng lệnh nào để tìm hiểu thông tin sau về hệ thống Linux của mình?-
Lần cuối cùng khi hệ thống được khởi động lại (
wtmp
)Trả lời:
last
-
Ổ cứng nào được cài đặt (
kern.log
)Trả lời:
less /var/log/kern.log
-
Lần đăng nhập cuối cùng (
auth.log
)Trả lời:
less /var/log/auth.log
-
-
Bạn sẽ sử dụng hai lệnh nào để hiển thị bộ đệm vòng của hạt nhân?
dmesg
vàjournalctl -k
(còn có cảjournalctl --dmesg
). -
Hãy cho biết vị trí của các thông điệp nhật ký sau:
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
X
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
X
/var/log/syslog
/var/log/messages
X
-
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
X
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
X
-
-
journalctl
có thông tin truy vấn về các đơn vị sau không?Đơn vị Lệnh ssh
journalctl -u ssh.service
networking
journalctl -u networking.service
rsyslog
journalctl -u rsyslog.service
cron
journalctl -u cron.service
Đáp án Bài tập Mở rộng
-
Hãy xem lại đầu ra của lệnh
top
từ các bài tập hướng dẫn và trả lời các câu hỏi sau:-
Bạn sẽ làm theo hai bước nào để ngắt máy chủ web apache?
Đầu tiên, hãy nhấn
k
; sau đó hãy thêm giá trịkill
. -
Trong phần tóm tắt, làm cách nào để có thể hiển thị thông tin về bộ nhớ vật lý và bộ nhớ trao đổi bằng các thanh quy trình?
Bằng cách nhấn
m
một hoặc hai lần. -
Bây giờ, hãy sắp xếp các quy trình theo mức sử dụng bộ nhớ:
M
-
Bây giờ bạn đã có thông tin bộ nhớ được hiển thị trong thanh quy trình và các quy trình được sắp xếp theo mức sử dụng bộ nhớ; hãy lưu các cấu hình này để lấy chúng làm mặc định vào lần tới khi bạn sử dụng
top
:W
-
Tệp nào sẽ lưu cài đặt cấu hình của
top’s
? Nó ở đâu? Làm thế nào để có thể kiểm tra sự tồn tại của nó?Tệp này là
~/.config/procps/toprc
và nằm trong thư mục chính của người dùng (~
). Vì nó là một tệp ẩn (nó nằm trong một thư mục có tên bắt đầu bằng dấu chấm) nên chúng ta có thể kiểm tra sự tồn tại của nó bằngls -a
(liệt kê tất cả các tệp). Tệp này có thể được tạo bằng cách nhấn kbd:[Shift+W] khi đang ở trongtop
.
-
-
Hãy tìm hiểu về lệnh
exec
trong Bash. Hãy chứng minh chức năng của nó bằng cách bắt đầu một phiên Bash, tìm quy trình Bash bằngps
, sau đó chạyexec /bin/sh
và tìm kiếm lại quy trình có cùng PID.exec
sẽ thay thế một quy trình bằng một lệnh khác. Trong ví dụ sau, chúng ta có thể thấy rằng quy trình Bash được thay thế bằng/bin/sh
(thay vì/bin/sh
trở thành quy trình con):$ echo $$ 19877 $ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3984 pts/25 Ss 21:17 0:00 \_ bash $ exec /bin/sh sh-5.0$ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3896 pts/25 Ss 21:17 0:00 \_ /bin/sh
-
Hãy thực hiện theo các bước sau để khám phá các sự kiện của hạt nhân và trình quản lý thiết bị động của udev:
-
Hãy cắm nóng ổ USB vào máy tính của bạn, chạy
dmesg
và hãy chú ý đến những dòng cuối cùng. Dòng cuối cùng là gì?Bạn sẽ nhận được một dòng có dạng như
[ 1967.700468] sd 6:0:0:0: [sdb] Attached SCSI diable disk
. -
Ghi nhớ đầu ra từ lệnh trước, hãy chạy
ls /dev/sd*
và đảm bảo rằng ổ USB của bạn xuất hiện trong danh sách. Đầu ra sẽ là gì?Tùy thuộc vào số lượng thiết bị được kết nối với hệ thống của bạn, bạn sẽ nhận được một dòng có dạng như
/dev/sda /dev/sda1 /dev/sdb /dev/sdb1 /dev/sdb2
. Trong trường hợp này, chúng ta sẽ tìm thấy ổ USB (/dev/sdb
) và hai phân vùng của nó (/dev/sdb1
và/dev/sdb2
). -
Bây giờ, hãy tháo ổ USB và chạy lại
dmesg
. Dòng cuối cùng sẽ là gì?Bạn sẽ nhận được một dòng có dạng như
[ 2458.881695] usb 1-9: USB disconnect, device number 6
. -
Hãy chạy lại
ls /dev/sd*
và đảm bảo rằng thiết bị của bạn đã biến mất khỏi danh sách. Đầu ra sẽ là gì?Trong trường hợp này:
/dev/sda /dev/sda1
.
-