103.1 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
103 Lệnh GNU và Unix |
Mục tiêu: |
103.1 Làm việc trên Dòng lệnh |
Bài: |
1 trên 2 |
Giới thiệu
Những người mới làm quen với thế giới quản trị của Linux và vỏ Bash thường sẽ cảm thấy hơi lạc lõng vì không có giao diện GUI thân thiện dễ dùng. Họ đã quen với việc chỉ cần nhấp chuột phải là có quyền truy cập vào các gợi ý trực quan và thông tin theo ngữ cảnh mà các tiện ích quản lý tệp đồ họa cung cấp. Vì vậy, chúng ta phải nhanh chóng tìm hiểu và thành thạo việc sử dụng bộ công cụ dòng lệnh tương đối nhỏ gọn mà qua đó, chúng ta có thể ngay lập tức khai thác toàn bộ dữ liệu được cung cấp bởi GUI cũ và hơn thế nữa.
Lấy Thông tin Hệ thống
Khi nhìn vào dấu nhắc dòng lệnh nhấp nháy, câu hỏi đầu tiên của bạn chắc hẳn sẽ là “Tôi đang ở đâu?”, hoặc chính xác hơn là “Hiện nay tôi đang ở đâu trong hệ thống tệp Linux và nếu giả sử tôi đã tạo một tệp mới thì nó sẽ nằm ở đâu?” Những gì chúng ta muốn biết ở đây là thư mục công việc hiện tại của mình, và lệnh pwd
sẽ cho ta biết điều này:
$ pwd /home/frank
Giả sử rằng Frank hiện đang đăng nhập vào hệ thống và anh ấy hiện đang ở trong thư mục chính của mình là /home/frank/
. Nếu Frank tạo một tệp trống bằng cách sử dụng lệnh touch
mà không chỉ định bất kỳ vị trí nào khác trong hệ thống tệp, tệp sẽ được tạo tại /home/frank/
. Việc liệt kê nội dung thư mục với lệnh ls
sẽ cho chúng ta thấy tệp mới đó:
$ touch newfile $ ls newfile
Bên cạnh vị trí trong hệ thống tệp, thường chúng ta sẽ cần có cả thông tin về hệ thống Linux đang chạy. Điều này có thể bao gồm cả số phát hành chính xác của bản phân phối hoặc là phiên bản nhân Linux hiện đang được tải. Công cụ uname
là những gì chúng ta cần ở đây, đặc biệt là uname
sử dụng cùng với tùy chọn -a
(“all”).
$ uname -a Linux base 4.18.0-18-generic #19~18.04.1-Ubuntu SMP Fri Apr 5 10:22:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Tại đây, uname
cho biết máy của Frank đã được cài đặt nhân Linux phiên bản 4.18.0 và đang chạy Ubuntu 18.04 trên CPU 64-bit (x86_64
).
Nhận Thông tin về Lệnh
Chúng ta sẽ thường bắt gặp nhiều tài liệu nói về các lệnh Linux mà mình chưa hề quen thuộc. Bản thân dòng lệnh đã cung cấp tất cả các thông tin hữu ích về chức năng của các lệnh và cách sử dụng chúng một cách hiệu quả. Có lẽ những thông tin hữu ích nhất sẽ được tìm thấy trong các tệp của hệ thống hướng dẫn (man
).
Theo quy định, các nhà phát triển Linux sẽ viết các tệp man
và phân phối chúng cùng với các tiện ích mà họ tạo ra. Các tệp man
là các tài liệu có cấu trúc cao với nội dung được phân chia trực quan theo các tiêu đề phần tiêu chuẩn. Khi nhập man
với tên của lệnh theo sau, ta sẽ nhận được các thông tin bao gồm tên lệnh, tóm tắt cách sử dụng ngắn gọn, mô tả chi tiết hơn và một số thông tin cơ bản về lịch sử và cấp phép quan trọng. Sau đây là một ví dụ:
$ man uname UNAME(1) User Commands UNAME(1) NAME uname - print system information SYNOPSIS uname [OPTION]... DESCRIPTION Print certain system information. With no OPTION, same as -s. -a, --all print all information, in the following order, except omit -p and -i if unknown: -s, --kernel-name print the kernel name -n, --nodename print the network node hostname -r, --kernel-release print the kernel release -v, --kernel-version print the kernel version -m, --machine print the machine hardware name -p, --processor print the processor type (non-portable) -i, --hardware-platform print the hardware platform (non-portable) -o, --operating-system print the operating system --help display this help and exit --version output version information and exit AUTHOR Written by David MacKenzie. REPORTING BUGS GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Report uname translation bugs to <http://translationproject.org/team/> COPYRIGHT Copyright©2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO arch(1), uname(2) Full documentation at: <http://www.gnu.org/software/coreutils/uname> or available locally via: info '(coreutils) uname invocation' GNU coreutils 8.28 January 2018 UNAME(1)
man
sẽ chỉ hoạt động khi ta đặt cho nó một tên lệnh chính xác. Tuy nhiên, nếu không chắc chắn về tên của lệnh, ta có thể sử dụng lệnh apropos
để tìm kiếm thông qua tên và mô tả của trang man
. Ví dụ, giả sử người dùng không thể nhớ rằng chính uname
sẽ cung cấp thông tin về phiên bản nhân Linux hiện tại, họ có thể chuyển từ kernel
thành apropros
. Chúng ta có thể sẽ nhận được đầu ra gồm nhiều dòng, nhưng chúng đều sẽ bao gồm các thông tin như sau:
$ apropos kernel systemd-udevd-kernel.socket (8) - Device event managing daemon uname (2) - get name and information about current kernel urandom (4) - kernel random number source devices
Nếu không cần tài liệu đầy đủ của lệnh, ta có thể nhanh chóng lấy dữ liệu cơ bản về lệnh bằng cách sử dụng type
. Ví dụ này sử dụng type
để truy vấn bốn lệnh riêng biệt cùng một lúc. Kết quả đã cho ta thấy rằng cp
(“copy”) là một chương trình nằm trong /bin/cp
và kill
(thay đổi trạng thái của một tiến trình đang chạy) là một vỏ tích hợp sẵn — nghĩa là nó là một phần thực của vỏ Bash:
$ type uname cp kill which uname is hashed (/bin/uname) cp is /bin/cp kill is a shell builtin which is /usr/bin/which
Hãy lưu ý rằng, ngoài việc là một lệnh nhị phân thông thường như cp
, uname
còn là “hàm băm.” Đó là bởi vì Frank gần đây đã sử dụng uname
và đã được thêm vào bảng băm để tăng hiệu quả của hệ thống và khiến nó dễ truy cập hơn vào lần chạy tiếp theo. Nếu Frank chạy type uname
sau khi khởi động hệ thống, anh ấy sẽ thấy rằng type
sẽ lại một lần nữa mô tả uname
là một lệnh nhị phân thông thường.
Note
|
Một cách nhanh hơn để dọn dẹp bảng băm là chạy lệnh |
Đôi khi — đặc biệt là khi làm việc với các tệp lệnh tự động — ta sẽ cần một nguồn thông tin đơn giản hơn về một lệnh. Lệnh which
mà lệnh type
trước đây đã truy vết sẽ không trả lại gì ngoài vị trí tuyệt đối của lệnh. Ví dụ này sẽ định vị cả hai lệnh uname
và which
.
$ which uname which /bin/uname /usr/bin/which
Note
|
Nếu muốn hiển thị thông tin về các lệnh |
Sử dụng Lịch sử Lệnh
Mỗi người dùng thường sẽ đều phải nghiên cứu cẩn thận cách sử dụng mỗi lệnh một cách thích hợp và cách để chạy nó thành công cùng với một loạt các tùy chọn và đối số phức tạp. Nhưng vài tuần sau đó, điều gì sẽ xảy ra khi chúng ta cần chạy cùng một lệnh với các tùy chọn và đối số giống nhau nhưng không thể nhớ hết các chi tiết? Thay vì bắt đầu tìm hiểu lại từ đầu, ta có thể khôi phục lệnh ban đầu bằng cách sử dụng lệnh history
.
history
sẽ trả về các lệnh gần đây nhất mà ta đã thực hiện theo thứ tự các lệnh gần nhất xuất hiện ở dưới cùng. Ta có thể dễ dàng tìm kiếm thông qua các lệnh đó bằng một chuỗi cụ thể với lệnh grep
. Ví dụ sau sẽ tìm kiếm bất kỳ lệnh nào có bao gồm văn bản bash_history
:
$ history | grep bash_history 1605 sudo find /home -name ".bash_history" | xargs grep sudo
Ở đây chỉ có một lệnh duy nhất được trả về cùng với số thứ tự là 1605.
Về bash_history
, đây là tên của một tệp ẩn thực mà chúng ta có thể tìm thấy trong thư mục chính của người dùng. Vì nó là một tệp ẩn (được chỉ định bằng dấu chấm đứng trước tên tệp), nó sẽ chỉ được hiển thị bằng cách liệt kê nội dung thư mục sử dụng ls
với đối số -a
:
$ ls /home/frank newfile $ ls -a /home/frank . .. .bash_history .bash_logout .bashrc .profile .ssh newfile
Trong tệp .bash_history
sẽ có gì? Hãy tự mình xem và bạn sẽ thấy hàng trăm hàng ngàn lệnh gần đây nhất của mình. Tuy nhiên, có thể bạn sẽ ngạc nhiên khi thấy rằng một số lệnh gần đây nhất không có ở đây. Đó là vì mặc dù chúng đã được thêm ngay vào cơ sở dữ liệu history
động, các bổ sung mới nhất cho lịch sử lệnh sẽ không được ghi vào tệp .bash_history
cho đến khi người dùng thoát khỏi phiên làm việc.
Ta có thể tận dụng nội dung của history
để giúp trải nghiệm dòng lệnh trở nên nhanh hơn và hiệu quả hơn bằng cách sử dụng các phím mũi tên lên và xuống trên bàn phím. Nhấn phím lên nhiều lần sẽ điền vào dòng lệnh các lệnh gần đây. Khi đã tìm được lệnh mình muốn thực hiện, ta có thể chạy nó bằng cách nhấn Enter. Điều này giúp việc gọi lại và sửa đổi các lệnh nhiều lần trong phiên vỏ (nếu muốn) trở nên dễ dàng hơn.
Bài tập Hướng dẫn
-
Hãy sử dụng hệ thống
man
để xác định cách yêu cầuapropos
xuất một lệnh ngắn gọn để kết quả đầu ra chỉ trả về một thông báo sử dụng ngắn gọn và rồi thoát. -
Hãy sử dụng hệ thống
man
để xác định giấy phép bản quyền nào được gán cho lệnhgrep
.
Bài tập Mở rộng
-
Hãy xác định kiến trúc phần cứng và phiên bản nhân Linux đang được sử dụng trên máy tính của bạn ở định dạng đầu ra dễ đọc.
-
Hãy in hai mươi dòng cuối cùng của cơ sở dữ liệu
history
động và tệp.bash_history
để so sánh chúng. -
Hãy sử dụng công cụ
apropos
để xác định trangman
nơi bạn sẽ tìm thấy lệnh để hiển thị kích thước của thiết bị khối vật lý được đính kèm theo đơn vị byte thay vì megabyte hoặc gigabyte.
Tóm tắt
Trong bài học này, chúng ta đã học về:
-
Cách lấy thông tin về vị trí hệ thống tệp và ngăn xếp phần mềm hệ điều hành của bạn.
-
Cách tìm trợ giúp cho việc sử dụng lệnh.
-
Làm thế nào để xác định vị trí hệ thống tệp và loại nhị phân lệnh.
-
Cách tìm và sử dụng lại các lệnh đã thực hiện trước đó.
Các lệnh sau đã được thảo luận trong bài học này:
pwd
-
In đường dẫn đến thư mục làm việc hiện tại.
uname
-
In kiến trúc phần cứng của hệ thống, phiên bản nhân Linux, bản phân phối và bản phát hành bản phân phối.
man
-
Truy cập các tệp trợ giúp ghi lại cách sử dụng lệnh.
type
-
In vị trí hệ thống tệp và nhập một hoặc nhiều lệnh.
which
-
In vị trí hệ thống tệp cho một lệnh.
history
-
In hoặc sử dụng lại các lệnh đã thực hiện trước đó.
Đáp án Bài tập Hướng dẫn
-
Hãy sử dụng hệ thống
man
để xác định cách yêu cầuapropos
xuất một lệnh ngắn gọn để kết quả đầu ra chỉ trả về một thông báo sử dụng ngắn gọn và rồi thoát.Chạy
man apropos
và cuộn xuống qua phần “Options” cho đến đoạn--usage
. -
Hãy sử dụng hệ thống
man
để xác định giấy phép bản quyền nào được gán cho lệnhgrep
.Chạy
man grep
và cuộn xuống phần “Copyright” của tài liệu. Hãy lưu ý rằng chương trình sử dụng bản quyền từ Free Software Foundation.
Đáp án Bài tập Mở rộng
-
Hãy xác định kiến trúc phần cứng và phiên bản nhân Linux đang được sử dụng trên máy tính của bạn ở định dạng đầu ra dễ đọc.
Chạy
man uname
, đọc qua phần “Description” và xác định các đối số lệnh sẽ chỉ hiển thị kết quả chính xác mà bạn muốn. Hãy lưu ý cách-v
cung cấp cho bạn phiên bản hạt nhân và-i
sẽ cung cấp nền tảng phần cứng.$ man uname $ uname -v $ uname -i
-
Hãy in hai mươi dòng cuối cùng của cơ sở dữ liệu
history
động và tệp.bash_history
để so sánh chúng.$ history 20 $ tail -n 20 .bash_history
-
Hãy sử dụng công cụ
apropos
để xác định trangman
nơi bạn sẽ tìm thấy lệnh để hiển thị kích thước của thiết bị khối vật lý được đính kèm theo đơn vị byte thay vì megabyte hoặc gigabyte.Một cách là chạy
apropos
với chuỗiblock
, đọc qua kết quả, lưu ý rằnglsblk
sẽ liệt kê các thiết bị khối (và do đó có thể là công cụ phù hợp nhất cho nhu cầu của chúng ta), chạyman lsblk `, cuộn qua phần “Description” và lưu ý rằng `-b
sẽ hiển thị kích thước thiết bị tính bằng byte. Cuối cùng, chạylsblk -b
để xem kết quả.$ apropos block $ man lsblk $ lsblk -b