Bài giảng Hệ điều hành mã nguồn mở
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ điều hành mã nguồn mở", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_he_dieu_hanh_ma_nguon_mo.pdf
Nội dung text: Bài giảng Hệ điều hành mã nguồn mở
- BỘ GIAO THÔNG VẬN TẢI TRƢỜNG ĐẠI HỌC HÀNG HẢI BỘ MÔN: KỸ THUẬT MÁY TÍNH KHOA: CÔNG NGHỆ THÔNG TIN BÀI GIẢNG HỆ ĐIỀU HÀNH MÃ NGUỒN MỞ TÊN HỌC PHẦN : HỆ ĐIỀU HÀNH MÃ NGUỒN MỞ MÃ HỌC PHẦN : 17308 TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY DÙNG CHO SV NGÀNH : CÔNG NGHỆ THÔNG TIN HẢI PHÒNG - 2010
- MỤC LỤC Chƣơng 1. GIỚI THIỆU CHUNG VỀ LINUX 6 1.1. Giới thiệu chung 6 1.1.1. Tổng quan về Linux 6 1.1.2. Vấn đề bản quyền 6 1.1.3. Các thành phần tích hợp Hệ điều hành Linux 7 1.1.4. Một số đặc điểm chính của Linux 7 1.2. Các thành phần cơ bản của Linux 8 1.2.1. Nhân hệ thống (kernel) 8 1.2.2. Hệ vỏ (shell) 9 1.3. Sử dụng lệnh trong Linux 9 1.3.1. Dạng tổng quát của lệnh Linux 10 1.3.2. Các ký hiệu đại diện 11 1.3.3. Trợ giúp lệnh 11 Chƣơng 2. THAO TÁC VỚI HỆ THỐNG 12 2.1. Tiến trình khởi động Linux 12 2.2. Thủ tục đăng nhập và các lệnh thoát khỏi hệ thống 12 2.2.1. Đăng nhập 12 2.2.2. Ra khỏi hệ thống 12 2.2.3. Khởi động lại hệ thống 13 2.2.4. Khởi động vào chế độ đồ hoạ 13 2.3. Một số liên quan đến hệ thống 15 2.3.1. Lệnh thay đổi mật khẩu 15 2.3.2. Lệnh xem, thiết lập ngày, giờ 15 2.3.3. Lệnh kiểm tra những ai đang sử sụng hệ thống 15 2.3.4. Thay đổi nội dung dấu nhắc shell 15 2.3.5. Lệnh gọi ngôn ngữ tính toán số học 16 Chƣơng 3. HỆ THỐNG FILE 17 3.1 Tổng quan về hệ thống file 17 3.1.1. Một số khái niệm 17 3.1.2. Sơ bộ kiến trúc nội tại của hệ thống file 18 3.1.3. Hỗ trợ nhiều hệ thống File 20 3.1.4. Liên kết tƣợng trƣng (lệnh ln) 21 3.2 Quyền truy nhập thƣ mục và file 22 3.2.1 Quyền truy nhập 22 3.2.2. Các lệnh cơ bản 23 3.3 Thao tác với thƣ mục 25 3.3.1 Một số thƣ mục đặc biệt 25 3.3.2 Các lệnh cơ bản về thƣ mục 26 3.4. Các lệnh làm việc với file 28 3.4.1 Các kiểu file có trong Linux 28 3.4.2. Các lệnh tạo file 29 - 1 -
- 3.4.3 Các lệnh thao tác trên file 30 3.4.4 Các lệnh thao tác theo nội dung file 32 3.4.5 Các lệnh tìm file 35 3.5 Nén và sao lƣu các file 37 3.5.1 Sao lƣu các file (lệnh tar) 37 3.5.2 Nén dữ liệu 38 CHƢƠNG 4. QUẢN TRỊ HỆ THỐNG VÀ NGƢỜI DÙNG 41 4.1. Quản trị ngƣời dùng 41 4.1.1. Tài khoản ngƣời dùng 41 4.1.2. Các lệnh cơ bản quản lý ngƣời dùng 41 4.2. Các lệnh cơ bản liên quan đến nhóm ngƣời dùng 44 4.2.1. Nhóm ngƣời dùng và file /etc/group 45 4.2.2. Các lệnh cơ bản khác có liên quan đến ngƣời dùng 46 4.3. Quản trị hệ thống 47 4.3.1. Quản lý tiến trình 47 4.3.2 Quản trị phần mềm 51 4.3.3. Quản trị hệ thống Linux 51 Chƣơng 5. TRUYỀN THÔNG VÀ MẠNG UNIX-LINUX 53 5.1. Lệnh truyền thông 53 5.1.1. Lệnh write 53 5.1.2. Lệnh mail 53 5.1.3. Lệnh talk 54 5.2 Cấu hình Card giao tiếp mạng 54 5.3. Các dịch vụ mạng 55 5.3.1 Hệ thông tin mạng NIS 55 5.3.2. Cài đặt và cấu hình cho máy chủ NIS 56 5.3.3. Cài đặt các máy trạm NIS 56 5.3.4. Lựa chọn các file map 57 5.3.5. Sử dụng các file map passwd và group 58 5.4 Hệ thống file trên mạng 59 5.4.1 Cài đặt NFS 59 5.4.2 Khởi động và dừng NFS 59 5.4.3 Cấu hình NFS server và Client 60 5.4.4 Sử dụng mount 60 5.4.5 Unmount 61 5.4.6 Mount tự động qua tệp cấu hình 61 Chƣơng 6. LẬP TRÌNH SHELL VÀ LẬP TRÌNH C TRÊN LINUX 62 6.1. Cách thức pipes và các yếu tố cơ bản lập trình trên shell 62 6.1.1. Cách thức pipes 62 6.1.2. Các yếu tố cơ bản để lập trình trong shell 62 6.2. Một số lệnh lập trình trên shell 65 6.2.1. Sử dụng các toán tử bash 65 6.2.2. Điều khiển luồng 67 - 2 -
- 6.2.3 Các hàm shell 75 6.2.4. Các toán tử định hƣớng vào ra 75 6.2.5. Hiện dòng văn bản 76 6.2.5. Lệnh read đọc dữ liệu cho biến ngƣời dùng 76 6.2.6. Lệnh set 77 6.2.7. Tính toán trên các biến 77 6.2.8. Chƣơng trình ví dụ 77 6.3. Lập trình C trên UNIX 78 6.3.1. Trình biên dịch gcc 78 6.3.2. Công cụ GNU make 80 6.3.3. Làm việc với file 81 6.3.4. Thƣ viện liên kết 83 6.3.5 Các công cụ cho thƣ viện 89 - 3 -
- YÊU CẦU VÀ NỘI DUNG CHI TIẾT Tên học phần: Hệ điều hành mã nguồn mở Loại học phần: 2 Bộ môn phụ trách giảng dạy: Kỹ thuật máy tính Khoa phụ trách: CNTT Mã học phần: 17303 Tổng số TC: 3 TS tiết Lý thuyết Thực hành/Xemina Tự học Bài tập lớn Đồ án môn học 60 30 30 0 0 0 Điều kiện tiên quyết: Sinh viên phải học xong các học phần sau mới đƣợc đăng ký học phần này: Kiến trúc máy tính, Nguyên lý hệ điều hành Mục tiêu của học phần: - Nắm bắt đƣợc về hệ điều hành mã nguồn mở. Nội dung chủ yếu - Các kiến thức cơ bản về hệ điều hành Linux. - Nội dung chi tiết của học phần: PHÂN PHỐI SỐ TIẾT TÊN CHƢƠNG MỤC TS LT BT TH KT Chƣơng 1: Giới thiệu Unix – Linux 2 2 1.1. Giới thiệu chung 0,5 1.2. Các thành phần cơ bản của Linux 0,5 1.3. Sử dụng lệnh trong Linux 1 Chƣơng 2. Thao tác với hệ thống 10 3 6 1 2.1. Tiến trình khởi động Linux 0.5 2.2. Thủ tục đăng nhập và các lệnh thoát khỏi hệ thống 1 2.3. Một số liên quan đến hệ thống 1 1 Chƣơng 3. Quản trị hệ thống và ngƣời dùng 8 4 4 3.1 Quản lý ngƣời dùng 1 3.2 Quản lý nhóm các vấn đề liên quan 1 3.3 Quản trị hệ thống 2 Chƣơng 4. Hệ thống file 12 7 4 1 4.1. Tổng quan về hệ thống file 0,5 4.2. Quyền truy nhập thƣ mục và file 0,5 4.3. Thao tác với thƣ mục 1 4.4. Các lệnh làm việc với file 1 4.5 Nén và sao lƣu các file 1 Chƣơng 5. Truyền thông và mạng 8 4 4 - 4 -
- 5.1. Lệnh truyền thông 1 5.2 Cấu hình Card giao tiếp mạng 1 5.3. Các dịch vụ mạng 1 5.4 Hệ thống file trên mạng 1 Chƣơng 6: Lập trình shell và lập trình C trên Linux 20 7 12 1 6.1. Cách thức pipes và các yếu tố cơ bản lập trình trên 2 shell 6.2. Một số lệnh lập trình trên shell 2 1 6.3. Lập trình C trên Linux 1 Nhiệm vụ của sinh viên : Tham dự các buổi thuyết trình của giáo viên, tự học, tự làm bài tập do giáo viên giao, tham dự các buổi thực hành, các bài kiểm tra định kỳ và cuối kỳ, hoàn thành bài tập lớn theo yêu cầu. Tài liệu học tập : - Richard Petersen - Linux: The Complete Reference, Sixth Edition – Nhà xuất bản McGraw-Hill Osborne Media ,2007. - Michael Rash - Linux Firewalls: Attack Detection and Response with iptables, psad, and fwsnort – Nhà xuất bản No Starch Press ,2007 - Christopher Negus - Linux Bible – Nhà xuất bản Wiley, 2007 - Andrew Hudson và Paul Hudson – Fedora 7 UNLEASHED, 2007 Hình thức và tiêu chuẩn đánh giá sinh viên: - Đánh giá dựa trên tình hình tham dự buổi học trên lớp, các buổi thực hành, điểm kiểm tra thƣờng xuyên và điểm kết thúc học phần. - Hình thức thi cuối kỳ : thi viểt. Thang điểm: Thang điểm chữ A, B, C, D, F Điểm đánh giá học phần Z = 0.3X + 0.7Y. Bài giảng này là tài liệu chính thức và thống nhất của Bộ môn Kỹ thuật máy tính, Khoa Công nghệ Thông tin và đƣợc dùng để giảng dạy cho sinh viên. Ngày phê duyệt: 15 / 6 / 2010 Trƣởng Bộ môn: ThS. Ngô Quốc Vinh - 5 -
- Chƣơng 1. GIỚI THIỆU CHUNG VỀ LINUX 1.1. Giới thiệu chung 1.1.1. Tổng quan về Linux Linus Tovalds (một sinh viên Phần lan) đƣa ra nhân (phiên bản đầu tiên) cho hệ điều hành Linux vào tháng 8 năm 1991 trên cơ sở cải tiến một phiên bản UNIX có tên Minix do Giáo sƣ Andrew S. Tanenbaum xây dựng và phổ biến. Nhân Linux tuy nhỏ song là tự đóng gói. Kết hợp với các thành phần trong hệ thống GNU, hệ điều hành Linux đã đƣợc hình thành. Và cũng từ thời điểm đó, theo tƣ tƣởng GNU, hàng nghìn, hàng vạn chuyên gia trên toàn thế giới (những ngƣời này hình thành nên cộng đồng Linux) đã tham gia vào tiến trình phát triển Linux và vì vậy Linux ngày càng đáp ứng nhu cầu của ngƣời dùng. Năm 1991, Linus Torvald viêt thêm phiên bản nhân v0.01 (kernel) đầu tiên của Linux đƣa lên các BBS, nhóm ngƣời dùng để mọi ngƣời cùng sử dụng và phát triển. Năm 1994, hệ điều hành Linux phiên bản 1.0 đƣợc chính thức phát hành và ngày càng nhận đƣợc sự quan tâm của ngƣời dùng. Năm 1995, nhân 1.2 đƣợc phổ biến. Phiên bản này đã hỗ trợ một phạm vi rộng và phong phú phần cứng, bao gồm cả kiến trúc tuyến phần cứng PCI mới Năm 1996, nhân Linux 2.0 đƣợc phổ biến. Phân bản này đã hỗ trợ kiến trúc phức hợp, bao gồm cả cổng Alpha 64-bit đầy đủ, và hỗ trợ kiến trúc đa bộ xử lý. Phân phối nhân Linux 2.0 cũng thi hành đƣợc trên bộ xử lý Motorola 68000 và kiến trúc SPARC của SUN. Các thi hành của Linux dựa trên vi nhân GNU Mach cũng chạy trên PC và PowerMac. Năm 1999, phiên bản nhân v2.2 mang nhiều đặc tính ƣu việt và giúp cho Linux bắt đầu trở thành đối thủ cạnh tranh đáng kể của MS Windows trên môi trƣờng server. Năm 2000 phiên bản nhân v2.4 hỗ trợ nhiều thiết bị mới (đa xử lý tới 32 chip, USB, RAM trên 2GB ) bắt đầu đặt chân vào thị trƣờng máy chủ cao cấp. Các phiên bản của Linux đƣợc xác định bởi hệ thống chỉ số theo một số mức (hai hoặc ba mức). Trong đó đã quy ƣớc rằng với các chỉ số từ mức thứ hai trở đi, nếu là số chẵn thì dòng nhân đó đã khá ổn định và tƣơng đối hoàn thiện, còn nếu là số lẻ thì dòng nhân đó vẫn đang đƣợc phát triển tiếp. 1.1.2. Vấn đề bản quyền Về lý thuyết, mọi ngƣời có thể khởi tạo một hệ thống Linux bằng cách tiếp nhận bản mới nhất các thành phần cần thiết từ các site ftp và biên dịch chúng. Trong thời kỳ đầu tiên, ngƣời dùng Linux phải tiến hành toàn bộ các thao tác này và vì vậy công việc là khá vất vả. Tuy nhiên, do có sự tham gia đông đảo của các cá nhân và nhóm phát triển Linux, đã tiến hành thực hiện nhiều giải pháp nhằm làm cho công việc khởi tạo hệ thống đỡ vất vả. Một trong những giải pháp điển hình nhất là cung cấp tập các gói chƣơng trình đã tiền dịch, chuẩn hóa. Những tập hợp nhƣ vậy hay những bản phân phối là lớn hơn nhiều so với hệ thống Linux cơ sở. Chúng thƣờng bao gồm các tiện ích bổ sung cho khởi tạo hệ thống, các thƣ viện quản lý, cũng nhƣ nhiều gói đã đƣợc tiền dịch, sẵn sàng khởi tạo của nhiều bộ công cụ UNIX dùng chung, chẳng hạn nhƣ phục vụ tin, trình duyệt web, công cụ xử lý, soạn thảo văn bản và thậm chí các trò chơi. Cách thức phân phối ban đầu rất đơn giản song ngày càng đƣợc nâng cấp và hoàn thiện bằng phƣơng tiện quản lý gói tiên tiến. Các bản phân phối ngày nay bao gồm các cơ sở dữ liệu tiến hóa gói, cho phép các gói dễ dàng đƣợc khởi tạo, nâng cấp và loại bỏ. Nhà phân phối đầu tiên thực hiện theo phƣơng châm này là Slakware, và chính họ là những chuyển biến mạnh mẽ trong cộng đồng Linux đối với công việc quản lý gói khởi tạo - 6 -
- Linux. Tiện ích quản lý gói RPM (RedHat Package Manager) của công ty RedHat là một trong những phƣơng tiện điển hình. Nhân Linux là phần mềm tự do đƣợc phân phối theo Giấy phép sở hữu công cộng phần mềm GNU GPL. 1.1.3. Các thành phần tích hợp Hệ điều hành Linux Linux sử dụng rất nhiều thành phần từ Dự án phần mềm tự do GNU, từ hệ điều hành BSDcủa Đại học Berkeley và từ hệ thống X-Window của MIT. Thƣ viện hệ thống chính của Linux đƣợc bắt nguồn từ Dự án GNU, sau đó đƣợc rất nhiều ngƣời trong cộng đồng Linux phát triển tiếp, những phát triển tiếp theo nhƣ vậy chủ yếu liên quan tới việc giải quyết các vấn đề nhƣ thiếu vắng địa chỉ (lỗi trang), thiếu hiệu quả và gỡ rối. Một số thành phần khác của Dự án GNU, chẳng hạn nhƣ trình biên dịch GNU C (gcc), vốn là chất lƣợng cao nên đƣợc sử dụng nguyên xy trong Linux. Các tool quản lý mạng đƣợc bắt nguồn từ mã 4.3BSD song sau đó đã đƣợc cộng đồng Linux phát triển, chẳng hạn nhƣ thƣ viện toán học đồng xử lý dấu chấm động Intel và các trình điều khiển thiết bị phần cứng âm thanh PC. Các tool quản lý mạng này sau đó lại đƣợc bổ sung vào hệ thống BSD. Hệ thống Linux đƣợc duy trì gần nhƣ bởi một mạng lƣới không chặt chẽ các nhà phát triển phần mềm cộng tác với nhau qua Internet, mạng lƣới này gồm các nhóm nhỏ và cá nhân chịu trách nhiệm duy trì tính toàn vẹn của từng thành phần. Một lƣợng nhỏ các site phân cấp ftp Internat công cộng đã đóng vai trò nhà kho theo chuẩn de facto để chứa các thành phần này. Tài liệu Chuẩn phân cấp hệ thống file (File System Hierarchy Standard) đƣợc cộng đồng Linux duy trì nhằm giữ tính tƣơng thích khắc phục đƣợc sự khác biệt rất lớn giữa các thành phần hệ thống. 1.1.4. Một số đặc điểm chính của Linux Dƣới đây trình bày một số đặc điểm chính của của hệ điều hành Linux hiện tại: Linux tƣơng thích với nhiều hệ điều hành nhƣ DOS, MicroSoft Windows : Cho phép cài đặt Linux cùng với các hệ điều hành khác trên cùng một ổ cứng. Linux có thể truy nhập đến các file của các hệ điều hành cùng một ổ đĩa. Linux cho phép chạy mô phỏng các chƣơng trình thuộc các hệ điều hành khác. Do giữ đƣợc chuẩn của UNIX nên sự chuyển đổi giữa Linux và các hệ UNIX khác là dễ dàng. Linux là một hệ điều hành UNIX tiêu biểu với các đặc trƣng là đa ngƣời dùng, đa chƣơng trình và đa xử lý. Linux có giao diện đồ hoạ (GUI) thừa hƣởng từ hệ thống X-Window. Linux hỗ trợ nhiều giao thức mạng, bắt nguồn và phát triển từ dòng BSD. Thêm vào đó, Linux còn hỗ trợ tính toán thời gian thực. Linux khá mạnh và chạy rất nhanh ngay cả khi nhiều tiến trình hoặc nhiều cửa sổ. Linux đƣợc cài đặt trên nhiều chủng loại máy tính khác nhau nhƣ PC, Mini và việc cài đặt khá thuận lợi. Tuy nhiên, hiện nay chƣa xuất hiện Linux trên máy tính lớn (mainframe). Linux ngày càng đƣợc hỗ trợ bởi các phần mềm ứng dụng bổ sung nhƣ soạn thảo, quản lý mạng, quản trị cơ sở dữ liệu, bảng tính Linux hỗ trợ tốt cho tính toán song song và máy tính cụm (PC-cluster) là một hƣớng nghiên cứu triển khai ứng dụng nhiều triển vọng hiện nay. Là một hệ điều hành với mã nguồn mở, đƣợc phát triển qua cộng đồng nguồn mở (bao gồm cả Free Software Foundation) nên Linux phát triển nhanh. Linux là một trong một số ít các hệ điều hành đƣợc quan tâm nhiều nhất trên thế giới hiện nay. - 7 -
- Linux là một hệ điều hành hỗ trợ đa ngôn ngữ một cách toàn diện nhất. Do Linux cho phép hỗ trợ các bộ mã chuẩn từ 16 bit trở lên (trong đó có các bộ mã ISO10646, Unicode) cho nên việc bản địa hóa trên Linux là triệt để nhất trong các hệ điều hành. Tuy nhiên cũng tồn tại một số khó khăn làm cho Linux chƣa thực sự trở thành một hệ điều hành phổ dụng, dƣới đây là một số khó khăn điển hình: Tuy đã có công cụ hỗ trợ cài đặt, tuy nhiên, việc cài đặt Linux còn tƣơng đối phức tạp và khó khăn. Khả năng tƣơng thích của Linux với một số loại thiết bị phần cứng còn thấp do chƣa có các trình điều khiển cho nhiều thiết bị, Phần mềm ứng dụng chạy trên nền Linux tuy đã phong phú song so với một số hệ điều hành khác, đặc biệt là khi so sánh với MS Windows, thì vẫn còn có khoảng cách. Với sự hỗ trợ của nhiều công ty tin học hàng đầu thế giới (IBM, SUN, HP ) và sự tham gia phát triển của hàng vạn chuyên gia trên toàn thế giới thuộc cộng đồng Linux, các khó khăn của Linux chắc chắn sẽ nhanh chóng đƣợc khắc phục. 1.2. Các thành phần cơ bản của Linux Hệ thống Linux, đƣợc thi hành nhƣ một hệ điều hành UNIX truyền thống, gồm shell và ba thành phần (đã dạng mã chƣơng trình) sau đây: Nhân hệ điều hành chịu trách nhiệm duy trì các đối tƣợng trừu tƣợng quan trọng của hệ điều hành, bao gồm bộ nhớ ảo và tiến trình. Các mô đun chƣơng trình trong nhân đƣợc đặc quyền trong hệ thống, bao gồm đặc quyền thƣờng trực ở bộ nhớ trong. Thƣ viện hệ thống xác định một tập chuẩn các hàm để các ứng dụng tƣơng tác với nhân, và thi hành nhiều chức năng của hệ thống nhƣng không cần có các đặc quyền của mô đun thuộc nhân. Một hệ thống con điển hình đƣợc thi hành dựa trên thƣ viên hệ thống là hệ thống file Linux. Tiện ích hệ thống là các chƣơng trình thi hành các nhiệm vụ quản lý riêng rẽ, chuyên biệt. Một số tiện ích hệ thống đƣợc gọi ra chỉ một lần để khởi động và cấu hình phƣơng tiện hệ thống, một số tiện ích khác, theo thuật ngữ UNIX đƣợc gọi là trình chạy ngầm (daemon), có thể chạy một cách thƣờng xuyên (thƣờng theo chu kỳ), điều khiển các bài toán nhƣ hƣởng ứng các kết nối mạng mới đến, tiếp nhận yêu cầu logon, hoặc cập nhật các file log. Tiện ích (hay lệnh) có sẵn trong hệ điều hành (dƣới đây tiện ích đƣợc coi là lệnh thƣờng trực). Nội dung chính yếu của tài liệu này giới thiệu chi tiết về một số lệnh thông dụng nhất của Linux. Hệ thống file sẽ đƣợc giới thiệu trong chƣơng 3. Trong các chƣơng sau có đề cập tới nhiều nội dung liên quan đến nhân và shell, song dƣới đây là một số nét sơ bộ về chúng. 1.2.1. Nhân hệ thống (kernel) Nhân (còn đƣợc gọi là hệ lõi) của Linux, là một bộ các môdun chƣơng trình có vai trò điều khiển các thành phần của máy tính, phân phối các tài nguyên cho ngƣời dùng (các tiến trình ngƣời dùng). Nhân chính là cầu nối giữa chƣơng trình ứng dụng với phần cứng. Ngƣời dùng sử dụng bàn phím gõ nội dung yêu cầu của mình và yêu cầu đó đƣợc nhân gửi tới shell: Shell phân tích lệnh và gọi các chƣơng trình tƣơng ứng với lệnh để thực hiện. Một trong những chức năng quan trọng nhất của nhân là giải quyết bài toán lập lịch, tức là hệ thống cần phân chia CPU cho nhiều tiến trình hiện thời cùng tồn tại. Đối với Linux, số lƣợng tiến trình có thể lên tới con số hàng nghìn. Với số lƣợng tiến trình đồng thời nhiều nhƣ vậy, các thuật toán lập lịch cần phải đủ hiệu quả: Linux thƣờng lập lịch theo chế độ Round Robin (RR) thực hiện việc luân chuyển CPU theo lƣợng tử thời gian. - 8 -
- Thành phần quan trọng thứ hai trong nhân là hệ thống các môđun chƣơng trình (đƣợc gọi là lời gọi hệ thống) làm việc với hệ thống file. Linux có hai cách thức làm việc với các file: làm việc theo byte (ký tự) và làm việc theo khối. Một đặc điểm đáng chú ý là file trong Linux có thể đƣợc nhiều ngƣời cùng truy nhập tới nên các lời gọi hệ thống làm việc với file cần đảm bảo việc file đƣợc truy nhập theo quyền và đƣợc chia xẻ cho ngƣời dùng. 1.2.2. Hệ vỏ (shell) Ngƣời dùng mong muốn máy tính thực hiện một công việc nào đó thì cần gõ lệnh thể hiện yêu cầu của mình để hệ thống đáp ứng yêu cầu đó. Shell là bộ dịch lệnh và hoạt động nhƣ một kết nối trung gian giữa nhân với ngƣời dùng: Shell nhận dòng lệnh do ngƣời dùng đƣa vào; và từ dòng lệnh nói trên, nhân tách ra các bộ phận để nhận đƣợc một hay một số lệnh tƣơng ứng với các đoạn văn bản có trong dòng lệnh. Một lệnh bao gồm tên lệnh và tham số: từ đầu tiên là tên lệnh, các từ tiếp theo (nếu có) là các tham số. Tiếp theo, shell sử dụng nhân để khởi sinh một tiến trình mới (khởi tạo tiến trình) và sau đó, shell chờ đợi tiến trình con này tiến hành, hoàn thiện và kết thúc. Khi shell sẵn sàng tiếp nhận dòng lệnh của ngƣời dùng, một dấu nhắc shell (còn gọi là dấu nhắc nhập lệnh) xuất hiện trên màn hình. Linux có hai loại shell phổ biến là: C-shell (dấu nhắc %), Bourne-shell (dấu nhắc $) và một số shell phát triển từ các shell nói trên (chẳng hạn, TCshell - tcsh với dấu nhắc ngầm định > phát triển từ C-shell và GNU Bourne - bash với dấu nhắc bash # phát triển từ Bourne- shell). Dấu mời phân biệt shell nói trên không phải hoàn toàn rõ ràng do Linux cho phép ngƣời dùng thay đổi lại dấu nhắc shell nhờ việc thay giá trị các biến môi trƣờng PS1 và PS2. Trong tài liệu này, chúng ta sử dụng ký hiệu "hàng rào #" để biểu thị dấu nhắc shell. C-shell có tên gọi nhƣ vậy là do cách viết lệnh và chƣơng trình lệnh Linux tựa nhƣ ngôn ngữ C. Bourne-shell mang tên tác giả của nó là Steven Bourne. Một số lệnh trong C- shell (chẳng hạn lệnh alias) không còn có trong Bourne-shell và vì vậy để nhận biết hệ thống đang làm việc với shell nào, chúng ta gõ lệnh: # alias Nếu một danh sách xuất hiện thì shell đang sử dụng là C-shell; ngƣợc lại, nếu xuất hiện thông báo "Command not found" thì shell đó là Bourne-shell. Lệnh đƣợc chia thành 3 loại lệnh: Lệnh thƣờng trực (có sẵn của Linux). Tuyệt đại đa số lệnh đƣợc giới thiệu trong tài liệu này là lệnh thƣờng trực. Chúng bao gồm các lệnh đƣợc chứa sẵn trong shell và các lệnh thƣờng trực khác. File chƣơng trình ngôn ngữ máy: chẳng hạn, ngƣời dùng viết trình trên ngôn ngữ C qua bộ dịch gcc (bao gồm cả trình kết nối link) để tạo ra một chƣơng trình trên ngôn ngữ máy. File chƣơng trình shell (Shell Scrip). Khi kết thúc một dòng lệnh cần gõ phím ENTER để shell phân tích và thực hiện lệnh. 1.3. Sử dụng lệnh trong Linux Nhƣ đã giới thiệu ở phần trên, Linux là một hệ điều hành đa ngƣời dùng, đa nhiệm, đƣợc phát triển bởi hàng nghìn chuyên gia tin học trên toàn thế giới nên hệ thống lệnh cũng ngày càng phong phú; đến thời điểm hiện nay Linux có khoảng hơn một nghìn lệnh. Tuy nhiên chỉ có khoảng vài chục lệnh là thông dụng nhất đối với ngƣời dùng. Cũng nhƣ đã nói ở trên, ngƣời dùng làm việc với máy tính thông qua việc sử dụng trạm cuối: ngƣời dùng đƣa yêu cầu của mình bằng cách gõ "lệnh" từ bàn phím và giao cho hệ điều hành xử lý. Khi cài đặt Linux lên máy tính cá nhân thì máy tính cá nhân vừa đóng vai trò trạm cuối, vừa đóng vai trò máy tính xử lý. - 9 -
- 1.3.1. Dạng tổng quát của lệnh Linux Cú pháp lệnh: # [ ] Trong đó: Tên lệnh là một dãy ký tự, không có dấu cách, biểu thị cho một lệnh của Linux hay một chƣơng trình. Ngƣời dùng cần hệ điều hành đáp ứng yêu cầu gì của mình thì phải chọn đúng tên lệnh. Tên lệnh là bắt buộc phải có khi gõ lệnh. Các tham số có thể có hoặc không có, đƣợc viết theo quy định của lệnh mà chúng ta sử dụng, nhằm cung cấp thông tin về các đối tƣợng mà lệnh tác động tới. Ý nghĩa của các dấu [, , ] đƣợc giải thích ở phần quy tắc viết lệnh. Các tham số đƣợc phân ra thành hai loại: tham số khóa (sau đây gọi là "tùy chọn") và tham số vị trí. Tham số vị trí thƣờng là tên file, thƣ mục và thƣờng là các đối tƣợng chịu sự tác động của lệnh. Khi gõ lệnh, tham số vị trí đƣợc thay bằng những đối tƣợng mà ngƣời dùng cần hƣớng tác động tới. Tham số khóa chính là những tham số điều khiển hoạt động của lệnh theo các trƣờng hợp riêng. Trong Linux, tham số khóa thƣờng bắt đầu bởi dấu trừ "-" hoặc hai dấu trừ liên tiếp " ". Một lệnh có thể có một số hoặc rất nhiều tham số khóa. Ví dụ, khi ngƣời dùng gõ lệnh xem thông tin về các file: # ls -l Trong lệnh này: ls : là tên lệnh thực hiện việc đƣa danh sách các tên file/ thƣ mục con trong một thƣ mục, -l : là tham số khóa, cho biết yêu cầu xem đầy đủ thông tin về các đối tƣợng hiện ra. Chú ý, trong tham số khóa chữ cái (chữ "l") phải đi ngay sau dấu trừ "-". Chú ý: Linux (và UNIX nói chung) đƣợc xây dựng trên ngôn ngữ lập trình C, vì vậy khi gõ lệnh phải phân biệt chữ thƣờng với chữ hoa. Ngoại trừ một số ngoại lệ, trong Linux chúng ta thấy phổ biến là: o Các tên lệnh là chữ thƣờng, o Một số tham số khi biểu diễn bởi chữ thƣờng hoặc chữ hoa sẽ có ý nghĩa hoàn toàn khác nhau). o Tên các biến môi trƣờng cũng thƣờng dùng chữ hoa. Linux phân biệt siêu ngƣời dùng (superuser hoặc root) với ngƣời dùng thông thƣờng. Trong tập hợp lệnh của Linux, có một số lệnh cũng nhƣ một số tham số khóa mà chỉ siêu ngƣời dùng mới đƣợc phép sử dụng. Một dòng lệnh có thể có nhiều hơn một lệnh, trong đó lệnh sau đƣợc ngăn cách bởi với lệnh đi ngay trƣớc bằng dấu ";" hoặc dấu "|". Khi gõ lệnh, nếu dòng lệnh quá dài, Linux cho phép ngắt dòng lệnh xuống dòng dƣới bằng cách thêm ký tự báo hiệu chuyển dòng "\" tại cuối dòng. Sau khi ngƣời dùng gõ xong dòng lệnh, shell tiếp nhận dòng lệnh này và phân tích nội dung văn bản của lệnh. Nếu lệnh đƣợc gõ đúng thì nó đƣợc thực hiện; ngƣợc lại, trong trƣờng hợp có sai sót khi gõ lệnh thì shell thông báo về sai sót vàdấu nhắc shell lại hiện ra để chờ lệnh tiếp theo của ngƣời dùng. Về phổ biến, nếu nhƣ sau khi ngƣời dùng gõ lệnh, không thấy thông báo sai sót hiện ra thì có nghĩa lệnh đã đƣợc thực hiện một cách bình thƣờng. - 10 -
- 1.3.2. Các ký hiệu đại diện Khi chúng ta sử dụng các câu lệnh về file và thƣ mục, chúng ta có thể sử dụng các ký tự đặc biệt đƣợc gọi là các ký tự đại diện để xác định tên file, tên thƣ mục.: Ký tự Ý nghĩa * Tƣơng ứng với thứ tự bất kỳ của một hay nhiều ký tự ? Tƣơng ứng với một ký tự bất kỳ [] Tƣơng ứng với một trong những ký tự trong ngoặc hoặc giới hạn Ví dụ: Jo* : Các file bắt đầu với Jo Jo*y : Các file bắt đầu với Jo và kết thúc với y Ut*l*s.c : Các file bắt đầu với Ut, chứa một ký tự l và kết thúc với s.c ?.h : Các file bắt đầu với một ký tự đơn, theo sau bởi .h Doc[0-9].txt : Các file có tên Doc0.txt, Doc1.txt .Doc9.txt Doc0[A-Z].txt : Các file có tên Doc0A.txt, Doc0B.txt Doc0Z.txt Các ký hiệu liên quan đến cú pháp câu lệnh đƣợc sử dụng bởi phần lớn các câu lệnh. Chúng cung cấp một cách thuận tiện và đồng nhất để xác định các mẫu phù hợp. Chúng tƣơng tự với các ký tự đại diện, nhƣng chúng mạnh hơn rất nhiều. Chúng cung cấp một phạm vi rộng các mẫu lựa chọn. Ký tự Ý nghĩa . Tƣơng ứng với một ký tự đơn bất kỳ ngoại trừ dòng mới * Tƣơng ứng với không hoặc nhiều hơn các ký tự đứng trƣớc ^ Tƣơng ứng với bắt đầu của một dòng $ Tƣơng ứng với kết thúc một dòng \ Tƣơng ứng với kết thúc một từ [] Tƣơng ứng với một trong các ký tự bên trong hoặc một dãy các ký tự [^] Tƣơng ứng với các ký tự bất kỳ không nằm trong ngoặc \ Lấy ký hiệu theo sau dấu gạch ngƣợc 1.3.3. Trợ giúp lệnh Do Linux là một hệ điều hành rất phức tạp với hàng nghìn lệnh và mỗi lệnh lại có thể có tới vài hoặc vài chục tình huống sử dụng do chúng cho phép có nhiều tùy chọn lệnh. Để trợ giúp cách sử dụng các câu lệnh, Linux cho phép ngƣời dùng sử dụng cách thức gọi trang Man để có đƣợc các thông tin đầy đủ giới thiệu nội dung các lệnh. Cú pháp lệnh: # man CÂU HỎI VÀ BÀI TẬP 1. Tìm hiểu về các phiên bản phát triển của Linux. 2. Trình bày nguyên tắc thực hiện lệnh trên Linux 3. Thực hiện cài đặt hệ điều hành Linux cụ thể trên máy tính 4. Nghiên cứu các thao tác giao tiếp với Linux; so sánh các thao tác với hệ điều hành Windows. - 11 -
- Chƣơng 2. THAO TÁC VỚI HỆ THỐNG 2.1. Tiến trình khởi động Linux Một trong những cách thức khởi động Linux phổ biến nhất là cách thức do chƣơng trình LILO (LInux LOader) thực hiện. Chƣơng trình LILO đƣợc nạp lên đĩa của máy tính khi cài đặt hệ điều hành Linux. LILO đƣợc nạp vào Master Boot Record của đĩa cứng hoặc vào Boot Sector tại phân vùng khởi động (trên đĩa cứng hoặc đĩa mềm). Giả sử máy tính của chúng ta đã cài đặt Linux và sử dụng LILO để khởi động hệ điều hành. LILO thích hợp với việc trên máy tính đƣợc cài đặt một số hệ điều hành khác nhau và theo đó, LILO còn cho phép ngƣời dùng chọn lựa hệ điều hành để khởi động. Giai đoạn khởi động Linux tùy thuộc vào cấu hình LILO đã đƣợc lựa chọn trong tiến trình cài đặt Linux. Trong tình huống đơn giản nhất, Linux đƣợc khởi động từ đĩa cứng hay đĩa mềm khởi động. Tiến trình khởi động Linux có thể đƣợc mô tả theo sơ đồ sau: LILO Kernel init Theo sơ đồ này, LILO đƣợc tải vào máy để thực hiện mà việc đầu tiên là đƣa nhân vào bộ nhớ trong và sau đó tải chƣơng trình init để thực hiện việc khởi động Linux. Nếu cài đặt nhiều phiên bản Linux hay cài Linux cùng các hệ điều hành khác (trong các trƣờng hợp nhƣ thế, mỗi phiên bản Linux hoặc hệ điều hành khác đƣợc gán nhãn - label để phân biệt). Khi đó ta nhập nhãn của một trong những hệ điều hành hiện có trên máy trên dòng thông báo LILO boot: Ví dụ: LILO boot: linux Sau khi Linux đã đƣợc chọn để khởi động, trình init thực hiện, chúng ta sẽ thấy một khoảng vài chục dòng thông báo cho biết hệ thống phần cứng đƣợc Linux nhận diện và thiết lập cấu hình cùng với tất cả trình điều khiển phần mềm đƣợc nạp khi khởi động. Tại thời điểm khởi động hệ thống init thực hiện vai trò đầu tiên của mình là chạy chƣơng trình shell trong file /etc/inittab và các dòng thông báo trên đây chính là kết quả của việc chạy chƣơng trình shell đó. Sau khi chƣơng trình shell trên đƣợc thực hiện xong, bắt đầu quá trình ngƣời dùng đăng nhập (login) vào hệ thống. 2.2. Thủ tục đăng nhập và các lệnh thoát khỏi hệ thống 2.2.1. Đăng nhập Sau khi hệ thống Linux khởi động xong, trên màn hình xuất hiện dấu nhắc đăng nhập. Tại dấu nhắc đăng nhập, ta nhập tên đăng nhập, kèm theo một mật khẩu đăng nhập. May1 login: root Password: Sau khi đăng nhập thành công, dấu nhắc shell xuất hiện (#) mời ngƣời dùng thực hiện các thao tác tiếp theo. Last login: Fri Oct 27 14:16:09 on tty2 Root[may1 /root]# 2.2.2. Ra khỏi hệ thống Có rất nhiều cách cho phép thoát khỏi hệ thống, ở đây chúng ta xem xét một số cách thông dụng nhất. - 12 -
- Dùng tổ hợp phím Ctrl + Alt + Del: Đây là cách đơn giản nhất để đảm bảo thoát khỏi hệ điều hành Linux. Nếu đang làm việc trong môi trƣờng X Window, cần nhấn tổ hợp phím Ctrl+Alt+BackSpace trƣớc. Dùng lệnh shutdown: shutdown [tùy-chọn] [cảnh-báo] Lệnh này cho phép dừng tất cả các dịch vụ đang chạy trên hệ thống. Các tùy chọn: -k : Không thực sự shutdown mà chỉ cảnh báo. -r : Khởi động lại ngay sau khi shutdown. -h : Tắt máy thực sự sau khi shutdown. -f : Khởi động lại nhanh và bỏ qua việc kiểm tra đĩa. -F : Khởi động lại và thực hiện việc kiểm tra đĩa. -c : Bỏ qua không chạy lệnh shutdown. -t s -giây : Chờ khoảng thời gian số-giây Hai tham số vị trí còn lại: time : Đặt thời điểm shutdown. cảnh-báo : Cảnh báo đến tất cả ngƣời dùng trên hệ thống. Dùng lệnh halt: halt [tùy-chọn] Lệnh này tắt hẳn máy. Các tuỳ chọn: -w : không thực sự tắt máy nhƣng vẫn ghi các thông tin lên file /var/log/wtmp -d : không ghi thông tin lên file /var/log/wtmp. -n: có ý nghĩa tƣơng tự nhƣ –d song không tiến hành việc đồng bộ hóa. -f : thực hiện tắt máy ngay mà không thực hiện lần lƣợt việc dừng các dịch vụ có trên hệ thống. -i : chỉ thực hiện dừng tất cả các dịch vụ mạng trƣớc khi tắt máy. Chú ý: Trƣớc khi thực hiện tắt máy, cần phải lƣu lại dữ liệu trƣớc để tránh bị mất Có thể sử dụng lệnh exit để trở về dấu nhắc đăng nhập hoặc kết thúc phiên làm việc bằng lệnh logout. 2.2.3. Khởi động lại hệ thống Ngoài việc thoát khỏi hệ thống nhờ các cách thức trên đây, khi cần thiết có thể khởi động lại hệ thống nhờ lệnh reboot. Cú pháp lệnh: reboot [tùy-chọn] Lệnh này cho phép khởi động lại hệ thống. Nói chung thì chỉ siêu ngƣời dùng mới đƣợc phép sử dụng lệnh reboot, tuy nhiên, nếu hệ thống chỉ có duy nhất một ngƣời dùng đang làm việc thì lệnh reboot vẫn đƣợc thực hiện song hệ thống đòi hỏi việc xác nhận mật khẩu. Các tùy chọn của lệnh reboot (là -w, -d, -n, -f, -i) có ý nghĩa tƣơng tự nhƣ trong lệnh halt. 2.2.4. Khởi động vào chế độ đồ hoạ Linux cho phép nhiều chế độ khởi động, những chế độ này đƣợc liệt kê trong file /etc/inittab. Dƣới đây là nội dung của file này: # inittab This file describes how the INIT process should set up # the system in a certain run-level. # - 13 -
- # Author: Miquel van Smoorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes # # Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 – unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 # Things to run in every runlevel. ud::once:/sbin/update # Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now #ca::ctrlaltdel:/bin/echo "You can't do that" # When our UPS tells us power has failed, assume we have a few minutes # of power left. Schedule a shutdown for 2 minutes from now. # This does, of course, assume you have powerd installed and your # UPS connected and working correctly. pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" # If power was restored before the shutdown kicked in, cancel it. pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 #3:2345:respawn:/sbin/mingetty tty3 #4:2345:respawn:/sbin/mingetty tty4 #5:2345:respawn:/sbin/mingetty tty5 #6:2345:respawn:/sbin/mingetty tty6 # Run xdm in runlevel 5 # xdm is now a separate service x:5:respawn:/etc/X11/prefdm –nodaemon Trong đó chế độ khởi động số 3 là chế độ khởi động vào chế độ Text, và chế độ 5 là khởi động vào chế độ đồ hoạ. Nhƣ vậy để cho máy tính khởi động vào chế độ đồ hoạ ta sửa lại dòng cấu hình id:3:initdefault: thành id:5:initdefault: - 14 -
- 2.3. Một số liên quan đến hệ thống 2.3.1. Lệnh thay đổi mật khẩu Cú pháp lệnh: passwd [tùy-chọn] [tên-người-dùng] Các tùy chọn: -k : Đòi hỏi phải gõ lại mật khẩu cũ trƣớc khi thay đổi mật khẩu mới. -f : Không cần kiểm tra mật khẩu cũ. (Chỉ supervisor mới có quyền) -l : Khóa một tài khoản ngƣời dùng. (Chỉ supervisor mới có quyền) -stdin : việc nhập mật khẩu ngƣời dùng chỉ đƣợc tiến hành từ thiết bị vào chuẩn không thể tiến hành từ đƣờng dẫn (pipe). Nếu không có tham số này cho phép nhập mật khẩu cả từ thiết bị vào chuẩn hoặc từ đƣờng dẫn. -u : Mở khóa một tài khoản. (Chỉ supervisor mới có quyền) -d : Xóa bỏ mật khẩu của ngƣời dùng. (Chỉ supervisor mới có quyền) -S : hiển thị thông tin ngắn gọn về trạng thái mật khẩu của ngƣời dùng đƣợc đƣa ra. (Chỉ supervisor mới có quyền) Nếu tên-ngƣời-dùng không có trong lệnh thì ngầm định là chính ngƣời dùng đã gõ lệnh này. 2.3.2. Lệnh xem, thiết lập ngày, giờ Lệnh xem, thiết lập ngày Cú pháp lệnh: date [-tùy_chọn] [ngày giờ] Lệnh xem, thiết lập giờ Cú pháp lệnh: time [-tùy_chọn] [+định-dạng] Lệnh xem lịch Cú pháp lệnh: cal [tùy-chọn] [ [ ]] 2.3.3. Lệnh kiểm tra những ai đang sử sụng hệ thống Cú pháp lệnh: who Để kiểm tra định danh của ngƣời đang sử dụng hiện thời, dùng lệnh: who am i 2.3.4. Thay đổi nội dung dấu nhắc shell Trong Linux có hai loại dấu nhắc: dấu nhắc cấp một (dấu nhắc shell) xuất hiện khi nhập lệnh và dấu nhắc cấp hai (dấu nhắc nhập liệu) xuất hiện khi lệnh cần có dữ liệu đƣợc nhập từ bàn phím và tƣơng ứng với hai biến nhắc tên là PS1 và PS2. PS1 là biến hệ thống tƣơng ứng với dấu nhắc cấp 1: Giá trị của PS1 chính là nội dung hiển thị của dấu nhắc shell. Để nhận biết thông tin hệ thống hiện tại, một nhu cầu đặt ra là cần thay đổi giá trị của các biến hệ thống PS1 và PS2. Linux cho phép thay đổi giá trị của biến hệ thống PS1 bằng lệnh gán trị mới cho nó. Lệnh này có dạng: # PS1=' ' Năm (5) ký tự đầu tiên của lệnh gán phải đƣợc viết liên tiếp nhau. Dãy ký tự nằm giữa cặp hai dấu nháy đơn (có thể sử dụng cặp hai dấu kép) và không đƣợc phép chứa dấu nháy. Dãy ký tự này bao gồm các cặp ký tự điều khiển và các ký tự khác, cho phép có thể có dấu cách. Cặp ký tự điều khiển gồm hai ký tự, ký tự đầu tiên là dấu sổ xuôi "\" còn ký tự thứ hai nhận một trong các trƣờng hợp liệt kê trong bảng dƣới đây. Cặp ký tự điều khiển Ý nghĩa \! Hiển thị thứ tự của lệnh trong lịch sử \# Hiển thị thứ tự của lệnh \$ Hiển thị dấu $. Đối với superuser thì hiển thị dấu # - 15 -
- Cặp ký tự điều khiển Ý nghĩa \\ Hiển thị dấu sổ (\) \d Hiển thị ngày hiện tại \h Hiển thị tên máy (hostname) \n Ký hiệu xuống dòng \s Hiển thị tên hệ shell \t Hiển thị giờ hiện tại \u Hiển thị tên ngƣời dùng \W Hiển thị tên thực sự của thƣ mục hiện thời \w Hiển thị tên đầy đủ của thƣ mục hiện thời 2.3.5. Lệnh gọi ngôn ngữ tính toán số học Linux cung cấp một ngôn ngữ tính toán với độ chính xác tùy ý thông qua lệnh bc. Khi yêu cầu lệnh này, ngƣời dùng đƣợc cung cấp một ngôn ngữ tính toán (và cho phép lập trình tính toán có dạng ngôn ngữ lập trình C) hoạt động theo thông dịch. Trong ngôn ngữ lập trình đƣợc cung cấp (tạm thời gọi là ngôn ngữ bc), tồn tại rất nhiều công cụ hỗ trợ tính toán và lập trình tính toán: kiểu phép toán số học phong phú, phép toán so sánh, một số hàm chuẩn, biến chuẩn, cấu trúc điều khiển, cách thức định nghĩa hàm, cách thức thay đổi độ chính xác, đặt lời chú thích Chỉ cần sử dụng một phần nhỏ tác động của lệnh bc, chúng ta đã có một "máy tính số bấm tay" hiệu quả. Cú pháp lệnh: bc [tùy-chọn] [file ] Các tuỳ chọn: -l, mathlib : phép tính theo chuẩn thƣ viện toán học -w, warn : thực hiện phép tính không tuân theo chuẩn POSIX -s, standard : phép tính chính xác theo chuẩn của ngôn ngữ POSIX -q, quiet : không hiện ra lời giới thiệu về phần mềm GNU CÂU HỎI VÀ BÀI TẬP 1. Thực hiện các thao tác đăng nhập, thoát khỏi hệ thống trên hệ điều hành Linux 2. Thực hiện các thao tác liên quan đến hệ thống Linux 3. Thực hiện các thao tác sử dụng lệnh bc để tính toán một bài toán số học đơn giản. - 16 -
- Chƣơng 3. HỆ THỐNG FILE 3.1 Tổng quan về hệ thống file 3.1.1. Một số khái niệm File là một tập hợp dữ liệu có tổ chức đƣợc hệ điều hành quản lý theo yêu cầu của ngƣời dùng. Cách tổ chức dữ liệu trong file thuộc về chủ của nó là ngƣời đã tạo ra file. Hệ điều hành đảm bảo các chức năng liên quan đến file nên ngƣời dùng không cần biết file của mình lƣu ở vùng nào trên đĩa từ, bằng cách nào đọc/ghi lên các vùng của đĩa từ mà vẫn thực hiện đƣợc yêu cầu tìm kiếm, xử lý lên các file. Hệ điều hành quản lý các file theo tên gọi của file (tên file) và một số thuộc tính liên quan đến file. Để làm việc đƣợc với các file, hệ điều hành không chỉ quản lý nội dung file mà còn phải quản lý các thông tin liên quan đến các file. Thƣ mục (directory) là đối tƣợng đƣợc dùng để chứa thông tin về các file (thƣ mục chứa các file). Các thƣ mục cũng đƣợc hệ điều hành quản lý trên thiết bị lƣu trữ ngoài và vì vậy, theo nghĩa này, thƣ mục cũng đƣợc coi là file song trong một số trƣờng hợp để phân biệt với "file" thƣ mục, chúng ta dùng thuật ngữ file thông thường. Khác với file thông thƣờng, hệ điều hành lại quan tâm đến nội dung của thƣ mục. Một số nội dung sau đây liên quan đến tên file (bao gồm cả tên thƣ mục): Tên file trong Linux có thể dài tới 256 ký tự, bao gồm các chữ cái, chữ số, dấu gạch nối, gạch chân, dấu chấm. Nếu trong tên file có nhiều dấu chấm "." thì xâu con của tên file từ dấu chấm cuối cùng đƣợc gọi là phần mở rộng của tên file Có phân biệt chữ hoa và chữ thƣờng đối với tên thƣ mục/file Nếu trong tên thƣ mục/file có chứa khoảng trống, sẽ phải đặt tên thƣ mục/file vào trong cặp dấu nháy kép để sử dụng thƣ mục/file đó. Một số ký tự sau không đƣợc sử dụng trong tên thƣ mục/file: !, *, $, &, # Khi sử dụng chƣơng trình mc (Midnight Commander), việc hiển thị tên file sẽ bổ sung một ký tự theo nghĩa: dấu "*" cho file khả thi trong Linux, dấu "~" cho file sao lƣu, dấu "." cho file ẩn, dấu "@" cho file liên kết Tập hợp tất cả các file có trong hệ điều hành đƣợc gọi là hệ thống file là một hệ thống thống nhất. Hệ thống file có cấu trúc hình cây, đƣợc xuất phát từ một thƣ mục gốc (ký hiệu là "/") và cho phép tạo ra thƣ mục con trong một thƣ mục bất kỳ. Thông thƣờng, khi khởi tạo Linux đã có ngay hệ thống file của nó. /(root) sbin usr dev var etc home sbin bin lib man User01 User02 Để chỉ một file hay một thƣ mục, chúng ta cần đƣa ra một đƣờng dẫn. Ví dụ để xác định file user01, chúng ta viết nhƣ sau: /home/user01 Đƣờng dẫn file xác định từ thƣ mục gốc đƣợc biết với tên gọi là đƣờng dẫn tuyệt đối sẽ rất khó khăn cho ngƣời dùng khi thực hiện gõ lệnh. Vì vậy, Linux (cũng nhƣ nhiều hệ điều hành khác) sử dụng khái niệm thƣ mục hiện thời (là một thƣ mục trong hệ thống file mà hiện thời "ngƣời dùng đang ở đó") của mỗi ngƣời dùng làm việc trong hệ thống. Qua thƣ mục hiện thời, Linux cho phép ngƣời dùng chỉ một file trong lệnh ngắn gọn hơn nhiều. Đƣờng dẫn đƣợc xác định qua thƣ mục hiện thời đƣợc gọi là đƣờng dẫn tƣơng đối. - 17 -
- Khi một ngƣời dùng đăng nhập vào hệ thống, Linux luôn chuyển ngƣời dùng vào thƣ mục riêng, và tại thời điểm đó thƣ mục riêng là thƣ mục hiện thời của ngƣời dùng. Thƣ mục riêng của siêu ngƣời dùng là /root, thƣ mục riêng của ngƣời dùng có tên là user01 là /home/user1 Linux cho phép dùng lệnh cd để chuyển sang thƣ mục khác (lấy thƣ mục khác làm thƣ mục hiện thời). Hai dấu chấm " " đƣợc dùng để chỉ thƣ mục ngay trên thƣ mục hiện thời (cha của thƣ mục hiện thời). Linux còn cho phép ghép một hệ thống file trên một thiết bị nhớ (đĩa mềm, vùng đĩa cứng chƣa đƣợc đƣa vào hệ thống file) thành một thƣ mục con trong hệ thống file của hệ thống bằng lệnh mount. Các hệ thống file đƣợc ghép thuộc vào các kiểu khác nhau. 3.1.2. Sơ bộ kiến trúc nội tại của hệ thống file Trên đĩa từ, hệ thống file đƣợc coi là dãy tuần tự các khối lôgic mỗi khối chứa hoặc 512B hoặc 1024B hoặc bội của 512B là cố định trong một hệ thống file. Trong hệ thống file, các khối dữ liệu đƣợc địa chỉ hóa bằng cách đánh chỉ số liên tiếp, mỗi địa chỉ đƣợc chứa trong 4 byte (32 bit). Cấu trúc nội tại của hệ thống file bao gồm 4 thành phần kế tiếp nhau: Boot block (dùng để khởi động hệ thống), Siêu khối (Super block), Danh sách inode và Vùng dữ liệu. Siêu khối Siêu khối chứa nhiều thông tin liên quan đến trạng thái của hệ thống file. Trong siêu khối có các trƣờng sau đây: Kích thƣớc của danh sách inode (định kích cỡ vùng không gian trên Hệ thống file quản lý các inode). Kích thƣớc của hệ thống file. Hai kích thước trên đây tính theo đơn vị dung lượng bộ nhớ ngoài, Một danh sách chỉ số các khối rỗi (thƣờng trực trên siêu khối) trong hệ thống file. Chỉ số các khối rỗi thƣờng trực trên siêu khối đƣợc dùng để đáp ứng nhu cầu phân phối mới. Chỉ số của khối rỗi tiếp theo trong danh sách các khối rỗi. Chỉ số khối rỗi tiếp theo dùng để hỗ trợ việc tìm kiếm tiếp các khối rỗi: bắt đầu tìm từ khối có chỉ số này trở đi. Một danh sách các inode rỗi (thƣờng trực trên siêu khối) trong hệ thống file. Danh sách này chứa chỉ số các inode rỗi đƣợc dùng để phân phối ngay đƣợc cho một file mới đƣợc khởi tạo. Chỉ số inode rỗi tiếp theo trong danh sách các inode rỗi. Chỉ số inode rỗi tiếp theo định vị việc tìm kiếm tiếp thêm inode rỗi: bắt đầu tìm từ inode có chỉ số này trở đi. Hai tham số trên đây tạo thành cặp xác định được danh sách các inode rỗi trên hệ thống file các thao tác tạo file mới, xoá file cập nhật thông tin này. Các trƣờng khóa (lock) danh sách các khối rỗi và danh sách inode rỗi: Trong một số trƣờng hợp, chẳng hạn khi hệ thống đang làm việc thực sự với đĩa từ để cập nhật các danh sách này, hệ thống không cho phép cập nhật tới hai danh sách nói trên. Cờ chỉ dẫn về việc siêu khối đã đƣợc biến đổi: Định kỳ thời gian siêu khối ở bộ nhớ trong đƣợc cập nhật lại vào siêu khối ở đĩa từ và vì vậy cần có thông tin về việc siêu khối ở bộ nhớ trong khác với nội dung ở bộ nhớ ngoài: nếu hai bản không giống nhau thì cần phải biến đổi để chúng đƣợc đồng nhất. Cờ chỉ dẫn rằng hệ thống file chỉ có thể đọc (cấm ghi): Trong một số trƣờng hợp, hệ thống đang cập nhật thông tin từ bộ nhớ ngoài thì chỉ cho phép đọc đối với hệ thống file, Số lƣợng tổng cộng các khối rỗi trong hệ thống file, Số lƣợng tổng cộng các inode rỗi trong hệ thống file, - 18 -
- Thông tin về thiết bị, Kích thƣớc khối (đơn vị phân phối dữ liệu) của hệ thống file. Hiện tại kích thƣớc phổ biến của khối là 1KB. Trong thời gian máy hoạt động, theo từng giai đoạn, nhân sẽ đƣa siêu khối lên đĩa nếu nó đã đƣợc biến đổi để phù hợp với dữ liệu trên hệ thống file. Inode Mỗi khi một tiến trình khởi tạo một file mới, nhân hệ thống sẽ gán cho nó một inode chƣa sử dụng. Để hiểu rõ hơn về inode, chúng ta xem xét sơ lƣợc mối quan hệ liên quan giữa file dữ liệu và việc lƣu trữ trên vật dẫn ngoài đối với Linux. Nội dung của file đƣợc chứa trong vùng dữ liệu của hệ thống file và đƣợc phân chia các khối dữ liệu (chứa nội dung file) và hình ảnh phân bố nội dung file có trong một inode tƣơng ứng. Liên kết đến tập hợp các khối dữ liệu này là một inode, chỉ thông qua inode mới có thể làm việc với dữ liệu tại các khối dữ liệu: Inode chứa dựng thông tin về tập hợp các khối dữ liệu nội dung file. Có thể quan niệm rằng, tổ hợp gồm inode và tập các khối dữ liệu nhƣ vậy là một file vật lý: inode có thông tin về file vật lý, trong đó có địa chỉ của các khối nhớ chứa nội dung của file vật lý. Thuật ngữ inode là sự kết hợp của hai từ index với node và đƣợc sử dụng phổ dụng trong Linux. Các inode đƣợc phân biệt nhau theo chỉ số của inode: đó chính là số thứ tự của inode trong danh sách inode trên hệ thống file. Thông thƣờng, hệ thống dùng 2 bytes để lƣu trữ chỉ số của inode. Với cách lƣu trữ chỉ số nhƣ thế, không có nhiều hơn 65535 inode trong một hệ thống file. Nhƣ vậy, một file chỉ có một inode song một file lại có một hoặc một số tên file. Ngƣời dùng tác động thông qua tên file và tên file lại tham chiếu đến inode (tên file và chỉ số inode là hai trƣờng của một phần tử của một thƣ mục). Một inode có thể tƣơng ứng với một hoặc nhiều tên file, mỗi tƣơng ứng nhƣ vậy đƣợc gọi là một liên kết. Inode đƣợc lƣu trữ tại vùng danh sách các inode. Trong tiến trình làm việc, Linux dùng một vùng bộ nhớ, đƣợc gọi là bảng inode (trong một số trƣờng hợp, nó còn đƣợc gọi tƣờng minh là bảng sao in-core inode) với chức năng tƣơng ứng với vùng danh sách các inode có trong hệ thống file, hỗ trợ cho tiến trình truy nhập dữ liệu trong hệ thống file. Nội dung của một in-core inode không chỉ chứa các thông tin trong inode tƣơng ứng mà còn đƣợc bổ sung các thông tin mới giúp cho tiến trình xử lý inode. Inode bao gồm các trƣờng thông tin sau đây: Kiểu file. Trong Linux phân loại các kiểu file: file thông thƣờng (regular), thƣ mục, đặc tả ký tự, đặc tả khối và ống dẫn FIFO (pipes). Linux quy định trƣờng kiểu file có giá trị 0 tƣơng ứng đó là inode chƣa đƣợc sử dụng. Quyền truy nhập file. Trong Linux, file là một tài nguyên chung của hệ thống vì vậy quyền truy nhập file đƣợc đặc biệt quan tâm để tránh những trƣờng hợp truy nhập không hợp lệ. Đối với một inode, có 3 mức quyền truy nhập liên quan đến các đối tƣợng: o Mức chủ của file (ký hiệu là u), o Mức nhóm ngƣời dùng của chủ nhân của file (ký hiệu là g), o Mức ngƣời dùng khác (ký hiệu là a). Số lƣợng liên kết đối với inode: Đây chính là số lƣợng các tên file trên các thƣ mục đƣợc liên kết với inode này, Định danh chủ nhân của inode, Định danh nhóm chủ nhân: xác định tên nhóm ngƣời dùng mà chủ file là một thành viên của nhóm này, Độ dài của file tính theo byte, Thời gian truy nhập file: o Thời gian file đƣợc sửa đổi muộn nhất, - 19 -
- o Thời gian file đƣợc truy nhập muộn nhất, o Thời gian file đƣợc khởi tạo, Bảng chứa địa chỉ khối dữ liệu của File trong UNIX Bảng chứa địa chỉ khối dữ liệu của file gồm 13 phần tử với 10 phần tử trực tiếp và 3 phần tử gián tiếp: Mỗi phần tử có độ dài 4 bytes, chứa một số hiệu của một khối nhớ trên đĩa. Mỗi phần tử trực tiếp trỏ tới 1 khối dữ liệu thực sự chứa nội dung file. Phần tử gián tiếp bậc 1 (single indirect) trỏ tới 1 khối nhớ ngoài. Khác với phần tử trực tiếp, khối nhớ ngoài này không dùng để chứa dữ liệu của file mà lại chứa danh sách chỉ số các khối nhớ ngoài và chính các khối nhớ ngoài này mới thực sự chứa nội dung file. Nhƣ vậy, nếu khối có độ dài 1KB và một chỉ số khối ngoài có độ dài 4 bytes thì địa chỉ gián tiếp cho phép định vị không gian trên đĩa lƣu trữ dữ liệu của file tới 256KB (Không gian bộ nhớ ngoài trong vùng dữ liệu phải dùng tới là 257KB). Tƣơng tự đối với các phần tử gián tiếp mức cao hơn. Cơ chế quản lý địa chỉ file nhƣ trên cho thấy có sự phân biệt giữa file nhỏ với file lớn. File nhỏ có độ dài bé hơn và theo cách tổ chức nhƣ trên, phƣơng pháp truy nhập sẽ cho phép tốc độ nhanh hơn, đơn giản hơn do chỉ phải làm việc với các phần tử trực tiếp. Khi xử lý, thuật toán đọc File tiến hành theo các cách khác nhau đối với các phần tử trực tiếp và gián tiếp. Vùng dữ liệu Bao gồm các khối dữ liệu, mỗi khối dữ liệu đƣợc đánh chỉ số để phân biệt. Khối trên vùng dữ liệu đƣợc dùng để chứa nội dung các file, nội dung các thƣ mục và nội dung các khối định vị địa chỉ của các file. Chú ý rằng, chỉ số của khối dữ liệu đƣợc chứa trong 32 bit và thông tin này xác định dung lƣợng lớn nhất của hệ thống file. 3.1.3. Hỗ trợ nhiều hệ thống File Các phiên bản đầu tiên của Linux chỉ hỗ trợ một hệ thống file duy nhất đó là hệ thống file minix. Sau đó, với sự mở rộng nhân, cộng đồng Linux đã thêm vào nó rất nhiều kiểu hệ thống file khác nhau và Linux trở thành một hệ điều hành hỗ trợ rất nhiều hệ thống file nhƣ: Hệ thống file CODA: Là một hệ thống file mạng cho phép ngƣời dùng có thể kết gán các hệ thống file từ xa và truy cập chúng nhƣ các hệ thống file cục bộ. Hệ thống file EFS: Là một dạng hệ thống file sử dụng cho CDROM. Hệ thống file EXT2: (The second extended file system) là hệ thống đƣợc dùng chủ yếu trên các phiên bản của hệ điều hành Linux. Hệ thống file HFS: Là hệ thống file chạy trên các máy Apple Macintosh. Hệ thống file HPFS: Là hệ thống file đƣợc sử dụng trong hệ điều hành OS/2. Linux hỗ trợ hệ thống file này ở mức chỉ đọc. Hệ thống file ISOFS: Là hệ thống file đƣợc sử dụng cho các đĩa CD. Hệ thống thông dụng nhất cho các đĩa CD hiện nay là ISO 9660. Hệ thống file MSDOS: Với sự hỗ trợ này, hệ thống Linux có thể truy cập đƣợc các phân vùng của hệ điều hành MSDOS. Linux cũng có thể sử dụng kiểu MSDOS để truy cập các phân vùng của Window 95/98 tuy nhiên khi đó, các ƣu điểm của hệ điều hành Window sẽ không còn giá trị ví dụ nhƣ tên file chỉ tối đa 13 ký tự (kể cả mở rộng). Hệ thống file NFS: (Network File System) là một hệ thống file trên mạng hỗ trợ việc truy cập dữ liệu từ xa giống nhƣ hệ thống file CODA. Với NFS, các máy chạy Linux có thể chia sẻ các phân vùng đĩa trên mạng để sử dụng nhƣ là các phân vùng cục bộ của chính máy mình. Hệ thống file NTFS: Với sự hỗ trợ này, hệ thống Linux có thể truy cập vào các phân vùng của hệ điều hành Microsoft Window NT. Hệ thống file ROMFS: Là các hệ thống file chỉ đọc (read only) đƣợc sử dụng chủ yếu cho việc khởi tạo đĩa ảo (ramdisk) trong tiến trình khởi động đĩa cài đặt. - 20 -
- Hệ thống file SMB: (Server Mesage Block) là một giao thức của Windows dùng để chia sẻ file giữa các hệ điều hành Windows 95/98, Windows NT và OS/2 Lan Manager. Với sự hỗ trợ SMB, hệ điều hành Linux có thể chia sẻ cũng nhƣ truy cập các file nằm trên các phân vùng của một máy chạy các hệ điều hành kể trên. Hệ thống file VFAT: Là hệ thống file mở rộng của hệ thống FAT. Hệ thống file này đƣợc sử dụng trong các hệ điều hành Windows 95/98. Nhƣ vậy, ngoài khả năng hỗ trợ nhiều loại thiết bị, Linux còn có khả năng hỗ trợ nhiều kiểu hệ thống file. Bằng cách hỗ trợ nhiều kiểu hệ thống file, Linux có thể truy cập và xử lý các file của nhiều hệ điều hành khác nhau. Mặc dù có khả năng truy cập nhiều hệ thống file khác nhau, hệ thống file của Linux vẫn phải đảm bảo cung cấp cho ngƣời dùng một giao diện nhất quán đối với các file, bảo vệ các file trên các hệ thống khác nhau, tối ƣu các thao tác truy cập vào thiết bị Để thực hiện đƣợc điều này, Linux sử dụng một hệ thống file đặc biệt gọi là hệ thống file ảo VFS (Virtual File System). Hệ thống file ảo VFS đƣợc thiết kế để cung cấp một giao diện thống nhất về các file đƣợc lƣu trữ trên các thiết bị. VFS có trách nhiệm cung cấp cho chƣơng trình ngƣời dùng một giao diện nhất quán về hệ thống file thông qua các lệnh gọi hệ thống (system call). Mỗi khi có một yêu cầu truy cập file, VFS sẽ dựa vào các hệ thống file thực để tìm kiếm file yêu cầu trên các thiết bị vật lý. Với mỗi file tìm đƣợc, nó thực hiện thao tác mở file đó và cho tƣơng ứng file với một cấu trúc dữ liệu gọi là i-node. VFS cung cấp rất nhiều lệnh gọi để thao tác với hệ thống file nhƣng chủ yếu thuộc vào các loại sau: Các thao tác liên quan tới hệ thống file. Các thao tác liên quan tới i-node. Các thao tác với file đang mở. Các thao tác với vùng đệm dữ liệu. 3.1.4. Liên kết tượng trưng (lệnh ln) Trong Linux có hai kiểu liên kết đó là liên kết tƣợng trƣng (liên kết mềm) và liên kết cứng. - "Liên kết cứng" là một cách gọi khác đối với một file đang tồn tại (không có sự phân biệt giữa file gốc và file liên kết). Theo cách nói kỹ thuật, chúng cùng chia sẻ một inode và inode này chứa đựng tất cả các thông tin về file. Không thể tạo một liên kết cứng tới một thƣ mục. - "Liên kết tƣợng trƣng" là một kiểu file đặc biệt, trong đó, một file liên kết thực sự tham chiếu theo tên đến một file khác. Có thể hiểu kiểu file này nhƣ là một con trỏ chỉ dẫn tới một file hoặc một thƣ mục, và đƣợc sử dụng để thay thế cho file hoặc thƣ mục đƣợc trỏ tới. Hầu hết các thao tác (nhƣ mở, đọc, ghi ) đƣợc thực hiện trên các file liên kết, sau đó, nhân hệ thống sẽ tự động "tham chiếu" và thực hiện trên file đích của liên kết. Tuy nhiên, có một số các thao tác nhƣ xóa file, file liên kết sẽ bị xóa bỏ chứ không phải file đích của nó. Cú pháp lệnh: ln [tùy-chọn] [tên-nối] Lệnh này sẽ tạo một liên kết đến thƣ mục/file đích với tên file liên kết là tên-nối. Nếu tên-nối không có, một liên kết với tên file liên kết giống nhƣ tên file đích sẽ đƣợc tạo ra trong thƣ mục hiện thời. Các tuỳ chọn: -b, backup[=CONTROL] : tạo liên kết quay trở lại cho mỗi file đích đang tồn tại. -f, force : xóa bỏ các file đích đang tồn tại. -d, -F, directory : tạo liên kết cứng đến các thƣ mục (chỉ dành cho ngƣời dùng có quyền quản trị hệ thống; Một số phiên bản không có tùy chọn này). - 21 -
- -n, no-dereference : một file bình thƣờng đƣợc xem là đích liên kết từ một thƣ mục. -i, interactive : vẫn tạo liên kết dù file đích đã bị xóa bỏ. -s, symbolic : tạo các liên kết tƣợng trƣng. target-directory= : xác định thƣ mục tên-thƣ-mục là thƣ mục có chứa các liên kết. -v, verbose : hiển thị tên các file trƣớc khi tạo liên kết. help : hiển thị trang trợ giúp và thoát. 3.2 Quyền truy nhập thƣ mục và file 3.2.1 Quyền truy nhập Mỗi file và thƣ mục trong Linux đều có một chủ sở hữu và một nhóm sở hữu, cũng nhƣ một tập hợp các quyền truy nhập. Cho phép thay đổi các quyền truy nhập và quyền sở hữu file và thƣ mục nhằm cung cấp truy nhập nhiều hơn hay ít hơn. Thông tin về một file có dạng sau (đƣợc hiện ra theo lệnh hiện danh sách file ls -l): drwxr-xr-x 12 root root 4096 Oct 23 2000 LinuxVN.com Tập hợp Số liên kết Người Nhóm chủ Kích thước Ngày giờ Tên file quyền truy đến file chủ file file file tạo file nhập (thư mục) Trong đó, dãy 10 ký tự đầu tiên mô tả kiểu file và quyền truy nhập đối với tập tin đó, chúng đƣợc chia ra làm 4 phần: kiểu file, các quyền truy nhập đến file của chủ sở hữu, của nhóm sở hữu và ngƣời dùng khác. Theo mặc định, ngƣời dùng tạo một file chính là ngƣời chủ (sở hữu) của file đó và là ngƣời có quyền sở hữu nó. Ngƣời chủ của file có đặc quyền thay đổi quyền truy nhập hay quyền sở hữu đối với file đó. Tất nhiên, một khi đã chuyển quyền sở hữu của mình cho ngƣời dùng khác thì ngƣời chủ cũ không đƣợc phép chuyển quyền sở hữu và quyền truy nhập đƣợc nữa. Có một số kiểu file trong Linux. Ký tự đầu tiên trong tập hợp 10 ký tự mô tả kiểu file và quyền truy nhập sẽ cho biết file thuộc kiểu nào (chữ cái đó đƣợc gọi là chữ cái biểu diễn). Chữ cái biểu diễn Kiểu file d Thƣ mục (directory) b File kiểu khối (block-type special file) c File kiểu ký tự (character-type special file) l Liên kết tƣợng trƣng (symbolic link) p File đƣờng ống (pipe) s Socket - File bình thƣờng (regular file) Chín ký tự tiếp theo trong chuỗi là quyền truy nhập đƣợc chia ra làm 3 nhóm tƣơng ứng với quyền truy nhập của ngƣời sử hữu, nhóm sở hữu và ngƣời dùng khác. Có ba loại quyền truy nhập chính đối với thƣ mục/file, đó là: đọc (read -r), ghi (write -w) và thực hiện (execute -x). - 22 -
- Chữ cái biểu diễn Kiểu file Không cho phép một quyền truy nhập nào r Chỉ đƣợc quyền đọc r-x Quyền đọc và thực hiện (cho chƣơng trình và shell script) rw- Quyền đọc và ghi rwx Cho phép tất cả các quyền truy nhập (cho chƣơng trình) Tuy nhiên, đối với thƣ mục thì chỉ có ba loại ký hiệu của các quyền truy nhập là: , r-x và rwx, vì nội dung của thƣ mục là danh sách của các file và các thƣ mục con có bên trong thƣ mục đó. Quyền đọc một thƣ mục là đƣợc xem nội dung của thƣ mục đó và quyền thực hiện đối với một thƣ mục là quyền tìm đƣợc file và thƣ mục con có trong thƣ mục. 3.2.2. Các lệnh cơ bản 3.2.2.1. Thay đổi quyền sở hữu file Cú pháp lệnh: chown [tùy-chọn] [chủ][.nhóm] Nếu chỉ có tham số về chủ, thì ngƣời dùng chủ sẽ có quyền sở hữu file và nhóm sở hữu không thay đổi. Nếu theo sau tên ngƣời chủ là dấu "." và tên của một nhóm thì nhóm đó sẽ nhóm sở hữu file. Nếu chỉ có dấu "." và nhóm mà không có tên ngƣời chủ thì chỉ có quyền sở hữu nhóm của file thay đổi, lúc này, lệnh chown có tác dụng giống nhƣ lệnh chgrp Các tùy chọn: -c, changes : hiển thị dòng thông báo chỉ với các file mà lệnh làm thay đổi sở hữu (số thông báo hiện ra có thể ít hơn trƣờng hợp -v, -verbosr). -f, silent, quiet : bỏ qua hầu hết các thông báo lỗi. -R, recursive : thực hiện đổi quyền sở hữu đối với thƣ mục và file theo đệ quy. -v, verbose : hiển thị dòng thông báo với mọi file liên quan mà chown tác động tới (có hoặc không thay đổi sở hữu). help : đƣa ra trang trợ giúp và thoát. 3.2.2.2. Thay đổi quyền sở hữu nhóm Các file (và ngƣời dùng) còn thuộc vào các nhóm, đây là phƣơng thức truy nhập file thuận tiện cho nhiều ngƣời dùng nhƣng không phải tất cả ngƣời dùng trên hệ thống. Khi đăng nhập, mặc định sẽ là thành viên của một nhóm đƣợc thiết lập khi siêu ngƣời dùng root tạo tài khoản ngƣời dùng. Cho phép một ngƣời dùng thuộc nhiều nhóm khác nhau, nhƣng mỗi lần đăng nhập chỉ là thành viên của một nhóm. Cú pháp lệnh: chgrp [tùy-chọn] {nhóm| reference=nhómR} Lệnh này cho phép thay thuộc tính nhóm sở hữu của file theo tên nhóm đƣợc chỉ ra trực tiếp theo tham số nhóm hoặc gián tiếp qua thuộc tính nhóm của file có tên là nhómR. Các tùy chọn: (một số tƣơng tự nhƣ ở lệnh chown): -c, changes : hiển thị dòng thông báo chỉ với các file mà lệnh làm thay đổi sở hữu (số thông báo hiện ra có thể ít hơn trƣờng hợp -v, -verbosr). -f, silent, quiet : bỏ qua hầu hết các thông báo lỗi. -R, recursive : thực hiện đổi quyền sở hữu đối với thƣ mục và file theo đệ quy. -v, verbose : hiển thị dòng thông báo với mọi file liên quan mà chgrp tác động tới (có hoặc không thay đổi sở hữu). help : hiển thị trang trợ giúp và thoát Tham số reference=nhómR cho thấy cách gián tiếp thay nhóm chủ của file theo nhóm chủ của một file khác (tên là nhómR) là cách thức đƣợc ƣa chuộng hơn. Tham số này là xung khắc với tham số nhóm của lệnh. - 23 -
- 3.2.2.3. Thay đổi quyền truy cập file Cú pháp lệnh chmod có ba dạng: chmod [tùy-chọn] chmod [tùy-chọn] chmod [tùy-chọn] reference=nhómR Lệnh chmod cho phép xác lập quyền truy nhập theo kiểu (mode) trên file. Dạng đầu tiên là dạng xác lập tƣơng đối, dạng thứ hai là dạng xác lập tuyệt đối và dạng cuối cùng là dạng gián tiếp chỉ dẫn theo quyền truy nhập của file nhómR. Các tùy chọn (-c, changes; -f, silent, quiet; -v, verbose; -R, recursive; help) có ý nghĩa tƣơng tự các tuỳ chọn tƣơng ứng của các lệnh chown, chgrp: Tham số reference=RFILE cũng ý nghĩa gián tiếp nhƣ trong lệnh chgrp. Giải thích về hai cách xác lập quyền truy nhập file trong lệnh chmod nhƣ sau: xác lập tuyệt đối (dùng hệ thống mã số viết theo hệ cơ số 8 biểu diễn cho các quyền truy nhập) và xác lập tƣơng đối (dùng các chữ cái để biểu diễn quyền truy nhập). Cách xác lập tương đối Cách xác lập tƣơng đối là dễ nhớ theo ý nghĩa của nội dung các mod và chỉ những thay đổi thực sự mới đƣợc biểu diễn trong lệnh. Quyền truy cập Thao tác thay đổi Kiểu truy cập u=user (ngƣời sở hữu) + (thêm quyền) r=read (đọc) g=group (nhóm sở hữu) - (gỡ bỏ quyền) w=write (ghi) o=other (ngƣời khác) = (xác nhận quyền) x=execute (thực hiện) a=all (tất cả ngƣời dùng) Ví dụ: chmod g+w test Cách xác lập tuyệt đối Đối với ngƣời dùng hiểu sơ bộ về biểu diễn số trong hệ cơ số 8 thì cách xác lập tuyệt đối lại đƣợc ƣa chuộng hơn. Ta đã biết quyền truy nhập file xác định thông qua dãy gồm 9 vị trí dƣới dạng rwxrwxrwx, Nhƣ vậy thuộc tính quyền truy nhập của một file có thể biểu diễn thành 9 bít nhị phân trong đó bít có giá trị 1 thì quyền đó đƣợc xác định, ngƣợc lại thì quyền đó bị tháo bỏ. Nhƣ vậy, chủ sở hữu tƣơng ứng với 3 bít đầu tiên, nhóm sở hữu tƣơng ứng với 3 bít giữa, ngƣời dùng khác tƣơng ứng với 3 bít cuối. Mỗi cụm 3 bít nhƣ vậy cho một chữ số hệ 8 (nhận giá trị từ 0 đến 7) và thuộc tính quyền truy nhập tƣơng ứng với 3 chữ số hệ 8. Quyền Chữ số hệ 8 Quyền Chữ số hệ 8 Chỉ đọc 4 Chỉ đọc và ghi 6 Chỉ ghi 2 Chỉ đọc và thực hiện 5 Chỉ thực hiện 1 Chỉ ghi và thực hiện 3 Không có quyền nào 0 Đọc, ghi và thực hiện 7 3.2.2.4. Đăng nhập vào một nhóm ngƣời dùng mới Linux cho phép một ngƣời dùng có thể là thành viên của một hoặc nhiều nhóm ngƣời dùng khác nhau, trong đó có một nhóm đƣợc gọi là nhóm khởi động. Điều này đƣợc đảm bảo khi thực hiện lệnh adduser hoặc usersdd. Tuy nhiên, tại một thời điểm, một ngƣời dùng thuộc vào chỉ một nhóm. Khi một ngƣời dùng đăng nhập, hệ thống ngầm định ngƣời dùng đó là thành viên của nhóm khởi động, và có quyền truy nhập đối với những file thuộc quyền sở hữu của nhóm khởi động đó. Nếu muốn sử dụng quyền sở hữu theo các nhóm khác đối với - 24 -
- những file thì ngƣời dùng phải chuyển đổi thành thành viên của một nhóm những nhóm đã đƣợc gắn với ngƣời dùng. Lệnh newgr cho phép ngƣời dùng chuyển sang nhóm ngƣời dùng khác đã gắn với mình với Cú pháp lệnh: newgrp [nhóm] Trong đó nhóm là một tên nhóm ngƣời dùng tồn tại trong hệ thống. 3.3 Thao tác với thƣ mục 3.3.1 Một số thư mục đặc biệt * Thƣ mục gốc / Đây là thƣ mục gốc chứa đựng tất cả các thƣ mục con có trong hệ thống. * Thƣ mục /root Thƣ mục /root có thể đƣợc coi là "thƣ mục riêng" của siêu ngƣời dùng. Thƣ mục này đƣợc sử dụng để lƣu trữ các file tạm thời, nhân Linux và ảnh khởi động, các file nhị phân quan trọng (những file đƣợc sử dụng đến trƣớc khi Linux có thể gắn kết đến phân vùng /user), các file đăng nhập quan trọng, bộ đệm in cho việc in ấn, hay vùng lƣu tạm cho việc nhận và gửi email. Nó cũng đƣợc sử dụng cho các vùng trống tạm thời khi thực hiện các thao tác quan trọng, ví dụ nhƣ khi xây dựng (build) một gói RPM từ các file RPM nguồn. * Thƣ mục /bin Trong Linux, chƣơng trình đƣợc coi là khả thi nếu nó có thể thực hiện đƣợc. Khi một chƣơng trình đƣợc biên dịch, nó sẽ có dạng là file nhị phân. Nhƣ vậy, chƣơng trình ứng dụng trong Linux là một file nhị phân khả thi.Chính vì lẽ đó, những nhà phát triển Linux đã quyết định phải tổ chức một thƣ mục "binaries" để lƣu trữ các chƣơng trình khả thi có trên hệ thống, đó chính là thƣ mục /bin. Ban đầu, thƣ mục /bin (bin là viết tắt của từ binary) là nơi lƣu trữ các file nhị phân khả thi. Nhƣng theo thời gian, ngày càng có nhiều hơn các file khả thi có trong Linux, do đó, có thêm các thƣ mục nhƣ /sbin, /usr/bin đƣợc sử dụng để lƣu trữ các file đó. * Thƣ mục /dev Một phần không thể thiếu trong bất kỳ máy tính nào đó là các trình điều khiển thiết bị. Không có chúng, sẽ không thể có đƣợc bất kỳ thông tin nào trên màn hình của, cũng không thể nhập đƣợc thông tin, và cũng không thể sử dụng đĩa mềm của. Tất cả các trình điều khiển thiết bị đều đƣợc lƣu trữ trong thƣ mục /dev. * Thƣ mục /etc Quản trị hệ thống trong Linux không phải là đơn giản, chẳng hạn nhƣ việc quản lý tài khoản ngƣời dùng, vấn đề bảo mật, trình điều khiển thiết bị, cấu hình phần cứng, Để giảm bớt độ phức tạp, thƣ mục /etc đã đƣợc thiết kế để lƣu trữ tất cả các thông tin hay các file cấu hình hệ thống. * Thƣ mục /lib Linux có một trung tâm lƣu trữ các thƣ viện hàm và thủ tục, đó là thƣ mục /lib. * Thƣ mục /lost+found Một file đƣợc khôi phục sau khi có bất kỳ một vấn đề hoặc gặp một lỗi về ghi đĩa trên hệ thống đều đƣợc lƣu vào thƣ mục này. * Thƣ mục /mnt Thƣ mục /mnt là nơi để kết nối các thiết bị (ví dụ đĩa cứng, đĩa mềm ) vào hệ thống file chính nhờ lệnh mount. Thông thƣờng các thƣ mục con của /mnt chính là gốc của các hệ thống file đƣợc kết nối: /mnt/floppy: đĩa mềm, /mnt/hda1: vùng đầu tiên của đĩa cứng thứ nhất (hda), /mnt/hdb3: vùng thứ ba của đĩa cứng thứ 2 (hdb) - 25 -
- * Thƣ mục /tmp Thƣ mục /tmp đƣợc rất nhiều chƣơng trình trong Linux sử dụng nhƣ một nơi để lƣu trữ các file tạm thời. * Thƣ mục /usr Thông thƣờng thì thƣ mục /usr là trung tâm lƣu trữ tất cả các lệnh hƣớng đến ngƣời dùng (user-related commands). Tuy nhiên, ngày nay thật khó xác định trong thƣ mục này có những thứ gì, bởi vì hầu hết các file nhị phân cần cho Linux đều đƣợc lƣu trữ ở đây, trong đó đáng chú ý là thƣ mục con /usr/src bao gồm các thƣ mục con chứa các chƣơng trình nguồn của nhân Linux. * Thƣ mục /home Thƣ mục này chứa các thƣ mục cá nhân của ngƣời dùng: mỗi ngƣời dùng tƣơng ứng với một thƣ mục con ở đây, tên ngƣời dùng đƣợc lấy làm tên của thƣ mục con. * Thƣ mục /var Thƣ mục /var đƣợc sử dụng để lƣu trữ các file chứa các thông tin luôn luôn thay đổi, bao gồm bộ đệm in, vùng lƣu tạm thời cho việc nhận và gửi thƣ (mail), các khóa tiến trình, * Thƣ mục /boot Là thƣ mục chứa nhân của hệ thống (Linux-*.*.), System.map (file ánh xạ đến các driver để nạp các hệ thống file khác), ảnh (image) của hệ thống file dùng cho initrd (ramdisk), trình điều khiển cho các thiết bị RAID (một thiết bị gồm một mảng các ổ đĩa cứng để tăng tốc độ và độ an toàn khi ghi dữ liệu), các bản sao lƣu boot record của các phân vùng đĩa khác. Thƣ mục này cho phép khởi động và nạp lại bất kỳ trình điều khiển nào đƣợc yêu cầu để đọc các hệ thống file khác. * Thƣ mục /proc Đây là thƣ mục dành cho nhân (kernel) của hệ điều hành và thực tế đây là một hệ thống file độc lập do nhân khởi tạo. * Thƣ mục /misc và thƣ mục /opt Cho phép lƣu trữ mọi đối tƣợng vào hai thƣ mục này. * Thƣ mục /sbin Thƣ mục lƣu giữ các file hệ thống thƣờng tự động chạy. 3.3.2 Các lệnh cơ bản về thư mục * Xác định thƣ mục hiện thời Cú pháp lệnh: pwd Lệnh này cho biết hiện ngƣời dùng đang ở trong thƣ mục nào và hiện ra theo dạng một đƣờng dẫn tuyệt đối. * Xem thông tin về thƣ mục Cú pháp lệnh: ls [tùy-chọn] [file] Lệnh này đƣa ra danh sách các file liên quan đến tham số file trong lệnh. Trƣờng hợp phổ biến tham số file là một thƣ mục, tuy nhiên trong một số trƣờng hợp khác, tham số file xác định nhóm (khi sử dụng các mô tả nhóm *, ? và cặp [ và ]); nếu không có tham số file, mặc định danh sách các file có trong thƣ mục hiện thời sẽ đƣợc hiển thị. Các tùy chọn: -a : liệt kê tất cả các file, bao gồm cả file ẩn. -l : đƣa ra thông tin đầy đủ nhất về các file và thƣ mục. -s : chỉ ra kích thƣớc của file, tính theo khối (1 khối = 1204 byte). -F : xác định kiểu file (/ = thƣ mục, * = chƣơng trình khả thi). -m : liệt kê các file đƣợc ngăn cách nhau bởi dấu ",". - 26 -
- -C : đƣa ra danh sách các file và thƣ mục theo dạng cột (hai thƣ mục gần nhau đƣợc xếp vào một cột). -1 : hiển thị mỗi file hoặc thƣ mục trên một dòng. -t : sắp xếp các file và thƣ mục trong danh sách theo thứ tự về thời gian đƣợc sửa đổi gần đây nhất. -x : đƣa ra danh sách các file và thƣ mục theo dạng cột (hai thƣ mục gần nhau đƣợc xếp trên hai dòng đầu của hai cột kề nhau). -r : sắp xếp danh sách hiển thị theo thứ tự ngƣợc lại. -R : liệt kê lần lƣợt các thƣ mục và nội dung của các thƣ mục. Ví dụ, lệnh: # ls -l sẽ hiển thị danh sách đầy đủ nhất về các file và thƣ mục có trong thƣ mục hiện thời. total 108 drwxr-xr-x 12 thu root 4096 Oct 23 2000 LinuxVN.com drwxr-xr-x 2 root root 4096 Oct 31 2000 bin drwxr-xr-x 2 root root 4096 Dec 11 16:54 boot drwxr-xr-x 7 root root 36864 Dec 11 16:54 dev drwxr-xr-x 43 root root 4096 Dec 11 16:55 etc drwxr-xr-x 5 root root 4096 Dec 11 16:57 home drwxr-xr-x 4 root root 4096 Oct 31 2000 lib drwxr-xr-x 2 root root 16384 Oct 31 2000 lost+found drwxr-xr-x 2 root root 0 Dec 11 16:54 misc drwxr-xr-x 5 root root 4096 Oct 31 2000 mnt drwxr-xr-x 2 root root 4096 Aug 23 12:03 opt dr-xr-xr-x 56 root root 0 Dec 11 11:54 proc drwxr-x 12 root root 4096 Dec 11 16:55 root drwxr-xr-x 3 root root 4096 Oct 31 2000 sbin drwxr-xr-x 3 root root 4096 Oct 31 2000 tftpboot drwxrwxrwx 8 root root 4096 Dec 11 16:58 tmp drwxr-xr-x 22 root root 4096 Oct 31 2000 usr drwxr-xr-x 22 root root 4096 Oct 31 2000 var Dòng đầu tiên "total 108" cho biết tổng số khối (1024 byte) trên đĩa lƣu trữ các file trong danh sách (14*4+36+16=108). Mỗi dòng tiếp theo trình bày thông tin về mỗi file hay thƣ mục con. Khi gõ lệnh: # ls [is]* Cho danh sách các file và thƣ mục con có tên bắt đầu bằng hoặc chữ cái i hoặc chữ cái s có trong thƣ mục hiện thời: info-dir initlog.conf inittab services shadow shadow- shells smb.conf sysctl.conf syslog.conf * Lệnh tạo thƣ mục Cú pháp lệnh: mkdir [tùy-chọn] Lệnh này cho phép tạo một thƣ mục mới nếu thƣ mục đó chƣa thực sự tồn tại. Để tạo một thƣ mục, cần đặc tả tên và vị trí của nó trên hệ thống file (vị trí mặc định là thƣ mục hiện thời). Nếu thƣ mục đã tồn tại, hệ thống sẽ thông báo cho biết. Các tùy chọn: -m, mode=Mod : thiết lập quyền truy nhập Mod nhƣ trong lệnh chmod nhƣng không cho quyền rwxrwxrwx. -p, parents : tạo các thƣ mục cần thiết mà không thông báo lỗi khi nó đã tồn tại. - 27 -
- verbose : hiển thị các thông báo cho mỗi thƣ mục đƣợc tạo. help : đƣa ra trang trợ giúp và thoát. Ví dụ: # mkdir /home/test * Lệnh xóa bỏ thƣ mục Nhƣ đã biết, lệnh mkdir để tạo ra một thƣ mục mới, và về đối ngẫu thì lệnh rmdir đƣợc dùng để xóa bỏ một thƣ mục. Cú pháp lệnh: rmdir [tùy-chọn[ Có thể xóa bỏ bất kỳ thƣ mục nào nếu có quyền đó. Lƣu ý rằng, thƣ mục chỉ bị xóa khi nó "rỗng", tức là không tồn tại file hay thƣ mục con nào trong đó. Không có cách gì khôi phục lại các thƣ mục đã bị xóa, vì thế hãy chú ý trƣớc khi quyết định xóa một thƣ mục. Các tùy chọn: ignore-fail-on-non-empty : bỏ qua các lỗi nếu xóa một thƣ mục không rỗng. -p, parents : xóa bỏ một thƣ mục, sau đó lần lƣợt xóa bỏ tiếp các thƣ mục có trên đƣờng dẫn chứa thƣ mục vừa xóa. Ví dụ, dòng lệnh rmdir -p /a/b/c sẽ tƣơng đƣơng với ba dòng lệnh rmdir /a/b/c, rmdir /a/b, rmdir /a (với điều kiện các thƣ mục là rỗng). verbose : đƣa ra thông báo khi xóa một thƣ mục. help : hiển thị trang trợ giúp và thoát. Ví dụ: # rmdir -p /test/test1/test2 * Lệnh đổi tên thƣ mục Cú pháp lệnh: mv Lệnh này cho phép đổi tên một thƣ mục từ tên-cũ thành tên-mới. Nếu sử dụng lệnh mv để đổi tên một thƣ mục với một cái tên đã đƣợc đặt cho một file thì lệnh sẽ gặp lỗi. Nếu tên mới trùng với tên một thƣ mục đang tồn tại thì nội dung của thƣ mục đƣợc đổi tên sẽ ghi đè lên nội dung của thƣ mục trùng tên. 3.4. Các lệnh làm việc với file 3.4.1 Các kiểu file có trong Linux Trong Linux có rất nhiều file khác nhau, nhƣng bao giờ cũng tồn tại một số kiểu file cần thiết cho hệ điều hành và ngƣời dùng, dƣới đây giới thiệu lại một số các kiểu file cơ bản. File người dùng (user data file): là các file tạo ra do hoạt động của ngƣời dùng khi kích hoạt các chƣơng trình ứng dụng tƣơng ứng. Ví dụ nhƣ các file thuần văn bản, các file cơ sở dữ liệu hay các file bảng tính. File hệ thống (system data file): là các file lƣu trữ thông tin của hệ thống nhƣ: cấu hình cho khởi động, tài khoản của ngƣời dùng, thông tin thiết bị thƣờng đƣợc cất trong các tệp dạng văn bản để ngƣời dùng có thể can thiệp, sửa đổi theo ý mình. File thực hiện (executable file): là các file chứa mã lệnh hay chỉ thị cho máy tính thực hiện. File thực hiện lƣu trữ dƣới dạng mã máy mà ta khó có thể tìm hiểu đƣợc ý nghĩa của nó, nhƣng tồn tại một số công cụ để "hiểu" đƣợc các file đó. Khi dùng trình ứng dụng mc (Midnight Commander, chƣơng 8), file thực hiện đƣợc bắt đầu bởi dấu (*) và thƣờng có màu xanh lục. Thư mục hay còn gọi là file bao hàm (directory): là file bao hàm các file khác và có cấu tạo hoàn toàn tƣơng tự nhƣ file thông thƣờng khác nên có thể gọi là file. Trong mc, file bao hàm thƣờng có màu trắng và bắt đầu bằng dấu ngã (~) hoặc dấu chia (/). Ví dụ: /, /home, /bin, /usr, /usr/man, /dev - 28 -
- File thiết bị (device file): là file mô tả thiết bị, dùng nhƣ là định danh để chỉ ra thiết bị cần thao tác. Theo quy ƣớc, file thiết bị đƣợc lƣu trữ trong thƣ mục /dev. Các file thiết bị hay gặp trong thƣ mục này là tty (teletype - thiết bị truyền thông), ttyS (teletype serial - thiết bị truyền thông nối tiếp), fd0, fd1, (floppy disk- thiết bị ổ đĩa mềm), hda1, hda2, hdb1, hdb2, (hardisk - thiết bị ổ cứng theo chuẩn IDE; a, b, đánh số ổ đĩa vật lý; 1, 2, 3 đánh số ổ logic). Trong mc, file thiết bị có màu tím và bắt đầu bằng dấu cộng (+). File liên kết (linked file): là những file chứa tham chiếu đến các file khác trong hệ thống tệp tin của Linux. Tham chiếu này cho phép ngƣời dùng tìm nhanh tới file thay vì tới vị trí nguyên thủy của nó. Hơn nữa, ngƣời ta có thể gắn vào đó các thông tin phụ trợ làm cho file này có tính năng trội hơn so với tính năng nguyên thủy của nó. Ta thấy loại file này giống nhƣ khái niệm shortcut trong MS- Windows98. Không giống một số hệ điều hành khác (nhƣ MS-DOS chẳng hạn), Linux quản lý thời gian của tệp tin qua các thông số thời gian truy nhập (accesed time), thời gian kiến tạo (created time) và thời gian sửa đổi (modified time). 3.4.2. Các lệnh tạo file Trong Linux có rất nhiều cách để tạo file, sau đây là các cách hay đƣợc dùng. * Tạo file với lệnh touch Lệnh touch có nhiều chức năng, trong đó một chức năng là giúp tạo file mới trên hệ thống: touch rất hữu ích cho việc tổ chức một tập hợp các file mới. Cú pháp lệnh: touch Thực chất lệnh này có tác dụng dùng để cập nhật thời gian truy nhập và sửa chữa lần cuối của một file. Vì lý do này, các file đƣợc tạo bằng lệnh touch đều đƣợc sắp xếp theo thời gian sửa đổi. Nếu sử dụng lệnh touch đối với một file chƣa tồn tại, chƣơng trình sẽ tạo ra file đó. Sử dụng bất kỳ trình soạn thảo nào để soạn thảo file mới. * Tạo file bằng cách đổi hƣớng đầu ra của lệnh (>) Cách này rất hữu ích nếu muốn lƣu kết quả của một lệnh đã thực hiện. Để gửi kết quả của một lệnh vào một file, dùng dấu ">" theo nghĩa chuyển hƣớng lối ra chuẩn. Ví dụ: # ls -l /bin > /home/thu/lenhls Linux tự động tạo nếu file lenhls chƣa có, trong trƣờng hợp ngƣợc lại, nội dung file cũ sẽ bị thế chỗ bởi kết quả của lệnh. Nếu muốn bổ sung kết quả vào cuối file thay vì thay thế nội dung file, ử dụng dấu ">>". * Tạo file với lệnh cat Lệnh cat tuy đơn giản nhƣng rất hữu dụng trong Linux. Chúng ta có thể sử dụng lệnh này để lấy thông tin từ đầu vào (bàn phím ) rồi kết xuất ra file hoặc các nguồn khác (màn hình ), hay để xem nội dung của một file Phần này trình bày tác dụng của lệnh cat đối với việc tạo file. Cú pháp lệnh: cat > Theo ngầm định, lệnh này cho phép lấy thông tin đầu vào từ bàn phím rồi xuất ra màn hình. Soạn thảo nội dung của một file bằng lệnh cat tức là đã đổi hƣớng đầu ra của lệnh từ màn hình vào một file. Ngƣời dùng gõ nội dung của file ngay tại dấu nhắc màn hình và gõ CTRL+d để kết thúc việc soạn thảo. Nhƣợc điểm của cách tạo file này là nó không cho phép sửa lỗi, ví dụ nếu muốn sửa một lỗi chính tả trên một dòng, chỉ có cách là xóa đến vị trí của lỗi và gõ lại nội dung vừa bị xóa. Ví dụ: # cat > /home/vd/newfile - 29 -
- Sau khi soạn thảo xong, gõ Enter và CTRL+d để trở về dấu nhắc lệnh, nếu không gõ Enter thì phải gõ CTRL+d hai lần. Có thể sử dụng luôn lệnh cat để xem nội dung của file vừa soạn thảo: 3.4.3 Các lệnh thao tác trên file * Sao chép file Lệnh cp có hai dạng nhƣ sau: cp [tùy-chọn] cp [tùy-chọn] target-directory= Lệnh này cho phép sao file-nguồn thành file-đích hoặc sao chép từ nhiều file-nguồn vào một thƣ mục đích (tham số hay ). Dạng thứ hai là một cách viết khác đổi thứ tự hai tham số vị trí. Các tùy chọn: -a, archive : giống nhƣ -dpR (tổ hợp ba tham số -d, -p, -R, nhƣ dƣới đây). -b, backup[=CONTROL] : tạo file lƣu cho mỗi file đích nếu nhƣ nó đang tồn tại. -d, no-dereference : duy trì các liên kết. -f, force : ghi đè file đích đang tồn tại mà không nhắc nhở. -i, interactive : có thông báo nhắc nhở trƣớc khi ghi đè. -l, link : chỉ tạo liên kết giữa file-đích từ file-nguồn mà không sao chép. -p, preserve : duy trì các thuộc tính của file-nguồn sang file-đích. -r : cho phép sao chép một cách đệ quy file thông thƣờng. -R : cho phép sao chép một cách đệ quy thƣ mục. -s, symbolic-link : tạo liên kết tƣợng trƣng thay cho việc sao chép các file. -S, suffix= : bỏ qua các hậu tố thông thƣờng (hoặc đƣợc chỉ ra). -u, update : chỉ sao chép khi file nguồn mới hơn file đích hoặc khi file đích chƣa có. -v, verbose : đƣa ra thông báo về tiến trình sao chép. help : hiển thị trang trợ giúp và thoát. File đích đƣợc tạo ra có cùng kích thƣớc và các quyền truy nhập nhƣ file nguồn, tuy nhiên file đích có thời gian tạo lập là thời điểm thực hiện lệnh nên các thuộc tính thời gian sẽ khác. Nếu ở vị trí đích, mô tả đầy đủ tên file đích thì nội dung file nguồn sẽ đƣợc sao chép sang file đích. Trong trƣờng hợp chỉ đƣa ra vị trí file đích đƣợc đặt trong thƣ mục nào thì tên của file nguồn sẽ là tên của file đích. Nếu sử dụng lệnh này để sao một thƣ mục, sẽ có một thông báo đƣợc đƣa ra cho biết nguồn là một thƣ mục và vì vậy không thể dùng lệnh cp để sao chép. Ví dụ sao chép nhiều file cùng một lúc vào một thƣ mục. # cp vd vd1 newdir Lƣu ý: Đối với nhiều lệnh làm việc với file, khi gõ lệnh có thể sử dụng ký hiệu mô tả nhóm để xác định một nhóm file làm cho tăng hiệu lực của các lệnh đó. * Đổi tên file Cú pháp lệnh: mv Lệnh này cho phép đổi tên file từ tên cũ thành tên mới. Ví dụ: # mv vd newfile Trong trƣờng hợp file newfile đã tồn tại, nội dung của file vd sẽ ghi đè lên nội dung của file newfile. - 30 -
- * Xóa file Lệnh rm là lệnh rất "nguy hiểm" vì trong Linux không có lệnh khôi phục lại những gì đã xóa, vì thế hãy cẩn trọng khi sử dụng lệnh này. Cú pháp lệnh: rm [tùy-chọn] Lệnh rm cho phép xóa bỏ một file hoặc nhiều file. Các tùy chọn: -d, directory : loại bỏ liên kết của thƣ mục, kể cả thƣ mục không rỗng. Chỉ có siêu ngƣời dùng mới đƣợc phép dùng tùy chọn này. -f, force : bỏ qua các file (xác định qua tham số file) không tồn tại mà không cần nhắc nhở. -i, interactive : nhắc nhở trƣớc khi xóa bỏ một file. -r, -R, recursive : xóa bỏ nội dung của thƣ mục một cách đệ quy. -v, verbose : đƣa ra các thông báo về tiến trình xóa file. help : hiển thị trang trợ giúp và thoát. Lệnh rm cho phép xóa nhiều file cùng một lúc bằng cách chỉ ra tên của các file cần xóa trong dòng lệnh (hoặc dùng ký kiệu mô tả nhóm). * Lệnh đếm từ và dòng trong file Cú pháp lệnh: wc [tùy-chọn] [file] Lệnh hiện ra số lƣợng dòng, số lƣợng từ, số lƣợng ký tự có trong mỗi file, và một dòng tính tổng nếu có nhiều hơn một file đƣợc chỉ ra. Nếu không có tùy chọn nào thì mặc định đƣa ra cả số dòng, số từ và số ký tự. Ngầm định khi không có tên file trong lệnh thì sẽ đọc và đếm trên thiết bị vào chuẩn. Các tuỳ chọn: -c, byte, chars : đƣa ra số ký tự trong file. -l, lines : đƣa ra số dòng trong file. -L, max-line-length : đƣa ra chiều dài của dòng dài nhất trong file. -w, words : đƣa ra số từ trong file. help : hiển thị trang trợ giúp và thoát. * Lệnh loại bỏ những dòng không quan trọng Trong một số trƣờng hợp khi xem nội dung một file, chúng ta thấy có một số các thông tin bị trùng lặp, ví dụ các dòng trống hoặc các dòng chứa nội dung giống nhau. Để đồng thời làm gọn và thu nhỏ kích thƣớc của file, có thể sử dụng lệnh uniq để liệt kê ra nội dung file sau khi đã loại bỏ các dòng trùng lặp. Cú pháp lệnh: uniq [tùy-chọn] [input] [output] Lệnh uniq sẽ loại bỏ các dòng trùng lặp kề nhau từ input (thiết bị vào chuẩn) và chỉ giữ lại một dòng duy nhất trong số các dòng trùng lặp rồi đƣa ra output (thiết bị ra chuẩn). Các tuỳ chọn: -c, count : đếm và hiển thị số lần xuất hiện của các dòng trong file. -d : hiển thị lên màn hình dòng bị trùng lặp. -u : hiển thị nội dung file sau khi xóa bỏ toàn bộ các dòng bị trùng lặp không giữ lại một dòng nào. -i : hiển thị nội dung file sau khi xóa bỏ các dòng trùng lặp và chỉ giữ lại duy nhất một dòng có nội dung bị trùng lặp. -D : hiển thị tất cả các dòng trùng lặp trên màn hình. Nếu sử dụng lệnh uniq trên một file không có các dòng trùng lặp thì lệnh không có tác dụng. - 31 -
- * Sắp xếp nội dung file sort là lệnh đọc các thông tin và sắp xếp chúng theo thứ tự trong bảng chữ cái hoặc theo thứ tự đƣợc quy định theo các tùy chọn của lệnh. Cú pháp lệnh: sort [tùy-chọn] [file] Hiển thị nội dung sau khi sắp xếp của một hoặc nhiều file ra thiết bị ra chuẩn là tác dụng của lệnh sort. Ngầm định sắp xếp theo thứ tự từ điển của các dòng có trong các file (từng chữ cái theo bảng chữ hệ thống (chẳng hạn ASCII) và kể từ vị trí đầu tiên trong các dòng). Các tùy chọn: + [- ] : Hai giá trị số1 và số2 xác định "khóa" sắp xếp của các dòng, thực chất lấy xâu con từ vị trí số1 tới vị trí số2 của các dòng để so sánh lấy thứ tự sắp xếp các dòng. Nếu số2 không có thì coi là hết các dòng; nếu số2 nhỏ hơn số1 thì bỏ qua lựa chọn này. Chú ý, nếu có số2 thì phải cách số1 ít nhất một dấu cách. -b : bỏ qua các dấu cách đứng trƣớc trong phạm vi sắp xếp. -c : kiểm tra nếu file đã sắp xếp thì thôi không sắp xếp nữa. -d : xem nhƣ chỉ có các ký tự [a-zA-Z0-9] trong khóa sắp xếp, các dòng có các ký tự đặc biệt (dấu cách, ? ) đƣợc đƣa lên đầu. -f : sắp xếp không phân biệt chữ hoa chữ thƣờng. -n : sắp xếp theo kích thƣớc của file. -r : chuyển đổi thứ tự sắp xếp hiện thời. Ví dụ, muốn sắp xếp file vdsort 3.4.4 Các lệnh thao tác theo nội dung file * Xác định kiểu file Cú pháp lệnh: file [tùy-chọn] [-f file] [-m ] Lệnh file cho phép xác định và in ra kiểu thông tin chứa trong file. Lệnh file sẽ lần lƣợt kiểm tra từ kiểu file hệ thống, kiểu file magic (ví dụ file mô tả thiết bị) rồi đến kiểu file văn bản thông thƣờng. Nếu file đƣợc kiểm tra thỏa mãn một trong ba kiểu file trên thì kiểu file sẽ đƣợc in ra theo các dạng cơ bản sau: text: dạng file văn bản thông thƣờng, chỉ chứa các mã ký tự ASCII. executable: dạng file nhị phân khả thi. data: thƣờng là dạng file chứa mã nhị phân và không thể in ra đƣợc. Các tuỳ chọn: -b : cho phép chỉ đƣa ra kiểu file mà không đƣa kèm theo tên file. -f tên-file : cho phép hiển thị kiểu của các file có tên trùng với nội dung trên mỗi dòng trong file tên-file. Để kiểm tra trên thiết bị vào chuẩn, sử dụng dấu "-". -z : xem kiểu của file nén. * Xem nội dung file Ở phần trƣớc, chúng ta đã có dịp làm quen với lệnh cat thông qua tác dụng tạo file của lệnh. Phần này giới thiệu tác dụng chủ yếu của lệnh cat: đó là tác dụng xem nội dung của một file. Cú pháp lệnh: cat [tùy-chọn] Các tùy chọn: -A, show-all : giống nhƣ tùy chọn -vET. -b, number-nonblank : hiển thị thêm số thứ tự trên mỗi dòng (bỏ qua dòng trống). -e : giống nhƣ tùy chọn -vE. -E, show-ends : hiển thị dấu "$" tại cuối mỗi dòng. -n, number : hiển thị số thứ tự của mỗi dòng (kể cả dòng trống). - 32 -
- -s : nếu trong nội dung file có nhiều dòng trống thì sẽ loại bỏ bớt để chỉ hiển thị một dòng trống. -t : giống nhƣ -vT. -T, show-tabs : hiển thị dấu TAB dƣới dạng ^I. -v, show-nonprinting : hiển thị các ký tự không in ra đƣợc ngoại trừ LFD và TAB. help : hiển thị trang trợ giúp và thoát. * Xem nội dung các file lớn Lệnh cat cho phép xem nội dung của một file, nhƣng nếu file quá lớn, nội dung file sẽ trôi trên màn hình và chỉ có thể nhìn thấy phần cuối của file. Linux có một lệnh cho phép có thể xem nội dung của một file lớn, đó là lệnh more. Cú pháp lệnh: more [-dlfpcsu] [-số] [+/xâumẫu] [+dòng-số] [file ] Lệnh more hiển thị nội dung của file theo từng trang màn hình. Các lựa chọn: -số : xác định số dòng nội dung của file đƣợc hiển thị (số). -d : trên màn hình sẽ hiển thị các thông báo giúp ngƣời dùng cách sử dụng đối với lệnh more, ví nhƣ [ Press space to continue, "q" to quit .], hay hiển thị [Press "h" for instructions .] thay thế cho tiếng chuông cảnh báo khi bấm sai một phím. -l : more thƣờng xem ^L là một ký tự đặc biệt, nếu không có tùy chọn này, lệnh sẽ dừng tại dòng đầu tiên có chứa ^L và hiển thị % nội dung đã xem đƣợc (^L không bị mất), nhấn phím space (hoặc enter) để tiếp tục. Nếu có tùy chọn -l, nội dung của file sẽ đƣợc hiển thị nhƣ bình thƣờng nhƣng ở một khuôn dạng khác, tức là dấu ^L sẽ mất và trƣớc dòng có chứa ^L sẽ có thêm một dòng trống. -p : không cuộn màn hình, thay vào đó là xóa những gì có trên màn hình và hiển thị tiếp nội dung file. -c : không cuộn màn hình, thay vào đó xóa màn hình và hiển thị nội dung file bắt đầu từ đỉnh màn hình. -s : xóa bớt các dòng trống liền nhau trong nội dung file chỉ giữ lại một dòng. -u : bỏ qua dấu gạch chân. +/xâumẫu : tùy chọn +/xâumẫu chỉ ra một chuỗi sẽ đƣợc tìm kiếm trƣớc khi hiển thị mỗi file. +dòng-số : bắt đầu hiển thị từ dòng thứ dòng-số. * Xem qua nội dung file Các đoạn trƣớc cho biết cách thức xem nội dung của một file nhờ lệnh cat hay more. Trong Linux cũng có các lệnh khác cho nhiều cách thức để xem nội dung của một file. Trƣớc hết, chúng ta hãy làm quen với lệnh head. Cú pháp lệnh: head [tùy-chọn] [file] Lệnh này mặc định sẽ đƣa ra màn hình 10 dòng đầu tiên của mỗi file. Nếu có nhiều hơn một file, thì lần lƣợt tên của file và 10 dòng nội dung đầu tiên sẽ đƣợc hiển thị. Nếu không có tham số file, hoặc file là dấu "-", thì ngầm định sẽ đọc từ thiết bị vào chuẩn. Các tuỳ chọn: -c, bytes=cỡ : hiển thị cỡ (số nguyên) ký tự đầu tiên trong nội dung file (cỡ có thể nhận giá trị là b cho 512, k cho 1K, m cho 1 Meg) -n, lines=n : hiển thị n (số nguyên) dòng thay cho 10 dòng ngầm định. -q, quiet, silent : không đƣa ra tên file ở dòng đầu. -v, verbose : luôn đƣa ra tên file ở dòng đầu. help : hiển thị trang trợ giúp và thoát. - 33 -
- * Xem qua nội dung file Cú pháp lệnh: tail [tùy-chọn] [file] Lệnh tail ngầm định đƣa ra màn hình 10 dòng cuối trong nội dung của các file. Nếu có nhiều hơn một file, thì lần lƣợt tên của file và 10 dòng cuối sẽ đƣợc hiển thị. Nếu không có tham số file, hoặc file là dấu "-" thì ngầm định sẽ đọc từ thiết bị vào chuẩn. Các tùy chọn: retry : cố gắng mở một file khó truy nhập khi bắt đầu thực hiện lệnh tail. -c, bytes=n : hiển thị n (số) ký tự sau cùng. -f, follow[={name | descritptor}] : sau khi hiện nội dung file sẽ hiện thông tin về file: -f, follow, và follow=descriptor là nhƣ nhau. -n, lines=n : hiển thị n (số) dòng cuối cùng của file thay cho 10 dòng ngầm định. max-unchanged-stats=n : hiển thị tài liệu về file (ngầm định n là 5). max-consecutive-size-changes=n : hiển thị tài liệu về file (ngầm định n là 200). pid=PID : kết hợp với tùy chọn -f, chấm dứt sau khi tiến trình có chỉ số = PID lỗi. -q, quiet, silent : không đƣa ra tên file ở dòng đầu trong nội dung đƣợc hiển thị. -s, sleep-interval=k : kết hợp với tùy chọn -f, dừng k giây giữa các hoạt động. -v, verbose : luôn hiển thị tên của file. help : hiển thị trang trợ giúp và thoát. * Thêm số thứ tự của các dòng trong file Cú pháp lệnh: nl [tùy-chọn] Lệnh này sẽ đƣa nội dung file ra thiết bị ra chuẩn, với số thứ tự của dòng đƣợc thêm vào. Nếu không có file (tên file), hoặc khi file là dấu "-", thì đọc nội dung từ thiết bị vào chuẩn. Các tuỳ chọn: -b, body-numbering=STYLE : sử dụng kiểu STYLE cho việc đánh thứ tự các dòng trong nội dung file. Có các kiểu STYLE sau: o a : đánh số tất cả các dòng kể cả dòng trống; o t : chỉ đánh số các dòng không trống; o n : không đánh số dòng. -d, section-delimiter=CC : sử dụng CC để đánh số trang logic (CC là hai ký tự xác định phạm vi cho việc phân trang logic). -f, footer-numbering=STYLE : sử dụng kiểu STYLE để đánh số các dòng trong nội dung file (một câu có thể có hai dòng ). -h, header-numbering=STYLE : sử dụng kiểu STYLE để đánh số các dòng trong nội dung file. -i, page-increment=số : đánh số thứ tự của dòng theo cấp số cộng có công sai là số. -l, join-blank-lines=số :nhóm số dòng trống vào thành một dòng trống. -n, number-format=khuôn : chèn số dòng theo khuôn (khuôn: ln - căn trái, không có số 0 ở đầu; rn - căn phải, không có số 0 ở đầu; rz - căn phải và có số 0 ở đầu) -p, no-renumber : không thiết lập lại số dòng tại mỗi trang logic. -s, number-separator=xâu : thêm chuỗi xâu vào sau số thứ tự của dòng. -v, first-page=số : số dòng đầu tiên trên mỗi trang logic. -w, number-width=số : hiển thị số thứ tự của dòng trên cột thứ số. - 34 -
- help : hiển thị trang trợ giúp và thoát. * Tìm sự khác nhau giữa hai file Cú pháp lệnh: diff [tuỳ-chọn] Trong trƣờng hợp đơn giản, lệnh diff sẽ so sánh nội dung của hai file. Nếu file1 là một thƣ mục còn file2 là một file bình thƣờng, diff sẽ so sánh file có tên trùng với file2 trong thƣ mục file1 với file2. Nếu cả file1 và file2 đều là thƣ mục, diff sẽ thực hiện sự so sánh lần lƣợt các file trong cả hai thƣ mục theo thứ tự từ a-z (sự so sánh này sẽ không đệ qui nếu tuỳ chọn -r hoặc recursive không đƣợc đƣa ra). Tất nhiên so sánh giữa hai thƣ mục không thể chính xác nhƣ khi so sánh hai file. Các tuỳ chọn: -a: xem tất cả các file ở dạng văn bản và so sánh theo từng dòng. -b: bỏ qua sự thay đổi về số lƣợng của ký tự trống. -B: bỏ qua mọi sự thay đổi mà chỉ chèn hoặc xoá các dòng trống. brief: chỉ thông báo khi có sự khác nhau mà không đƣa ra chi tiết nội dung khác nhau. -d: tìm ra sự khác biệt nhỏ (tuỳ chọn này có thể làm chậm tốc độ làm việc của lệnh diff). exclude-from=file: khi so sánh thƣ mục, bỏ qua các file và các thƣ mục con có tên phù hợp với mẫu có trong file. -i: so sánh không biệt chữ hoa chữ thƣờng. -r: thực hiện so sánh đệ qui trên thƣ mục. -s: thông báo khi hai file là giống nhau. -y: hiển thị hai file cạnh nhau để dễ phân biệt sự khác nhau. 3.4.5 Các lệnh tìm file * Tìm theo nội dung file Lệnh grep cũng nhƣ lệnh ls là hai lệnh rất quan trọng trong Linux. Lệnh này có hai tác dụng cơ bản nhƣ sau: Lọc đầu ra của một lệnh: | grep Tìm dòng chứa mẫu đã định trong file đƣợc chỉ ra: grep [tùy-chọn] [file] Lệnh grep hiển thị tất cả các dòng có chứa mẫu-lọc trong file đƣợc chỉ ra (hoặc từ thiết bị vào chuẩn nếu không có file hoặc file có dạng là dấu "-") Các tùy chọn: -G, basic-regexp : xem mẫu lọc nhƣ một biểu thức thông thƣờng. Điều này là ngầm định. -E, extended-regexp : xem mẫu lọc nhƣ một biểu thức mở rộng. -F, fixed-strings : xem mẫu nhƣ một danh sách các xâu cố định, đƣợc phân ra bởi các dòng mới. Ngoài lệnh grep còn có hai lệnh là egrep và fgrep. egrep tƣơng tự nhƣ lệnh grep -E, fgrep tƣơng tự với lệnh grep -F . Lệnh grep còn có các tùy chọn sau: -A NUM, after-context=NUM : đƣa ra NUM dòng nội dung tiếp theo sau dòng có chứa mẫu. -B NUM, before-context=NUM : đƣa ra NUM dòng nội dung trƣớc dòng có chứa mẫu. - 35 -
- -C [NUM], context[=NUM] : hiển thị NUM dòng (mặc định là 2 dòng) nội dung. -NUM : giống context=NUM đƣa ra các dòng nội dung trƣớc và sau dòng có chứa mẫu. Tuy nhiên, grep sẽ không đƣa ra dòng nào nhiều hơn một lần. -b, byte-offset : hiển thị địa chỉ tƣơng đối trong file đầu vào trƣớc mỗi dòng đƣợc đƣa ra -c, count : đếm số dòng tƣơng ứng chứa mẫu trong file đầu vào thay cho việc hiển thị các dòng chứa mẫu. -d ACTION, directories=ACTION : nếu đầu vào là một thƣ mục, sử dụng ACTION để xử lý nó. Mặc định, ACTION là read, tức là sẽ đọc nội dung thƣ mục nhƣ một file thông thƣờng. Nếu ACTION là skip, thƣ mục sẽ bị bỏ qua. Nếu ACTION là recurse, grep sẽ đọc nội dung của tất cả các file bên trong thƣ mục (đệ quy); tùy chọn này tƣơng đƣơng với tùy chọn -r. -f file, file=file : lấy các mẫu từ file, một mẫu trên một dòng. File trống chứa đựng các mẫu rỗng, và các dòng đƣa ra cũng là các dòng trống. -H, with-file : đƣa ra tên file trên mỗi dòng chứa mẫu tƣơng ứng. -h, no-filename : không hiển thị tên file kèm theo dòng chứa mẫu trong trƣờng hợp tìm nhiều file. -i : hiển thị các dòng chứa mẫu không phân biệt chữ hoa chữ thƣờng. -l : đƣa ra tên các file trùng với mẫu lọc. -n, line-number : thêm số thứ tự của dòng chứa mẫu trong file. -r, recursive : đọc tất cả các file có trong thƣ mục (đệ quy). -s, no-messages : bỏ qua các thông báo lỗi file không đọc đƣợc hoặc không tồn tại. -v, invert-match : hiển thị các dòng không chứa mẫu. -w, word-regexp : chỉ hiển thị những dòng có chứa mẫu lọc là một từ trọn vẹn. -x, line-regexp : chỉ hiển thị những dòng mà nội dung trùng hoàn toàn với mẫu lọc. * Tìm theo các đặc tính của file Các đoạn trên đây đã giới thiệu cách thức tìm file theo nội dung với các lệnh grep, egrep và fgrep. Linux còn cho phép ngƣời dùng sử dụng một cách thức khác đầy năng lực, đó là sử dụng lệnh find, lệnh tìm file theo các thuộc tính của file. Lệnh này có một sự khác biệt so với các lệnh khác, đó là các tùy chọn của lệnh là một từ chứ không phải một ký tự. Điều kiện cần đối với lệnh này là chỉ ra đƣợc điểm bắt đầu của việc tìm kiếm trong hệ thống file và những quy tắc cần tuân theo của việc tìm kiếm. Cú pháp lệnh: find [đường-dẫn] [biểu-thức] Lệnh find thực hiện việc tìm kiếm file trên cây thƣ mục theo biểu thức đƣợc đƣa ra. Mặc định đƣờng dẫn là thƣ mục hiện thời, biểu thức là -print. Biểu thức có thể có những dạng sau: Các toán tử: ( EXPR ); ! EXPR hoặc -not EXPR; EXPR1 -a EXPR2 hoặc EXPR1 –and EXPR2; EXPR1 -o EXPR2 hoặc EXPR1 -or EXPR2; và EXPR1, EXPR2 Các tùy chọn lệnh: tất cả các tùy chọn này luôn trả về giá trị true và đƣợc đặt ở đầu biểu thức o -daystart : đo thời gian (-amin, -atime, -cmin, -ctime, -mmin, -mtime). o -depth : thực hiện tìm kiếm từ nội dung bên trong thƣ mục trƣớc (mặc định việc tìm kiếm đƣợc thực hiện bắt đầu tại gốc cây thƣ mục có chứa file cần tìm). - 36 -
- o -follow : (tùy chọn này chỉ áp dụng cho thƣ mục) nếu có tùy chọn này thì các liên kết tƣợng trƣng có trong một thƣ mục liên kết sẽ đƣợc chỉ ra. o -help, help : hiển thị kết quả của lệnh find và thoát. Các test o -amin n : tìm file đƣợc truy nhập n phút trƣớc. o -atime n : tìm file đƣợc truy nhập n*24 giờ trƣớc. o -cmin n : trạng thái của file đƣợc thay đổi n phút trƣớc đây. o -ctime n : trạng thái của file đƣợc thay đổi n*24 giờ trƣớc đây. o -empty : file rỗng và hoặc là thƣ mục hoặc là file bình thƣờng. o -fstype kiểu : file thuộc hệ thống file với kiểu. o -gid n : chỉ số nhóm của file là n. o -group nhóm : file thuộc quyền sở hữu của nhóm. o -links n : file có n liên kết. o -mmin n : dữ liệu của file đƣợc sửa lần cuối vào n phút trƣớc đây. o -mtime n : dữ liệu của file đƣợc sửa vào n*24 giờ trƣớc đây. o -name mẫu : tìm kiếm file có tên là mẫu. Trong tên file có thể chứa cả các ký tự đại diện nhƣ o dấu "*", "?" o -type kiểu : tìm các file thuộc kiểu với kiểu nhận các giá trị: - b: đặc biệt theo khối - c: đặc biệt theo ký tự - d: thƣ mục - p: pipe - f: file bình thƣờng - l: liên kết tƣợng trƣng - s: socket o -uid n: chỉ số ngƣời sở hữu file là n. o -user tên-ngƣời: file đƣợc sở hữu bởi ngƣời dùng tên-ngƣời. Các hành động o -exec lệnh : tùy chọn này cho phép kết hợp lệnh find với một lệnh khác để có đƣợc thông tin nhiều hơn về các thƣ mục có chứa file cần tìm. Tùy chọn exec phải sử dụng dấu {} - nó sẽ thay o thế cho tên file tƣơng ứng, và dấu '\' tại cuối dòng lệnh, (phải có khoảng trống giữa {} và '\'). Kết thúc lệnh là dấu ';' o -fprint file : hiển thị đầy đủ tên file vào trong file. Nếu file không tồn tại thì sẽ đƣợc tạo ra, nếu o đã tồn tại thì sẽ bị thay thế nội dung. o -print : hiển thị đầy đủ tên file trên thiết bị ra chuẩn. o -ls : hiển thị file hiện thời theo khuôn dạng: liệt kê danh sách đầy đủ kèm cả số thƣ mục, chỉ số của mỗi file, với kích thƣớc file đƣợc tính theo khối (block). 3.5 Nén và sao lƣu các file 3.5.1 Sao lưu các file (lệnh tar) Một vấn đề rất quan trọng trong việc sao lƣu đó là lựa chọn phƣơng tiện sao lƣu. cần phải quan tâm đến giá cả, độ tin cậy, tốc độ, ích lợi cũng nhƣ tính khả dụng của các phƣơng tiện sao lƣu. Có rất nhiều các công cụ có thể đƣợc sử dụng để sao lƣu. Các công cụ truyền thống là tar, cpio và dump (công cụ trong tài liệu này là tar). Ngoài ra còn rất nhiều các công cụ khác có thể lựa chọn tùy theo phƣơng tiện sao lƣu có trong hệ thống. - 37 -
- Có hai kiểu sao lƣu là sao lƣu theo kiểu toàn bộ (full backup) và sao lƣu theo kiểu tăng dần (incremental backup). Sao lƣu toàn bộ thực hiện việc sao mọi thứ trên hệ thống file, bao gồm tất cả các file. Sao lƣu tăng dần chỉ sao lƣu những file đƣợc thay đổi hoặc đƣợc tạo ra kể từ đợt sao lƣu cuối cùng. Cú pháp lệnh: tar [tùy-chọn] [ , ] [ , ] Lệnh (chƣơng trình) tar đƣợc thiết kế để tạo lập một file lƣu trữ duy nhất. Với tar, có thể kết hợp nhiều file thành một file duy nhất có kích thƣớc lớn hơn, điều này sẽ giúp cho việc di chuyển file hoặc sao lƣu băng từ trở nên dễ dàng hơn nhiều. Các tùy chọn: -c, create : tạo file lƣu trữ mới. -d, diff, compare : tìm ra sự khác nhau giữa file lƣu trữ và file hệ thống đƣợc lƣu trữ. delete : xóa từ file lƣu trữ (không sử dụng cho băng từ). -r, append : chèn thêm file vào cuối file lƣu trữ. -t, list : liệt kê nội dung của một file lƣu trữ. -u, update : chỉ thêm vào file lƣu trữ các file mới hơn các file đã có. -x, extract, get : tách các file ra khỏi file lƣu trữ. -C, directory tên-thƣ-mục : thay đổi đến thƣ mục có tên là tên-thƣ-mục. checkpoint : đƣa ra tên thƣ mục khi đọc file lƣu trữ. -f, file [HOSTNAME:]file : tùy chọn này xác định tên file lƣu trữ hoặc thiết bị lƣu trữ là file (nếu không có tùy chọn này, mặc định nơi lƣu trữ là /dev/rmt0). -h, dereference : không hiện các file liên kết mà hiện các file mà chúng trỏ tới. -k, keep-old-files : giữ nguyên các file lƣu trữ đang tồn tại mà không ghi đè file lƣu trữ mới lên chúng. -K, starting-file file : bắt đầu tại file trong file lƣu trữ. -l, one-file-system : tạo file lƣu trữ trên hệ thống file cục bộ. -M, multi-volume : tùy chọn này đƣợc sử dụng khi dung lƣợng của file cần sao lƣu là lớn và không chứa hết trong một đơn vị lƣu trữ vật lý. -N, after-date DATE, newer DATE : chỉ lƣu trữ các file mới hơn các file đƣợc lƣu trữ trong ngày DATE. remove-files : xóa file gốc sau khi đã sao lƣu chúng vào trong file lƣu trữ. totals : đƣa ra tổng số byte đƣợc tạo bởi tùy chọn create. -v, verbose : hiển thị danh sách các file đã đƣợc xử lý. 3.5.2 Nén dữ liệu Việc sao lƣu rất có ích nhƣng đồng thời nó cũng chiếm rất nhiều không gian cần thiết để sao lƣu. Để giảm không gian lƣu trữ cần thiết, có thể thực hiện việc nén dữ liệu trƣớc khi sao lƣu, sau đó thực hiện việc giải nén để nhận lại nội dung trƣớc khi nén. Trong Linux có khá nhiều cách để nén dữ liệu, tài liệu này giới thiệu hai phƣơng cách phổ biến là gzip và compress. * Nén, giải nén và xem nội dung các file với lệnh gzip, gunzip và zcat Cú pháp các lệnh: gzip [tùy-chọn] [ -S suffix ] [ ] gunzip [tùy-chọn] [ -S suffix ] [ ] zcat [tùy-chọn] [ ] Lệnh gzip sẽ làm giảm kích thƣớc của file và khi sử dụng lệnh này, file gốc sẽ bị thay thế bởi file nén với phần mở rộng là .gz, các thông tin khác liên quan đến file không thay đổi. Nếu không có tên file nào đƣợc chỉ ra thì thông tin từ thiết bị vào chuẩn sẽ đƣợc nén và gửi ra thiết bị ra chuẩn. Trong một vài trƣờng hợp, lệnh này sẽ bỏ qua liên kết tƣợng trƣng. - 38 -
- Nếu tên file nén quá dài so với tên file gốc, gzip sẽ cắt bỏ bớt. gzip sẽ chỉ cắt phần tên file vƣợt quá 3 ký tự (các phần đƣợc ngăn cách với nhau bởi dấu chấm). Nếu tên file gồm nhiều phần nhỏ thì phần dài nhất sẽ bị cắt bỏ. Ví dụ, tên file là gzip.msdos.exe, khi đƣợc nén sẽ có tên là gzip.msd.exe.gz. File đƣợc nén có thể đƣợc khôi phục trở lại dạng nguyên thể với lệnh gzip -d hoặc gunzip. Với lệnh gzip có thể giải nén một hoặc nhiều file có phần mở rộng là .gz, -gz, .z, -z, _z hoặc .Z gunzip dùng để giải nén các file nén bằng lệnh gzip, zip, compress, compress -H. Lệnh zcat đƣợc sử dụng khi muốn xem nội dung một file nén trên thiết bị ra chuẩn. Các tùy chọn: -c, stdout to-stdout : đƣa ra trên thiết bị ra chuẩn; giữ nguyên file gốc không có sự thay đổi. Nếu có nhiều hơn một file đầu vào, đầu ra sẽ tuần tự là các file đƣợc nén một cách độc lập. -d, decompress uncompress : giải nén. -f, force : thực hiện nén hoặc giải nén thậm chí file có nhiều liên kết hoặc file tƣơng ứng thực sự đã tồn tại, hay dữ liệu nén đƣợc đọc hoặc ghi trên thiết bị đầu cuối. -h, help : hiển thị màn hình trợ giúp và thoát. -l, list : hiển thị những thông tin sau đối với một file đƣợc nén: o compressed size: kích thƣớc của file nén o uncompressed size: kích thƣớc của file đƣợc giải nén o ratio: tỷ lệ nén (0.0% nếu không biết) o uncompressed_name: tên của file đƣợc giải nén Nếu kết hợp với tùy chọn verbose, các thông tin sau sẽ đƣợc hiển thị: o method: phƣơng thức nén o crc: CRC 32-bit cho dữ liệu đƣợc giải nén o date & time: thời gian các file đƣợc giải nén Nếu kết hợp với tùy chọn name, tên file đƣợc giải nén, thời gian giải nén đƣợc lƣu trữ trong file nén Nếu kết hợp với tùy chọn verbose, tổng kích thƣớc và tỷ lệ nén của tất cả các file sẽ đƣợc hiển thị Nếu kết hợp với tùy chọn quiet, tiêu đề và tổng số dòng của các file nén không đƣợc hiển thị. -n, no-name : khi nén, tùy chọn này sẽ không lƣu trữ tên file gốc và thời gian nén, (tên file gốc sẽ luôn đƣợc lƣu nếu khi nén tên của nó bị cắt bỏ). Khi giải nén, tùy chọn này sẽ không khôi phục lại tên file gốc cũng nhƣ thời gian thực hiện việc nén. Tùy chọn này đƣợc ngầm định. -N, name : tùy chọn này ngƣợc với tùy chọn trên (-n), nó hữu ích trên hệ thống có sự giới hạn về độ dài tên file hay khi thời điểm nén bị mất sau khi chuyển đổi file. -q, quiet : bỏ qua mọi cảnh báo. -r, recursive : nén thƣ mục. -S .suf, suffix .suf : sử dụng phần mở rộng .suf thay cho .gz. Bất kỳ phần mở rộng nào cũng có thể đƣợc đƣa ra, nhƣng các phần mở rộng khác .z và .gz sẽ bị ngăn chặn để tránh sự lộn xộn khi các file đƣợc chuyển đến hệ thống khác. -t, test : tùy chọn này đƣợc sử dụng để kiểm tra tính toàn vẹn của file đƣợc nén -v, verbose : hiển thị phần trăm thu gọn đối với mỗi file đƣợc nén hoặc giải nén -#, fast, best : điều chỉnh tốc độ của việc nén bằng cách sử dụng dấu #, - 39 -