Co ban ve chung chi lpi

  • 79 trang
  • file .pdf
Cơ bản về chứng chỉ LPI
Tài liệu về chứng chỉ LPI được biên soạn dựa trên hệ thống tài liệu của IBM
Phiên bản 1.0.0, Ngày 29 tháng 10 năm 2004
Biên soạn: Thành viên VnOSS
ii
Bản quyền ©2004-2006 thuộc về Cộng đồng nguồn mở Việt Nam - VNOSS và những người
đóng góp cho tài liệu “Cơ bản về chứng chỉ LPI” - “All rights reserved”.
Đây là một tài liệu miễn phí. Bạn hoàn toàn có thể phân phối lại tài liệu cho những người sử
dụng khác, hoặc có thể chỉnh sửa cho phù hợp nhưng phải tuân theo những yêu cầu trong giấy phép
bản quyền GNU (General Public License của Free Software Foundation; phiên bản 2 hay các phiên
bản khác).
Tài liệu này được phát hành đến tay các bạn với hy vọng rằng nó sẽ trở nên hữu ích, nhưng nó
KHÔNG KÈM THEO BẤT KỲ SỰ BẢO ĐẢM NÀO, ngay cả những đảm bảo ngầm hiểu về việc
thương mại hoá hay phải phù hợp với một mục đích cụ thể nào đó (vấn đề này bạn có thể tham khảo
giấy phép GNU General Public License để biết thêm chi tiết). Thông thường, bạn sẽ nhận được một
bản sao của giấy phép GNU General Public License kèm theo tài liệu này; nếu chưa có, bạn có thể
viết thư đến địa chỉ sau Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
để có một bản giấy phép.
Mục lục
1 Trước khi bắt đầu 1
1.1 Về tài liệu này . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Về tác giả . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Cơ bản về Linux 3
2.1 Giới thiệu về bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1 Hệ vỏ (shell) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.2 Có phải bạn đang chạy bash không? . . . . . . . . . . . . . . . . . 3
2.1.3 Về bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.4 Sử dụng cd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.5 Đường dẫn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.6 Đường dẫn tuyệt đối . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.7 Sử dụng .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.8 Ví dụ đường dẫn tương đối . . . . . . . . . . . . . . . . . . . . . . 6
2.1.9 Thế còn . là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.10 cd và thư mục nhà . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.11 Thư mục nhà của những người dùng khác . . . . . . . . . . . . . . 7
2.2 Sử dụng các câu lệnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1 Giới thiệu ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.2 Liệt kê chi tiết . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.3 Xem thư mục . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.4 liệt kê inode và liệt kê đệ qui (recursive) . . . . . . . . . . . . . . 8
2.2.5 Inode là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.6 mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.7 mkdir -p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.8 touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.9 echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.10 echo và sự chuyển hướng . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.11 cat và cp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.12 mv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3 Tạo liên kết và xóa tệp tin . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.1 Liên kết cứng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.2 Liên kết tượng trưng . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.3 Sâu hơn về liên kết tượng trưng . . . . . . . . . . . . . . . . . . . 14
2.3.4 rm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.5 rmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.6 rm và thư mục . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
iv MỤC LỤC
2.4 Sử dụng các ký tự đại diện (wildcard) . . . . . . . . . . . . . . . . . . . . 17
2.4.1 Giới thiệu về ký tự đại diện . . . . . . . . . . . . . . . . . . . . . 17
2.4.2 Hiểu về không tương ứng . . . . . . . . . . . . . . . . . . . . . . . 18
2.4.3 Cú pháp đại diện: * . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.4 Cú pháp đại diện: ? . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.5 Cú pháp đại diện: [] . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.6 Cú pháp đại diện: [!] . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4.7 Sâu hơn về cú pháp đại diện . . . . . . . . . . . . . . . . . . . . . 20
2.4.8 Ngoặc đơn "gặp" ngoặc kép . . . . . . . . . . . . . . . . . . . . . 20
2.5 Tổng kết và các nguồn tham khảo . . . . . . . . . . . . . . . . . . . . . . 21
2.5.1 Tổng kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5.2 Các nguồn tham khảo . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5.3 Ý kiến độc giả . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5.4 Thay cho lời kết cuốn 1 . . . . . . . . . . . . . . . . . . . . . . . 21
3 Cơ bản về quản trị Linux 23
3.1 Biểu thức chính quy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1 Biểu thức chính quy là gì? . . . . . . . . . . . . . . . . . . . . . . 23
3.1.2 So sánh với ký tự đại diện (glob) . . . . . . . . . . . . . . . . . . . 23
3.1.3 Chuỗi con đơn giản . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.4 Hiểu về chuỗi con đơn giản . . . . . . . . . . . . . . . . . . . . . 24
3.1.5 Ký tự mêta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.6 Sử dụng [] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.7 Sử dụng [ˆ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.8 Cú pháp khác . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.9 Ký tự mêta "*" . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.10 Đầu và cuối dòng . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1.11 Regex cho cả dòng . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2 FHS và tìm tệp tin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.1 FHS - Tiêu chuẩn hệ thống tập tin dạng cây . . . . . . . . . . . . . 27
3.2.2 Hai cấp bậc FHS độc lập . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.3 Hệ thống bậc hai tại /usr . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.4 Tìm tệp tin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.5 Đường dẫn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.6 Sửa đổi PATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.7 Tất cả về "which" . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.8 "which -a" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.9 whereis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.10 find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.11 find và ký tự đại diện . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.12 Lờ đi kiểu chữ với find . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.13 find và biểu thức chính quy . . . . . . . . . . . . . . . . . . . . . 31
3.2.14 find và kiểu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.15 find và mtimes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.16 Tùy chọn -daystart . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.17 Tùy chọn -size . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.18 Gia công tệp tin tìm thấy . . . . . . . . . . . . . . . . . . . . . . . 32
MỤC LỤC v
3.2.19 locate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.20 Sử dụng updatedb . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.21 slocate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3 Quản lý tiến trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.1 Khởi động xeyes . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.2 Dừng một tiến trình . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.3 fg và bg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3.4 Sử dụng "&" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3.5 Nhiều tiến trình nền sau . . . . . . . . . . . . . . . . . . . . . . . 35
3.3.6 Giới thiệu tín hiệu . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3.7 SIGTERM và SIGINT . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3.8 "Diệt tận gốc" . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3.9 nohup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.10 Sử dụng ps liệt kê tiến trình . . . . . . . . . . . . . . . . . . . . . 37
3.3.11 Hiển thị cây và rừng . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.12 Tùy chọn "u" và "l" . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3.13 Sử dụng "top" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3.14 nice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3.15 renice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4 Gia công văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4.1 Ôn lại chuyển hướng . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4.2 Một ví dụ ống . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4.3 Ống giải nén . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.4.4 Một ống dài hơn . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.4.5 Gió lốc gia công văn bản bắt đầu . . . . . . . . . . . . . . . . . . 41
3.4.6 cat, sort, và uniq . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.4.7 wc, head, và tail . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.4.8 tac, expand, và unexpand . . . . . . . . . . . . . . . . . . . . . . . 42
3.4.9 cut, nl, và pr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.4.10 tr, awk, và sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.4.11 od, split, và fmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.4.12 Paste, join, và tee . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.4.13 Gió lốc kết thúc! Chuyển hướng . . . . . . . . . . . . . . . . . . . 43
3.4.14 Sử dụng » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.5 Môđun nhân . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.5.1 Làm quen với "uname" . . . . . . . . . . . . . . . . . . . . . . . . 44
3.5.2 Thêm về đầu ra uname . . . . . . . . . . . . . . . . . . . . . . . . 44
3.5.3 Bản phát hành nhân . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.5.4 Nhân . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.5.5 Giới thiệu môđun nhân . . . . . . . . . . . . . . . . . . . . . . . . 45
3.5.6 Bản tóm tắt môđun nhân . . . . . . . . . . . . . . . . . . . . . . . 45
3.5.7 lsmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.5.8 Liệt kê môđun . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.5.9 Môđun third-party . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.5.10 depmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.5.11 Làm thế nào để lấy môđun . . . . . . . . . . . . . . . . . . . . . . 46
3.5.12 Sử dụng depmod . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
vi MỤC LỤC
3.5.13 Định vị môđun nhân . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.5.14 insmod và modprobe . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.5.15 Thực thi rmmod và modprobe . . . . . . . . . . . . . . . . . . . . 48
3.5.16 Túi khôn: modinfo và modules.conf . . . . . . . . . . . . . . . . . 48
3.5.17 modules.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6 Tổng kết và các nguồn tham khảo . . . . . . . . . . . . . . . . . . . . . . 48
3.6.1 Tổng kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6.2 Tham khảo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.6.3 Ý kiến độc giả . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.6.4 Thay cho lời kết . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4 Quản trị hệ thống Linux 51
5 Quản trị hệ thống linux nâng cao 52
5.1 Hệ thống tập tin, phân vùng, và các thiết bị khối . . . . . . . . . . . . . . 52
5.1.1 Giới thiệu về thiết bị khối . . . . . . . . . . . . . . . . . . . . . . 52
5.1.2 Các lớp trừu tượng . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.1.3 Phân vùng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.1.4 Giới thiệu về công cụ fdisk . . . . . . . . . . . . . . . . . . . . . . 53
5.1.5 Sử dụng fdisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.1.6 Thiết bị khối và tổng quan về việc chia phân vùng . . . . . . . . . 54
5.1.7 Loại phân vùng . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.1.8 Sử dụng fdisk để thiết lập các phân vùng . . . . . . . . . . . . . . 54
5.1.9 Đĩa cứng sau khi được phân vùng sẽ thế nào . . . . . . . . . . . . 54
5.2 Khởi động hệ thống . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2.1 About this sectin . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2.2 Bảng ghi khởi động chính - MBR . . . . . . . . . . . . . . . . . . 57
5.2.3 Qúa trình khởi động của hạt nhân . . . . . . . . . . . . . . . . . . 58
5.2.4 Chương trình /sbin/init . . . . . . . . . . . . . . . . . . . . . . . . 58
5.2.5 Digging in: LILO . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.6 Digging in: GRUB . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.7 Thông tin dmesg . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.8 Thông tin trong /var/log/messages . . . . . . . . . . . . . . . . . . 59
5.2.9 Các thông tin khác . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.10 Cấp thựnc tin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.11 Single-user mode . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.12 Understanding single-user mode . . . . . . . . . . . . . . . . . . . 59
5.2.13 Các cấp thực thi - Runlevels . . . . . . . . . . . . . . . . . . . . . 59
5.2.14 Công cụ telinit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.15 Runlevel etiquette . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.16 "Now" và halt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.17 Cấp độ thực thi ngầm định . . . . . . . . . . . . . . . . . . . . . . 59
5.2.18 Tham khảo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.3 Cấp phép sử dụng hệ thống tập tin. . . . . . . . . . . . . . . . . . . . . . . 60
5.3.1 Giới thiệu về cấp phép . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.2 Hỗ trợ của hạt nhân . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.3 Hỗ trợ của hệ thống tập tin . . . . . . . . . . . . . . . . . . . . . . 60
5.3.4 Cấu hình hệ thống giấy phép . . . . . . . . . . . . . . . . . . . . . 60
MỤC LỤC vii
5.3.5 Lệnh "quota" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.6 Viewing quota . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.7 edquota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.8 Understanding edquota . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.9 Making changes . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.10 Copying quotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.11 Group restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.12 The repquota command . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.13 Repquota options . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.14 Monitoring quotas . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.15 Modifying the grace period . . . . . . . . . . . . . . . . . . . . . 60
5.3.16 Kiểm tra qouta khi khởi động . . . . . . . . . . . . . . . . . . . . 60
5.4 Giới thiệu về syslogd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.4.1 Đọc thông tin nhật ký . . . . . . . . . . . . . . . . . . . . . . . . 60
5.4.2 Tailing log files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.4.3 Grepping logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.4.4 Ghi nhớ bảo mật . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.4.5 Chủ đề nâng cao - klogd . . . . . . . . . . . . . . . . . . . . . . . 62
5.4.6 Chủ đề nâng cao - các chương trình ghi nhật ký khác . . . . . . . . 62
5.5 Tóm lược . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.6 Tham khảo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6 Biên dịch mã nguồn và quản lý gói phần mềm trong linux 65
7 Cấu hình và biên dịch hạt nhân 66
7.1 Giới thiệu hề hạt nhân Linux . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.1.1 Hạt nhân là ... Linux . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.1.2 Giao tiếp với phần cứng . . . . . . . . . . . . . . . . . . . . . . . 67
7.1.3 Điều quản CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.1.4 Điều quản vào ra I/O . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.1.5 Trung tâm của hệ thống mạng . . . . . . . . . . . . . . . . . . . . 67
7.1.6 Ôn lại về quá trình khởi động linux . . . . . . . . . . . . . . . . . 67
7.1.7 Giới thiệu về mô đun . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.1.8 Vị trí của tập tin mô đun . . . . . . . . . . . . . . . . . . . . . . . 67
7.1.9 Modules – not for every process! . . . . . . . . . . . . . . . . . . 67
7.2 Tải mã nguồn của hạt nhân . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.2.1 Kernel version history . . . . . . . . . . . . . . . . . . . . . . . . 67
7.2.2 Getting new kernel sources . . . . . . . . . . . . . . . . . . . . . . 67
7.2.3 Unpacking the kernel . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.3 Cấu hình hạt nhân . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.3.1 Let’s talk configuration . . . . . . . . . . . . . . . . . . . . . . . . 67
7.3.2 The new way to configure . . . . . . . . . . . . . . . . . . . . . . 67
7.3.3 Các mẹo khi cấu hình . . . . . . . . . . . . . . . . . . . . . . . . 67
7.3.4 Code maturity level options . . . . . . . . . . . . . . . . . . . . . 67
7.3.5 Modules and CPU-related options . . . . . . . . . . . . . . . . . . 67
7.3.6 General and parallel port options . . . . . . . . . . . . . . . . . . 67
7.3.7 RAID and LVM . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.3.8 Hệ thống mạng và các thiết bị liên quan . . . . . . . . . . . . . . . 67
viii MỤC LỤC
7.3.9 IDE support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.3.10 SCSI support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.3.11 Miscellaneous character devices . . . . . . . . . . . . . . . . . . . 67
7.3.12 File systems and console drivers . . . . . . . . . . . . . . . . . . . 67
7.3.13 Biên dịch và cài đặt hạt nhân . . . . . . . . . . . . . . . . . . . . . 67
7.3.14 make dep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.3.15 make bzImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.3.16 biên dịch mô đun . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.4 Cấu hình khởi động . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.4.1 Giới thiệu về Lilo . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.4.2 Cấu hình Lilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.5 Thiết bị PCI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.5.1 Thiết bị PCI 101 . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.5.2 Các kía cạnh của thiết bị PCI . . . . . . . . . . . . . . . . . . . . 67
7.5.3 PCI device resources . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.6 Linux USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.6.1 Introducing Linux USB . . . . . . . . . . . . . . . . . . . . . . . 67
7.6.2 Enabling USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.6.3 UHCI, OHCI, EHCI – oh my! . . . . . . . . . . . . . . . . . . . . 67
7.6.4 The last few steps . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.6.5 Mounting usbdevfs . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.7 Tóm lược . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.7.1 Tóm lược . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.7.2 Tài nguyên . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
8 Hệ thống mạng 68
9 USB bảo mật hệ vỏ và chia sẻ tập tin 69
Chương 1
Trước khi bắt đầu
1.1 Về tài liệu này
Chào mừng đến với "Linux những điều cơ bản," cuốn thứ nhất trong bốn cuốn sách hướng
dẫn giúp bạn chuẩn bị cho bài thi 101 của LPI (Linux Professional Institute). Trong cuốn
sách hướng dẫn này, chúng tôi sẽ giới thiệu với bạn bash (vỏ, shell, tiêu chuẩn của Linux),
chỉ cho bạn cách sử dụng thành thạo các câu lệnh cơ bản của Linux như ls, cp và mv, giải
thích về inode, liên kết "cứng" và liên kết "tượng trưng" (hard link và symbolic links) và
nhiều thứ khác. Khi kết thúc cuốn sách hướng dẫn này bạn sẽ có kiến thức vững vàng về
những điều cơ bản khi sử dụng Linux, và thậm chí còn sẵn sàng bắt đầu học cơ bản về
nhiệm vụ quản trị mạng Linux. Khi kết thúc chuỗi sách hướng dẫn này (tám cuốn tất cả),
bạn sẽ có kiến thức cần thiết để trở thành Quản trị viên hệ thống Linux và sẵn sàng đạt tới
chứng chỉ LPIC bậc I của Linux Professional Institute nếu bạn đã dự định như vậy.
Cuốn sách hướng dẫn này (Phần I) nói riêng là lý tưởng với những "người mới" với
Linux, hoặc với những người muốn xem lại hoặc cải tiến sự hiểu biết của mình về những
khái niệm cơ bản của Linux như sao chép (copying) và di chuyển (moving) tập tin, tạo
đường dẫn "cứng" và "tượng trưng", và sử dụng các câu lệnh "chế biến" văn bản cơ bản
song song với "băng chuyền" (pipeline) và "chuyển hướng" (redirection). Dọc theo cuốn
hướng dẫn này, chúng tôi sẽ chia sẻ với các bạn những lời gợi ý, lời mách nước và mánh lới
để giữ cho cuốn hướng dẫn thêm phong phú ("ngon ăn") và có tính thực dụng, thậm chí cho
cả những ai có kinh nghiệm sử dụng Linux đáng kể. Với những "người bắt đầu", nhiều tài
liệu của cuốn hướng dẫn này sẽ mới, nhưng với những người sử dụng Linux kinh nghiệm có
thể tìm thấy cuốn hướng dẫn này như một cách tuyệt vời để "làm béo thêm" kỹ năng Linux
cơ bản.
Với những ai đã qua phát hành (release) 1 của cuốn hướng dẫn này với mục đích khác
hơn là chuẩn bị thi LPI, bạn có khả năng không cần phát hành 2. Tuy nhiên, nếu bạn có dự
tính vượt qua kỳ thi LPI, bạn nên lưu ý đọc bản đã chỉnh sửa này.
1.2 Về tác giả
Cư trú tại Albuquerque, New Mexico, Daniel Robbins là kiến trúc trưởng của Gentoo Linux,
một bản phân phối Linux cao cấp. Tác giả còn viết các bài báo, sách hướng dẫn, những lời
mách nước cho IBM developerWorks và Intel Developer Services và là tác giả đóng góp
2 Trước khi bắt đầu
của vài cuốn sách, gồm có Samba Unleashed và SuSE Linux Unleashed. Daniel thích thú
sử dụng thời gian với vợ, Mary, và con gái, Hadassah. Bạn có thể liên hệ với Daniel qua tại
[email protected].
Với những câu hỏi kỹ thuật về nội dung của cuốn hướng dẫn này, liên hệ với tác giả,
Daniel Robbins, tại [email protected].
Chương 2
Cơ bản về Linux
2.1 Giới thiệu về bash
2.1.1 Hệ vỏ (shell)
Nếu bạn đã từng sử dụng hệ điều hành Linux, thì biết rằng sau khi đăng nhập xong, chúng
ta sẽ được đón chào bởi dấu nhắc như sau:
$
Dấu nhắc bạn thấy trên máy của mình có thể trông khác một chút. Nó có thể chứa tên
máy, tên của thư mục hiện thời, hoặc cả hai. Tuy nhiên, bất kể là giấu nhắc của bạn trông
như thế nào, chắc chắn nó chứa ký hiệu nói trên1 . Chương trình, mà in dấu nhắc nói trên
ra gọi, là "hệ vỏ" (shell). Và rất có thể hệ vỏ shell của bạn là bash - một hệ vỏ shell thông
dụng trong thế giới hệ điều hành chim cánh cụt.
2.1.2 Có phải bạn đang chạy bash không?
Bạn muốn biết mình đang chạy bash hay không bằng hãy gõ:
$ echo $SHELL
/bin/bash
Nếu dòng trên cho ra một thông báo lỗi hoặc kết quả không giống với ví dụ, thì tức là
bạn đang chạy một hệ vỏ shell khác. Trong trường hợp đó, phần lớn ví dụ của cuốn hướng
dẫn này vẫn có thể được áp dụng. Nhưng chúng tôi khuyên bạn nên dùng bash, vì rất có lợi
và nhất là nếu bạn có mục đích trả thi LPI 101. (Cuốn hướng dẫn thứ hai, về quản trị cơ bản,
chúng tôi sẽ hướng dẫn cách thay đổi hệ vỏ shell cho người dùng bằng câu lệnh chsh.2 )
1
trừ khi bạn đăng nhập với quyền người dùng root. Nếu bạn không biết người dùng root là gì hãy cứ tạm
biết như thế ;). Chúng tôi sẽ nói đến vấn đề này ở các phần tiêp theo
2
nếu bạn là người thích khám phá thì hãy thử làm quen với câu lệnh trên ngay bây giờ! Cú pháp của nó
cũng không quá phức tạp so với các câu lệnh khác của Linux. Tự khám phá luôn là một cách học tốt trong mọi
lĩnh vực! Chúng tôi rất khuyến khích bạn
4 Cơ bản về Linux
2.1.3 Về bash
Bash là từ viết tắt của "Bourne-again shell"3 . Bash là hệ vỏ shell theo mặc định trên hầu
hết các hệ thống Linux. Công việc của hệ vỏ shell là tuân theo các câu lệnh của người
dùng. Nhờ có hệ vỏ shell bạn có thể tác động qua lại với hệ điều hành. Khi làm xong các
công việc cần thiết, có thể chỉ thị cho hệ vỏ shell thoát ra (exit) hay đăng xuất (logout).
Tại thời điểm này bạn sẽ được đưa trở lại dấu nhắc đăng nhập4 .
Nhân tiện, bạn có thể đăng xuất bằng cách gõ control-D tại dấu nhắc nói trên.
2.1.4 Sử dụng cd
Như bạn biết và có thể sẽ biết :), nhìn chằm chằm vào dấu nhắc bash không phải là điều
thích thú nhất trên thế gian. Vì vậy, hãy thử sử dụng bash để "đi dạo" một vòng, quanh hệ
thống tệp tin. Tại dấu nhắc, gõ câu lệnh sau (không gõ dấu $5 :
$ cd /
Chúng ta vừa yêu cầu chuyển sang làm việc tại bash thư mục /. / còn được người dùng
Linux biết đến dưới cái tên root6 . Trên hệ thống Linux tất cả các thư mục tạo thành một
cây thư mục, và / là thư mục cao nhất của cây này, hay là gốc rễ (root) của nó. cd thiết lập
thư mục mà bạn đang làm việc với nó, còn gọi là "thư mục hiện thời".
Để biết thư mục hiện thời của bash, hãy gõ:
$ pwd
2.1.5 Đường dẫn
Trong ví dụ phía trên, đối số / cho cd gọi là đường dẫn (path). Đối số cho cd biết nơi chúng
ta muốn chuyển đến. Trong trường hợp này, đối số / là đường dẫn tuyệt đối, có nghĩa là nó
chỉ rõ một vị trí trong cây thư mục đối với thư mục gốc (root).
2.1.6 Đường dẫn tuyệt đối
Dưới đây là một số đường dẫn tuyệt đối khác:
/dev
/usr
/usr/bin
/usr/local/bin
3
người dịch: Bourne-again shell là một cách chơi chữ tiếng Anh. "Bourne" đọc giống như borne (sinh ra,
đẻ ra).
4
thường có dạng login:
5
Trong các ví dụ $ ở đầu dòng chỉ để chỉ dấu nhắc của người dùng, nó không phải là thành phần của một
câu lệnh
6
Xin hãy nhớ cái tên này!!! Vì tiếp theo chúng tôi sẽ gọi như vậy trong suốt cuốn sách này
2.1 Giới thiệu về bash 5
Như bạn thấy, mọi đường dẫn tuyệt đối có một điểm chung - bắt đầu với /. Với đường
dẫn /usr/local/bin, ta muốn cd chuyển vào thư mục /, sau đó thư mục usr dưới nó, và sau đó
local và cuối cùng là bin. Đường dẫn tuyệt đối luôn luôn được nhận ra bởi sự có mặt của /
ở đầu.
Có thể bạn đã đoán ra rằng nếu đã có tuyệt đối thì phải có tượng đối. Vâng đúng là có
đường dẫn tương đối. Bash, cd, và các câu lệnh khác luôn luôn biên dịch những đường dẫn
này tương đối với thư mục hiện thời7 . Đường dẫn tương đối không bao giờ bắt đầu với một
/. Vì thế, nếu chúng ta đang trong thư mục /usr.
$ cd /usr
Thì có thể dùng đường dẫn tương đối để chuyển tới thư mục /usr/local/bin:
$ cd local/bin
$ pwd
/usr/local/bin
2.1.7 Sử dụng ..
Đường dẫn tương đối có thể chứa một hay nhiều thư mục "..". Thư mục .. là thư mục đặc
biệt chỉ tới thư mục "bố"8 . Tiếp tục ví dụ ở trên:
$ pwd
/usr/local/bin
$ cd ..
$ pwd
/usr/local
Bạn thấy không, thư mục hiện thời của chúng ta bây giờ là /usr/local. Chúng ta đã "quay
ngược trở lại" một thư mục về phía thư mục root, nếu so với thư mục hiện thời lúc đầu
(/usr/local/bin).
Thêm vào đó, chúng ta có thể thêm .. vào đường dẫn tương đối đã có, để đi tới một thư
mục nằm "kế bên"9 thư mục hiện thời, ví dụ:
$ pwd
/usr/local
$ cd ../share
$ pwd
/usr/share
7
hãy chú ý sự khác nhau giữa hai cách biên dịch
8
thường gọi là thư mục mẹ hơn
9
gọi nôm na là "hàng xóm"
6 Cơ bản về Linux
2.1.8 Ví dụ đường dẫn tương đối
Đường dẫn tương đối có thể khá phức tạp. Sau đây là một số ví dụ, chúng tôi không cho
biết các thư mục thu được. Hãy thử tự hình dung xem bạn sẽ đi tới đâu sau khi gõ những
câu lệnh sau:
$ cd /bin
$ cd ../usr/share/zoneinfo
$ cd /usr/X11R6/bin
$ cd ../lib/X11
$ cd /usr/bin
$ cd ../bin/../bin
Bây giờ, hãy gõ chúng và xem bạn hình dung có đúng không :)
2.1.9 Thế còn . là gì?
Trước khi kết thúc bài giảng của chúng ta về cd, có một vài điều chúng tôi muốn đề cập
đến. Đầu tiên, có một thư mục đặc biệt khác gọi là ., có ý nghĩa "thư mục hiện thời". Thư
mục này thường không sử dụng như đối số cho câu lệnh cd, mà thường được sử dụng để
thực thi một số chương trình trong thư mục hiện thời. Ví dụ:
$ ./chuongtrinh
Tệp tin thực thi chuongtrinh nằm tại thư mục hiện thời sẽ được chạy.
2.1.10 cd và thư mục nhà
Bây giờ, chúng ta muốn chuyển tới thư mục nhà (home directory), ta gõ:
$ cd
Không có đối số , cd sẽ chyển tới thư mục nhà của người dùng. Thư mục nhà sẽ là /root
cho người dùng cao cấp (superuser) và điển hình là /home/username cho người dùng bình
thường. Nhưng nếu muốn chỉ rõ một tệp tin trong thư mục nhà thì sao? Ví dụ chúng ta muốn
dùng tệp tin làm đối số cho câu lệnh chuongtrinh. Nếu tệp tin "trú ngụ" trong thư mục nhà,
có thể gõ10 :
$ ./chuongtrinh /home/teppi82/tepcuatoi.txt
10
trong ví dụ này người dùng có tên là teppi82
2.2 Sử dụng các câu lệnh 7
Tuy nhiên, việc sử dụng đường dẫn tuyệt đối như vậy không phải lúc nào cũng tiện lợi,
bạn có để ý là chúng ta sẽ phải gõ rất nhiều ký tự không? Hãy thương các ngón tay của
mình!! Rất may, ta có thể sử dụng ký tự ∼ (dấu ngã) để làm công việc tương tự:
$ ./chuongtrinh ~/tepcuatoi.txt
Bạn thấy không, nhanh hơn rất nhiều và rất tiện lợi!
2.1.11 Thư mục nhà của những người dùng khác
Bash sẽ khai triển ký tự ∼ đứng một mình để chỉ thư mục nhà của bạn, nhưng cũng có thể
sử dụng ký tự này để chỉ thư mục nhà của những người dùng khác11 . Ví dụ, nếu chúng ta
muốn chỉ đến tệp tin girls.txt trong thư mục nhà của James, ta gõ:
$ ./chuongtrinh ~james/girls.txt
2.2 Sử dụng các câu lệnh
2.2.1 Giới thiệu ls
Bây giờ, chúng ta sẽ xem xét qua câu lệnh ls. Rất có thể ls là câu lệnh quen thuộc của bạn,
và bạn biết rằng nếu chỉ gõ câu lệnh này (không có tham số) thì nội dung của thư mục hiện
thời sẽ được liệt kê:
$ cd /usr
$ ls
bin doc games include info lib local sbin share src X11R6
Khi tùy chọn -a được chỉ rõ, bạn sẽ "nhìn thấy" tất cả mọi tệp tin của một thư mục, bao
gồm cả các tệp tin ẩn (hidden files), những tệp tin mà tên bắt đầu với .. Trong ví dụ sau, bạn
sẽ thấy trong đầu ra của ls -a có cả các thư mục liên kết đặc biệt . và .. :
$ ls -a
. .. bin doc games include info lib local sbin share src X11R6
2.2.2 Liệt kê chi tiết
Linux12 cho phép chỉ rõ một hay nhiều tệp tin hay thư mục trên dòng lệnh ls. Nếu bạn chỉ
rõ một tệp tin, thì ls sẽ chỉ hiện ở đầu ra tệp tin đó mà thôi. Nếu bạn chỉ rõ một thư mục, thì
ls sẽ hiển thị nội dung của thư mục, tức là các tệp tin và thư mục con của nó. Câu lệnh ls
có tùy chọn -l rất thuận tiện khi cần xem các thông tin như quyền hạn (permissions), quyền
sở hữu (ownership), thời gian sửa đổi (modification time), và kích thước (size) của các mục.
Trong ví dụ dưới đây, chúng ta sử dụng tùy chọn -l để liệt kê chi tiết thư mục /usr:
11
tất nhiên nếu họ có trong hệ thống
12
hay nói đúng hơn là bash
8 Cơ bản về Linux
$ ls -l /usr
total 122
drwxr-xr-x 2 root root 53104 2004-08-29 02:17 bin
drwxr-xr-x 2 root root 2336 2004-06-22 19:51 doc
drwxr-xr-x 2 root root 3088 2004-06-01 15:44 games
drwxr-xr-x 46 root root 5528 2004-06-13 16:33 include
lrwxrwxrwx 1 root root 10 2004-05-31 22:29 info -> share/info
drwxr-xr-x 138 root root 43384 2004-08-29 00:28 lib
drwxrwsr-x 11 root staff 272 2004-06-05 04:06 local
drwxr-xr-x 2 root root 6760 2004-08-29 00:28 sbin
drwxr-xr-x 236 root root 6360 2004-06-22 19:31 share
drwxrwsr-x 5 teppi82 src 136 2004-08-28 21:58 src
drwxr-xr-x 6 root root 144 2004-05-31 22:53 X11R6
Cột thứ nhất trong bảng trên là thông tin về quyền hạn cho từng mục trong danh sách13 .
Chúng tôi sẽ giải thích một cách cụ thể cách dịch thông tin này trong các phẩn tiếp theo.
Cột tiếp theo hiển thị số liên kết (links) cho mỗi mục đó, chúng ta cũng tạm thời dừng lại
nhưng sẽ trở lại sau. Cột thứ ba và cột thứ tư cho biết, tương ứng, chủ sở hữu (owner) và
nhóm sở hữu (group). Cột thứ năm liệt kê kích thước của mục. Cột thứ sáu là "thời gian
sửa đổi gần nhất" ("last modified" time) hay còn gọi tắt là "mtime" của mục. Cột cuối
cùng là tên gọi của chúng. Hãy để ý tệp info! Nếu tệp tin là liên kết tượng trưng (symbolic
link), bạn sẽ thấy dấu -> và đường dẫn tới nơi mà liên kết chỉ đến. Trong ví dụ trên info là
một trường hợp như vậy.
2.2.3 Xem thư mục
Đôi khi bạn chỉ muốn xem thông tin của thư mục, mà không quan tâm tới nội dung của nó
ở bên trong. Cho những trường hợp này, chúng ta cần chỉ rõ tùy chọn -d, để "ra lệnh" cho ls
chỉ hiển thị thông tin của thư mục quan tâm:
$ ls -dl /usr /usr/bin /usr/X11R6/bin ../share
drwxr-xr-x 241 root root 6488 2004-09-02 18:21 ../share
drwxr-xr-x 12 root root 312 2004-05-31 22:29 /usr
drwxr-xr-x 2 root root 53208 2004-09-02 18:21 /usr/bin
drwxr-xr-x 2 root root 3984 2004-06-22 19:30 /usr/X11R6/bin
2.2.4 liệt kê inode và liệt kê đệ qui (recursive)
Như vậy là có thể sử dụng tùy chọn -d để chỉ xem thông tin của thư mục. Nhưng đồng thời
chúng ta cũng có thể dùng tùy chọn -R để thực hiện điều ngược lại, tức là không chỉ xem
nội dung của thư mục, mà còn xem tất cả các tệp và thư mục bên trong của thư mục đó
(Xem toàn bộ14 )! Chúng tôi không đưa ra ví dụ nào cho tùy chọn này (vì danh sách thu được
thường rất dài), tuy nhiên bạn nên thử một vài lần câu lệnh ls -R và ls -Rl để biết chúng làm
việc như thế nào.
13
Bạn nên biết r (readable) - có thể đọc, w (writable) - có thể viết, x (executable) - có thể thực thi, dấu gạch
ngang (-) cho biết không có một trong ba quyền hạn nói trên, như thế sẽ dễ nhớ hơn. Bạn sẽ hỏi vậy hai chữ
cái d và l ở đây là gì? d và l ở đây không liên quan gì đến quyền hạn, mà là chữ viết tắt chỉ phân loại của mục,
cụ thể là d (directory) - thư mục, l (link) - liên kết. Tạm biết vậy đã, như thế tối nay bạn sẽ ngủ ngon hơn
14
Nói nôm na là xem tất tần tật
2.2 Sử dụng các câu lệnh 9
Và cuối cùng vâng rất may là cuối cùng, tùy chọn -i của ls sử dụng để hiển thị số inode
của các đối tượng15 trong hệ thống tập tin:
$ ls -i /usr
685 bin 917 include 9352 local 920 src
915 doc 918 info 706 sbin 12522 X11R6
916 games 919 lib 708 share
2.2.5 Inode là gì?
Mọi đối tượng trên một hệ thống tập tin được xác định bởi một chỉ mục (index) duy nhất,
gọi là chỉ mục inode. Cái này nghe có vẻ tầm thường, nhưng rất cần am hiểu inode để có
thể nắm được thực chất của nhiều thao tác với hệ thống tập tin. Trong ví dụ này chúng ta sẽ
xem xét các liên kết . và .. mà xuất hiện trong mọi thư mục. Để biết thực chất thư mục .. là
gì, đầu tiên chúng ta xem chỉ mục inode của /usr/local:
$ ls -id /usr/local
9352 /usr/local
Thư mục /usr/local có chỉ mục inode là 9352. Còn bây giờ, hãy xem chỉ mục inode của
mbox/usr/local/bin/..:
$ ls -id /usr/local/bin/..
9352 /usr/local/bin/..
Ối! Cũng là 9352.
Như bạn thấy đấy, /usr/local/bin/.. có cùng chỉ mục inode với /usr/local! Như vậy chúng
ta hiểu thực chất .. cũng là một mục trên hệ thống tập tin mà có cùng inode với thư mục mẹ.
Đây là một khám phá gây sốc! Trước đây, chúng ta cho rằng /usr/local là thư mục. Bây giờ,
chúng ta khám phá ra inode 9352 trên thực tế mới là thư mục, và tìm thấy hai mục (còn gọi
là "liên kết") chỉ tới inode này. Đó là /usr/local và /usr/local/bin/.., chúng đều là liên kết tới
inode 9352. Mặc dù inode 9352 chỉ tồn tại ở một nơi trên đĩa, nhưng cho phép nhiều mục
có thể liên kết tới nó. Inode 9352 là đối tượng thật sự nằm trên đĩa.
Trong khi thực hành, nếu muốn chúng ta có thể thấy tổng số lần mà inode 9352 được
liên kết đến, dùng câu lệnh ls -dl:
$ ls -dl /usr/local
drwxrwsr-x 11 root staff 272 2004-06-05 04:06 /usr/local
Chúng tôi muốn bạn chú ý vào cột thứ hai từ bên trái. Vâng với những cái đầu nhanh
nhạy như của các bạn, thì thấy rằng thư mục /usr/local (hay nói đúng hơn là inode 9352)
được liên kết đến mười một lần. Có thật sự nhiều như vậy không? Để đánh tan mọi hoài
nghi dưới đây là các mục khác nhau, liên kết đến inode này trên hệ điều hành của tôi:
15
object
10 Cơ bản về Linux
/usr/local
/usr/local/.
/usr/local/bin/..
/usr/local/games/..
/usr/local/lib/..
/usr/local/sbin/..
/usr/local/share/..
/usr/local/src/..
/usr/local/j2sdk1.4.2/..
/usr/local/man/..
/usr/local/include/..
2.2.6 mkdir
Còn bây giờ sau khi đã có một cái nhìn khái quát về thư mục, chúng ta xem xét nhanh câu
lệnh mkdir, lệnh sử dụng để tạo một (các) thư mục mới. Ví dụ dưới đây tạo 3 thư mục mới,
co, ca, ro, tất cả dưới /tmp:
$ cd /tmp
$ mkdir co ca ro
Theo mặc định, câu lệnh mkdir không tạo thư mục mẹ; tất cả đường dẫn từ thành phần
đầu tiên đến thành phần gần cuối cùng phải tồn tại. Để giải thích rõ vấn đề này chúng tôi
xin lấy ví dụ sau: trong thư mục nhà cần tạo thư mục project/vnoss/docs và các thư mục
project, project/vnoss chưa có sẵn. Thử gõ:
$ mkdir project/vnoss/docs
mkdir: cannot create directory ‘project/vnoss/docs’: No such file or directory
Ối! Lỗi thiếu thư mục mẹ! Chúng ta cần đưa ra ba câu lệnh mkdir riêng biệt như sau:
$ mkdir project
$ mkdir project/vnoss
$ mkdir project/vnoss/docs
2.2.7 mkdir -p
Sử dụng 3 câu lệnh riêng biệt như trên thật là bất tiện và mất thời gian. Rất may, tùy chọn
-p của mkdir xóa bỏ sự bất tiện này16 . Lệnh mkdir với tùy chọn -p sẽ tạo tất cả các thư mục
mẹ nếu chúng không tồi tại, như ở đây:
16
Trong thế giới Linux bạn sẽ thấy có rất nhiều công cụ như vậy, chỉ cần bỏ chút ít thời gian tìm hiểu thì
các công việc hàng ngày sẽ trở nên đơn giản và tốn ít sức lực cũng như trí óc. Ngoài ra rất có thể nó còn đem
lại cho bạn sự sảng khoái
2.2 Sử dụng các câu lệnh 11
$ mkdir -p project2/vnoss/docs
Nói chung, sự đơn giản luôn đẹp mắt. Để học thêm về câu lệnh mkdir, gõ man mkdir và
đọc trang hướng dẫn sử dụng17 (man page). Bạn cũng có thể đọc trang HDSD của tất cả
các câu lệnh đã nói đến (ví dụ, man ls), trừ cd, vì cd là lệnh nội trú (built-in) trong bash18 .
2.2.8 touch
Bây giờ, chúng ta sẽ xem xét nhanh các câu lệnh cp và mv. Chúng được sử dụng để sao
chép, đổi tên, và di chuyển tệp tin (thư mục). Để bắt đầu, chúng ta sử dụng câu lệnh touch
tạo một tệp tin trong /tmp:
$ cd /tmp
$ touch saochepem
Câu lệnh touch cập nhật "mtime"19 của một tệp tin nếu tệp tin đó đã có trên hệ thống
(cột thứ sáu trong kết quả của ls -l). Nếu tệp tin không tồn tại, thì một tệp tin mới, trống
rỗng sẽ được tạo ra. Bây giờ chúng ta đã có tệp tin /tmp/saochepem với kích thước bằng
không.
2.2.9 echo
Hãy thêm vào tệp tin này một số dữ liệu. Trên hệ thống Linux có rất nhiều cách để làm việc
này, tuy nhiên tại thời điểm này chúng ta sẽ dùng câu lệnh echo. Lệnh này lấy đối số và theo
mặc định in chúng ở đầu ra tiêu chuẩn20 (standard output). Đầu tiên, hãy thử dùng echo như
sau:
$ echo "tepdautien"
tepdautien
2.2.10 echo và sự chuyển hướng
Bây giờ, vẫn câu lệnh echo nói trên nhưng với sự chuyển hướng đầu ra (output redirection):
$ echo "tepdautien" > saochepem
Khi có dấu lớn hơn theo sau là tên tệp tin, hệ vỏ shell sẽ viết đầu ra của echo vào tệp tin
đó, tức là saochepem. Tệp tin này sẽ được tạo ra nếu chưa có, hoặc nội dung đã có sẽ bị
viết đè lên. Sau đó, nếu kiểm tra tệp tin bằng ls -l, chúng ta có thể thấy saochepem "dài" 11
byte. Đó là vì nó chứa từ tepdautien và ký tự dòng mới:
17
xin viết tắt là HDSD
18
trong trường hợp này mở HDSD của bash (man bash) rồi tìm đến mục con cd trong mục lớn SHELL
BUILTIN COMMAND
19
thời gian sửa đổi cuối cùng
20
thông thường là màn hình