SlideShare a Scribd company logo
1 of 41
Download to read offline
HỆ ĐIỀU HÀNH LINUX
NHỮNG TÌM HIỂU CƠ BẢN
Họ và tên:
Mã Sinh viên:
Lớp:
Đinh Xuân Sâm
081C900130
08I2
1 1
MỤC LỤC MỤC LỤC
Mục lục
I Hệ thống Linux 3
1 System Info 3
II Basic 4
2 Khởi động hệ thống 5
2.1 Quá trình “Khởi động” . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Các tùy chọn: . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.2 Boot: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Đăng nhập, đăng xuất 7
3.1 Đăng nhập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.1 GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.2 CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Đăng xuất . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.1 GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.2 CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2.3 Sumary: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4 Làm quen với Command line 10
4.1 Shell & Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.1 Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.2 bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.3 Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.2 Lệnh căn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.2.1 Khởi động một Shell . . . . . . . . . . . . . . . . . . . . . . 11
4.2.2 Căn bản sử dụng lệnh . . . . . . . . . . . . . . . . . . . . . 12
4.2.3 Một số lưu ý . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2.4 Các ví dụ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5 man, info và -h 14
5.1 -h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.1.1 Thông tin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.1.2 Ví dụ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.2 man và info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.2.1 man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.2.2 info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2 2
MỤC LỤC MỤC LỤC
III File, Folder & Permission 19
6 Everything is file 20
7 Directories Structure 20
7.1 Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7.1.1 Ví dụ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
8 File & Folder Permission 23
8.1 Quyền hạn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
8.2 Thay đổi quyền hạn đối với một tệp tin, thư mục . . . . . . . . . . 26
9 Thao tác với các tệp tin, thư mục 28
9.1 Một số thao tác cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . 28
10 Thay đổi quyền hạn đối với tệp tin 30
11 Copy, nén, giải nén, lưu trữ tệp 31
IV Redirection and Pipe 32
12 Khái niệm 33
12.1 Redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
12.2 Pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
12.3 Redirection & Pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
13 Ví dụ ngắn: 34
13.1 Tạo tệp mới sử dụng Redirection và Pipe . . . . . . . . . . . . . . . 34
13.2 Đếm số lượng tệp và thư mục trong thư mục bất kỳ . . . . . . . . . 35
13.3 Đếm số lượng thư mục con của một thư mục bất kỳ . . . . . . . . . 35
13.4 Đếm số từ của một dòng bất kỳ trong một tệp văn bản . . . . . . . 36
13.5 Liệt kê các tệp, thư mục con . . . . . . . . . . . . . . . . . . . . . . 36
13.6 Đếm tổng số tiến trình . . . . . . . . . . . . . . . . . . . . . . . . . 36
13.7 Đếm số lượng người dùng đã đăng ký . . . . . . . . . . . . . . . . . 37
13.8 Đếm số lượng người dùng đang đăng nhập . . . . . . . . . . . . . . 37
13.9 Ví dụ hơi ngắn :3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
13.9.1 Tình huống, yêu cầu, hướng giải quyết: . . . . . . . . . . . . 37
13.9.2 Điều kiện thực tế: . . . . . . . . . . . . . . . . . . . . . . . . 38
13.9.3 Tiến hành: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
14 env 39
3 3
DANH SÁCH BẢNG DANH SÁCH HÌNH VẼ
Danh sách bảng
1 Thông tin hệ thống . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Ký hiệu một số thư mục đặc biệt . . . . . . . . . . . . . . . . . . . 22
3 File Permission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4 Bin ↔ Dec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5 Standard Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Danh sách hình vẽ
1 Cấu trúc thư mục của Linux . . . . . . . . . . . . . . . . . . . . . . 21
2 Kết quả của lệnh ls -lh . . . . . . . . . . . . . . . . . . . . . . . . 24
3 Chi tiết nội dung của trường thứ chứa thông tin quyền hạn . . . . . 25
4 Standard Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5 Redirection and Pipe . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4 4
1 SYSTEM INFO
Phần I
Hệ thống Linux
1 System Info
Đây là hệ thống Linux được sử dụng để tiến hành việc tìm hiểu và thực hành với
Linux.
System Information
i686-pc-linux-gnu
OS : Linux
Version : 3.0.6-gentoo
Platform : i686
Distributor : Gentoo
Description : Gentoo Base System
Release : 2.0.3
— More —
Apps : Version
Bash : 4.1.9
GCC : 4.5.3-r1
GRUB : 0.97
GDB : 2.20.11
— WM —
Awesome : 3.4.9
Bảng 1: Thông tin hệ thống
5 5
Phần II
Basic
6 6
2 KHỞI ĐỘNG HỆ THỐNG
2 Khởi động hệ thống
Yêu cầu: Khởi động hệ thống.
Quá trình khởi động một hệ thống Linux cũng khá đơn giản, ở đây đúng với hệ
thống trên, tức một chiếc PC chạy Linux, dùng GRUB 0.97 làm bootloader.
Tất nhiên cũng có sự khác nhau ít nhiều giữa các hệ thống Linux, ví dụ: một
máy chủ hẳn sẽ khác với một PC, hay những máy sử dụng các bootloader khác
nhau, hay cấu hình các bootloader khác nhau, vv. . .
Việc khởi động một hệ thống nói chung thường được ngầm hiểu là khởi động
một hệ thống đã được cái đặt sẵn trên ổ đĩa cứng HDD của máy. Việc khởi động
từ cdrom hay một thanh USB Flash, thậm chí qua mạng LAN là thường được
dùng trong quá trình cài đặt hệ thống.
Tuy nhiên, đối với Linux, còn có khái niệm Live Mode, tức những bản phân
phối (Distro) Linux có thể chạy trực tiếp từ CDROM hay một thanh USB Flash,
nên việc khởi động (boot) một bản Linux còn có thể tiến hành từ cdrom, hay usb
flash bất kỳ. Và sau khi khởi động là quá trình sử dụng hệ thống đó, chứ không
phải là quá trình cài đặt.
Điều này chúng ta có thể thấy rất rõ ở một số bản phân phối Linux phổ biến
như Ubuntu, Linux Mint, Fedora. Hay các đĩa cứu hộ recurse, tất nhiên cũng sử
dụng nhân (Kernel) Linux như Parted Magic, Gparted, vv. . .
Đặc điểm này rất khác biệt đối với Windows - như chúng ta từng quen. Khi
nhắc đến việc khởi động từ cdrom hay usb thì đối với Windows, có chăng là quá
trình cài đặt hệ thống.
Đây thực sự là điểm mạnh của các bản phân phối Linux, nhờ đó, chúng ta có
thể trải nghiệm các bản phân phối Linux trước khi cài đặt vào HDD.
Việc boot Linux từ LAN (PXE chẳng hạn.) thường1
là trong quá trình cài đặt
một hệ thống mới. Quá trình này chúng ta cần các file boot của bản phân phối
muốn cài đặt, một tftp server, hoặc thêm một dhcp server, nếu cần.
2.1 Quá trình “Khởi động”
Bây giờ là chi tiết quá trình khởi động hệ thống [1] đã được nêu trên. Việc đầu
tiên chúng ta cần làm đó là bấm nút nguồn (Power) của máy. Thực ra không phải,
mà là kiểm tra nguồn điện cho máy đã sẵn sàng chưa, việc bấm nút nguồn là thao
tác tiếp theo :).
Giả sử mọi việc diễn ra tốt đẹp. Sau quá trình POST của BIOS ta sẽ gặp
menuboot2
của bootloader Đây là danh sách các Hệ điều hành tùy chọn để khởi
1
Tức đa số các trường hợp
2
Thực ra có thấy hay không thấy là việc chúng ta cấu hình bootloader như thế nào.
7 7
2.1 Quá trình “Khởi động” 2 KHỞI ĐỘNG HỆ THỐNG
động. Một mục (entry) của menuboot tương ứng một Hệ điều hành chúng ta có
thể khởi động3
.
Menuboot có thể rất khác đối với các bootloader khác nhau hoặc các phiên
bản (version) khác nhau của cùng một bootloader (GRUB 1 vs GRUB 2) hay các
cấu hình khác nhau đối với cùng một bootloader.
2.1.1 Các tùy chọn:
Tại menuboot chúng ta có thể lựa chọn các mục để khởi động Hệ điều hành tương
ứng. Ngoài ra, chúng ta còn có thể thực hiện một số thao tác khác. Đối với hệ
thống này bootloader là GRUB 1, nên có một số lựa chọn dễ thấy như sau:
e: Chỉnh sửa mục đang được chọn. Chúng ta sử dụng lệnh này để chỉnh sửa, thêm
bớt các tùy chọn đối so với cấu hình vốn có.
c: Vào chế độ lệnh (command mode) của GRUB. Tại đây bạn có thể sử dụng các
lệnh của GRUB4
để có những thao tác cao cấp (Advance) hơn. Ví dụ, boot
một OS hay một phiên bản nhân Linux nào đó bằng tay (Manually). Điều
này khá thú vị5
!. :)
b: Nhấn phím này để boot.
2.1.2 Boot:
Trong trường hợp đối với hệ thống này, tôi sẽ chọn mục có dòng: “Gentoo with
linux-3.0.6-gentoo-n2i6
”, rồi nhấn Enter. Và quá trình khởi động hệ thống mới thực
sự bắt đầu.
Trong suốt quá trình boot hệ thống, chúng ta sẽ thấy những gì đang diễn ra
được hiện lên trên màn hình, nếu bạn không sử dụng splash7
, hoặc ít nhất là trước
khi splash được hiển thị.
Quá trình khởi động kết thúc, sẽ đưa ta đến màn hình đăng nhập vào hệ thống.
Chuyển sang mục “Đăng nhập, đăng xuất”.
3
Thực ra với Linux thì đó có thể là một nhân khác, hoặc cùng một nhân nhưng với những
tùy chọn boot - dành cho bootloader, khác.
4
Thực ra GRUB cũng chỉ là một chương trình.
5
Thực ra là đôi khi thôi!
6
Thực ra tôi cũng không nhớ chính xác, nhưng cũng chẳng quan trọng :).
7
Thực ra điều này cũng còn tùy chúng ta sử dụng splash như thế nào.
8 8
3 ĐĂNG NHẬP, ĐĂNG XUẤT
3 Đăng nhập, đăng xuất
3.1 Đăng nhập
Màn hình đăng nhập có thể là chế độ đồ họa (GUI ) hoặc chế độ dòng lệnh (CLI ).
Việc chuyển đổi qua lại 2 chế độ này rất dễ dàng và nhanh chóng. Hai chế độ có
thể khác nhau đôi chút, nhưng về “roadmap” chung thì đều giống nhau, tức: nhập
username, nhập password và đăng nhập.
3.1.1 GUI
Nếu màn hình đăng nhập là giao diện đồ họa, thì màn hình đang nhập rất có thể
là “theme” của một chương trình nào đó, được gọi là các chương trình “Display
Manager“ - viết tắt là DM. Có rất nhiều chương trình như thế, có thể liệt kê một
số như: GDM (Gnome Display Manager), KDM (KDE Display Manager), XDM
(X Display Manager), WDM (Wing Display Manager), Slim, Quigy, vv. . .
Giao diện đăng nhập có thể rất khác nhau, tùy thuộc vào chúng ta sử dụng
DM nào, và đương nhiên, là tùy thuộc việc chúng ta cấu hình DM đó như thế nào
nữa. Tất nhiên, việc thao tác thì cũng rất đơn giản - như trên đã nói.
Đối với tôi, trên hệ thống này, sử dụng GDM làm DM, với chủ đề (theme)
login-scan-fusion, và thao tác đăng nhập của tôi:
1. Nhập n2i → Nhấn “Enter”.
2. Nhập ************ → Nhấn “Enter”.
Xong. ./
3.1.2 CLI
Việc đăng nhập từ chế độ dòng lệnh cũng không khác là bao, thao tác cũng không
có nhiều và cũng chằng khó gì hơn so với sử dụng GUI cả. Có điều, việc đăng nhập
từ CLI thường . . . nhanh hơn! :) Ví dụ:
n2i-System login: n2i
Password:
n2i@n2i-System ~ $_
Chú giải:
n2i-System: hostname.
n2i: username.
Password: Chỉ thị nhập mật khẩu password để xác thực thao tác đăng nhập.
9 9
3.2 Đăng xuất 3 ĐĂNG NHẬP, ĐĂNG XUẤT
∼: Thư mục nhà (home) của người dùng hiện tại, trong trường hợp này tức
/home/n2i/.
$: Dấu nhắc lệnh chỉ thị rằng đây là người dùng bình thường8
.
Lưu ý: Tại chỉ thị nhập mật khẩu, Linux sẽ không hiện bất cứ ký tự nào khi
bạn đang nhập mật khẩu, bạn chỉ cần nhập đúng mật khẩu của mình là được. Nếu
muốn chỉnh sửa? Bạn có thể! Cứ dùng phím Backspace trên bàn phím và xóa đi
những ký tự bạn cho rằng là sai, tất nhiên bạn phải nhớ là mình đã nhập những
gì :), và đánh lại các ký tự cần thiết. Tốt hơn hết là xóa hết tất cả nếu bạn cảm
giác là sai ở đâu đó, sau đó đánh lại mật khẩu. Điều này sẽ chắc chắn hơn.
Đến đây chúng ta đã xong việc “Đăng nhập” vào hệ thống.
3.2 Đăng xuất
Các thao tác đăng xuất khỏi phiên làm việc cũng rất đơn giản, thậm chí đơn giản
hơn việc đăng nhập vào hệ thống nhiều. Điều đó dẫn đến thời gian để quá trình
đăng xuất diễn ra cũng rất nhanh, thường là trong nháy mắt. Có nhiều trường
hợp, nhưng chúng ta sẽ chia ra hai trường hợp như trên mục “Đăng nhập” đã nói.
3.2.1 GUI
Nếu bạn đang ở trong một phiên làm việc, có sử dụng một Desktop Environment
(DE) nào đó, như GNOME, KDE, XFCE, LXDE, Enlightement, vv... Hay một
Window Manager (WM), như: Awesome, PekWM, WMII, vv...
Có rất nhiều các DE hay WM trên Linux. Và tất nhiên, sử dụng cái nào, và
như thế nào là tùy vào điều kiện, sở thích, khả năng, yêu cầu, mục đích, vv... của
chúng ta. Bởi tất cả đều miễn phí, tự do lựa chọn và sử dụng, đầy đủ tài liệu, và
hơn hết, cộng đồng sử dụng và hỗ trợ rất nồng nhiệt.
Để đăng xuất khỏi các phiên làm việc như vậy, các thường thấy nhất là sử
dụng các menu của các DE hay WM. Ví dụ: nếu là Gnome2 thì bật menu chính
của Gnome2, chúng ta sẽ thấy mục “Log out”, tới đây thì đơn giản, bạn chỉ cần
nhấp chuột vào menu đó, và, phiên làm việc của bạn kết thúc.
Tương tự, trong các DE hay WM khác, chúng ta cũng sử dụng mục “Log out”
ở các menu tương ứng của các DE hay WM đó. Nhưng không hẳn hoàn toàn luôn
luôn như thế, đó chỉ là “roadmap” chung mà thôi.
Ví dụ: trong Gnome3 hoặc Unity (Mặc định trong Ubuntu từ phiên bản 11.04),
chúng ta có thể chọn “Log out” từ menu sổ xuống của các tiểu dụng chỉ dẫn
(Indicator Applets). Hay tìm kiếm trong “Dash” của Gnome3 hay Unity mục Log
out và lựa chọn nó, kết quả cũng sẽ tương tự.
8
Tức so với root, chứ không phải so với người dùng... bất bình thường :).
10 10
3.2 Đăng xuất 3 ĐĂNG NHẬP, ĐĂNG XUẤT
Cũng theo ý tưởng trên, nếu chúng ta dùng một chương trình kiểu “Applications
Launcher” như Synapse hay Gnome Do, thì việc tìm kiếm và chọn lựa cũng diễn
ra như thế, và nhanh chóng hơn, bởi chúng ta hầu như không cần rời tay khỏi bàn
phím trong khi thao tác. Tất cả các thao tác có thể chỉ diễn ra trong 1 đến 2s, rất
nhanh.
Việc chúng ta tìm mục “Log out” ở đâu, như thế nào phụ thuộc rất nhiều vào
việc chúng ta sử dụng DE hay WM nào, cấu hình chúng ra sao và thói quen sử
dụng cũng rất quan trọng. Mục “Log out” thậm chí không tồn tại, đặc biệt khi
bạn sử dụng một WM nào đó, mà không sử dụng một chương trình quản lý phiên
làm việc (Session Manager) nào. Tuy nhiên, có những mục có chức năng tương
tự.
Ví dụ: trong Awesome WM, ta chọn “quit Awsome”, hay sử dụng tổ hợp phím:
Mod49
+ Shift + q để kết thúc phiên làm việc của Awesome, cũng chính là kết
thúc phiên làm việc của mình.
Kết:
Tóm lại, không thể liệt kê hết các các cách để người dùng thoát khỏi một phiên
làm việc của mình được - đang nói ở chế độ đồ họa. Vì điều đó phụ thuộc rất lớn
việc mỗi người sử dụng những gì, cấu hình ra sao, thói quen sử dụng, sở thích,
điều kiện, khả năng,... trên chính hệ thống của họ. Điều này nghe như là một điểm
bất lợi nhỉ?! :)
Không như Windows, chúng ta có một số hữu hạn các cách để đăng nhập hay
đăng xuất phiên làm việc của mình, ví dụ: Đăng nhập thì ta nhập tên người dùng
và mật khẩu tại màn hình đăng nhập, sau đó nhấn “Enter”. Và đăng xuất? Vào
“Start” chọn “Log out”. Ví dụ thế.
Với Linux, ta có muôn hình cách làm các thao tác trên. Như ví dụ đối với
Awesome WM ở trên thì cũng chỉ là những gì mặc định (Default) của WM ấy, và
thự sự trên hệ thống của chúng ta như thế nào thì chính chúng ta có thể (dễ dàng)
quyết định điều đó. Cụ thể: để chỉnh sửa các cấu hình của bạn đối với Awesome
WM, chúng ta chỉnh sửa file ∼/.config/awesome/rc.lua10
. Cụ thể, bạn tham khảo
tài liệu của Awesome. Tương tự đối với các DE hay WM khác.
Chính khả năng tùy biến — cầu hình cao (High Configuration) là một điểm
hấp dẫn của Linux, cũng như là một yêu tố tạo nên cảm giác tuyệt vời khi sử dụng
Linux.
Mỗi hệ thống Linux của mỗi người, thường mang dấu ấn rất cá nhân của chính
người đó – tối thiểu là về phần giao diện. Bạn thử xem? :)
Với tôi, trên hệ thống này, để đăng xuất, tôi thường sử dụng tổ hợp phím như
trên.
9
Thường là phím có Logo Windows trên bàn phím.
10
Đây là một file ngôn ngữ Lua, có thể bạn sẽ phải học Lua để chỉnh sửa nó! :)
11 11
4 LÀM QUEN VỚI COMMAND LINE
3.2.2 CLI
Nếu chúng ta đang sử dụng Linux với CLI, và muốn kết thúc phiên làm việc của
mình, thì cũng có nhiều tùy chọn. Ví dụ: sử dụng 2 lệnh, đó là: exit và logout.
Và một tổ hợp phím: ^D, tức: Ctrl + D.
Thực ra cũng có ít nhiều sự khác nhau giữa exit và logout, nhưng chúng ta
sẽ không đi sâu vào vấn đề này – ít nhất là bây giờ.
3.2.3 Sumary:
Như vậy là chúng ta đã tìm hiểu qua các thao tác khởi động, đăng nhập, đăng
xuất hệ thống Linux, tiếp theo, sẽ đến phần tìm hiểu cách sử dụng cơ bản.
4 Làm quen với Command line
4.1 Shell & Terminal
Lời nói đầu: Linux là một hệ điều hành tựa UNIX (Unix-like), vốn là hệ điều
hành chỉ có chế độ dòng lệnh, hay chính xác hơn là “text mode”.
Mọi thao tác đối với hệ thống đều có thể thực hiện từ chế độ “text mode”, đặc
biệt là trong việc quản trị hệ thống Linux. Đối với những nhu cầu của một người
dùng bình thường, chế độ “text mode” cũng đáp ứng được hầu hết các nhu cầu
thường thấy như nghe nhạc, xem ảnh, lướt web, thậm chí xem phim, vv... Bạn
băn khoăn, nghi ngờ điều đó là sự thật? Hmm, không thử sao biết! ;)
4.1.1 Shell
Shell là gì? Shell là một trình thông dịch (Interpreter). Tức Shell cũng chỉ là các
chương trình như bao chương trình khác.
Tại sao gọi là trình thông dịch? Khi người dùng nhập vào các lệnh nội trú
(internal), ngoại trú (external), tại dấu nhắc lệnh (prompt) của Shell. Hay thậm
chí là chạy các tệp shell script.
Ngay sau khi hoàn thành thao tác nhập, ví dụ nhấn phím “Enter” khi nhập
lệnh, thì Shell sẽ lần lượt chuyển đổi các câu lệnh sang mã máy (Binary), để CPU
có thể thực thi11
, rồi trả lại kết quả quá cho Shell, Shell hiển thị kết quả của các
câu lệnh lên cho người dùng. Cơ bản là vậy.
Trên Linux, và UNIX nói chung, có rất nhiều loại Shell cho chúng ta lựa chọn
khi sử dụng. Ví dụ một số các Shell phổ biến như: sh, bash, csh, tcsh, ksh, zsh, vv...
Nhưng ở đây chúng ta sẽ chỉ giới thiệu và tìm hiểu về bash shell. Đây là một shell
mặc định phổ biến trong các bản phân phối Linux hiện nay.
11
Tất nhiên cũng phải thông qua nhân nữa.
12 12
4.2 Lệnh căn bản 4 LÀM QUEN VỚI COMMAND LINE
4.1.2 bash
bash là shell chuẩn của dự án GNU (GNU’s Not UNIX ). Thường được gọi là GNU
bash. bash là từ viết tắt của Bourne Again Shell. bash là shell mở rộng và cải tiến
nhiều điểm dựa trên sh (Bourne Shell) shell, vốn của UNIX.
4.1.3 Terminal
Để thao tác trên một hệ thống Linux, chúng ta thường sử dụng một thiết bị vốn
được kết nối với hệ thống đó, để gửi, hiển thị các yêu cầu và kết quả các thao tác,
xử lý, gọi là thiết bị đầu cuối (terminal).
Các thiết bị đầu cuối thường gặp đó là bàn phím và màn hình máy tính. Chúng
được kết nối với hệ thống Linux một cách trực tiếp hoặc từ xa qua các kết nối
mạng, sử dụng các cách thức khác nhau. Ví dụ: thao tác với một hệ thống Linux
ở xa, thông qua kết nối SSH (Secure Shell).
Đối với một PC, có thể nói màn hình và bàn phím chính là terminal cho hệ
thống đó.
Tuy nhiên không phải lúc nào cũng hoàn toàn vậy. Nếu bạn sử dụng một hệ
thống Linux có sử dụng hệ thống X Window, hiểu nôm na đó là sử dụng GUI. Thì
khi ấy màn hình không hoàn toàn là terminal của hệ thống đó nữa.
Để có một ‘terminal’, chúng ta cần sử dụng một chương trình giả lập thiết bị
đầu cuối (Terminal Emulator) hay chương trình đầu cuối (Terminal Application).
Một Terminal Emulator là một chương trình tương tự như một terminal thực
sự. Có rất nhiều chương trình như vậy trên Linux, một số chương trình phổ biến
có thể liệt kê như: Gnome Terminal, XTerm, RXVT, Konsole, vv... Rất nhiều!
4.2 Lệnh căn bản
4.2.1 Khởi động một Shell
Shell là một chương trình, muốn sử dụng thì chúng ta phải khởi động shell trước
khi có các thao tác dựa trên shell.
Nếu bạn đăng nhập vào hệ thống ở chế độ “text mode”, thì bạn sẽ rơi vào môi
trường làm việc là shell mặc định của tài khoản người dùng của bạn.
Nếu bạn đăng nhập vào hệ thống sử dụng chế độ đồ họa, để khởi động một
shell, bạn phải khởi động một trong các Terminal Emulator như đã nói ở trên.
Để chuyển đổi qua lại giữa 2 chế độ, đồ họa và “text mode” – hay tty. Ta thường
sử dụng tổ hợp phím Ctrl + Alt + F[123456] 12
.
12
Tức chỉ được duy nhất 1 số, nhưng các giá trị có thể chọn là một trong bất kỳ các số đó.
Dãy số này có thể thay đổi, tùy chúng ta đã cấu hình như thế nào.
13 13
4.2 Lệnh căn bản 4 LÀM QUEN VỚI COMMAND LINE
4.2.2 Căn bản sử dụng lệnh
Thao tác nhập lệnh được thực hiện tại dấu nhắc lệnh của shell, các ký tự đại diện
thường thấy là:
- $: Dấu nhắc lệnh của người dùng bình thường.
- #: Dấu nhắc lệnh của người dùng đang dùng quyền quản trị.
Khi thao tác nhập lệnh trong các shell, chúng ta có thể sử dụng rất nhiều các
lệnh, bao gồm các lệnh nội trú, và ngoại trú.
Lệnh nội trú: Là các lệnh xây dựng sẵn (built-in) trong shell, đây là các lệnh
có thể sử dụng không phụ thuộc vào gì khác khi shell đã khởi động.
Để liệt kê các lệnh nội trú của shell đang sử dụng, ví dụ đối với bash shell, ta
sử dụng lệnh help, ví dụ: $ help. Lệnh này liệt kê các lệnh nội trú của shell hiện
tại cũng như cú pháp sử dụng của mỗi lệnh tương ứng.
Để hiểu chi tiết cách sử dụng của một lệnh bất kỳ, ta cũng sử dụng lệnh help,
với tham số là tên lệnh ta muốn xem rõ cú pháp sử dụng, ví dụ: $help help.
Lệnh ngoại trú: Chính là các chương trình đã cài đặt trong hệ thống, có rất
rất nhiều các lệnh, chương trình như thế. Việc tìm hiểu cách sử dụng, cú pháp các
lệnh đó như thế nào, ta sẽ nói ở mục sau.
Bạn lo lắng rằng sẽ không nhớ chính xác được tên các lệnh muốn dùng, điều
đó khiến bạn gõ sai tên lệnh? Thực sự thì chúng ta không cần lo lắng về điều này,
vì các shell của Linux có chế độ auto-complete rất tuyệt vời.
Nếu bạn không chắc tên đầy đủ của lệnh bạn muốn dùng, rất đơn giản, bạn chỉ
cần gõ vài ký tự đầu của lệnh mà bạn nhớ “mang máng” được, sau đó nhấn phím
Tab trên bàn phím, khi đó, shell sẽ tự động điền đúng tên lệnh cho bạn. Hoặc,
nếu có nhiều hơn một khả năng các tên lệnh bắt đầu với các ký tự bạn đã nhập,
thì shell sẽ liệt kê tất cả các khả năng đó ra cho bạn lựa chọn, bạn lặp lại với việc
nhập những ký tự đầu tiếp theo, và nhấn Tab cho đến khi đúng lệnh bạn muốn.
Ngoài ra, nếu thực sự không nhớ được chút nào về tên lệnh cần dùng, chúng
ta cũng có thể tìm kiếm bằng nhiều cách, sử dụng những “từ khóa” (key word) mà
chúng ta mường tượng được sự liên quan đến lệnh hay chương trình đó.
Ví dụ để tìm kiếm một lệnh nào đó, chúng ta thường sử dụng:
$ man -k <key-word>, hay $ apropos <key-word>13
.
13
Nói thật là tôi nhớ tên cũng như cách sử dụng lệnh rất kém, nên 2 điểm này lại hình như
càng làm cho tôi thêm lười nhớ hơn! :P
14 14
4.2 Lệnh căn bản 4 LÀM QUEN VỚI COMMAND LINE
4.2.3 Một số lưu ý
Thứ nhất, Linux phân biệt chữ HOA và chữ thường, bao gồm cả trong tên lệnh
và các tham số của lệnh.
Vì vậy, ABC là rất khác xa với Abc hay aBC hay những gì như thế. Tương
tự, thư mục Desktop sẽ không phải là thư mục desktop nào đó. Không thể đánh
đồng được, và phải cẩn thận khi sử dụng. Điều này rất khác xa với Windows, như
chúng ta từng biết.
Thứ hai, lệnh trong Linux là một chuỗi ký tự liên tiếp, không có khoảng trắng,
có thể các từ khác nhau được kết nối bằng các ký tự như ‘-’. Điều này cũng có
ngoại lệ, bạn sẽ thấy.
Thứ ba, các lệnh trong Linux thường có các tùy chọn. Các tùy chọn này thường
được chia làm 2 nhóm: 1) Các tùy chọn ngắn, thường chỉ có 1 hoặc 2 ký tự thuộc
nhóm chữ, tức [A-Z],[a-z], được bắt đầu bằng một ký tự đặc biệt, đó là: -. 2) Các
tùy chọn dài, là các tùy chọn gồm một hoặc nhiều từ, được bắt đầu bằng một cặp
ký tự: -, tức --. Các tùy chọn dài, có nhiều từ thường được nối với nhau bằng ký
tự: -.
4.2.4 Các ví dụ:
Chúng ta sẽ cùng điểm qua một số lệnh thường gặp khi làm việc trên một hệ thống
Linux, đầu tiên đó là lệnh: whoami, lệnh này cho biết bạn là ai (?!), hay đúng hơn,
là cho biết tên người dùng mà bạn đang sử dụng để đánh chính cái lệnh này là gì.
Ví dụ:
n2i@n2i-System ~ $ whoami
n2i
Ngoài ra, còn có lệnh who am i sẽ cho biết thêm nhiều thông tin hơn so với
lệnh trên. Thử chứ?
Tiếp theo đó là lệnh: pwd (print working directory). Lệnh này cho chúng ta biết
mình đang ở thư mục nào trên cây thư mục. Ví dụ:
n2i@n2i-System ~ $ pwd
/home/n2i
Bạn nhận thấy gì không? Như vậy là chúng ta đã biết được một điều rằng...
mình là ai, và mình đang ở đâu – trong hệ thống này14
!
Tiếp theo chúng ta sẽ giới thiệu nhanh qua một số câu lệnh thường dùng khác.
Để liệt kê nội dung của một thư mục, tức liệt kê các tệp tin và thư mục có
trong thư mục đó, ta sử dụng lệnh ls. Cú pháp là: ls [path]. Trong đó, path là
đường dẫn đến thư mục chúng ta muốn xem nội dung. Mặc định sẽ là thư mục
hiện tại.
14
Nghe có vẻ nực cười nhỉ, nhưng nhiều khi không hề buồn cười chút nào.
15 15
5 MAN, INFO VÀ -H
Lưu ý: Có đôi điều cần biết, thực ra cần nhớ thì đúng hơn.
Nếu trong cú pháp của lệnh, tham số được bỏ giữa 2 dấu [ và ], thì ngầm hiểu
rằng, tham số đó có thể có hoặc không cần chỉ định. Ví dụ, với câu lệnh ls ở trên,
nếu không chỉ định đường dẫn cụ thể, thì tham số lệnh sẽ nhận tham số là mặc
định, tức thư mục hiện tại.
Trường hợp khác, nếu đó là 2 dấu < và >, thì tham số là bắt buộc.
Ngoài ra còn một số trường hợp có sự ràng buộc, phụ thuộc (Dependence) giữa
các tham số.
Ví dụ sử dụng lệnh ls:
n2i@n2i-System ~ $ ls
...
n2i@n2i-System ~ $ ls Desktop/
...
Tiếp theo là lệnh cd: Đây là lệnh dùng dể di chuyển vị trí làm việc đến một
thư mục nào đó, cú pháp: cd <path>. Ví dụ:
n2i@n2i-System ~ $ cd Desktop/
n2i@n2i-System ~/Desktop $_
Trên đây là một số ví dụ rất ngắn về một vài lệnh thường gặp khi thao tác
trên một hệ thống Linux bất kỳ. Các lệnh đã được nêu ở trên bao gồm một lệnh
nội trú và 2 lệnh thuộc gói coreutils – đây là gói tối quan trọng trên một hệ thống
Linux, thường thì các bản phân phối Linux đều có gói này, điều này tạo nên một
sự thống nhất, giống nhau ở một số câu lệnh, công cụ cơ bản của các bản phân
phối Linux.
Có rất nhiều, rất nhiều các câu lệnh trên Linux, chỉ riêng gói coreutils thôi,
cũng đã có rất nhiều công cụ cho bạn sử dụng. Một số câu lệnh thường gặp nhất
như: cat, touch, df, top, free, vv...
Chúng ta sẽ tìm hiểu cách để làm sao hiểu được các công cụ này là gì, dùng
như thế nào. Chúng ta sẽ điểm qua các cách lấy thông tin trợ giúp của một công
cụ bất kỳ.
5 man, info và -h
Linux có rất nhiều các công cụ, tiện ích, vv... Mỗi trong một số đó lại có một hoặc
nhiều lệnh. Mỗi lệnh lại có một hoặc rất nhiều các cách sử dụng cũng như các tùy
chọn khác nhau. Và khó mà nhớ hết những gì cần nhớ, đối với việc sử dụng một
lệnh nào đó trên Linux, hoặc giả chúng ta chưa biết chút thông tin gì về các lệnh,
công cụ, tiện ích ấy.
Tiếp theo đây là một số cách để lấy thông tin trợ giúp hoặc thông tin đầy đủ
về một lệnh, công cụ hay tiện ích nào đó trong quá trình sử dụng Linux.
16 16
5.1 -h 5 MAN, INFO VÀ -H
5.1 -h
5.1.1 Thông tin
-h là gì? -h chính là một tùy chọn của một lệnh nào đó, chỉ thị cho lệnh hiển thị
một số thông tin trợ giúp ngắn gọn cho người dùng.
Đây là một kiểu tùy chọn ngắn của dòng lệnh, ký tự - được đặt ngay trước
chữ h chỉ rõ điều đó. h ở đây có thể là viết tắt của từ help, tức trợ giúp.
Bạn có sự liên tưởng gì không? Có kiểu tùy chọn ngắn. Vậy còn kiểu tùy chọn
dài thì sao?
h là ký tự viết tắt. Vậy nếu không dùng ký tự viết tắt, mà là sử dụng một hoặc
nhiều từ đầy đủ thì thế nào? Tất nhiên, chúng ta có câu trả lời cho những câu hỏi
đó.
Đó chính là --help, một kiểu tùy chọn dài, đầy đủ của một lệnh nào đó. Các
tùy chọn dài, tức các từ khóa của tùy chọn bao gồm một hoặc nhiều từ, được bắt
đầu bằng cặp ký tự: -, tức là --.
Với tùy chọn --help, câu lệnh sẽ đưa ra những trợ giúp thường là đầy đủ hơn,
hoặc không thì kết quả tối thiểu cũng như tùy chọn -h.
Thông thường, một câu lệnh trên Linux thường có cả 2 tùy chọn trên để người
dùng có thể truy cứu thông tin trợ giúp một cách dễ dàng. Nhưng cũng có ngoại
lệ, một số lệnh không có một trong hai tùy chọn trên, hoặc thậm chí, không có cả
hai. Ngược lại, cũng có một số lệnh lại có các một tùy chọn help.
5.1.2 Ví dụ:
Cùng điểm qua một số ví dụ về sử dụng các tùy chọn -h và --help.
n2i@n2i-System ~ $ ifconfig -h
...
n2i@n2i-System ~ $ cd --help
...
n2i@n2i-System ~ $ file-roller --help-gtk
...
Bạn có thể lấy thêm rất nhiều các ví dụ khác.
Ở các ví dụ trên, bạn có thể thấy một lệnh, đó là file-roller, mà có thể
khi bạn thử ở một hệ thống Linux nào đó và gặp thông báo trả lại là: No such
command hay Command not found, hay những gì tương tự thế. Thì rất có thể là
hệ thống đó chưa cài đặt chương trình đó.
file-roller là một trình quản lý các định dạng tệp tin nén (Compression)
(Archiver Manager). Đây là trình quản lý các tệp tin nén sử dụng giao diện GTK
(GIMP Toolkit), mặc định của GNOME, và được cài đặt mặc định trong các bản
phân phối sử dụng DE là GNOME, ví dụ như Ubuntu.
17 17
5.2 man và info 5 MAN, INFO VÀ -H
Và đương nhiên, muốn sử dụng công cụ đó trên hệ thống của bạn, thì bạn phải
cài đặt nó – giả sử như công cụ chưa được cài đặt.
Ngay cả ifconfig, một lệnh phổ biến, thì đôi khi bạn cũng không tìm thấy
nó trên một hệ thống nào đó, vậy nếu có gặp trường hợp như vậy, bạn cũng đừng
nên ngạc nhiên, hay lo lắng quá.
5.2 man và info
Rất nhiều các chương trình, công cụ trên Linux rất phức tạp, chúng không chỉ
nhận các tùy chọn dòng lệnh như là các tham số duy nhất để hoạt động. Mà chúng
còn có các tệp cấu hình (Configuration file) hay hơn thế nữa, các chương trình
liên quan, phụ thuộc chẳng hạn.
Vậy để sử dụng những chương trình như vậy một cách đúng và hiệu quả, chúng
ta phải biết rõ các thông tin cần thiết về chương trình ấy chứ?! Nhưng bằng cách
nào?
Đây là lúc chúng ta nhờ đến 2 công cụ gần như được sử dụng thường xuyên
nhất đối với những chương trình mới, và... người mới! :) Đó là man và info.
Giới thiệu đôi chút về man và info. Thông tin đầy đủ vui lòng sử dụng man
hoặc info để biết thêm chi tiết về các lệnh này.
5.2.1 man
man là tiện ích quản lý và hiển thị các trang man(ual) (man page). Các trang man
được chia thành các mục (Section) riêng biệt. Bao gồm 8 mục, với những chủ đề
khác nhau.
Các trang man là các tệp định dạng văn bản thô (plain text), được tạo ra và
đóng gói sẵn. Để hiển thị một trang man nào đó khi được chỉ định, man tìm kiếm
các tệp văn bản tương ứng các mục do người dùng chọn lựa, nếu tìm thấy man sử
dụng một công cụ khác để hiển thị các tệp văn bản thô, đó là less15
.
Cú pháp sử dụng của lệnh man: man [section] <key-word>. Trong đó:
section: Bạn muốn xem trang man thuộc mục nào.
key-word: Từ khóa, hay là tên lệnh, tệp tin, vv... mà bạn muốn xem trang man.
Đây là một vài ví dụ khi sử dụng lệnh man:
n2i@n2i-System ~ $ man 1 passwd
...
n2i@n2i-System ~ $ man 5 passwd
...
15
Thực ra đó là bzless, vì tệp văn bản thô kia thường được lưu trữ ở dạng nén.
18 18
5.2 man và info 5 MAN, INFO VÀ -H
Bạn hãy thử 2 ví dụ trên và xem xét sự khác nhau giữa kết quả của 2 lệnh.
Có sự khác nhau đó là vì lệnh trên nhận tham số có cùng từ khóa nhưng được
chỉ định các mục khác nhau, đó là các mục: a) 1: User Commands và b) 5: File
Formats and Conventions.
5.2.2 info
info cũng là một công cụ để truy cứu thông tin về một lệnh, hay tệp tin, vv...
nào đó. info có đôi sự khác biệt lớn so với man, một trong số đó là info sử dụng
một định dạng văn bản khác so với man, điều đó cho phép trong info có thể có
các siêu liên kết HyperLink giữa các mục, khiến cho việc truy cứu thông tin đầy
đủ hơn.
Cú pháp sử dụng của info cũng khá giống với man, nhưng chúng ta không cần
chỉ định số của mục chúng ta cần xem, hay đúng hơn, tham số đó không hẳn là
một chữ số. Ta có đôi ví dụ:
n2i@n2i-System ~ $ info cd
...
Hoặc phức tạp hơn chút:
n2i@n2i-System ~ $ info coreutils ‘ls invocation’
...
Như vậy là chúng ta đã tìm hiểu qua man và info là gì, dùng cho việc gì. Trên
đây chỉ là một chút thông tin về 2 tiện ích này. Để có thông tin đầy đủ hơn, bạn
có thể sử dụng chính chúng để biết thêm về chúng, ví dụ như:
n2i@n2i-System ~ $ man man
...
n2i@n2i-System ~ $ man info
...
n2i@n2i-System ~ $ info info
...
n2i@n2i-System ~ $ info man
...
Sumary
Trong phần này chúng ta đã tìm hiểu những điều cơ bản nhất để làm việc với một
hệ thống Linux. Đó là khởi động một hệ thống Linux như thế nào, đăng nhập,
đăng xuất một phiên làm việc. Tìm hiểu Terminal là gì, lướt qua một số lệnh cơ
bản, cũng như cách lấy trợ giúp về các câu lệnh, tệp tin, vv...
19 19
5.2 man và info 5 MAN, INFO VÀ -H
Phần tiếp theo chúng ta sẽ tìm hiểu về cấu trúc thư mục, tệp tin, quyền hạn
đối với tệp tin, và một số thao tác đối với tệp tin và thư mục trên Linux.
20 20
Phần III
File, Folder & Permission
21 21
7 DIRECTORIES STRUCTURE
Phần này giới thiệu cơ bản về cấu trúc tệp tin, thư mục và quyền hạn đối với tập
tin, thư mục trên Linux.
6 Everything is file
Mọi thứ trên Linux đều là các tệp tin. Bạn ngạc nhiên không? Vậy các card mạng,
ổ đĩa, vv... thì sao? Những điều đó sẽ được đề cập ngay sau đây.
Trên Linux, tất thảy mọi thứ đều có thể coi như là các tệp tin. Từ một tập
tin bình thường, như các tệp văn bản thô (plain text), các tệp có thể thực thi
(Executable). Ngay cả những gì bạn thấy nó là một thư mục, hay thậm chí đó là
các thiết bị của máy tính, ... đều được ánh xạ vào một tệp tin nào đó trên hệ
thống.
Tệp tin trên Linux được chia làm một số nhóm, bao gồm:
- Ordinay or Plain files: Ký hiệu: -. Là các tệp tin mà ta vẫn biết đó là các
tệp tin16
. Đó có thể là một tệp âm thanh định dạng mp3, một tệp văn bản
thô, một tệp có thể thực thi, vv...
- Directories: Ký hiệu: d. Là một loại tệp đặc biệt, chúng chứa danh sách các
tệp tin, “thư mục” con của nó.
- Special or Device files: Đây thực sự là một loại tệp tin đặc biệt. Trên Linux,
mỗi một thiết bị phần cứng của máy tính được ánh xạ thành một tệp tin
tương ứng trên hệ thống.
Các thao tác đối với thiết bị phần cứng đó, là các thao tác với tệp tin tương
ứng này. Trong nhóm này lại được chia thành 2 loại, đó là các 1) character
(c) device và 2) block (b) device.
Thực ra còn có một loại tệp tin nữa đó là các link (Liên kết), và có ký hiệu là:
l.
Trên đây là những điều cơ bản về tệp tin trên Linux, để có đủ thông tin chi
tiết bạn có thể tìm hiểu thêm từ các trang báo mạng, blog, các bài viết, đặc biệt
là các trang Wiki. Có rất nhiều topic nói về chủ đề này ngoài kia.
7 Directories Structure
Trong mục này chúng ta sẽ tìm hiểu đôi chút về cấu trúc thư mục của Linux, một
điều góp phần tạo nên sự thống nhất, ổn định và hiệu quả của hệ thống Linux.
Các thư mục trên một hệ thống Linux được tổ chức thành một cây, tạm gọi là
cây thư mục (Directories Tree). Cây này có gốc là thư mục /, gọi là Root.
16
Nghe có vẻ buồn cười nhỉ! :P
22 22
7 DIRECTORIES STRUCTURE
Đường dẫn đến mọi tập tin, thư mục, ngõ ngách của hệ thống Linux đều xuất
phát từ đây. Một số các thư mục, vốn được quy định sẵn, và được chuyên biệt về
chức năng. Chúng ta có thể hiểu thêm cấu trúc thư mục của Linux qua sơ đồ sau:
Hình 1: Cấu trúc thư mục của Linux
Một thiết bị lưu trữ khi được lắp vào hệ thống Linux, để có thể sử dụng chúng,
tức đọc ghi dữ liệu trên thiết bị đó, trước hết chúng ta phải thực hiện một thao
tác, tạm gọi là gắn, ghép (mount) hay “ánh xạ” thiết bị đó vào một thư mục nào
đó mà ta muốn trong cây thư mục của Linux. Bất cứ chỗ nào bạn muốn.
Ví dụ, để đọc ghi dữ liệu trên một phân vùng nào đó của ổ HDD trên máy,
chúng ta phải mount phân vùng đó vào một thư mục nào đó và đọc ghi dữ liệu
trong thư mục đó, như mọi thư mục khác.
Thực ra thì điều này còn phụ thuộc vào quyền hạn của chúng ta đối với thư
mục đó nữa, điều này sẽ đề cập đến sau.
23 23
7.1 Path 7 DIRECTORIES STRUCTURE
Tương tự, việc mount các thiết bị đó như thế nào cũng sẽ không được đề cập
đến trong tài liệu này. Bời vì tài liệu này cũng không đề cập đến một số vấn đề
liên quan, yêu cầu cơ bản đối với người dùng trước khi có thể thực hiện các thao
tác đó – ít nhất là một cách chính xác.
Việc đọc ghi dữ liệu nhiều khi không chỉ đơn giản là việc mount các thiết bị
vào một thư mục tương ứng nào đó trên cây thư mục. Mà đôi lúc chúng ta cần
phải quan tâm đến những vấn đề khác đối với các tập tin, thư mục mình muốn
tương tác đến, đó là các “quyền hạn” (Permission).
7.1 Path
Chúng ta đã biết thư mục và tệp tin trên Linux được tổ chức theo dạng cây. Và
câu hỏi đặt ra là làm thế nào để truy cập, chỉ định một thư mục, tệp tin nào đó
mà ta muốn?
Chính lúc này chúng ta cần đến một khái niệm mới, đó là đường dẫn (Path).
Path chính là đường dẫn đến một thư mục, tệp tin nào đó trên cây thư mục
của Linux. Path được bắt đầu bằng một ví trí nào đó trong cây thư mục mà ta
muốn bắt đầu, và chứa tên của tất cả các thư mục, tệp tin mà đường dẫn đi qua,
được sắp xếp theo thứ tự truy xuất, và được phân chi bởi một ký tự đặc biệt, trên
Linux ký tự đó là /.
Ký tự này cũng chính là ký hiệu của thư mục Root – gốc của cây thư mục.
Path có 2 loại, nhưng trước khi đề cập đến các loại của Path, chúng ta điểm
qua ký hiệu của một số thư mục đặc biệt, được quy định sẵn trên hệ thống Linux.
Ký hiệu Ý nghĩa
/ Thư mục Root
. Thư mục hiện hành
.. Thư mục cha của .
∼ Thư mục nhà
Bảng 2: Ký hiệu một số thư mục đặc biệt
Chính các ký hiệu này giúp cho việc các Path được rút ngắn, việc sử dụng được
tiện lợi hơn, không chỉ đơn giản là vì nó được rút ngắn hơn.
Bây giờ chúng ta sẽ đề cập đến các loại của Path. Path có 2 loại, đó là:
- Tuyệt đối: Xuất phát từ /
- Tương đối: Xuất phát từ một thư mục khác /, chủ yếu là bắt đầu bằng một
trong 3 ký tự cuối trong bảng [2]
24 24
8 FILE & FOLDER PERMISSION
7.1.1 Ví dụ:
Để dễ hình dung về cách sử dụng Path, ta sẽ lấy một vài ví dụ ngắn. Giả sử thư
mục hiện hành là ∼, trong đó có các thư mục con như Desktop, Documents, vv...
n2i@n2i-System ~ $ ls | grep ^D
Desktop
Documents
Downloads
...
n2i@n2i-System ~ $ ls /home/n2i/Desktop/
...
n2i@n2i-System ~ $ ls ../n2i/Desktop/
...
n2i@n2i-System ~ $ ls ./Desktop/
...
n2i@n2i-System ~ $ ls ~/Desktop/
...
n2i@n2i-System ~ $ ls Desktop/
...
n2i@n2i-System ~ $ ls Desktop
...
Các câu lệnh chứa từ Desktop ở trên đều trả về cùng một kết quả, nhưng tham
số cho lệnh ls là đường dẫn tới thư mục Desktop là có sự thay đổi, dễ dàng nhận
ra sự thay đổi đó. Bạn đoán xem đâu là đường dẫn tuyệt đối, và đâu là tương đối?
2 cậu lệnh cuối có một chi tiết nhỏ khác biệt, theo bạn đó là gì?
Như vậy là là chúng ta đã có những hiểu biết cơ bản về tệp tin, hệ thống thư
mục, cũng như cách truy cập các tập tin, thư mục sử dụng đường dẫn trên Linux.
Tiếp theo chúng ta sẽ giới thiệu qua về một số thuộc tính của tập tin, thư mục
trên hệ thống Linux.
Một câu hỏi nhỏ trước khi chuyển sang vấn đề mới. Theo như sơ đồ ở trên, tức
sơ đồ [1], đã chỉ rõ rằng thư mục /home/ là thư mục mà các thư mục con là thư
mục nhà của những người dùng trên hệ thống. Nhưng câu hỏi là tại sao vẫn có
1 một thư mục là /root/ là thư mục nhà dành cho người dùng root. Mà không
phải là một thư mục nào đó khác, ví dụ: /home/root/. Tại sao lại có sự “ưu tiên”
đối với người dùng root như vậy?
8 File & Folder Permission
Bảo mật tệp tin, thư mục là một phần quan trọng của bất kỳ hệ điều hành nào,
và Linux cũng không phải là ngoại lệ. Để bắt đầu tìm hiểu về mảng này trong
25 25
8 FILE & FOLDER PERMISSION
Linux, chúng ta chạy một lệnh ngắn tương tự như sau:
n2i@n2i-System ~ $ ls -l
Và kết quả của câu lệnh trên sẽ rất giống với bức hình sau đây:
Hình 2: Kết quả của lệnh ls -lh
Dễ dàng nhận thấy rằng kết quả của lệnh trên bao gồm 7 trường, như trên
hình. Theo thứ tự từ phải qua trái, ta có ý nghĩa của các trường như sau:
1: Tên của các thư mục, tệp tin được liệt kê.
2: Thời gian mà tệp, thư mục được tạo ra hoặc lần chỉnh sửa cuối.
3: Dung lượng của tệp tin, thư mục.
4: Nhóm sở hữu.
5: Người dùng sở hữu.
6: Số lượng số inode liên kết đến tập tin, thư mục đó.
7: Quyền hạn đối với tệp tin, thư mục đó
Trong khuôn khổ phần này, chúng ta sẽ chỉ tìm hiểu 3 trường được nhắc đến
ở trên, đó là các trường: 4, 5, và 7. Chúng ta sẽ lần lượt điểm qua các trường vừa
liệt kê.
Nhóm sở hữu
Trường số 4 chỉ rõ rằng tệp tin, thư mục đó thuộc sở hữu của nhóm người dùng
nào. Nhóm người dùng này có thể hiện thời có hoặc không tồn tại trên hệ thống.
26 26
8.1 Quyền hạn 8 FILE & FOLDER PERMISSION
Chủ sở hữu
Trường số 5 chứa thông tin của người dùng sở hữu tệp tin, thư mục đó. Tương
tự, người dùng đó hiện thời có thể đang hoặc không tồn tại trên hệ thống.
8.1 Quyền hạn
Đối với một tệp tin, thư mục bất kỳ. Có 3 quyền cơ bản có thể áp dụng được đó
là: 1) Đọc (Read), 2) Ghi (Write), và 3) Thực thi (Execute).
Trường số 7 mang cấu trúc chứa thông tin quyền hạn đối với tệp tin, thư mục
mang nó. Đây dường như là trường chứa nhiều thông tin nhất, cũng như quan
trọng nhất. Trong trường này lại có thể được chia thành 4 phần, như sau:
Hình 3: Chi tiết nội dung của trường thứ chứa thông tin quyền hạn
Ý nghĩa của các phần trong trường chứa thông tin quyền hạn:
1: Ký tự chỉ rõ tệp là loại tệp nào. Ký tự này có thể là:
-: Tệp tin bình thường.
b: Một block device.
c: Một character device.
d: Là một thư mục.
l: Là một liên kết.
2: Quyền hạn của người sở hữu.
3: Quyền hạn của nhóm sở hữu.
4: Quyền hạn của những người dùng và nhóm người dùng khác.
Phần thứ nhất của trường quyền hạn đã được nói rõ ở đây 8.1. Tiếp theo là
nội dung và ý nghĩa của các phần tiếp theo, tức 2, 3 và 4.
27 27
8.2 Thay đổi quyền hạn đối với một tệp tin, thư mục8 FILE & FOLDER PERMISSION
Các phần sau của trường quyền hạn, quyết định quyền hạn của người sở hữu,
nhóm sở hữu và những người dùng khác trên tệp tin, thư mục đó. Mỗi trường đều
có cấu trúc giống nhau, đó là bao gồm 3 ký tự, hay chính xác hơn, đó là 3 bit dữ
liệu.
Bởi vậy, mỗi một bit trong đó chỉ được nhận một và chỉ một giá trị trong 2
giá trị: 0 hoặc 1, hay nói cách khác, giá trị của một bit chỉ được nhận duy nhất
một ký tự của một nhóm ký tự đã được quy ước sẵn. Cấu trúc của mỗi phần và
ý nghĩa của các bit dữ liệu:
File Permission
Bit: 1st
2nd
3rd
Mean: Read Write Execute
Value:
r w x
- - -
Ví dụ
For: User Group Other
Permission: rwx r-x --x
Bin: 111 101 001
Dec: 7 5 1
Bảng 3: File Permission
8.2 Thay đổi quyền hạn đối với một tệp tin, thư mục
Như đã nói ở trên, quyền hạn đối với một tệp tin bất kỳ, bao gồm 3 quyền cơ bản:
1) Read, 2) Write và 3) Execute.
Các quyền này lại được chia làm 3 phần chính, bao gồm: i) u – User, ii) g –
Group và iii) o – Other.
Cơ bản
Để thay đổi quyền hạn đối với tệp tin, chúng ta sử dụng một số lệnh như sau:
- chmod: Thay đổi quyền hạn.
- chown: Thay đổi chủ sở hữu.
- chgrp: Thay đổi nhóm sở hữu.
28 28
8.2 Thay đổi quyền hạn đối với một tệp tin, thư mục8 FILE & FOLDER PERMISSION
Cách sử dụng của các lệnh trên có thể lướt qua như sau:
Lệnh chown: Thay đổi chủ sở hữu.
chown [OPTION]... [OWNER][:[GROUP]] FILE...
Trong đó:
- OPTION: Các tùy chọn dòng lệnh
- OWNER: Người dùng được chỉ định là chủ sở hữu.
- GROUP: Thuộc nhóm nào.
- FILE: Tệp tin bạn muốn thay đổi chủ sở hữu.
Để áp dụng lệnh này với một thư mục, chúng ta cần thêm một vài tùy chọn
cho tham số dòng lệnh. Một ví dụ:
n2i@n2i-System ~ $ chown guest n2i-own-file
Lệnh chgrp: Thay đổi nhóm sở hữu.
chgrp [OPTION]... GROUP FILE...
Trong đó:
- OPTION: Các tùy chọn dòng lệnh
- GROUP: Nhóm người dùng.
- FILE: Tệp tin áp dụng.
Ví dụ:
root@n2i-System ~ # chgrp n2i root-own-file
Lệnh chmod: Thay đổi quyền hạn.
chmod [OPTION]... MODE[,MODE]... FILE...
Trong đó:
- OPTION: Các tùy chọn dòng lệnh
- MODE: Chế độ áp dụng quyền hạn.
- FILE: Tệp tin áp dụng.
Trong câu lệnh chmod, MODE là một chuỗi ký tự có dạng:
[ugoa][-+=][rwx]
Xét từ trái sang phải, dễ dàng nhận thấy rằng MODE gồm ba phần phân biệt rõ
ràng. Đó là:
29 29
9 THAO TÁC VỚI CÁC TỆP TIN, THƯ MỤC
ugoa: Đối tượng người dùng được áp dụng quyền hạn.
u: User, tức chủ sở hữu.
g: Group.
o: Other.
a: All, tức áp dụng cho cả 3 nhóm trên.
-+=: Chỉ thị việc cấp hoặc rút quyền.
rwx: Các quyền đối với tập tin. Như đã nói bao gồm:
r: Read.
w: Write.
x: Execute.
Vậy, câu lệnh chmod sẽ rất giống thế này:
n2i@n2i-System ~ $ chmod u+rwx,g+rx,o-rwx one-file
Nâng cao
MODE của lệnh chmod là một chuỗi ký tự như đã nói ở ngay trên.
Ngoài ra, nó còn có thể là các chữ số thập phân. Vậy, tại sao lại sử dụng các
chữ số, và chúng được “lấy” ở đâu ra?
Theo như bảng [3], ta thấy rằng: Việc quy định quyền cho mỗi nhóm đối tượng
tương ứng bao gồm 3 bit dữ liệu. Tức ở hệ Nhị phân (Binary).
Sự chuyển đổi giá trị các bit này sang hệ Thập phân sẽ giúp người dùng dễ
nhớ, và dễ thao tác hơn.
Vậy, sự chuyển đổi này là như thế nào, và các giá trị tương ứng ra sao? Ta có
bảng [4].
Vậy cách sử dụng như thế nào? Ta xem ví dụ: hai câu lệnh sau đây có cùng
một ý nghĩa.
n2i@n2i-System ~ $ chmod u+rwx,g+rx,o-rwx one-file
n2i@n2i-System ~ $ chmod 741 one-file
Ngắn gọn và dễ nhớ!
9 Thao tác với các tệp tin, thư mục
9.1 Một số thao tác cơ bản
Phiên làm việc ngắn:
30 30
9.1 Một số thao tác cơ bản 9 THAO TÁC VỚI CÁC TỆP TIN, THƯ MỤC
Permission
Bin value r,w,x Dec number
000 --- 0
001 --x 1
010 -w- 2
011 -wx 3 (2 + 1)
100 r-- 4
101 r-x 5 (4 + 1)
110 rw- 6 (4 + 2)
111 rwx 7 (4 + 2 + 1)
Bảng 4: Bin ↔ Dec
n2i@n2i-System ~ $ pwd
/home/n2i
n2i@n2i-System ~ $ cd xsd/
n2i@n2i-System ~/xsd $ ls | grep all
all-hwex.pdf
all-notes.pdf
allupdate-20.txt
...
n2i@n2i-System ~/xsd $ cat allupdate-20.txt | wc -l
265
n2i@n2i-System ~/xsd $ cd -
n2i@n2i-System ~ $ cat /dev/null > .xsession-errors
n2i@n2i-System ~ $ touch newfile
n2i@n2i-System ~ $ cat > newfile
This is a new line in one new file
^D
n2i@n2i-System ~ $ file newfile
new: ASCII text
n2i@n2i-System ~ $ rm newfile
n2i@n2i-System ~ $ mv xsd/allupdate-20.txt .
n2i@n2i-System ~ $ rm -r xsd/
n2i@n2i-System ~ $ which mplayer
/usr/bin/mplayer
n2i@n2i-System ~ $ cd Videos
31 31
10 THAY ĐỔI QUYỀN HẠN ĐỐI VỚI TỆP TIN
n2i@n2i-System ~/Videos $ mplayer VietLUG.flv
...
n2i@n2i-System ~ Videos $ cp VietLUG.flv /media/data/videos-arch/
n2i@n2i-System ~ Videos $ cd !$
n2i@n2i-System /media/data/videos-arch $ !mpl
mplayer VietLUG.flv
...
n2i@n2i-System /media/data/videos-arch $ cd ~
n2i@n2i-System ~ $ ls ~guest/
...
n2i@n2i-System ~ $ ls -ilh ~root
cd: cannot open directory /root: Permission denied
n2i@n2i-System ~ $ ^D
10 Thay đổi quyền hạn đối với tệp tin
Một số ví dụ ngắn:
n2i@n2i-System ~ $ ls -lh pkgs-link
-rw-r--r-- 1 root root 8.5K Dec 20 16:39 pkgs-link
n2i@n2i-System ~ $ mkdir update
n2i@n2i-System ~ $ mv pkgs-link update/
n2i@n2i-System ~ $ chown n2i update/update-new
chown: changing ownership of ‘update/update-new’: Operation
not pemitted
n2i@n2i-System ~ $ su root
Password:
root@n2i-System n2i # chmod 700 update/update-new
-rwx------ 1 root root 8.5K Dec 20 16:39 pkgs-link
root@n2i-System n2i # chown n2i update/update-new
root@n2i-System n2i # ls -lh update/
-rwx------ 1 n2i root 8.5K Dec 20 16:39 pkgs-link
root@n2i-System n2i # chgrp n2i update/update-new
root@n2i-System n2i # ls -lh update/
-rwxr----- 1 n2i n2i 8.5K Dec 20 16:39 pkgs-link
root@n2i-System n2i # chown root:root update/update-new
root@n2i-System n2i # ls -lh update/
-rwxr----- 1 root root 8.5K Dec 20 16:39 pkgs-link
root@n2i-System n2i # chmod u-x,g+rx,o-rwx update/update-new
root@n2i-System n2i # ls -lh update/
-rw-r-x--- 1 root root 8.5K Dec 20 16:39 pkgs-link
32 32
11 COPY, NÉN, GIẢI NÉN, LƯU TRỮ TỆP
root@n2i-System n2i # chown -R root update
root@n2i-System n2i # ls -ldh update
drwxr-xr-x 2 root n2i 4.0K Dec 20 16:42 update
root@n2i-System n2i # rm -rf update
root@n2i-System n2i # ^D
n2i@n2i-System ~ $
n2i@n2i-System ~ $ ^D
11 Copy, nén, giải nén, lưu trữ tệp
33 33
Phần IV
Redirection and Pipe
34 34
12 KHÁI NIỆM
12 Khái niệm
Redirection và Pipe là gì?
12.1 Redirection
Redirection, hiểu nôm na là “tái định hướng”. Vậy tái định hướng cái gì? Sao phải
tái định hướng? Mục này sẽ giới thiệu ngắn gọn về tái định hướng và cách sử dụng.
Trong máy tính điện toán, hay hẹp hơn, là các chương trình máy tính. Khi một
chương trình thực thi, chương trình đó nhận và trả các luồng17
thông tin.
Có 3 luồng cơ bản, gọi là các “luồng chuẩn” (Standard Streams). Bao gồm:
Standard Streams
Handle Name Description
0 stdin Standard input
1 stdout Standard output
2 stderr Standard error
Bảng 5: Standard Streams
Các luồng này vốn được sử dụng như thế nào? Ta có sơ đồ:
Hình 4: Standard Streams
Khi sử dụng “tái định hướng” tức chúng ta chuyển hướng vào ra các luồng
chuẩn của một chương trình.
Ví dụ: Thay vì ta có stdout thường được xuất ra thiết bị xuất chuẩn, có thể
là màn hình, hay một Terminal Emulator. Thì ta “chuyển hướng” stdout vào một
tập tin nào đó, như những ví dụ sau đây.
17
Streams: Được đề cập cụ thể trong nhiều ngôn ngữ bậc cao, gần nhất như: C++, Java, ...
35 35
12.2 Pipe 13 VÍ DỤ NGẮN:
Việc sử dụng tái định hướng giúp cho một số thao tác đơn giản, nhanh chóng
và ngắn gọn hơn.
Sử dụng như thế nào? Trên một hệ thống Unix-Base hoặc Unix-like: Linux là
một hệ điều hành tựa Unix (Unix-like). Chúng ta sử dụng một số ký tự sau để
thực hiện chuyển hướng các luồng chuẩn đã nói ở trên:
>: Chuyển hướng Standard Streams “ra” một tệp mới. Sẽ tạo tệp mới nếu tệp chưa
tồn tại. Sẽ ghi đè (Overwrite) nội dung nếu tệp đã tồn tại và chứa nội dung.
>>: Tương tự như >, nhưng thay vì ghi đè nội dung thì sẽ nối thêm (Append) nội
dung vào tệp đã tồn tại và chứa nội dung.
<: Chuyển hướng Standard Streams “từ” một tệp tin thay vì từ một Standard
Standard.
12.2 Pipe
Pipe: nôm na là đường ống18
. Tại sao gọi là đường ống? Và việc “lắp” các đường
ống đó như thế nào?
Pipe là việc tái định hướng stdout của một lệnh nào đó thành stdin của lệnh
tiếp theo. Tạo thành một “đường ống” dẫn dữ liệu, dữ liệu được trao đổi giữa các
ứng dụng (lệnh) mà không cần thông qua một thiết bị nhập xuất chuẩn nào.
Ta sử dụng ký tự | để tạo các đường ống giữa các lệnh. Sử dụng như thế nào
thì các ví dụ sau sẽ nói khá rõ.
12.3 Redirection & Pipe
Kết lại mục này, việc sử dụng và sự hoạt động của “tái định hướng” và “đường
ống” có thể thấy rõ qua sơ đồ sau:
13 Ví dụ ngắn:
13.1 Tạo tệp mới sử dụng Redirection và Pipe
Sử dụng lệnh cal(lendar) và xuất kết quả vào tệp tin, chứ không phải là thiết bị
xuất chuẩn (stdout).
n2i@n2i-System ~ $ cal -m > this-month
n2i@n2i-System ~ $ cat this-month
December 2011
Mo Tu We Th Fr Sa Su
18
Nghe trông ngộ quá, cảm giác như chẳng liên quan gì! :|
36 36
13.2 Đếm số lượng tệp và thư mục trong thư mục bất kỳ 13 VÍ DỤ NGẮN:
Hình 5: Redirection and Pipe
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
13.2 Đếm số lượng tệp và thư mục trong thư mục bất kỳ
Liệt kê tất cả những gì có trong thư mục ∼ và đếm số lượng tệp tin + thư mục
có trong ∼.
n2i@n2i-System ~ $ ls -l ~ | grep ^[-d] | wc -l
227
13.3 Đếm số lượng thư mục con của một thư mục bất kỳ
Chỉ đếm số lượng các thư mục con mà thôi.
n2i@n2i-System ~ $ ls -l ~ | grep ^[d] | wc -l
47
37 37
13.4 Đếm số từ của một dòng bất kỳ trong một tệp văn bản13 VÍ DỤ NGẮN:
13.4 Đếm số từ của một dòng bất kỳ trong một tệp văn
bản
Giả sử ta muốn đếm số từ, ký tự, vv... trong một tệp tin có hàng ngàn hoặc hơn
số dòng. Ví dụ ở đây có một tệp plain text có hơn 15000 dòng. Thử đếm số từ
trong dòng thứ 10000 của tệp này: in ra dòng thứ 10000 và đếm số từ trong dòng
đó cho ta kết quả.
n2i@n2i-System ~ $ wc -l jarg262.txt linux-path
15023 jarg262.txt
94750 linux-path
109773 total
n2i@n2i-System ~ $ time awk ‘NR==10000’ jarg262.txt | wc -w
12
real 0m0.005s
user 0m0.002s
sys 0m0.001
13.5 Liệt kê các tệp, thư mục con
Yêu cầu: Liệt kê các thư mục con, tệp tin trong một thư mục nào đó mà có thời
gian được tạo ra là tháng 09 (năm nay).
Linux thực ra không lưu thời điểm mà tệp tin, thư mục được tạo (Created).
Linux chỉ lưu thời điểm mà thư mục, tệp tin đã được thay đổi (Modified) vào
thuộc tính của tệp tin.
Nếu từ khi được tạo ra tới thời điểm hiện tại mà tệp tin, thư mục chưa bị thay
đổi ít nhất một lần thì có thể coi như thời gian thay đổi tệp tin trong thuộc tính
của tệp tin chính là thời điểm tệp tin, thư mục được tạo ra.
Những tệp tin, thư mục con của ∼ được tạo ra hoặc chỉnh sửa lần cuối trong
tháng 09:
n2i@n2i-System ~ $ ls -lt --time-style=+%m/%Y | grep ^[-d] |
grep 09/2011
-rw-r--r-- 1 n2i n2i 795 09/2011 hanoimod.c
-rw-r--r-- 1 n2i n2i 149 09/2011 TKB
-rw-r--r-- 1 n2i n2i 13965 09/2011 how-to-configure-cpu
freqd
13.6 Đếm tổng số tiến trình
Tool pstree liệt kê tất cả các tiến trình hiện có trên hệ thống theo dạng cây, có
gốc là tiến trình init, mỗi dòng là một tiến trình. vậy để tính số tiến trình hiện
38 38
13.7 Đếm số lượng người dùng đã đăng ký 13 VÍ DỤ NGẮN:
đang chạy trên hệ thống, ta lấy kết quả của lệnh pstree và đếm số dòng:
n2i@n2i-System ~ $ pstree | wc -l
33
13.7 Đếm số lượng người dùng đã đăng ký
Mỗi entry trong file /etc/passwd là thông tin của một người dùng đã được đăng
ký trong hệ thống. Đó có thể là những người dùng hệ thống hoặc một người dùng
bình thường.
n2i@n2i-System ~ $ cat /etc/passwd | wc -l
13.8 Đếm số lượng người dùng đang đăng nhập
Dùng lệnh who để liệt kê tất cả những người dùng đã đăng nhập vào và đang hoạt
động trên hệ thống. Cắt lấy trường user từ kết quả của lệnh who.
Sau đó dùng lệnh uniq để loại bỏ những kết entry trùng nhau do kết quả của
lệnh who. Ta có số lượng kết quả thực sự.
n2i@n2i-System ~ $ who
root tty1 2011-12-22 16:26
n2i tty7 2011-12-22 15:26 (:0)
n2i pts/0 2011-12-22 15:27 (:0)
n2i pts/1 2011-12-22 15:27 (:0)
n2i@n2i-System ~ $ who | cut -d " " -f 1 | uniq | wc -l
2
13.9 Ví dụ hơi ngắn :3
13.9.1 Tình huống, yêu cầu, hướng giải quyết:
Thông tin:
- Tình huống: Máy này sử dụng mạng thông qua USB 3G. Muốn cài đặt một
số gói mới và cập nhật hệ thống.
- Vấn đề: Việc cập nhật và cài đặt phải tải nhiều gói, và tổng dung lượng rất
lớn. Sử dụng 3G có dung lượng, băng thông hạn hẹp và cước phí cao.
- Ý tưởng: Lấy đường link tải các gói, cho vào tệp mới, sau đó đưa đi máy khác
có kết nối mạng – tất nhiên không phải là dùng 3G, tải mớ gói về, sao chép
vào thư mục cache của trình quản lý gói tại máy này.
39 39
13.9 Ví dụ hơi ngắn :3 13 VÍ DỤ NGẮN:
13.9.2 Điều kiện thực tế:
Hệ thống quản lý gói của Gentoo là Portage và sử dụng emerge như trình quản
lý. emerge có 2 tùy chọn đáng chú ý – trong tình huống này:
-f: (--fetch-only) Chỉ tải gói, mà không tiến hành biên dịch và cài đặt.
-p: (--pretend) Tiến hành “giả lập” các tùy chọn cho emerge.
Kết hợp 2 tùy chọn này trong câu lệnh của emerge chúng ta sẽ có danh sách
các liên kết tải các gói cài đặt – và một số thông tin khác.
Kết quả của lệnh emerge -pf <atom>... có dạng:
atom1-url1 atom1-url2 ....
atom2-url1 atom2-url2 ...
...
Trong đó:
atom: Tên gói cần cài đặt, tất nhiên có thể có rất rất nhiều gói.
atom1-url1: Liên kết tải (url1) của gói thứ nhất (atom1) tại mirror đầu tiên.
Tương tự cho các mirror khác và các gói khác.
Nhận xét:
- Mỗi dòng là danh sách các liên kết tải của cùng một gói tại các mirror khác
nhau.
- Các liên kết trong một dòng phân biệt nhau bằng một khoảng trắng: ‘ ’.
13.9.3 Tiến hành:
Khởi chạy emerge với 2 tùy chọn đã nói ở trên, lọc ra các dòng là các liên kết, cắt
lấy một liên kết trong mỗi dòng tùy ý, sau đó cho tất cả các liên kết đã chọn vào
một tệp plain text tùy ý.
root@n2i-System n2i # emerge -pfuND world | grep ^http |
cut -d " " -f 1 > allupdate-22
Một lưu ý nhỏ: Để Windows có thể hiển thị bình thường tệp tin vừa tạo ra ở
trên, cần làm một thao tác nhỏ, đó là chuyển đổi kiểu (kết thúc dòng trong EOL)
tệp tin từ Unix sang kiểu của Windows: Tức n sang rn hay LF sang CRLF. Có
thể sử dụng một tool nhỏ:
40 40
14 ENV
n2i@n2i-System ~ $ unix2dos allupdate-22 allupdate.txt
Sau đó có thể dễ dàng đưa tệp này sang một máy khác, có thể chạy bất cứ OS
nào và import những liên kết trong tệp tin kia vào một trình quản lý tải tệp tin
nào đó để tải.
14 env
Lệnh env liệt kê tất cả các biến môi trường hiện có. Để xem một biến nào đó ví
dụ HOME hay TERM:
n2i@n2i-System ~ $ env | grep -i ^home
HOME=/home/n2i
n2i@n2i-System ~ $ env | grep -i ^term
TERM=xterm
n2i@n2i-System ~ $
41 41

More Related Content

What's hot

Hướng dẫn sử dụng hệ điều hành Ubuntu
Hướng dẫn sử dụng hệ điều hành UbuntuHướng dẫn sử dụng hệ điều hành Ubuntu
Hướng dẫn sử dụng hệ điều hành UbuntuQuang Ngoc
 
Lab 6 backup windows server 2008
Lab 6 backup windows server 2008 Lab 6 backup windows server 2008
Lab 6 backup windows server 2008 phipro
 
Giới thiệu các hệ điều hành trong dự án Ubuntu
Giới thiệu các hệ điều hành trong dự án UbuntuGiới thiệu các hệ điều hành trong dự án Ubuntu
Giới thiệu các hệ điều hành trong dự án UbuntuThức Nguyễn Văn
 
Part 19 install windows - sysprep -www.key4_vip.info
Part 19   install windows - sysprep -www.key4_vip.infoPart 19   install windows - sysprep -www.key4_vip.info
Part 19 install windows - sysprep -www.key4_vip.infolaonap166
 
backup windows server 2008
backup windows server 2008backup windows server 2008
backup windows server 2008chuongthai77
 
Backup+restore+linux
Backup+restore+linuxBackup+restore+linux
Backup+restore+linuxphanleson
 
Bat dau voi Raspberry Pi (demo)
Bat dau voi Raspberry Pi (demo)Bat dau voi Raspberry Pi (demo)
Bat dau voi Raspberry Pi (demo)Thien Ta
 
Introducing calc vi-draft1
Introducing calc vi-draft1Introducing calc vi-draft1
Introducing calc vi-draft1Vu Hung Nguyen
 
CCNA Cơ Bản_Tiếng Việt
CCNA Cơ Bản_Tiếng ViệtCCNA Cơ Bản_Tiếng Việt
CCNA Cơ Bản_Tiếng ViệtPham Duy Tuan
 
Hệ điều hành (chương 3)
Hệ điều hành (chương 3)Hệ điều hành (chương 3)
Hệ điều hành (chương 3)realpotter
 
[Demo] Bat dau lam quen voi Raspberry Pi
[Demo] Bat dau lam quen voi Raspberry Pi[Demo] Bat dau lam quen voi Raspberry Pi
[Demo] Bat dau lam quen voi Raspberry PiThien Ta
 
Tieu Luan - Mang may tinh voi Packet tracer
Tieu Luan - Mang may tinh voi Packet tracerTieu Luan - Mang may tinh voi Packet tracer
Tieu Luan - Mang may tinh voi Packet tracerDuc Nguyen
 
Sử dụng phần mềm tas.net2014
Sử dụng phần mềm tas.net2014Sử dụng phần mềm tas.net2014
Sử dụng phần mềm tas.net2014Trung Phan
 

What's hot (17)

Hướng dẫn sử dụng hệ điều hành Ubuntu
Hướng dẫn sử dụng hệ điều hành UbuntuHướng dẫn sử dụng hệ điều hành Ubuntu
Hướng dẫn sử dụng hệ điều hành Ubuntu
 
Taose
TaoseTaose
Taose
 
Lab 6 backup windows server 2008
Lab 6 backup windows server 2008 Lab 6 backup windows server 2008
Lab 6 backup windows server 2008
 
Solaris 11.4 zfs_iscsi_zz
Solaris 11.4 zfs_iscsi_zzSolaris 11.4 zfs_iscsi_zz
Solaris 11.4 zfs_iscsi_zz
 
Giới thiệu các hệ điều hành trong dự án Ubuntu
Giới thiệu các hệ điều hành trong dự án UbuntuGiới thiệu các hệ điều hành trong dự án Ubuntu
Giới thiệu các hệ điều hành trong dự án Ubuntu
 
Lpi01
Lpi01Lpi01
Lpi01
 
Part 19 install windows - sysprep -www.key4_vip.info
Part 19   install windows - sysprep -www.key4_vip.infoPart 19   install windows - sysprep -www.key4_vip.info
Part 19 install windows - sysprep -www.key4_vip.info
 
backup windows server 2008
backup windows server 2008backup windows server 2008
backup windows server 2008
 
Backup+restore+linux
Backup+restore+linuxBackup+restore+linux
Backup+restore+linux
 
Bat dau voi Raspberry Pi (demo)
Bat dau voi Raspberry Pi (demo)Bat dau voi Raspberry Pi (demo)
Bat dau voi Raspberry Pi (demo)
 
Introducing calc vi-draft1
Introducing calc vi-draft1Introducing calc vi-draft1
Introducing calc vi-draft1
 
Ccna full
Ccna fullCcna full
Ccna full
 
CCNA Cơ Bản_Tiếng Việt
CCNA Cơ Bản_Tiếng ViệtCCNA Cơ Bản_Tiếng Việt
CCNA Cơ Bản_Tiếng Việt
 
Hệ điều hành (chương 3)
Hệ điều hành (chương 3)Hệ điều hành (chương 3)
Hệ điều hành (chương 3)
 
[Demo] Bat dau lam quen voi Raspberry Pi
[Demo] Bat dau lam quen voi Raspberry Pi[Demo] Bat dau lam quen voi Raspberry Pi
[Demo] Bat dau lam quen voi Raspberry Pi
 
Tieu Luan - Mang may tinh voi Packet tracer
Tieu Luan - Mang may tinh voi Packet tracerTieu Luan - Mang may tinh voi Packet tracer
Tieu Luan - Mang may tinh voi Packet tracer
 
Sử dụng phần mềm tas.net2014
Sử dụng phần mềm tas.net2014Sử dụng phần mềm tas.net2014
Sử dụng phần mềm tas.net2014
 

Viewers also liked

Costof foodjan2012
Costof foodjan2012Costof foodjan2012
Costof foodjan2012swifcnjed
 
Clases apoyo segundo año
Clases apoyo segundo añoClases apoyo segundo año
Clases apoyo segundo añonurylt
 
საზოგადოება
საზოგადოებასაზოგადოება
საზოგადოებაlazana
 
1 29 dmlvptw
1 29 dmlvptw1 29 dmlvptw
1 29 dmlvptwNiekT
 
TRABAJO EN CLASE
TRABAJO EN CLASETRABAJO EN CLASE
TRABAJO EN CLASEDeysi Mora
 
Gastos Medicos Presentacion Axa 2008
Gastos Medicos Presentacion Axa 2008Gastos Medicos Presentacion Axa 2008
Gastos Medicos Presentacion Axa 2008AraTijuana
 

Viewers also liked (10)

Narkotika
NarkotikaNarkotika
Narkotika
 
Costof foodjan2012
Costof foodjan2012Costof foodjan2012
Costof foodjan2012
 
Clases apoyo segundo año
Clases apoyo segundo añoClases apoyo segundo año
Clases apoyo segundo año
 
7 geo parte 1
7 geo parte 17 geo parte 1
7 geo parte 1
 
Doc1
Doc1Doc1
Doc1
 
საზოგადოება
საზოგადოებასაზოგადოება
საზოგადოება
 
1 29 dmlvptw
1 29 dmlvptw1 29 dmlvptw
1 29 dmlvptw
 
Dom_Broadway postcard
Dom_Broadway postcardDom_Broadway postcard
Dom_Broadway postcard
 
TRABAJO EN CLASE
TRABAJO EN CLASETRABAJO EN CLASE
TRABAJO EN CLASE
 
Gastos Medicos Presentacion Axa 2008
Gastos Medicos Presentacion Axa 2008Gastos Medicos Presentacion Axa 2008
Gastos Medicos Presentacion Axa 2008
 

Similar to Linux Introduction

Thuc hanh vb
Thuc hanh vbThuc hanh vb
Thuc hanh vbhaquang83
 
Nhapmon linux
Nhapmon linuxNhapmon linux
Nhapmon linuxLee Chan
 
Báo cáo thực tập tuần 1 phạm tiến quân
Báo cáo thực tập tuần 1   phạm tiến quânBáo cáo thực tập tuần 1   phạm tiến quân
Báo cáo thực tập tuần 1 phạm tiến quânQuân Quạt Mo
 
Báo cáo thực tập cuối kỳ
Báo cáo thực tập cuối kỳBáo cáo thực tập cuối kỳ
Báo cáo thực tập cuối kỳThân Hoàng
 
giao-trinh-python-co-ban-9642-2-10.pdf
giao-trinh-python-co-ban-9642-2-10.pdfgiao-trinh-python-co-ban-9642-2-10.pdf
giao-trinh-python-co-ban-9642-2-10.pdfLeQucPhi
 
giao-trinh-python-co-ban.pdf
giao-trinh-python-co-ban.pdfgiao-trinh-python-co-ban.pdf
giao-trinh-python-co-ban.pdfCongNgo13
 
GIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdf
GIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdfGIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdf
GIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdfQucTNguyn27
 
ARDUINO_CHO_NGI_MI_BT_DU_Quyn_can (1).pdf
ARDUINO_CHO_NGI_MI_BT_DU_Quyn_can (1).pdfARDUINO_CHO_NGI_MI_BT_DU_Quyn_can (1).pdf
ARDUINO_CHO_NGI_MI_BT_DU_Quyn_can (1).pdfkhanhnguyen870330
 
Hướng dẫn thiết kế khuôn Solidworks
Hướng dẫn thiết kế khuôn Solidworks Hướng dẫn thiết kế khuôn Solidworks
Hướng dẫn thiết kế khuôn Solidworks Cadcamcnc Học
 

Similar to Linux Introduction (20)

Tu hoc su dung linux 2
Tu hoc su dung linux 2Tu hoc su dung linux 2
Tu hoc su dung linux 2
 
Tu hoc su_dung_linux
Tu hoc su_dung_linuxTu hoc su_dung_linux
Tu hoc su_dung_linux
 
Thuc hanh vb
Thuc hanh vbThuc hanh vb
Thuc hanh vb
 
Nhapmon linux
Nhapmon linuxNhapmon linux
Nhapmon linux
 
Báo cáo thực tập tuần 1 phạm tiến quân
Báo cáo thực tập tuần 1   phạm tiến quânBáo cáo thực tập tuần 1   phạm tiến quân
Báo cáo thực tập tuần 1 phạm tiến quân
 
Báo cáo thực tập cuối kỳ
Báo cáo thực tập cuối kỳBáo cáo thực tập cuối kỳ
Báo cáo thực tập cuối kỳ
 
Linux LPI Bacis
Linux LPI BacisLinux LPI Bacis
Linux LPI Bacis
 
giao-trinh-python-co-ban-9642-2-10.pdf
giao-trinh-python-co-ban-9642-2-10.pdfgiao-trinh-python-co-ban-9642-2-10.pdf
giao-trinh-python-co-ban-9642-2-10.pdf
 
giao-trinh-python-co-ban.pdf
giao-trinh-python-co-ban.pdfgiao-trinh-python-co-ban.pdf
giao-trinh-python-co-ban.pdf
 
Lập trình java
Lập trình javaLập trình java
Lập trình java
 
GIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdf
GIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdfGIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdf
GIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdf
 
Linux cho nguoi_moi_dung
Linux cho nguoi_moi_dungLinux cho nguoi_moi_dung
Linux cho nguoi_moi_dung
 
3.5 g va quy hoach
3.5 g va quy hoach3.5 g va quy hoach
3.5 g va quy hoach
 
Ubuntu
UbuntuUbuntu
Ubuntu
 
Thủ thuật Optimize Windows 7
Thủ thuật Optimize Windows 7 Thủ thuật Optimize Windows 7
Thủ thuật Optimize Windows 7
 
Windows xp
Windows xp Windows xp
Windows xp
 
Tailieu.vncty.com lab dsp
Tailieu.vncty.com   lab dspTailieu.vncty.com   lab dsp
Tailieu.vncty.com lab dsp
 
ARDUINO_CHO_NGI_MI_BT_DU_Quyn_can (1).pdf
ARDUINO_CHO_NGI_MI_BT_DU_Quyn_can (1).pdfARDUINO_CHO_NGI_MI_BT_DU_Quyn_can (1).pdf
ARDUINO_CHO_NGI_MI_BT_DU_Quyn_can (1).pdf
 
Hướng dẫn thiết kế khuôn Solidworks
Hướng dẫn thiết kế khuôn Solidworks Hướng dẫn thiết kế khuôn Solidworks
Hướng dẫn thiết kế khuôn Solidworks
 
669465.pdf
669465.pdf669465.pdf
669465.pdf
 

Linux Introduction

  • 1. HỆ ĐIỀU HÀNH LINUX NHỮNG TÌM HIỂU CƠ BẢN Họ và tên: Mã Sinh viên: Lớp: Đinh Xuân Sâm 081C900130 08I2 1 1
  • 2. MỤC LỤC MỤC LỤC Mục lục I Hệ thống Linux 3 1 System Info 3 II Basic 4 2 Khởi động hệ thống 5 2.1 Quá trình “Khởi động” . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.1 Các tùy chọn: . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.2 Boot: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3 Đăng nhập, đăng xuất 7 3.1 Đăng nhập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.1.1 GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.1.2 CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.2 Đăng xuất . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2.1 GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2.2 CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.2.3 Sumary: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4 Làm quen với Command line 10 4.1 Shell & Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.1 Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.2 bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.3 Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.2 Lệnh căn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.2.1 Khởi động một Shell . . . . . . . . . . . . . . . . . . . . . . 11 4.2.2 Căn bản sử dụng lệnh . . . . . . . . . . . . . . . . . . . . . 12 4.2.3 Một số lưu ý . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.2.4 Các ví dụ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 5 man, info và -h 14 5.1 -h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 5.1.1 Thông tin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 5.1.2 Ví dụ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 5.2 man và info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.2.1 man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.2.2 info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2 2
  • 3. MỤC LỤC MỤC LỤC III File, Folder & Permission 19 6 Everything is file 20 7 Directories Structure 20 7.1 Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 7.1.1 Ví dụ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 8 File & Folder Permission 23 8.1 Quyền hạn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 8.2 Thay đổi quyền hạn đối với một tệp tin, thư mục . . . . . . . . . . 26 9 Thao tác với các tệp tin, thư mục 28 9.1 Một số thao tác cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . 28 10 Thay đổi quyền hạn đối với tệp tin 30 11 Copy, nén, giải nén, lưu trữ tệp 31 IV Redirection and Pipe 32 12 Khái niệm 33 12.1 Redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 12.2 Pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 12.3 Redirection & Pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 13 Ví dụ ngắn: 34 13.1 Tạo tệp mới sử dụng Redirection và Pipe . . . . . . . . . . . . . . . 34 13.2 Đếm số lượng tệp và thư mục trong thư mục bất kỳ . . . . . . . . . 35 13.3 Đếm số lượng thư mục con của một thư mục bất kỳ . . . . . . . . . 35 13.4 Đếm số từ của một dòng bất kỳ trong một tệp văn bản . . . . . . . 36 13.5 Liệt kê các tệp, thư mục con . . . . . . . . . . . . . . . . . . . . . . 36 13.6 Đếm tổng số tiến trình . . . . . . . . . . . . . . . . . . . . . . . . . 36 13.7 Đếm số lượng người dùng đã đăng ký . . . . . . . . . . . . . . . . . 37 13.8 Đếm số lượng người dùng đang đăng nhập . . . . . . . . . . . . . . 37 13.9 Ví dụ hơi ngắn :3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 13.9.1 Tình huống, yêu cầu, hướng giải quyết: . . . . . . . . . . . . 37 13.9.2 Điều kiện thực tế: . . . . . . . . . . . . . . . . . . . . . . . . 38 13.9.3 Tiến hành: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 14 env 39 3 3
  • 4. DANH SÁCH BẢNG DANH SÁCH HÌNH VẼ Danh sách bảng 1 Thông tin hệ thống . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Ký hiệu một số thư mục đặc biệt . . . . . . . . . . . . . . . . . . . 22 3 File Permission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4 Bin ↔ Dec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5 Standard Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Danh sách hình vẽ 1 Cấu trúc thư mục của Linux . . . . . . . . . . . . . . . . . . . . . . 21 2 Kết quả của lệnh ls -lh . . . . . . . . . . . . . . . . . . . . . . . . 24 3 Chi tiết nội dung của trường thứ chứa thông tin quyền hạn . . . . . 25 4 Standard Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5 Redirection and Pipe . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4 4
  • 5. 1 SYSTEM INFO Phần I Hệ thống Linux 1 System Info Đây là hệ thống Linux được sử dụng để tiến hành việc tìm hiểu và thực hành với Linux. System Information i686-pc-linux-gnu OS : Linux Version : 3.0.6-gentoo Platform : i686 Distributor : Gentoo Description : Gentoo Base System Release : 2.0.3 — More — Apps : Version Bash : 4.1.9 GCC : 4.5.3-r1 GRUB : 0.97 GDB : 2.20.11 — WM — Awesome : 3.4.9 Bảng 1: Thông tin hệ thống 5 5
  • 7. 2 KHỞI ĐỘNG HỆ THỐNG 2 Khởi động hệ thống Yêu cầu: Khởi động hệ thống. Quá trình khởi động một hệ thống Linux cũng khá đơn giản, ở đây đúng với hệ thống trên, tức một chiếc PC chạy Linux, dùng GRUB 0.97 làm bootloader. Tất nhiên cũng có sự khác nhau ít nhiều giữa các hệ thống Linux, ví dụ: một máy chủ hẳn sẽ khác với một PC, hay những máy sử dụng các bootloader khác nhau, hay cấu hình các bootloader khác nhau, vv. . . Việc khởi động một hệ thống nói chung thường được ngầm hiểu là khởi động một hệ thống đã được cái đặt sẵn trên ổ đĩa cứng HDD của máy. Việc khởi động từ cdrom hay một thanh USB Flash, thậm chí qua mạng LAN là thường được dùng trong quá trình cài đặt hệ thống. Tuy nhiên, đối với Linux, còn có khái niệm Live Mode, tức những bản phân phối (Distro) Linux có thể chạy trực tiếp từ CDROM hay một thanh USB Flash, nên việc khởi động (boot) một bản Linux còn có thể tiến hành từ cdrom, hay usb flash bất kỳ. Và sau khi khởi động là quá trình sử dụng hệ thống đó, chứ không phải là quá trình cài đặt. Điều này chúng ta có thể thấy rất rõ ở một số bản phân phối Linux phổ biến như Ubuntu, Linux Mint, Fedora. Hay các đĩa cứu hộ recurse, tất nhiên cũng sử dụng nhân (Kernel) Linux như Parted Magic, Gparted, vv. . . Đặc điểm này rất khác biệt đối với Windows - như chúng ta từng quen. Khi nhắc đến việc khởi động từ cdrom hay usb thì đối với Windows, có chăng là quá trình cài đặt hệ thống. Đây thực sự là điểm mạnh của các bản phân phối Linux, nhờ đó, chúng ta có thể trải nghiệm các bản phân phối Linux trước khi cài đặt vào HDD. Việc boot Linux từ LAN (PXE chẳng hạn.) thường1 là trong quá trình cài đặt một hệ thống mới. Quá trình này chúng ta cần các file boot của bản phân phối muốn cài đặt, một tftp server, hoặc thêm một dhcp server, nếu cần. 2.1 Quá trình “Khởi động” Bây giờ là chi tiết quá trình khởi động hệ thống [1] đã được nêu trên. Việc đầu tiên chúng ta cần làm đó là bấm nút nguồn (Power) của máy. Thực ra không phải, mà là kiểm tra nguồn điện cho máy đã sẵn sàng chưa, việc bấm nút nguồn là thao tác tiếp theo :). Giả sử mọi việc diễn ra tốt đẹp. Sau quá trình POST của BIOS ta sẽ gặp menuboot2 của bootloader Đây là danh sách các Hệ điều hành tùy chọn để khởi 1 Tức đa số các trường hợp 2 Thực ra có thấy hay không thấy là việc chúng ta cấu hình bootloader như thế nào. 7 7
  • 8. 2.1 Quá trình “Khởi động” 2 KHỞI ĐỘNG HỆ THỐNG động. Một mục (entry) của menuboot tương ứng một Hệ điều hành chúng ta có thể khởi động3 . Menuboot có thể rất khác đối với các bootloader khác nhau hoặc các phiên bản (version) khác nhau của cùng một bootloader (GRUB 1 vs GRUB 2) hay các cấu hình khác nhau đối với cùng một bootloader. 2.1.1 Các tùy chọn: Tại menuboot chúng ta có thể lựa chọn các mục để khởi động Hệ điều hành tương ứng. Ngoài ra, chúng ta còn có thể thực hiện một số thao tác khác. Đối với hệ thống này bootloader là GRUB 1, nên có một số lựa chọn dễ thấy như sau: e: Chỉnh sửa mục đang được chọn. Chúng ta sử dụng lệnh này để chỉnh sửa, thêm bớt các tùy chọn đối so với cấu hình vốn có. c: Vào chế độ lệnh (command mode) của GRUB. Tại đây bạn có thể sử dụng các lệnh của GRUB4 để có những thao tác cao cấp (Advance) hơn. Ví dụ, boot một OS hay một phiên bản nhân Linux nào đó bằng tay (Manually). Điều này khá thú vị5 !. :) b: Nhấn phím này để boot. 2.1.2 Boot: Trong trường hợp đối với hệ thống này, tôi sẽ chọn mục có dòng: “Gentoo with linux-3.0.6-gentoo-n2i6 ”, rồi nhấn Enter. Và quá trình khởi động hệ thống mới thực sự bắt đầu. Trong suốt quá trình boot hệ thống, chúng ta sẽ thấy những gì đang diễn ra được hiện lên trên màn hình, nếu bạn không sử dụng splash7 , hoặc ít nhất là trước khi splash được hiển thị. Quá trình khởi động kết thúc, sẽ đưa ta đến màn hình đăng nhập vào hệ thống. Chuyển sang mục “Đăng nhập, đăng xuất”. 3 Thực ra với Linux thì đó có thể là một nhân khác, hoặc cùng một nhân nhưng với những tùy chọn boot - dành cho bootloader, khác. 4 Thực ra GRUB cũng chỉ là một chương trình. 5 Thực ra là đôi khi thôi! 6 Thực ra tôi cũng không nhớ chính xác, nhưng cũng chẳng quan trọng :). 7 Thực ra điều này cũng còn tùy chúng ta sử dụng splash như thế nào. 8 8
  • 9. 3 ĐĂNG NHẬP, ĐĂNG XUẤT 3 Đăng nhập, đăng xuất 3.1 Đăng nhập Màn hình đăng nhập có thể là chế độ đồ họa (GUI ) hoặc chế độ dòng lệnh (CLI ). Việc chuyển đổi qua lại 2 chế độ này rất dễ dàng và nhanh chóng. Hai chế độ có thể khác nhau đôi chút, nhưng về “roadmap” chung thì đều giống nhau, tức: nhập username, nhập password và đăng nhập. 3.1.1 GUI Nếu màn hình đăng nhập là giao diện đồ họa, thì màn hình đang nhập rất có thể là “theme” của một chương trình nào đó, được gọi là các chương trình “Display Manager“ - viết tắt là DM. Có rất nhiều chương trình như thế, có thể liệt kê một số như: GDM (Gnome Display Manager), KDM (KDE Display Manager), XDM (X Display Manager), WDM (Wing Display Manager), Slim, Quigy, vv. . . Giao diện đăng nhập có thể rất khác nhau, tùy thuộc vào chúng ta sử dụng DM nào, và đương nhiên, là tùy thuộc việc chúng ta cấu hình DM đó như thế nào nữa. Tất nhiên, việc thao tác thì cũng rất đơn giản - như trên đã nói. Đối với tôi, trên hệ thống này, sử dụng GDM làm DM, với chủ đề (theme) login-scan-fusion, và thao tác đăng nhập của tôi: 1. Nhập n2i → Nhấn “Enter”. 2. Nhập ************ → Nhấn “Enter”. Xong. ./ 3.1.2 CLI Việc đăng nhập từ chế độ dòng lệnh cũng không khác là bao, thao tác cũng không có nhiều và cũng chằng khó gì hơn so với sử dụng GUI cả. Có điều, việc đăng nhập từ CLI thường . . . nhanh hơn! :) Ví dụ: n2i-System login: n2i Password: n2i@n2i-System ~ $_ Chú giải: n2i-System: hostname. n2i: username. Password: Chỉ thị nhập mật khẩu password để xác thực thao tác đăng nhập. 9 9
  • 10. 3.2 Đăng xuất 3 ĐĂNG NHẬP, ĐĂNG XUẤT ∼: Thư mục nhà (home) của người dùng hiện tại, trong trường hợp này tức /home/n2i/. $: Dấu nhắc lệnh chỉ thị rằng đây là người dùng bình thường8 . Lưu ý: Tại chỉ thị nhập mật khẩu, Linux sẽ không hiện bất cứ ký tự nào khi bạn đang nhập mật khẩu, bạn chỉ cần nhập đúng mật khẩu của mình là được. Nếu muốn chỉnh sửa? Bạn có thể! Cứ dùng phím Backspace trên bàn phím và xóa đi những ký tự bạn cho rằng là sai, tất nhiên bạn phải nhớ là mình đã nhập những gì :), và đánh lại các ký tự cần thiết. Tốt hơn hết là xóa hết tất cả nếu bạn cảm giác là sai ở đâu đó, sau đó đánh lại mật khẩu. Điều này sẽ chắc chắn hơn. Đến đây chúng ta đã xong việc “Đăng nhập” vào hệ thống. 3.2 Đăng xuất Các thao tác đăng xuất khỏi phiên làm việc cũng rất đơn giản, thậm chí đơn giản hơn việc đăng nhập vào hệ thống nhiều. Điều đó dẫn đến thời gian để quá trình đăng xuất diễn ra cũng rất nhanh, thường là trong nháy mắt. Có nhiều trường hợp, nhưng chúng ta sẽ chia ra hai trường hợp như trên mục “Đăng nhập” đã nói. 3.2.1 GUI Nếu bạn đang ở trong một phiên làm việc, có sử dụng một Desktop Environment (DE) nào đó, như GNOME, KDE, XFCE, LXDE, Enlightement, vv... Hay một Window Manager (WM), như: Awesome, PekWM, WMII, vv... Có rất nhiều các DE hay WM trên Linux. Và tất nhiên, sử dụng cái nào, và như thế nào là tùy vào điều kiện, sở thích, khả năng, yêu cầu, mục đích, vv... của chúng ta. Bởi tất cả đều miễn phí, tự do lựa chọn và sử dụng, đầy đủ tài liệu, và hơn hết, cộng đồng sử dụng và hỗ trợ rất nồng nhiệt. Để đăng xuất khỏi các phiên làm việc như vậy, các thường thấy nhất là sử dụng các menu của các DE hay WM. Ví dụ: nếu là Gnome2 thì bật menu chính của Gnome2, chúng ta sẽ thấy mục “Log out”, tới đây thì đơn giản, bạn chỉ cần nhấp chuột vào menu đó, và, phiên làm việc của bạn kết thúc. Tương tự, trong các DE hay WM khác, chúng ta cũng sử dụng mục “Log out” ở các menu tương ứng của các DE hay WM đó. Nhưng không hẳn hoàn toàn luôn luôn như thế, đó chỉ là “roadmap” chung mà thôi. Ví dụ: trong Gnome3 hoặc Unity (Mặc định trong Ubuntu từ phiên bản 11.04), chúng ta có thể chọn “Log out” từ menu sổ xuống của các tiểu dụng chỉ dẫn (Indicator Applets). Hay tìm kiếm trong “Dash” của Gnome3 hay Unity mục Log out và lựa chọn nó, kết quả cũng sẽ tương tự. 8 Tức so với root, chứ không phải so với người dùng... bất bình thường :). 10 10
  • 11. 3.2 Đăng xuất 3 ĐĂNG NHẬP, ĐĂNG XUẤT Cũng theo ý tưởng trên, nếu chúng ta dùng một chương trình kiểu “Applications Launcher” như Synapse hay Gnome Do, thì việc tìm kiếm và chọn lựa cũng diễn ra như thế, và nhanh chóng hơn, bởi chúng ta hầu như không cần rời tay khỏi bàn phím trong khi thao tác. Tất cả các thao tác có thể chỉ diễn ra trong 1 đến 2s, rất nhanh. Việc chúng ta tìm mục “Log out” ở đâu, như thế nào phụ thuộc rất nhiều vào việc chúng ta sử dụng DE hay WM nào, cấu hình chúng ra sao và thói quen sử dụng cũng rất quan trọng. Mục “Log out” thậm chí không tồn tại, đặc biệt khi bạn sử dụng một WM nào đó, mà không sử dụng một chương trình quản lý phiên làm việc (Session Manager) nào. Tuy nhiên, có những mục có chức năng tương tự. Ví dụ: trong Awesome WM, ta chọn “quit Awsome”, hay sử dụng tổ hợp phím: Mod49 + Shift + q để kết thúc phiên làm việc của Awesome, cũng chính là kết thúc phiên làm việc của mình. Kết: Tóm lại, không thể liệt kê hết các các cách để người dùng thoát khỏi một phiên làm việc của mình được - đang nói ở chế độ đồ họa. Vì điều đó phụ thuộc rất lớn việc mỗi người sử dụng những gì, cấu hình ra sao, thói quen sử dụng, sở thích, điều kiện, khả năng,... trên chính hệ thống của họ. Điều này nghe như là một điểm bất lợi nhỉ?! :) Không như Windows, chúng ta có một số hữu hạn các cách để đăng nhập hay đăng xuất phiên làm việc của mình, ví dụ: Đăng nhập thì ta nhập tên người dùng và mật khẩu tại màn hình đăng nhập, sau đó nhấn “Enter”. Và đăng xuất? Vào “Start” chọn “Log out”. Ví dụ thế. Với Linux, ta có muôn hình cách làm các thao tác trên. Như ví dụ đối với Awesome WM ở trên thì cũng chỉ là những gì mặc định (Default) của WM ấy, và thự sự trên hệ thống của chúng ta như thế nào thì chính chúng ta có thể (dễ dàng) quyết định điều đó. Cụ thể: để chỉnh sửa các cấu hình của bạn đối với Awesome WM, chúng ta chỉnh sửa file ∼/.config/awesome/rc.lua10 . Cụ thể, bạn tham khảo tài liệu của Awesome. Tương tự đối với các DE hay WM khác. Chính khả năng tùy biến — cầu hình cao (High Configuration) là một điểm hấp dẫn của Linux, cũng như là một yêu tố tạo nên cảm giác tuyệt vời khi sử dụng Linux. Mỗi hệ thống Linux của mỗi người, thường mang dấu ấn rất cá nhân của chính người đó – tối thiểu là về phần giao diện. Bạn thử xem? :) Với tôi, trên hệ thống này, để đăng xuất, tôi thường sử dụng tổ hợp phím như trên. 9 Thường là phím có Logo Windows trên bàn phím. 10 Đây là một file ngôn ngữ Lua, có thể bạn sẽ phải học Lua để chỉnh sửa nó! :) 11 11
  • 12. 4 LÀM QUEN VỚI COMMAND LINE 3.2.2 CLI Nếu chúng ta đang sử dụng Linux với CLI, và muốn kết thúc phiên làm việc của mình, thì cũng có nhiều tùy chọn. Ví dụ: sử dụng 2 lệnh, đó là: exit và logout. Và một tổ hợp phím: ^D, tức: Ctrl + D. Thực ra cũng có ít nhiều sự khác nhau giữa exit và logout, nhưng chúng ta sẽ không đi sâu vào vấn đề này – ít nhất là bây giờ. 3.2.3 Sumary: Như vậy là chúng ta đã tìm hiểu qua các thao tác khởi động, đăng nhập, đăng xuất hệ thống Linux, tiếp theo, sẽ đến phần tìm hiểu cách sử dụng cơ bản. 4 Làm quen với Command line 4.1 Shell & Terminal Lời nói đầu: Linux là một hệ điều hành tựa UNIX (Unix-like), vốn là hệ điều hành chỉ có chế độ dòng lệnh, hay chính xác hơn là “text mode”. Mọi thao tác đối với hệ thống đều có thể thực hiện từ chế độ “text mode”, đặc biệt là trong việc quản trị hệ thống Linux. Đối với những nhu cầu của một người dùng bình thường, chế độ “text mode” cũng đáp ứng được hầu hết các nhu cầu thường thấy như nghe nhạc, xem ảnh, lướt web, thậm chí xem phim, vv... Bạn băn khoăn, nghi ngờ điều đó là sự thật? Hmm, không thử sao biết! ;) 4.1.1 Shell Shell là gì? Shell là một trình thông dịch (Interpreter). Tức Shell cũng chỉ là các chương trình như bao chương trình khác. Tại sao gọi là trình thông dịch? Khi người dùng nhập vào các lệnh nội trú (internal), ngoại trú (external), tại dấu nhắc lệnh (prompt) của Shell. Hay thậm chí là chạy các tệp shell script. Ngay sau khi hoàn thành thao tác nhập, ví dụ nhấn phím “Enter” khi nhập lệnh, thì Shell sẽ lần lượt chuyển đổi các câu lệnh sang mã máy (Binary), để CPU có thể thực thi11 , rồi trả lại kết quả quá cho Shell, Shell hiển thị kết quả của các câu lệnh lên cho người dùng. Cơ bản là vậy. Trên Linux, và UNIX nói chung, có rất nhiều loại Shell cho chúng ta lựa chọn khi sử dụng. Ví dụ một số các Shell phổ biến như: sh, bash, csh, tcsh, ksh, zsh, vv... Nhưng ở đây chúng ta sẽ chỉ giới thiệu và tìm hiểu về bash shell. Đây là một shell mặc định phổ biến trong các bản phân phối Linux hiện nay. 11 Tất nhiên cũng phải thông qua nhân nữa. 12 12
  • 13. 4.2 Lệnh căn bản 4 LÀM QUEN VỚI COMMAND LINE 4.1.2 bash bash là shell chuẩn của dự án GNU (GNU’s Not UNIX ). Thường được gọi là GNU bash. bash là từ viết tắt của Bourne Again Shell. bash là shell mở rộng và cải tiến nhiều điểm dựa trên sh (Bourne Shell) shell, vốn của UNIX. 4.1.3 Terminal Để thao tác trên một hệ thống Linux, chúng ta thường sử dụng một thiết bị vốn được kết nối với hệ thống đó, để gửi, hiển thị các yêu cầu và kết quả các thao tác, xử lý, gọi là thiết bị đầu cuối (terminal). Các thiết bị đầu cuối thường gặp đó là bàn phím và màn hình máy tính. Chúng được kết nối với hệ thống Linux một cách trực tiếp hoặc từ xa qua các kết nối mạng, sử dụng các cách thức khác nhau. Ví dụ: thao tác với một hệ thống Linux ở xa, thông qua kết nối SSH (Secure Shell). Đối với một PC, có thể nói màn hình và bàn phím chính là terminal cho hệ thống đó. Tuy nhiên không phải lúc nào cũng hoàn toàn vậy. Nếu bạn sử dụng một hệ thống Linux có sử dụng hệ thống X Window, hiểu nôm na đó là sử dụng GUI. Thì khi ấy màn hình không hoàn toàn là terminal của hệ thống đó nữa. Để có một ‘terminal’, chúng ta cần sử dụng một chương trình giả lập thiết bị đầu cuối (Terminal Emulator) hay chương trình đầu cuối (Terminal Application). Một Terminal Emulator là một chương trình tương tự như một terminal thực sự. Có rất nhiều chương trình như vậy trên Linux, một số chương trình phổ biến có thể liệt kê như: Gnome Terminal, XTerm, RXVT, Konsole, vv... Rất nhiều! 4.2 Lệnh căn bản 4.2.1 Khởi động một Shell Shell là một chương trình, muốn sử dụng thì chúng ta phải khởi động shell trước khi có các thao tác dựa trên shell. Nếu bạn đăng nhập vào hệ thống ở chế độ “text mode”, thì bạn sẽ rơi vào môi trường làm việc là shell mặc định của tài khoản người dùng của bạn. Nếu bạn đăng nhập vào hệ thống sử dụng chế độ đồ họa, để khởi động một shell, bạn phải khởi động một trong các Terminal Emulator như đã nói ở trên. Để chuyển đổi qua lại giữa 2 chế độ, đồ họa và “text mode” – hay tty. Ta thường sử dụng tổ hợp phím Ctrl + Alt + F[123456] 12 . 12 Tức chỉ được duy nhất 1 số, nhưng các giá trị có thể chọn là một trong bất kỳ các số đó. Dãy số này có thể thay đổi, tùy chúng ta đã cấu hình như thế nào. 13 13
  • 14. 4.2 Lệnh căn bản 4 LÀM QUEN VỚI COMMAND LINE 4.2.2 Căn bản sử dụng lệnh Thao tác nhập lệnh được thực hiện tại dấu nhắc lệnh của shell, các ký tự đại diện thường thấy là: - $: Dấu nhắc lệnh của người dùng bình thường. - #: Dấu nhắc lệnh của người dùng đang dùng quyền quản trị. Khi thao tác nhập lệnh trong các shell, chúng ta có thể sử dụng rất nhiều các lệnh, bao gồm các lệnh nội trú, và ngoại trú. Lệnh nội trú: Là các lệnh xây dựng sẵn (built-in) trong shell, đây là các lệnh có thể sử dụng không phụ thuộc vào gì khác khi shell đã khởi động. Để liệt kê các lệnh nội trú của shell đang sử dụng, ví dụ đối với bash shell, ta sử dụng lệnh help, ví dụ: $ help. Lệnh này liệt kê các lệnh nội trú của shell hiện tại cũng như cú pháp sử dụng của mỗi lệnh tương ứng. Để hiểu chi tiết cách sử dụng của một lệnh bất kỳ, ta cũng sử dụng lệnh help, với tham số là tên lệnh ta muốn xem rõ cú pháp sử dụng, ví dụ: $help help. Lệnh ngoại trú: Chính là các chương trình đã cài đặt trong hệ thống, có rất rất nhiều các lệnh, chương trình như thế. Việc tìm hiểu cách sử dụng, cú pháp các lệnh đó như thế nào, ta sẽ nói ở mục sau. Bạn lo lắng rằng sẽ không nhớ chính xác được tên các lệnh muốn dùng, điều đó khiến bạn gõ sai tên lệnh? Thực sự thì chúng ta không cần lo lắng về điều này, vì các shell của Linux có chế độ auto-complete rất tuyệt vời. Nếu bạn không chắc tên đầy đủ của lệnh bạn muốn dùng, rất đơn giản, bạn chỉ cần gõ vài ký tự đầu của lệnh mà bạn nhớ “mang máng” được, sau đó nhấn phím Tab trên bàn phím, khi đó, shell sẽ tự động điền đúng tên lệnh cho bạn. Hoặc, nếu có nhiều hơn một khả năng các tên lệnh bắt đầu với các ký tự bạn đã nhập, thì shell sẽ liệt kê tất cả các khả năng đó ra cho bạn lựa chọn, bạn lặp lại với việc nhập những ký tự đầu tiếp theo, và nhấn Tab cho đến khi đúng lệnh bạn muốn. Ngoài ra, nếu thực sự không nhớ được chút nào về tên lệnh cần dùng, chúng ta cũng có thể tìm kiếm bằng nhiều cách, sử dụng những “từ khóa” (key word) mà chúng ta mường tượng được sự liên quan đến lệnh hay chương trình đó. Ví dụ để tìm kiếm một lệnh nào đó, chúng ta thường sử dụng: $ man -k <key-word>, hay $ apropos <key-word>13 . 13 Nói thật là tôi nhớ tên cũng như cách sử dụng lệnh rất kém, nên 2 điểm này lại hình như càng làm cho tôi thêm lười nhớ hơn! :P 14 14
  • 15. 4.2 Lệnh căn bản 4 LÀM QUEN VỚI COMMAND LINE 4.2.3 Một số lưu ý Thứ nhất, Linux phân biệt chữ HOA và chữ thường, bao gồm cả trong tên lệnh và các tham số của lệnh. Vì vậy, ABC là rất khác xa với Abc hay aBC hay những gì như thế. Tương tự, thư mục Desktop sẽ không phải là thư mục desktop nào đó. Không thể đánh đồng được, và phải cẩn thận khi sử dụng. Điều này rất khác xa với Windows, như chúng ta từng biết. Thứ hai, lệnh trong Linux là một chuỗi ký tự liên tiếp, không có khoảng trắng, có thể các từ khác nhau được kết nối bằng các ký tự như ‘-’. Điều này cũng có ngoại lệ, bạn sẽ thấy. Thứ ba, các lệnh trong Linux thường có các tùy chọn. Các tùy chọn này thường được chia làm 2 nhóm: 1) Các tùy chọn ngắn, thường chỉ có 1 hoặc 2 ký tự thuộc nhóm chữ, tức [A-Z],[a-z], được bắt đầu bằng một ký tự đặc biệt, đó là: -. 2) Các tùy chọn dài, là các tùy chọn gồm một hoặc nhiều từ, được bắt đầu bằng một cặp ký tự: -, tức --. Các tùy chọn dài, có nhiều từ thường được nối với nhau bằng ký tự: -. 4.2.4 Các ví dụ: Chúng ta sẽ cùng điểm qua một số lệnh thường gặp khi làm việc trên một hệ thống Linux, đầu tiên đó là lệnh: whoami, lệnh này cho biết bạn là ai (?!), hay đúng hơn, là cho biết tên người dùng mà bạn đang sử dụng để đánh chính cái lệnh này là gì. Ví dụ: n2i@n2i-System ~ $ whoami n2i Ngoài ra, còn có lệnh who am i sẽ cho biết thêm nhiều thông tin hơn so với lệnh trên. Thử chứ? Tiếp theo đó là lệnh: pwd (print working directory). Lệnh này cho chúng ta biết mình đang ở thư mục nào trên cây thư mục. Ví dụ: n2i@n2i-System ~ $ pwd /home/n2i Bạn nhận thấy gì không? Như vậy là chúng ta đã biết được một điều rằng... mình là ai, và mình đang ở đâu – trong hệ thống này14 ! Tiếp theo chúng ta sẽ giới thiệu nhanh qua một số câu lệnh thường dùng khác. Để liệt kê nội dung của một thư mục, tức liệt kê các tệp tin và thư mục có trong thư mục đó, ta sử dụng lệnh ls. Cú pháp là: ls [path]. Trong đó, path là đường dẫn đến thư mục chúng ta muốn xem nội dung. Mặc định sẽ là thư mục hiện tại. 14 Nghe có vẻ nực cười nhỉ, nhưng nhiều khi không hề buồn cười chút nào. 15 15
  • 16. 5 MAN, INFO VÀ -H Lưu ý: Có đôi điều cần biết, thực ra cần nhớ thì đúng hơn. Nếu trong cú pháp của lệnh, tham số được bỏ giữa 2 dấu [ và ], thì ngầm hiểu rằng, tham số đó có thể có hoặc không cần chỉ định. Ví dụ, với câu lệnh ls ở trên, nếu không chỉ định đường dẫn cụ thể, thì tham số lệnh sẽ nhận tham số là mặc định, tức thư mục hiện tại. Trường hợp khác, nếu đó là 2 dấu < và >, thì tham số là bắt buộc. Ngoài ra còn một số trường hợp có sự ràng buộc, phụ thuộc (Dependence) giữa các tham số. Ví dụ sử dụng lệnh ls: n2i@n2i-System ~ $ ls ... n2i@n2i-System ~ $ ls Desktop/ ... Tiếp theo là lệnh cd: Đây là lệnh dùng dể di chuyển vị trí làm việc đến một thư mục nào đó, cú pháp: cd <path>. Ví dụ: n2i@n2i-System ~ $ cd Desktop/ n2i@n2i-System ~/Desktop $_ Trên đây là một số ví dụ rất ngắn về một vài lệnh thường gặp khi thao tác trên một hệ thống Linux bất kỳ. Các lệnh đã được nêu ở trên bao gồm một lệnh nội trú và 2 lệnh thuộc gói coreutils – đây là gói tối quan trọng trên một hệ thống Linux, thường thì các bản phân phối Linux đều có gói này, điều này tạo nên một sự thống nhất, giống nhau ở một số câu lệnh, công cụ cơ bản của các bản phân phối Linux. Có rất nhiều, rất nhiều các câu lệnh trên Linux, chỉ riêng gói coreutils thôi, cũng đã có rất nhiều công cụ cho bạn sử dụng. Một số câu lệnh thường gặp nhất như: cat, touch, df, top, free, vv... Chúng ta sẽ tìm hiểu cách để làm sao hiểu được các công cụ này là gì, dùng như thế nào. Chúng ta sẽ điểm qua các cách lấy thông tin trợ giúp của một công cụ bất kỳ. 5 man, info và -h Linux có rất nhiều các công cụ, tiện ích, vv... Mỗi trong một số đó lại có một hoặc nhiều lệnh. Mỗi lệnh lại có một hoặc rất nhiều các cách sử dụng cũng như các tùy chọn khác nhau. Và khó mà nhớ hết những gì cần nhớ, đối với việc sử dụng một lệnh nào đó trên Linux, hoặc giả chúng ta chưa biết chút thông tin gì về các lệnh, công cụ, tiện ích ấy. Tiếp theo đây là một số cách để lấy thông tin trợ giúp hoặc thông tin đầy đủ về một lệnh, công cụ hay tiện ích nào đó trong quá trình sử dụng Linux. 16 16
  • 17. 5.1 -h 5 MAN, INFO VÀ -H 5.1 -h 5.1.1 Thông tin -h là gì? -h chính là một tùy chọn của một lệnh nào đó, chỉ thị cho lệnh hiển thị một số thông tin trợ giúp ngắn gọn cho người dùng. Đây là một kiểu tùy chọn ngắn của dòng lệnh, ký tự - được đặt ngay trước chữ h chỉ rõ điều đó. h ở đây có thể là viết tắt của từ help, tức trợ giúp. Bạn có sự liên tưởng gì không? Có kiểu tùy chọn ngắn. Vậy còn kiểu tùy chọn dài thì sao? h là ký tự viết tắt. Vậy nếu không dùng ký tự viết tắt, mà là sử dụng một hoặc nhiều từ đầy đủ thì thế nào? Tất nhiên, chúng ta có câu trả lời cho những câu hỏi đó. Đó chính là --help, một kiểu tùy chọn dài, đầy đủ của một lệnh nào đó. Các tùy chọn dài, tức các từ khóa của tùy chọn bao gồm một hoặc nhiều từ, được bắt đầu bằng cặp ký tự: -, tức là --. Với tùy chọn --help, câu lệnh sẽ đưa ra những trợ giúp thường là đầy đủ hơn, hoặc không thì kết quả tối thiểu cũng như tùy chọn -h. Thông thường, một câu lệnh trên Linux thường có cả 2 tùy chọn trên để người dùng có thể truy cứu thông tin trợ giúp một cách dễ dàng. Nhưng cũng có ngoại lệ, một số lệnh không có một trong hai tùy chọn trên, hoặc thậm chí, không có cả hai. Ngược lại, cũng có một số lệnh lại có các một tùy chọn help. 5.1.2 Ví dụ: Cùng điểm qua một số ví dụ về sử dụng các tùy chọn -h và --help. n2i@n2i-System ~ $ ifconfig -h ... n2i@n2i-System ~ $ cd --help ... n2i@n2i-System ~ $ file-roller --help-gtk ... Bạn có thể lấy thêm rất nhiều các ví dụ khác. Ở các ví dụ trên, bạn có thể thấy một lệnh, đó là file-roller, mà có thể khi bạn thử ở một hệ thống Linux nào đó và gặp thông báo trả lại là: No such command hay Command not found, hay những gì tương tự thế. Thì rất có thể là hệ thống đó chưa cài đặt chương trình đó. file-roller là một trình quản lý các định dạng tệp tin nén (Compression) (Archiver Manager). Đây là trình quản lý các tệp tin nén sử dụng giao diện GTK (GIMP Toolkit), mặc định của GNOME, và được cài đặt mặc định trong các bản phân phối sử dụng DE là GNOME, ví dụ như Ubuntu. 17 17
  • 18. 5.2 man và info 5 MAN, INFO VÀ -H Và đương nhiên, muốn sử dụng công cụ đó trên hệ thống của bạn, thì bạn phải cài đặt nó – giả sử như công cụ chưa được cài đặt. Ngay cả ifconfig, một lệnh phổ biến, thì đôi khi bạn cũng không tìm thấy nó trên một hệ thống nào đó, vậy nếu có gặp trường hợp như vậy, bạn cũng đừng nên ngạc nhiên, hay lo lắng quá. 5.2 man và info Rất nhiều các chương trình, công cụ trên Linux rất phức tạp, chúng không chỉ nhận các tùy chọn dòng lệnh như là các tham số duy nhất để hoạt động. Mà chúng còn có các tệp cấu hình (Configuration file) hay hơn thế nữa, các chương trình liên quan, phụ thuộc chẳng hạn. Vậy để sử dụng những chương trình như vậy một cách đúng và hiệu quả, chúng ta phải biết rõ các thông tin cần thiết về chương trình ấy chứ?! Nhưng bằng cách nào? Đây là lúc chúng ta nhờ đến 2 công cụ gần như được sử dụng thường xuyên nhất đối với những chương trình mới, và... người mới! :) Đó là man và info. Giới thiệu đôi chút về man và info. Thông tin đầy đủ vui lòng sử dụng man hoặc info để biết thêm chi tiết về các lệnh này. 5.2.1 man man là tiện ích quản lý và hiển thị các trang man(ual) (man page). Các trang man được chia thành các mục (Section) riêng biệt. Bao gồm 8 mục, với những chủ đề khác nhau. Các trang man là các tệp định dạng văn bản thô (plain text), được tạo ra và đóng gói sẵn. Để hiển thị một trang man nào đó khi được chỉ định, man tìm kiếm các tệp văn bản tương ứng các mục do người dùng chọn lựa, nếu tìm thấy man sử dụng một công cụ khác để hiển thị các tệp văn bản thô, đó là less15 . Cú pháp sử dụng của lệnh man: man [section] <key-word>. Trong đó: section: Bạn muốn xem trang man thuộc mục nào. key-word: Từ khóa, hay là tên lệnh, tệp tin, vv... mà bạn muốn xem trang man. Đây là một vài ví dụ khi sử dụng lệnh man: n2i@n2i-System ~ $ man 1 passwd ... n2i@n2i-System ~ $ man 5 passwd ... 15 Thực ra đó là bzless, vì tệp văn bản thô kia thường được lưu trữ ở dạng nén. 18 18
  • 19. 5.2 man và info 5 MAN, INFO VÀ -H Bạn hãy thử 2 ví dụ trên và xem xét sự khác nhau giữa kết quả của 2 lệnh. Có sự khác nhau đó là vì lệnh trên nhận tham số có cùng từ khóa nhưng được chỉ định các mục khác nhau, đó là các mục: a) 1: User Commands và b) 5: File Formats and Conventions. 5.2.2 info info cũng là một công cụ để truy cứu thông tin về một lệnh, hay tệp tin, vv... nào đó. info có đôi sự khác biệt lớn so với man, một trong số đó là info sử dụng một định dạng văn bản khác so với man, điều đó cho phép trong info có thể có các siêu liên kết HyperLink giữa các mục, khiến cho việc truy cứu thông tin đầy đủ hơn. Cú pháp sử dụng của info cũng khá giống với man, nhưng chúng ta không cần chỉ định số của mục chúng ta cần xem, hay đúng hơn, tham số đó không hẳn là một chữ số. Ta có đôi ví dụ: n2i@n2i-System ~ $ info cd ... Hoặc phức tạp hơn chút: n2i@n2i-System ~ $ info coreutils ‘ls invocation’ ... Như vậy là chúng ta đã tìm hiểu qua man và info là gì, dùng cho việc gì. Trên đây chỉ là một chút thông tin về 2 tiện ích này. Để có thông tin đầy đủ hơn, bạn có thể sử dụng chính chúng để biết thêm về chúng, ví dụ như: n2i@n2i-System ~ $ man man ... n2i@n2i-System ~ $ man info ... n2i@n2i-System ~ $ info info ... n2i@n2i-System ~ $ info man ... Sumary Trong phần này chúng ta đã tìm hiểu những điều cơ bản nhất để làm việc với một hệ thống Linux. Đó là khởi động một hệ thống Linux như thế nào, đăng nhập, đăng xuất một phiên làm việc. Tìm hiểu Terminal là gì, lướt qua một số lệnh cơ bản, cũng như cách lấy trợ giúp về các câu lệnh, tệp tin, vv... 19 19
  • 20. 5.2 man và info 5 MAN, INFO VÀ -H Phần tiếp theo chúng ta sẽ tìm hiểu về cấu trúc thư mục, tệp tin, quyền hạn đối với tệp tin, và một số thao tác đối với tệp tin và thư mục trên Linux. 20 20
  • 21. Phần III File, Folder & Permission 21 21
  • 22. 7 DIRECTORIES STRUCTURE Phần này giới thiệu cơ bản về cấu trúc tệp tin, thư mục và quyền hạn đối với tập tin, thư mục trên Linux. 6 Everything is file Mọi thứ trên Linux đều là các tệp tin. Bạn ngạc nhiên không? Vậy các card mạng, ổ đĩa, vv... thì sao? Những điều đó sẽ được đề cập ngay sau đây. Trên Linux, tất thảy mọi thứ đều có thể coi như là các tệp tin. Từ một tập tin bình thường, như các tệp văn bản thô (plain text), các tệp có thể thực thi (Executable). Ngay cả những gì bạn thấy nó là một thư mục, hay thậm chí đó là các thiết bị của máy tính, ... đều được ánh xạ vào một tệp tin nào đó trên hệ thống. Tệp tin trên Linux được chia làm một số nhóm, bao gồm: - Ordinay or Plain files: Ký hiệu: -. Là các tệp tin mà ta vẫn biết đó là các tệp tin16 . Đó có thể là một tệp âm thanh định dạng mp3, một tệp văn bản thô, một tệp có thể thực thi, vv... - Directories: Ký hiệu: d. Là một loại tệp đặc biệt, chúng chứa danh sách các tệp tin, “thư mục” con của nó. - Special or Device files: Đây thực sự là một loại tệp tin đặc biệt. Trên Linux, mỗi một thiết bị phần cứng của máy tính được ánh xạ thành một tệp tin tương ứng trên hệ thống. Các thao tác đối với thiết bị phần cứng đó, là các thao tác với tệp tin tương ứng này. Trong nhóm này lại được chia thành 2 loại, đó là các 1) character (c) device và 2) block (b) device. Thực ra còn có một loại tệp tin nữa đó là các link (Liên kết), và có ký hiệu là: l. Trên đây là những điều cơ bản về tệp tin trên Linux, để có đủ thông tin chi tiết bạn có thể tìm hiểu thêm từ các trang báo mạng, blog, các bài viết, đặc biệt là các trang Wiki. Có rất nhiều topic nói về chủ đề này ngoài kia. 7 Directories Structure Trong mục này chúng ta sẽ tìm hiểu đôi chút về cấu trúc thư mục của Linux, một điều góp phần tạo nên sự thống nhất, ổn định và hiệu quả của hệ thống Linux. Các thư mục trên một hệ thống Linux được tổ chức thành một cây, tạm gọi là cây thư mục (Directories Tree). Cây này có gốc là thư mục /, gọi là Root. 16 Nghe có vẻ buồn cười nhỉ! :P 22 22
  • 23. 7 DIRECTORIES STRUCTURE Đường dẫn đến mọi tập tin, thư mục, ngõ ngách của hệ thống Linux đều xuất phát từ đây. Một số các thư mục, vốn được quy định sẵn, và được chuyên biệt về chức năng. Chúng ta có thể hiểu thêm cấu trúc thư mục của Linux qua sơ đồ sau: Hình 1: Cấu trúc thư mục của Linux Một thiết bị lưu trữ khi được lắp vào hệ thống Linux, để có thể sử dụng chúng, tức đọc ghi dữ liệu trên thiết bị đó, trước hết chúng ta phải thực hiện một thao tác, tạm gọi là gắn, ghép (mount) hay “ánh xạ” thiết bị đó vào một thư mục nào đó mà ta muốn trong cây thư mục của Linux. Bất cứ chỗ nào bạn muốn. Ví dụ, để đọc ghi dữ liệu trên một phân vùng nào đó của ổ HDD trên máy, chúng ta phải mount phân vùng đó vào một thư mục nào đó và đọc ghi dữ liệu trong thư mục đó, như mọi thư mục khác. Thực ra thì điều này còn phụ thuộc vào quyền hạn của chúng ta đối với thư mục đó nữa, điều này sẽ đề cập đến sau. 23 23
  • 24. 7.1 Path 7 DIRECTORIES STRUCTURE Tương tự, việc mount các thiết bị đó như thế nào cũng sẽ không được đề cập đến trong tài liệu này. Bời vì tài liệu này cũng không đề cập đến một số vấn đề liên quan, yêu cầu cơ bản đối với người dùng trước khi có thể thực hiện các thao tác đó – ít nhất là một cách chính xác. Việc đọc ghi dữ liệu nhiều khi không chỉ đơn giản là việc mount các thiết bị vào một thư mục tương ứng nào đó trên cây thư mục. Mà đôi lúc chúng ta cần phải quan tâm đến những vấn đề khác đối với các tập tin, thư mục mình muốn tương tác đến, đó là các “quyền hạn” (Permission). 7.1 Path Chúng ta đã biết thư mục và tệp tin trên Linux được tổ chức theo dạng cây. Và câu hỏi đặt ra là làm thế nào để truy cập, chỉ định một thư mục, tệp tin nào đó mà ta muốn? Chính lúc này chúng ta cần đến một khái niệm mới, đó là đường dẫn (Path). Path chính là đường dẫn đến một thư mục, tệp tin nào đó trên cây thư mục của Linux. Path được bắt đầu bằng một ví trí nào đó trong cây thư mục mà ta muốn bắt đầu, và chứa tên của tất cả các thư mục, tệp tin mà đường dẫn đi qua, được sắp xếp theo thứ tự truy xuất, và được phân chi bởi một ký tự đặc biệt, trên Linux ký tự đó là /. Ký tự này cũng chính là ký hiệu của thư mục Root – gốc của cây thư mục. Path có 2 loại, nhưng trước khi đề cập đến các loại của Path, chúng ta điểm qua ký hiệu của một số thư mục đặc biệt, được quy định sẵn trên hệ thống Linux. Ký hiệu Ý nghĩa / Thư mục Root . Thư mục hiện hành .. Thư mục cha của . ∼ Thư mục nhà Bảng 2: Ký hiệu một số thư mục đặc biệt Chính các ký hiệu này giúp cho việc các Path được rút ngắn, việc sử dụng được tiện lợi hơn, không chỉ đơn giản là vì nó được rút ngắn hơn. Bây giờ chúng ta sẽ đề cập đến các loại của Path. Path có 2 loại, đó là: - Tuyệt đối: Xuất phát từ / - Tương đối: Xuất phát từ một thư mục khác /, chủ yếu là bắt đầu bằng một trong 3 ký tự cuối trong bảng [2] 24 24
  • 25. 8 FILE & FOLDER PERMISSION 7.1.1 Ví dụ: Để dễ hình dung về cách sử dụng Path, ta sẽ lấy một vài ví dụ ngắn. Giả sử thư mục hiện hành là ∼, trong đó có các thư mục con như Desktop, Documents, vv... n2i@n2i-System ~ $ ls | grep ^D Desktop Documents Downloads ... n2i@n2i-System ~ $ ls /home/n2i/Desktop/ ... n2i@n2i-System ~ $ ls ../n2i/Desktop/ ... n2i@n2i-System ~ $ ls ./Desktop/ ... n2i@n2i-System ~ $ ls ~/Desktop/ ... n2i@n2i-System ~ $ ls Desktop/ ... n2i@n2i-System ~ $ ls Desktop ... Các câu lệnh chứa từ Desktop ở trên đều trả về cùng một kết quả, nhưng tham số cho lệnh ls là đường dẫn tới thư mục Desktop là có sự thay đổi, dễ dàng nhận ra sự thay đổi đó. Bạn đoán xem đâu là đường dẫn tuyệt đối, và đâu là tương đối? 2 cậu lệnh cuối có một chi tiết nhỏ khác biệt, theo bạn đó là gì? Như vậy là là chúng ta đã có những hiểu biết cơ bản về tệp tin, hệ thống thư mục, cũng như cách truy cập các tập tin, thư mục sử dụng đường dẫn trên Linux. Tiếp theo chúng ta sẽ giới thiệu qua về một số thuộc tính của tập tin, thư mục trên hệ thống Linux. Một câu hỏi nhỏ trước khi chuyển sang vấn đề mới. Theo như sơ đồ ở trên, tức sơ đồ [1], đã chỉ rõ rằng thư mục /home/ là thư mục mà các thư mục con là thư mục nhà của những người dùng trên hệ thống. Nhưng câu hỏi là tại sao vẫn có 1 một thư mục là /root/ là thư mục nhà dành cho người dùng root. Mà không phải là một thư mục nào đó khác, ví dụ: /home/root/. Tại sao lại có sự “ưu tiên” đối với người dùng root như vậy? 8 File & Folder Permission Bảo mật tệp tin, thư mục là một phần quan trọng của bất kỳ hệ điều hành nào, và Linux cũng không phải là ngoại lệ. Để bắt đầu tìm hiểu về mảng này trong 25 25
  • 26. 8 FILE & FOLDER PERMISSION Linux, chúng ta chạy một lệnh ngắn tương tự như sau: n2i@n2i-System ~ $ ls -l Và kết quả của câu lệnh trên sẽ rất giống với bức hình sau đây: Hình 2: Kết quả của lệnh ls -lh Dễ dàng nhận thấy rằng kết quả của lệnh trên bao gồm 7 trường, như trên hình. Theo thứ tự từ phải qua trái, ta có ý nghĩa của các trường như sau: 1: Tên của các thư mục, tệp tin được liệt kê. 2: Thời gian mà tệp, thư mục được tạo ra hoặc lần chỉnh sửa cuối. 3: Dung lượng của tệp tin, thư mục. 4: Nhóm sở hữu. 5: Người dùng sở hữu. 6: Số lượng số inode liên kết đến tập tin, thư mục đó. 7: Quyền hạn đối với tệp tin, thư mục đó Trong khuôn khổ phần này, chúng ta sẽ chỉ tìm hiểu 3 trường được nhắc đến ở trên, đó là các trường: 4, 5, và 7. Chúng ta sẽ lần lượt điểm qua các trường vừa liệt kê. Nhóm sở hữu Trường số 4 chỉ rõ rằng tệp tin, thư mục đó thuộc sở hữu của nhóm người dùng nào. Nhóm người dùng này có thể hiện thời có hoặc không tồn tại trên hệ thống. 26 26
  • 27. 8.1 Quyền hạn 8 FILE & FOLDER PERMISSION Chủ sở hữu Trường số 5 chứa thông tin của người dùng sở hữu tệp tin, thư mục đó. Tương tự, người dùng đó hiện thời có thể đang hoặc không tồn tại trên hệ thống. 8.1 Quyền hạn Đối với một tệp tin, thư mục bất kỳ. Có 3 quyền cơ bản có thể áp dụng được đó là: 1) Đọc (Read), 2) Ghi (Write), và 3) Thực thi (Execute). Trường số 7 mang cấu trúc chứa thông tin quyền hạn đối với tệp tin, thư mục mang nó. Đây dường như là trường chứa nhiều thông tin nhất, cũng như quan trọng nhất. Trong trường này lại có thể được chia thành 4 phần, như sau: Hình 3: Chi tiết nội dung của trường thứ chứa thông tin quyền hạn Ý nghĩa của các phần trong trường chứa thông tin quyền hạn: 1: Ký tự chỉ rõ tệp là loại tệp nào. Ký tự này có thể là: -: Tệp tin bình thường. b: Một block device. c: Một character device. d: Là một thư mục. l: Là một liên kết. 2: Quyền hạn của người sở hữu. 3: Quyền hạn của nhóm sở hữu. 4: Quyền hạn của những người dùng và nhóm người dùng khác. Phần thứ nhất của trường quyền hạn đã được nói rõ ở đây 8.1. Tiếp theo là nội dung và ý nghĩa của các phần tiếp theo, tức 2, 3 và 4. 27 27
  • 28. 8.2 Thay đổi quyền hạn đối với một tệp tin, thư mục8 FILE & FOLDER PERMISSION Các phần sau của trường quyền hạn, quyết định quyền hạn của người sở hữu, nhóm sở hữu và những người dùng khác trên tệp tin, thư mục đó. Mỗi trường đều có cấu trúc giống nhau, đó là bao gồm 3 ký tự, hay chính xác hơn, đó là 3 bit dữ liệu. Bởi vậy, mỗi một bit trong đó chỉ được nhận một và chỉ một giá trị trong 2 giá trị: 0 hoặc 1, hay nói cách khác, giá trị của một bit chỉ được nhận duy nhất một ký tự của một nhóm ký tự đã được quy ước sẵn. Cấu trúc của mỗi phần và ý nghĩa của các bit dữ liệu: File Permission Bit: 1st 2nd 3rd Mean: Read Write Execute Value: r w x - - - Ví dụ For: User Group Other Permission: rwx r-x --x Bin: 111 101 001 Dec: 7 5 1 Bảng 3: File Permission 8.2 Thay đổi quyền hạn đối với một tệp tin, thư mục Như đã nói ở trên, quyền hạn đối với một tệp tin bất kỳ, bao gồm 3 quyền cơ bản: 1) Read, 2) Write và 3) Execute. Các quyền này lại được chia làm 3 phần chính, bao gồm: i) u – User, ii) g – Group và iii) o – Other. Cơ bản Để thay đổi quyền hạn đối với tệp tin, chúng ta sử dụng một số lệnh như sau: - chmod: Thay đổi quyền hạn. - chown: Thay đổi chủ sở hữu. - chgrp: Thay đổi nhóm sở hữu. 28 28
  • 29. 8.2 Thay đổi quyền hạn đối với một tệp tin, thư mục8 FILE & FOLDER PERMISSION Cách sử dụng của các lệnh trên có thể lướt qua như sau: Lệnh chown: Thay đổi chủ sở hữu. chown [OPTION]... [OWNER][:[GROUP]] FILE... Trong đó: - OPTION: Các tùy chọn dòng lệnh - OWNER: Người dùng được chỉ định là chủ sở hữu. - GROUP: Thuộc nhóm nào. - FILE: Tệp tin bạn muốn thay đổi chủ sở hữu. Để áp dụng lệnh này với một thư mục, chúng ta cần thêm một vài tùy chọn cho tham số dòng lệnh. Một ví dụ: n2i@n2i-System ~ $ chown guest n2i-own-file Lệnh chgrp: Thay đổi nhóm sở hữu. chgrp [OPTION]... GROUP FILE... Trong đó: - OPTION: Các tùy chọn dòng lệnh - GROUP: Nhóm người dùng. - FILE: Tệp tin áp dụng. Ví dụ: root@n2i-System ~ # chgrp n2i root-own-file Lệnh chmod: Thay đổi quyền hạn. chmod [OPTION]... MODE[,MODE]... FILE... Trong đó: - OPTION: Các tùy chọn dòng lệnh - MODE: Chế độ áp dụng quyền hạn. - FILE: Tệp tin áp dụng. Trong câu lệnh chmod, MODE là một chuỗi ký tự có dạng: [ugoa][-+=][rwx] Xét từ trái sang phải, dễ dàng nhận thấy rằng MODE gồm ba phần phân biệt rõ ràng. Đó là: 29 29
  • 30. 9 THAO TÁC VỚI CÁC TỆP TIN, THƯ MỤC ugoa: Đối tượng người dùng được áp dụng quyền hạn. u: User, tức chủ sở hữu. g: Group. o: Other. a: All, tức áp dụng cho cả 3 nhóm trên. -+=: Chỉ thị việc cấp hoặc rút quyền. rwx: Các quyền đối với tập tin. Như đã nói bao gồm: r: Read. w: Write. x: Execute. Vậy, câu lệnh chmod sẽ rất giống thế này: n2i@n2i-System ~ $ chmod u+rwx,g+rx,o-rwx one-file Nâng cao MODE của lệnh chmod là một chuỗi ký tự như đã nói ở ngay trên. Ngoài ra, nó còn có thể là các chữ số thập phân. Vậy, tại sao lại sử dụng các chữ số, và chúng được “lấy” ở đâu ra? Theo như bảng [3], ta thấy rằng: Việc quy định quyền cho mỗi nhóm đối tượng tương ứng bao gồm 3 bit dữ liệu. Tức ở hệ Nhị phân (Binary). Sự chuyển đổi giá trị các bit này sang hệ Thập phân sẽ giúp người dùng dễ nhớ, và dễ thao tác hơn. Vậy, sự chuyển đổi này là như thế nào, và các giá trị tương ứng ra sao? Ta có bảng [4]. Vậy cách sử dụng như thế nào? Ta xem ví dụ: hai câu lệnh sau đây có cùng một ý nghĩa. n2i@n2i-System ~ $ chmod u+rwx,g+rx,o-rwx one-file n2i@n2i-System ~ $ chmod 741 one-file Ngắn gọn và dễ nhớ! 9 Thao tác với các tệp tin, thư mục 9.1 Một số thao tác cơ bản Phiên làm việc ngắn: 30 30
  • 31. 9.1 Một số thao tác cơ bản 9 THAO TÁC VỚI CÁC TỆP TIN, THƯ MỤC Permission Bin value r,w,x Dec number 000 --- 0 001 --x 1 010 -w- 2 011 -wx 3 (2 + 1) 100 r-- 4 101 r-x 5 (4 + 1) 110 rw- 6 (4 + 2) 111 rwx 7 (4 + 2 + 1) Bảng 4: Bin ↔ Dec n2i@n2i-System ~ $ pwd /home/n2i n2i@n2i-System ~ $ cd xsd/ n2i@n2i-System ~/xsd $ ls | grep all all-hwex.pdf all-notes.pdf allupdate-20.txt ... n2i@n2i-System ~/xsd $ cat allupdate-20.txt | wc -l 265 n2i@n2i-System ~/xsd $ cd - n2i@n2i-System ~ $ cat /dev/null > .xsession-errors n2i@n2i-System ~ $ touch newfile n2i@n2i-System ~ $ cat > newfile This is a new line in one new file ^D n2i@n2i-System ~ $ file newfile new: ASCII text n2i@n2i-System ~ $ rm newfile n2i@n2i-System ~ $ mv xsd/allupdate-20.txt . n2i@n2i-System ~ $ rm -r xsd/ n2i@n2i-System ~ $ which mplayer /usr/bin/mplayer n2i@n2i-System ~ $ cd Videos 31 31
  • 32. 10 THAY ĐỔI QUYỀN HẠN ĐỐI VỚI TỆP TIN n2i@n2i-System ~/Videos $ mplayer VietLUG.flv ... n2i@n2i-System ~ Videos $ cp VietLUG.flv /media/data/videos-arch/ n2i@n2i-System ~ Videos $ cd !$ n2i@n2i-System /media/data/videos-arch $ !mpl mplayer VietLUG.flv ... n2i@n2i-System /media/data/videos-arch $ cd ~ n2i@n2i-System ~ $ ls ~guest/ ... n2i@n2i-System ~ $ ls -ilh ~root cd: cannot open directory /root: Permission denied n2i@n2i-System ~ $ ^D 10 Thay đổi quyền hạn đối với tệp tin Một số ví dụ ngắn: n2i@n2i-System ~ $ ls -lh pkgs-link -rw-r--r-- 1 root root 8.5K Dec 20 16:39 pkgs-link n2i@n2i-System ~ $ mkdir update n2i@n2i-System ~ $ mv pkgs-link update/ n2i@n2i-System ~ $ chown n2i update/update-new chown: changing ownership of ‘update/update-new’: Operation not pemitted n2i@n2i-System ~ $ su root Password: root@n2i-System n2i # chmod 700 update/update-new -rwx------ 1 root root 8.5K Dec 20 16:39 pkgs-link root@n2i-System n2i # chown n2i update/update-new root@n2i-System n2i # ls -lh update/ -rwx------ 1 n2i root 8.5K Dec 20 16:39 pkgs-link root@n2i-System n2i # chgrp n2i update/update-new root@n2i-System n2i # ls -lh update/ -rwxr----- 1 n2i n2i 8.5K Dec 20 16:39 pkgs-link root@n2i-System n2i # chown root:root update/update-new root@n2i-System n2i # ls -lh update/ -rwxr----- 1 root root 8.5K Dec 20 16:39 pkgs-link root@n2i-System n2i # chmod u-x,g+rx,o-rwx update/update-new root@n2i-System n2i # ls -lh update/ -rw-r-x--- 1 root root 8.5K Dec 20 16:39 pkgs-link 32 32
  • 33. 11 COPY, NÉN, GIẢI NÉN, LƯU TRỮ TỆP root@n2i-System n2i # chown -R root update root@n2i-System n2i # ls -ldh update drwxr-xr-x 2 root n2i 4.0K Dec 20 16:42 update root@n2i-System n2i # rm -rf update root@n2i-System n2i # ^D n2i@n2i-System ~ $ n2i@n2i-System ~ $ ^D 11 Copy, nén, giải nén, lưu trữ tệp 33 33
  • 35. 12 KHÁI NIỆM 12 Khái niệm Redirection và Pipe là gì? 12.1 Redirection Redirection, hiểu nôm na là “tái định hướng”. Vậy tái định hướng cái gì? Sao phải tái định hướng? Mục này sẽ giới thiệu ngắn gọn về tái định hướng và cách sử dụng. Trong máy tính điện toán, hay hẹp hơn, là các chương trình máy tính. Khi một chương trình thực thi, chương trình đó nhận và trả các luồng17 thông tin. Có 3 luồng cơ bản, gọi là các “luồng chuẩn” (Standard Streams). Bao gồm: Standard Streams Handle Name Description 0 stdin Standard input 1 stdout Standard output 2 stderr Standard error Bảng 5: Standard Streams Các luồng này vốn được sử dụng như thế nào? Ta có sơ đồ: Hình 4: Standard Streams Khi sử dụng “tái định hướng” tức chúng ta chuyển hướng vào ra các luồng chuẩn của một chương trình. Ví dụ: Thay vì ta có stdout thường được xuất ra thiết bị xuất chuẩn, có thể là màn hình, hay một Terminal Emulator. Thì ta “chuyển hướng” stdout vào một tập tin nào đó, như những ví dụ sau đây. 17 Streams: Được đề cập cụ thể trong nhiều ngôn ngữ bậc cao, gần nhất như: C++, Java, ... 35 35
  • 36. 12.2 Pipe 13 VÍ DỤ NGẮN: Việc sử dụng tái định hướng giúp cho một số thao tác đơn giản, nhanh chóng và ngắn gọn hơn. Sử dụng như thế nào? Trên một hệ thống Unix-Base hoặc Unix-like: Linux là một hệ điều hành tựa Unix (Unix-like). Chúng ta sử dụng một số ký tự sau để thực hiện chuyển hướng các luồng chuẩn đã nói ở trên: >: Chuyển hướng Standard Streams “ra” một tệp mới. Sẽ tạo tệp mới nếu tệp chưa tồn tại. Sẽ ghi đè (Overwrite) nội dung nếu tệp đã tồn tại và chứa nội dung. >>: Tương tự như >, nhưng thay vì ghi đè nội dung thì sẽ nối thêm (Append) nội dung vào tệp đã tồn tại và chứa nội dung. <: Chuyển hướng Standard Streams “từ” một tệp tin thay vì từ một Standard Standard. 12.2 Pipe Pipe: nôm na là đường ống18 . Tại sao gọi là đường ống? Và việc “lắp” các đường ống đó như thế nào? Pipe là việc tái định hướng stdout của một lệnh nào đó thành stdin của lệnh tiếp theo. Tạo thành một “đường ống” dẫn dữ liệu, dữ liệu được trao đổi giữa các ứng dụng (lệnh) mà không cần thông qua một thiết bị nhập xuất chuẩn nào. Ta sử dụng ký tự | để tạo các đường ống giữa các lệnh. Sử dụng như thế nào thì các ví dụ sau sẽ nói khá rõ. 12.3 Redirection & Pipe Kết lại mục này, việc sử dụng và sự hoạt động của “tái định hướng” và “đường ống” có thể thấy rõ qua sơ đồ sau: 13 Ví dụ ngắn: 13.1 Tạo tệp mới sử dụng Redirection và Pipe Sử dụng lệnh cal(lendar) và xuất kết quả vào tệp tin, chứ không phải là thiết bị xuất chuẩn (stdout). n2i@n2i-System ~ $ cal -m > this-month n2i@n2i-System ~ $ cat this-month December 2011 Mo Tu We Th Fr Sa Su 18 Nghe trông ngộ quá, cảm giác như chẳng liên quan gì! :| 36 36
  • 37. 13.2 Đếm số lượng tệp và thư mục trong thư mục bất kỳ 13 VÍ DỤ NGẮN: Hình 5: Redirection and Pipe 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 13.2 Đếm số lượng tệp và thư mục trong thư mục bất kỳ Liệt kê tất cả những gì có trong thư mục ∼ và đếm số lượng tệp tin + thư mục có trong ∼. n2i@n2i-System ~ $ ls -l ~ | grep ^[-d] | wc -l 227 13.3 Đếm số lượng thư mục con của một thư mục bất kỳ Chỉ đếm số lượng các thư mục con mà thôi. n2i@n2i-System ~ $ ls -l ~ | grep ^[d] | wc -l 47 37 37
  • 38. 13.4 Đếm số từ của một dòng bất kỳ trong một tệp văn bản13 VÍ DỤ NGẮN: 13.4 Đếm số từ của một dòng bất kỳ trong một tệp văn bản Giả sử ta muốn đếm số từ, ký tự, vv... trong một tệp tin có hàng ngàn hoặc hơn số dòng. Ví dụ ở đây có một tệp plain text có hơn 15000 dòng. Thử đếm số từ trong dòng thứ 10000 của tệp này: in ra dòng thứ 10000 và đếm số từ trong dòng đó cho ta kết quả. n2i@n2i-System ~ $ wc -l jarg262.txt linux-path 15023 jarg262.txt 94750 linux-path 109773 total n2i@n2i-System ~ $ time awk ‘NR==10000’ jarg262.txt | wc -w 12 real 0m0.005s user 0m0.002s sys 0m0.001 13.5 Liệt kê các tệp, thư mục con Yêu cầu: Liệt kê các thư mục con, tệp tin trong một thư mục nào đó mà có thời gian được tạo ra là tháng 09 (năm nay). Linux thực ra không lưu thời điểm mà tệp tin, thư mục được tạo (Created). Linux chỉ lưu thời điểm mà thư mục, tệp tin đã được thay đổi (Modified) vào thuộc tính của tệp tin. Nếu từ khi được tạo ra tới thời điểm hiện tại mà tệp tin, thư mục chưa bị thay đổi ít nhất một lần thì có thể coi như thời gian thay đổi tệp tin trong thuộc tính của tệp tin chính là thời điểm tệp tin, thư mục được tạo ra. Những tệp tin, thư mục con của ∼ được tạo ra hoặc chỉnh sửa lần cuối trong tháng 09: n2i@n2i-System ~ $ ls -lt --time-style=+%m/%Y | grep ^[-d] | grep 09/2011 -rw-r--r-- 1 n2i n2i 795 09/2011 hanoimod.c -rw-r--r-- 1 n2i n2i 149 09/2011 TKB -rw-r--r-- 1 n2i n2i 13965 09/2011 how-to-configure-cpu freqd 13.6 Đếm tổng số tiến trình Tool pstree liệt kê tất cả các tiến trình hiện có trên hệ thống theo dạng cây, có gốc là tiến trình init, mỗi dòng là một tiến trình. vậy để tính số tiến trình hiện 38 38
  • 39. 13.7 Đếm số lượng người dùng đã đăng ký 13 VÍ DỤ NGẮN: đang chạy trên hệ thống, ta lấy kết quả của lệnh pstree và đếm số dòng: n2i@n2i-System ~ $ pstree | wc -l 33 13.7 Đếm số lượng người dùng đã đăng ký Mỗi entry trong file /etc/passwd là thông tin của một người dùng đã được đăng ký trong hệ thống. Đó có thể là những người dùng hệ thống hoặc một người dùng bình thường. n2i@n2i-System ~ $ cat /etc/passwd | wc -l 13.8 Đếm số lượng người dùng đang đăng nhập Dùng lệnh who để liệt kê tất cả những người dùng đã đăng nhập vào và đang hoạt động trên hệ thống. Cắt lấy trường user từ kết quả của lệnh who. Sau đó dùng lệnh uniq để loại bỏ những kết entry trùng nhau do kết quả của lệnh who. Ta có số lượng kết quả thực sự. n2i@n2i-System ~ $ who root tty1 2011-12-22 16:26 n2i tty7 2011-12-22 15:26 (:0) n2i pts/0 2011-12-22 15:27 (:0) n2i pts/1 2011-12-22 15:27 (:0) n2i@n2i-System ~ $ who | cut -d " " -f 1 | uniq | wc -l 2 13.9 Ví dụ hơi ngắn :3 13.9.1 Tình huống, yêu cầu, hướng giải quyết: Thông tin: - Tình huống: Máy này sử dụng mạng thông qua USB 3G. Muốn cài đặt một số gói mới và cập nhật hệ thống. - Vấn đề: Việc cập nhật và cài đặt phải tải nhiều gói, và tổng dung lượng rất lớn. Sử dụng 3G có dung lượng, băng thông hạn hẹp và cước phí cao. - Ý tưởng: Lấy đường link tải các gói, cho vào tệp mới, sau đó đưa đi máy khác có kết nối mạng – tất nhiên không phải là dùng 3G, tải mớ gói về, sao chép vào thư mục cache của trình quản lý gói tại máy này. 39 39
  • 40. 13.9 Ví dụ hơi ngắn :3 13 VÍ DỤ NGẮN: 13.9.2 Điều kiện thực tế: Hệ thống quản lý gói của Gentoo là Portage và sử dụng emerge như trình quản lý. emerge có 2 tùy chọn đáng chú ý – trong tình huống này: -f: (--fetch-only) Chỉ tải gói, mà không tiến hành biên dịch và cài đặt. -p: (--pretend) Tiến hành “giả lập” các tùy chọn cho emerge. Kết hợp 2 tùy chọn này trong câu lệnh của emerge chúng ta sẽ có danh sách các liên kết tải các gói cài đặt – và một số thông tin khác. Kết quả của lệnh emerge -pf <atom>... có dạng: atom1-url1 atom1-url2 .... atom2-url1 atom2-url2 ... ... Trong đó: atom: Tên gói cần cài đặt, tất nhiên có thể có rất rất nhiều gói. atom1-url1: Liên kết tải (url1) của gói thứ nhất (atom1) tại mirror đầu tiên. Tương tự cho các mirror khác và các gói khác. Nhận xét: - Mỗi dòng là danh sách các liên kết tải của cùng một gói tại các mirror khác nhau. - Các liên kết trong một dòng phân biệt nhau bằng một khoảng trắng: ‘ ’. 13.9.3 Tiến hành: Khởi chạy emerge với 2 tùy chọn đã nói ở trên, lọc ra các dòng là các liên kết, cắt lấy một liên kết trong mỗi dòng tùy ý, sau đó cho tất cả các liên kết đã chọn vào một tệp plain text tùy ý. root@n2i-System n2i # emerge -pfuND world | grep ^http | cut -d " " -f 1 > allupdate-22 Một lưu ý nhỏ: Để Windows có thể hiển thị bình thường tệp tin vừa tạo ra ở trên, cần làm một thao tác nhỏ, đó là chuyển đổi kiểu (kết thúc dòng trong EOL) tệp tin từ Unix sang kiểu của Windows: Tức n sang rn hay LF sang CRLF. Có thể sử dụng một tool nhỏ: 40 40
  • 41. 14 ENV n2i@n2i-System ~ $ unix2dos allupdate-22 allupdate.txt Sau đó có thể dễ dàng đưa tệp này sang một máy khác, có thể chạy bất cứ OS nào và import những liên kết trong tệp tin kia vào một trình quản lý tải tệp tin nào đó để tải. 14 env Lệnh env liệt kê tất cả các biến môi trường hiện có. Để xem một biến nào đó ví dụ HOME hay TERM: n2i@n2i-System ~ $ env | grep -i ^home HOME=/home/n2i n2i@n2i-System ~ $ env | grep -i ^term TERM=xterm n2i@n2i-System ~ $ 41 41