Giáo trình Hệ điều hành mạng Linux
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Hệ điều hành mạng Linux", để 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:
giao_trinh_he_dieu_hanh_mang_linux.pdf
Nội dung text: Giáo trình Hệ điều hành mạng Linux
- Giáo trình Hệ điều hành mạng Linux
- MỤC LỤC BẢNG TỪ VIẾT TẮT 5 CHƯƠNG 1: TỔNG QUAN VỀ UNIX/ LINUX 6 1. Lịch sử phát triển của Unix 6 2. Lịch sử phát triển của Linux 8 2.1 Một số đặc điểm chính của Linux 10 2.2 Các thành phần chính của hệ điều hành Linux 13 CHƯƠNG 2: HỆ THỐNG FILE TRONG LINUX 20 1. Các kiểu file có trong Linux 20 2. Quy ước tên file trong Linux 21 3. Cấu trúc hệ thống file của Linux 22 4. Cấu trúc cây thư mục của hệ thống file trong Linux 26 5. Các file chuẩn vào /ra trên Linux 30 CHƯƠNG 3: THAO TÁC TRÊN HỆ THỐNG FILE CỦA UNIX . 32 1. Quản lý quyền thâm nhập hệ thống file 32 2. Nhóm lệnh quản lý quyền thâm nhập file 35 2.1 Lệnh chmod 35 2.2 Lệnh chown 37 2.3 Lệnh chgrp 37 3. Các lệnh thao tác trên thư mục 39 3.1 Thay đổi thư mục làm việc hiện thời với lệnh cd 39 3.2 Xem nội dung thư mục với lệnh ls 39 3.3 Tạo thư mục với lệnh mkdir 40 3.4 Xóa thư mục với lệnh rmdir 40 3.5 Xem đường dẫn thư mục hiện thời với lệnh pwd 41 3.6 Lệnh đổi tên thư mục với lệnh mv 41 4. Các lệnh thao tác trên file 41 4.1 Tạo file với lệnh touch 41 4.2 Tạo file với lệnh cat 41 4.3 Xem nội dung các file lớn với lệnh more 42 4.4 Thêm số thứ tự của các dòng trong file với lệnh nl 44 4.5 Xem nội dung file với lệnh head 45 4.6 Xem nội dung file với lệnh tail 45 4.7 Sử dụng lệnh file để xác định kiểu file 46 4.8 Lệnh wc dùng để đếm số ký tự, số từ, hay số dòng trong một file 47 4.9 So sánh nội dung hai file sử dụng lệnh diff 47 4.10 Xóa file với lệnh rm 48 4.11 Sao chép tập tin với lệnh cp 48 4.12 Đổi tên file với lệnh mv 50 4.13 Lệnh uniq loại bỏ những dòng không quan trọng trong file 50 4.14 Sắp xếp nội dung file với lệnh sort 52 4.15 Tìm theo nội dung file bằng lệnh grep 53 4.16 Tìm theo các đặc tính của file với lệnh find 58 4.17 Nén và sao lưu các file 61 2
- 4.18 Liên kết (link) tập tin 66 5. Các lệnh và tiện ích hệ thống 67 5.1 Các lệnh đăng nhập và thoát khỏi hệ thống 67 5.2 Lệnh thay đổi mật khNu passwd 70 5.4 Lệnh date xem, thiết đặt ngày, giờ 72 5.5 Lệnh xem lịch cal 74 5.6 Xem thông tin hệ thống uname 75 5.7 Thay đổi nội dung dấu nhắc shell 75 5.8 Lệnh gọi ngôn ngữ tính toán số học 76 5.9 Tiện ích mc 79 5.10 Sử dụng trình soạn thảo VI 89 5.11 Sử dụng tài liệu giúp đỡ man 93 CHƯƠNG 4: LẬP TRÌNH TRONG LINUX 96 1. LẬP TRÌNH SHELL 96 1.1 Khái niệm shell 96 1.2 Một số đặc điểm của Shell 96 1.3 Lập trình đường ống 98 1.4 Lập trình Shell Script 99 1.5 Điều khiển luồng 109 1.6 Hàm 122 1.7 Mảng 123 1.8 Một số các lệnh thường dùng trong lập trình Shell 130 1.8 Đệ quy 132 1.9 Lập trình hội thoại 133 1.10 Một số ví dụ về Shell 135 2. Lập trình C trên Linux 149 2.1 Trình biên dịch gcc 149 2.2 Công cụ GN U make 152 2.3 Sử dụng nhãn file (mô tả file – file descriptor) 153 2.4 Thư viện liên kết 159 2.5 Các công cụ cho thư viện 167 2.6 Biến môi trường và file cấu hình 169 2.7 Sử dụng gdb để gỡ lỗi 169 CHƯƠNG 5: QUẢN LÝ TÀI NGUYÊN VÀ TRUYỀN THÔNG TRONG LINUX 171 1. Quản lý tiến trình 171 2. Các lệnh cơ bản trong quản lý tiến trình 173 2.1 Sử dụng lệnh ps trong quản lý tiến trình 173 2.2 Hủy một tiến trình sử dụng lệnh kill 174 2.3 Cho máy ngừng hoạt động một thời gian với lệnh sleep 176 2.4 Xem cây tiến trình với lệnh pstree 176 2.5 Lệnh thiết đặt lại độ ưu tiên của tiến trình nice và lệnh renice 178 2.6 Lệnh fg và lệnh bg 178 3. Quản lý trị hệ thống 181 3.1 Khởi động và đóng tắt hệ thống 181 3.2 Tìm hiểu về trình nạp Linux 181 3
- 3.3 Tìm hiểu GRUB, trình nạp Linux. 183 3.4 Quá trình khởi động 183 4. Quản trị người dùng 184 4.1 Superuser (root) 184 4.2 Tài khoản người dùng 185 4.3 Thêm người dùng với lệnh useradd 187 4.4 Thay đổi thông tin của user 188 4.5 Hủy user 189 4.6 Tạo nhóm người dùng groupadd 189 4.7 Xác định người dùng đang đăng nhập (lệnh who) 190 4.8 Để xác định thông tin người dùng với lệnh id 191 5. Quản trị tài nguyên 192 5.1 Quản lý tài nguyên với lệnh quota 192 5.2 Lệnh quản lý đĩa với lệnh du và df 193 6 Truyền thông trong Linux 196 6.1. Lệnh đặt tên máy 196 6.2. Lệnh ifconfig 196 6.3 Lệnh write 197 6.4 Lệnh mail 198 6.5 Lệnh talk 200 TÀI LIỆU THAM KHẢO 202 PHỤ LỤC 203 1. Giới thiệu một số phiên bản hệ điều hành Linux thông dụng hiện nay và cách cài đặt 203 1.1 Hướng dẫn cài đặt hệ điều hành Redhat Linux 7.1 203 1.2 Hướng dẫn sử dụng hệ điều hành Ubuntu và các phiên bản của nó 220 2. Cài đặt WEBMIN 220 3. Cài đặt WEBSERVER 220 4. Cài đặt FILE SERVER 220 4
- BẢNG TỪ VIẾT TẮT Hệ điều hành HĐH Multics Multiplexed Information and Computing Service Berkley Software Distribution BSD Midnight Commander mc 5
- CHƯƠNG 1: TỔNG QUAN VỀ UNIX/ LINUX 1. Lịch sử phát triển của Unix Giữa năm 1960, AT&T Bell Laboratories và một số trung tâm khác tham gia vào một cố gắng tạo ra một hệ điều hành mới được đặt tên là Multics. Đến năm 1969, chương trình Multics bị bãi bỏ vì đó là một dự án quá nhiều tham vọng. Thậm trí nhiều yêu cầu đối với Multics thời đó đến nay vẫn chưa có được trên các Unix mới nhất. N hưng Ken Thompson, Dennis Ritchie, và một số đồng nghiệp của Bell Labs đã không bỏ cuộc. Thay vì xây dựng một HĐH làm nhiều việc một lúc, họ quyết định phát triển một HĐH đơn giản chỉ làm tốt một việc là chạy chương trình (run program). HĐH sẽ có rất nhiều các công cụ (tool) nhỏ, đơn giản, gọn nhẹ (compact) và chỉ làm tốt một công việc. Bằng cách kết hợp nhiều công cụ lại với nhau, họ sẽ có một chương trình thực hiện một công việc phức tạp. Đó cũng là cách thức người lập trình viết ra chương trình. Peter N eumann đặt tên Unix cho HĐH đơn giản này tiếp tục phát triển theo mô hình ban đầu và đặt ra một hệ thống tập tin mà sau này được phát triển thành hệ thống tập tin của UN IX. N ăm 1973, Riche và Thompson viết lại nhân của hệ điều hành UN IX trên ngôn ngữ C, và hệ điều hành đã trở nên dễ dàng cài đặt tới các loại máy tính khác nhau; tính chất như thế được gọi là tính khả chuyển của UN IX. Trước đó, khoảng 6
- năm 1971, hệ điều hành được thể hiện trên ngôn ngữ B (mà dựa trên ngôn ngữ B, Ritche đã phát triển thành ngôn ngữ C). Khoảng năm 1977 bản quyền của Unix được giải phóng và HĐH Unix trở thành một sản phNm thương mại. Hai dòng UN IX: System V của AT&T, N ovell và Berkeley Software Distribution (BSD) của Đại học Berkeley. + System V: Các phiên bản UN IX cuối cùng do AT&T xuất bản là System III và một vài phát hành (releases) của System V. Hai bản phát hành gần đây của System V là Release 3 (SVR3.2) và Release 4.2 (SVR4.2). Phiên bản SYR 4.2 là phổ biến nhất cho từ máy PC cho tới máy tính lớn. + BSD: Từ 1970 Computer Science Research Group của University of California tại Berkeley (UCB) xuất bản nhiều phiên bản UN IX, được biết đến dưới tên Berkeley Software Distribution, hay BSD. Cải biến của PDP- 11 được gọi là 1BSD và 2BSD. Trợ giúp cho các máy tính của Digital Equipment Corporation VAX được đưa vào trong 3BSD. Phát triển của VAX được tiếp tục với 4.0BSD, 4.1BSD, 4.2BSD, và 4.3BSD Trước 1992, UN IX là tên thuộc sở hữu của AT&T. Từ năm 1992, khi AT&T bán bộ phận Unix cho N ovell, tên Unix thuộc sở hữu của X/Open foundation. Tất cả các hệ điều hành thỏa mãn một số yêu cầu đều có thể gọi là Unix. N goài ra, Institute of Electrical and Electronic Engineers (IEEE) đã thiết lập chuNn "An Industry-Recognized Operating Systems Interface Standard based on the UN IX Operating System." Kết quả cho ra đời POSIX.1 (cho giao diện C) và POSIX.2 (cho hệ thống lệnh trên Unix) Tóm lại, vấn đề chuNn hóa UN IX vẫn còn rất xa kết quả cuối cùng. N hưng đây là quá trình cần thiết có lợi cho sự phát triển của ngành tin học nói chung và sự sống còn của HĐH UN IX nói riêng. 7
- Hình 1.1 Các phiên bản của Unix Các nhóm nhà cung cấp khác nhau về UN IX đang hoạt động trong thời gian hiện nay được kể đến như sau: + Unix International (viết tắt là UI). UI là một tổ chức gồm các nhà cung cấp Formatted: Bullets and Numbering thực hiện việc chuyển nhượng hệ thống UN IX-5 và cung cấp bản AT&T theo các nhu cầu và thông báo phát hành mới, chẳng hạn như điều chỉnh bản quyền. Giao diện đồ họa người dùng là Open Look. + Open Software Foundation (OSF). OSF được hỗ trợ bởi IBM, DEC, HP theo hướng phát triển một phiên bản của Unix nhằm tranh đua với hệ thống UN IX-5 phiên bản 4. Phiên bản này có tên là OSF/1 với giao diện đồ họa người dùng được gọi là MOTIF. + Free SoftWare Foundation (FSF): một cộng đồng do Richard Stallman khởi xướng năm 1984 chủ trương phát hành các phần mềm sử dụng tự do, trên cơ sở một hệ điều hành thuộc loại UN IX. 2. Lịch sử phát triển của Linux Linux là một HĐH dạng UN IX (Unix-like Operating System) chạy trên máy PC với bộ điều khiển trung tâm (CPU) Intel 80386 hoặc các thế hệ sau đó, hay các bộ vi xử lý trung tâm tương thích như AMD, Cyrix. Linux ngày nay còn có thể chạy trên các máy Macintosh hoặc SUN Sparc. Linux thỏa mãn chuNn POSIX.1. Linux được viết lại toàn bộ từ con số không, tức là không sử dụng một dòng lệnh nào của Unix, để tránh vấn đề bản quyền của Unix, tuy nhiên hoạt động của 8
- Linux hoàn toàn dựa trên nguyên tắc của hệ điều hành Unix. Vì vậy nếu một người nắm được Linux, thì sẽ nắm được UN IX. N ên chú ý rằng giữa các Unix sự khác nhau cũng không kém gì giữa Unix và Linux. N ăm 1991 Linus Torvalds - sinh viên của đại học tổng hợp Helsinki, Phần lan, bắt đầu xem xét Minix, một phiên bản của Unix, làm ra với mục đích nghiên cứu cách tạo ra một hệ điều hành Unix chạy trên máy PC với bộ vi xử lý Intel 80386. N gày 25/8/1991, Linus cho ra version 0.01 và thông báo trên comp.os.minix của Internet về chương trình của mình. 1/1992, Linus cho ra version 0.12 với shell và C compiler, Linus đặt tên HĐH của mình là Linux. 1994, phiên bản chính thức 1.0 được phát hành. Quá trình phát triển của Linux được tăng tốc bởi sự giúp đỡ của chương trình GN U, đó là chương trình phát triển các Unix có khả năng chạy trên nhiều platform. Đến hôm nay, cuối 2001, phiên bản mới nhất của Linux kernel là 2.4.2-2, có khả năng điều khiển các máy đa bộ vi xử lý và rất nhiều các tính năng khác. Hiện nay, Linux là một hệ điều hành giống Unix đầy đủ và độc lập. N ó có thể chạy X-Window, TCP/IP, Emacs, Web, thư điện tử và các phần mềm khác. Hầu hết các phần mềm miễn phí và thương mại đều được chuyển lên Linux. Rất nhiều các nhà phát triển phần mềm bắt đầu chuyển sang viết trên Linux. N gười ta thực hiện các phép đo benchmarks trên Linux và thấy rằng chúng thực hiện nhanh hơn khi thực hiện trên các máy trạm của Sun Microystem và Compaq, thậm chí nhiều khi còn nhanh hơn cả trên Windows 98 và WindowN T. Thật khó có thể hình dung được hệ điều hành “Unix” tí hon này phát triển nhanh thế nào! Bây giờ, sau khi đã trải qua 1 thời gian rất dài phát triển và hoàn thiện bởi cộng đồng thế giới, Linux càng ngày càng trở nên mạnh mẽ, ổn định và độ tin cậy cao, và được chọn để sử dụng trong các cơ quan chính phủ. Các nước như Trung Quốc, N hật Bản, Đức và một số các nước châu Âu đều cũng đã có kế họach phát triển riêng Linux cho đất nước của họ. Ở Việt N am trong những năm gần đây đã có nhiều nhóm nghiên cứu và phát triển Linux sử dụng tiếng Việt là ngôn ngữ chính. Trong giáo trình này Linux được sử dụng như một ví dụ cho việc tìm hiểu kỹ hơn về hệ điều hành Unix. 9
- Vấn đề phân phối và giấy phép Linux 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 cậ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, chuNn hóa. N hữ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ụ UN IX 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ỏ. N hà 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 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. N hâ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 GN U GPL. 2.1 Một số đặc điểm chính của Linux Đa nền Linux ban đầu được xem là bản sao của Unix và vận hành trên các máy tính cá nhân được trang bị bộ xử lý 386, 486 hoặc các bộ xử lý cấp cao hơn. Mặc dù ban đầu nó được phát triển cho các cấu trúc x86 nhưng hiện nay nó có thể vận hành trên các nền khác nhau như Alpha, Sparc, Dec, Sun, Power PC và một số nền 68000 như 10
- Atari, Amiga N goài ra Linux còn chạy trên một số máy MIPS và các máy tính cá nhân mạnh. Đa chương trình Một thời điểm một người sử dụng có thể thực hiện đồng thời nhiều tác vụ. Với hệ điều hành đơn chương trình như MS-DOS một lệnh thực hiện sẽ chiếm toàn bộ thời gian CPU xử lý, ta chỉ có thể thực hiện lệnh kế khi lệnh trước đó đã được thực hiện xong. Còn trong hệ điều hành UN IX ta có thể đặt lệnh chạy ở chế độ nền (background) đồng thời khi đó có thể thực hiện các lệnh kế. Nhiều người sử dụng N hiều người sử dụng có thể sử dụng máy tính có cài UN IX tại một thời điểm. Độc lập phần cứng Vì hệ điều hành UN IX được viết bằng ngôn ngữ cấp cao cho nên nó rất dễ cài đặt trên các cấu hình phần cứng khác. Hơn nữa với cách tổ chức các thiết bị là các tập tin đặc biệt nên việc thêm vào hay loại bỏ các thiết bị rất dễ dàng. Dùng chung thiết bị Vì Unix là môi trường nhiều người sử dụng do đó các thiết bị ngoại vi như máy in,v.v có thể được dùng chung bởi nhiều người sử dụng. Tính ổn định Linux có tính ổn định cao, đây là một trong những ưu điểm của Linux so với các hệ điều hành khác. Tính ổn định ở đây có nghĩa là nó ít bị lỗi khi sử dụng so với hầu hết các hệ điều hành khác. N gười sử dụng Linux sẽ không phải lo lắng đến chuyện máy tính của mình bị hiện tượng “treo cứng” khi đang sử dụng nữa. Thông thường lý do để ta bắt buộc phải khởi động lại hệ thống là do mất điện, nâng cấp phần cứng hoặc phần mểm. Tính bảo mật Khi làm việc trên Linux người dùng có thể an tâm hơn về tính bảo mật của hệ điều hành. Linux là hệ điều hành đa nhiệm, đa người dùng, điều này có nghĩa là có thể có nhiều người dùng vào phiên làm việc của mình trên cùng một máy tại cùng một thời điểm. Linux cung cấp các mức bảo mật khác nhau cho người sử 11
- dụng. Mỗi người sử dụng chỉ làm việc trên một không gian tài nguyên riêng, chỉ có người quản trị hệ thống mới có quyền thay đổi trong máy. Tính hoàn chỉnh Bản thân Linux đã kèm theo các trình tiện ích cần thiết. Tất cả các trình tiện ích mà ta mong đợi đều có sẵn hoặc ở một dạng tương đương rất giống. Trên Linux, các trình biên dịch như C, C++, , đều được chuNn hoá. Tính tương thích Linux tương thích hầu như hoàn toàn với hầu hết các chuNn Unix như IEEE POSIX.1, UN IX System V và BSD Unix. Trên Linux ta cũng có thể tìm thấy các trình giả lập DOS và Windows cho phép ta chạy các ứng dụng quen thuộc trên DOS và Windows. Linux cũng hỗ trợ hầu hết các phần cứng PC như đã nói phía trên. Hệ điều hành 32-bit đầy đủ N gay từ đầu Linux đã là hệ điều hành 32 bit đầy đủ. Điều đó có nghĩa là ta không còn phải lo về giới hạn bộ nhớ, các trình điều khiển EMM hay các bộ nhớ mở rộng, khi sử dụng Linux. 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. 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 Dễ cấu hình Ta không còn phải bận tâm về giới hạn 640K và tiến hành tối ưu hoá bộ nhớ mỗi lần cài đặt một trình điều khiển mới. Linux cho ta toàn quyền điều khiển về cách làm việc của hệ thống. N hư vậy, qua phần giới thiệu ban đầu này ta có thể thấy rằng Linux là một hệ Unix đủ mạnh. N ó có thể được ứng dụng dễ dàng. N goài ra, việc sử dụng công cộng rộng rãi đang làm đà để Linux phát triển nhanh. Các quy trình thiết lập cho phép cài đặt trực tiếp hệ thống đã làm nó trở nên ngày càng phổ biến đối với những người sử dụng. 12
- 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. Chính vì lẽ đó đã hình thành một số nhà cung cấp Linux trên thế giới. Bảng dưới đây là tên của một số nhà cung cấp Linux có tiếng nhất và địa chỉ website của họ. Đáng chú ý nhất là Red Hat Linux (tại Mỹ) và Red Flag Linux (tại Trung Quốc). Red Hat được coi là lâu đời và tin cậy, còn Red Flag là một công ty Linux của Trung quốc, có quan hệ với cộng đồng Linux Việt nam và chúng ta có thể học hỏi một cách trực tiếp kinh nghiệm cho quá trình đưa Linux vào Việt nam. Tên công ty Địa chỉ website Caldera OpenLinux www.caldera.com Corel Linux www.corel.com Debian GN U/Linux www.debian.com Linux Mandrake www.mandrake.com Red Hat Linux www.redhat.com Red Flag Linux www.redflag-linux.com Slackware Linux www.slackware.com SuSE Linux www.suse.com TurboLinux www.turbolinux.com www.ubuntu.com 2.2 Các thành phần chính của hệ điều hành Linux - Kernel ( N hân hệ điều hành). 13
- - Các bộ điều khiển thiết bị. - Lệnh và tiện ích. - Shell. - Windows & Graphic User Interface. Hình1.2 Các thành phần chính của HĐH Unix Kernel Là thành phần chủ yếu hay trái tim của hệ điều hành. N ó nắm nhiệm vụ điều khiển giao dịch giữa chương trình người sử dụng với các thiết bị phần cứng, xếp lịch các tiến trình để có thể thực hiện đa nhiệm, và nhiều tác vụ khác của hệ thống, và một tập các trình đơn nằm trong bộ nhớ, mọi tiến trình đều gọi chúng. N hâ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à quá 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. N hâ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 quá trình người dùng). N hân chính là cầu nối giữa chương trình ứng dụng với phần cứng. N gườ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. 14
- 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 quá trình hiện thời cùng tồn tại. Đối với Linux, số lượng quá trình có thể lên tới con số hàng nghìn. Với số lượng quá 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. 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. Các bộ điều khiển thiết bị UN IX thể hiện các thiết bị vật lý như các tập tin đặc biệt. Một tập tin đặc biệt sẽ có một điểm vào trong thư mục và có một tên tập tin. Do đó Unix cho phép người sử dụng định nghĩa tên thiết bị. Các thiết bị được chia làm hai loại: ký tự và khối. - Thiết bị ký tự đọc và ghi dòng các ký tự (ví dụ các thiết bị đầu cuối). - Thiết bị khối đọc và ghi dữ liệu trong các khối có kích thước cố định (ví dụ ổ đĩa). Thiết bị có thể đổi tên như đổi tên tập tin. Thư mục chứa các bộ điều khiển thiết bị là /dev. Lệnh và tiện ích 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ữ UN IX đượ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. 15
- 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. Các lệnh và tiện ích của Unix rất đa dạng. - Một lệnh UN IX có dạng: $lệnh [các chọn lựa] [các đối số] lệnh thường là chữ nhỏ. - Unix phân biệt chữ lớn, nhỏ. Ví dụ: $ls -c /dev Ta có thể chia lệnh thành các nhóm sau: Các lệnh khởi tạo: exit thoát khỏi hệ thống (Bourne-Shell) logout thoát khỏi hệ thống C-Shell id chỉ danh của người sử dụng logname tên người sử dụng login man giúp đỡ newgrp chuyển người sử dụng sang một nhóm mới psswd thay đổi password của người sử dụng set xác định các biến môi trường tty đặt các thông số terminal uname tên của hệ thống (host) who cho biết những ai đang thâm nhập hệ thống Trình báo màn hình: echo hiển thị dòng ký tự hay biến setcolor đặt màu nền và chữ của màn hình Desktop: bc tính biểu thức số học cal máy tính cá nhân date hiển thị và đặt ngày mail gửi - nhận thư tín điện tử mesg cấm/cho phép hiển thị thông báo trên màn hình(bởi write/hello) spell kiểm tra lỗi chính tả 16
- vi soạn thảo văn bản write/hello cho phép gửi dòng thông báo đến những người sử dụng trong hệ thống. Thư mục: cd đổi thư mục copy sao chép 2 thư mục mkdir t ạo thư mục rmdir loại bỏ thư mục pwd trình bày thư mục hiện hành Tập tin: cas/more trình bày nội dung tập tin cp sao chép một hay nhiều tập tin find tìm vị trí của tập tin grep tìm vị trí của chuỗi ký tự trong tập tin ls, l, lf, lc trình bày tên và thuộc tính của các tập tin trong thư mục mv chuyển/ đổi tên một tập tin sort sắp thứ tự nội dung tập tin wc đếm số từ trong tập tin Quản lý tiến trình: kill hủy bỏ một quá trình ps trình bày tình trạng của các quá trình sleep ngưng hoạt động một thời gian Kiểm soát chủ quyền: chgrp chuyển chủ quyền tập tin, thư mục từ một nhóm sang một nhóm khác chmod thay đổi quyền sở hữu của tập tin hay thư mục chown thay đổi người sở hữu tập tin hay thư mục Kiểm soát in: cancel ngưng in lp in tài liệu ra máy in 17
- lpstat trạng thái của hàng chờ in Shell Là bộ xử lý lệnh của người sử dụng hay nó đơn giản chỉ là một chương trình cho phép hệ thống hiểu các lệnh của người dùng. Chức năng chính của Shell là: - Sử lý tương tác: Khi Shell được sử dụng một cách tương tác, hệ thống đợi người dùng gõ vào một lệnh tại dấu nhắc lệnh. Lệnh có thể bao gồm các ký hiệu đặc biệt cho phép ta viết tắt các tên file hoặc tái định hướng nguồn vào và nguồn ra. - Lập trình: Các shell cung cấp một bộ các lệnh đặc biệt (có sẵn), cho phép ta tạo ra các chương trình có tên Shell Script. Các Shell Script rất hữu ích khi sử dụng cho việc thực thi một chuỗi các lệnh riêng biệt giống như thực thi các file BATCH trong MS-Dos. Các script cũng có thể thực thi các lệnh lặp lại nhiều lần (trong vòng lặp) hoặc có điều kiện ( if-else) giống như trong nhiều ngôn ngữ lập trình cao cấp khác. Hiện nay người ta sử dụng ba loại shell, tùy theo loại mà có cú pháp khác nhau: - Bourne-Shell : là shell cơ bản nhất, nhanh, hiệu quả, nhưng ít lệnh. - C-Shell: là shell sử dụng cú pháp giống như C và nó thuận tiện hơn cho người sử dụng tương tác Bourne-Shell, nó giống như Bourne-Shell nhưng cung cấp thêm các cấu trúc điều khiển, history, bí danh. - Korn-Shell: Kết hợp cả Bourne-Shell và C-Shell. Mỗi người dùng khi đăng nhập hệ thống thì thường có một chương trình mặc định khởi động cùng, có thể nhận biết dạng Shell ta đang sử dụng là gì thông qua file /etc/passwd. Tên chương trình Shell của ta là /bin/sh Bourne - Shell /bin/rsh Bourne – Shell /bin/jsh Bourne – Shell /bin/ksh Korn-Shell /usr/dt/bin/dtksh Korn-Shell Desktop, một phiên bản chỉ dùng cho Solaris 18
- /bin/rksh Korn-Shell /bin/csh C Shell Windows & Graphic User Interface: Giao tiếp đồ hoạ và cửa sổ là một khả năng rất mạnh của hệ điều hành Linux, nó cho phép hệ điều hành giao tiếp thân thiện hơn với người sử dụng. Hình 1.3 Giao diện Gnome của Linux Tóm lại: Đứng về phía người sử dụng ta có thể hình dung hệ điều hành Linux như sau: N gười sử dụng - lệnh Linux - biên dịch Shell - Kernel - Máy tính (phần cứng). 19
- CHƯƠNG 2: HỆ THỐNG FILE TRONG LINUX 1. Các kiểu file có trong Linux Có rất nhiều file khác nhau trong Linux, 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 Formatted: Bullets and Numbering 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 hay thực thi (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, 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 - 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 chuNn 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 20
- 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). 2. Quy ước tên file trong Linux Một đối tượng điển hình trong các hệ điều hành đó là file. 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. File có thể là một văn bản (trường hợp đặc biệt là chương trình nguồn trên C, PASCAL, shell script ), một chương trình ngôn ngữ máy, một tập hợp dữ liệu Hệ điều hành quản lý 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. Trước khi giới thiệu một số nội dung liên quan đến tên file và tên thư mục, chúng ta giới thiệu sơ bộ về khái niệm thư mục. Để 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, hay nói theo một cách khác, thư mục chứa các file. Các thư mục cũng được hệ điều hành quản lý vì vậ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. Tên file trong Linux có thể dài tới 256 ký tự, bao gồm các chữ cái, chữ số, Formatted: Bullets and Numbering dấu gạch nối, gạch chân, dấu chấm. Tên thư mục/file trong Linux có thể có nhiều hơn một dấu chấm, ví dụ: This_is.a.VERY_long.filename. N ếu trong tên file có 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 (hoặc file). Ví dụ, tên file trên đây có phần mở rộng là .filename. Chúng ta nên lưu ý rằng, không phải ký tự nào cũng có nghĩa. N ếu có hai file chỉ khác nhau ở ký tự cuối cùng, thì đối với Linux, đó là hai file có thể trùng tên. Bởi lẽ, Linux chỉ lấy 32 hay 64 ký tự đầu tiên trong tên file mà thôi (tùy theo phiên 21
- bản Linux), phần tên file còn lại dành cho chủ của file, Linux theo dõi thông tin, nhưng thường không xem các ký tự đứng sau ký tự thứ 33 hay 65 là quan trọng đối với nó. Xin nhắc lại lưu ý về phân biệt chữ hoa và chữ thường đối với tên thư mục/file, ví dụ hai file FILENAME.tar.gz và filename.tar.gz là hai file khác nhau. 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 đó. Ví dụ, để tạo thư mục có tên là “My document” chẳng hạn, hãy đánh dòng lệnh sau: # mkdir "My document" Một số ký tự sau không được sử dụng trong tên thư mục/file: !, *, $, &, # Formatted: Bullets and Numbering Khi sử dụng chương trình mc, 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 Nn, 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. Bởi chính từ cách thức sử dụng thư mục, hệ thống file được tổ chức lôgic theo dạng hình cây: Hệ thống file được xuất phát từ một thư mục gốc (đượ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ó. 3. Cấu trúc hệ thống file của Linux Hệ thống file của linux gồm bốn thành phần chính là 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. Boot Super I-nodes Data Blocks Block Block Block 0 Thường không được sử dụng và thường chứa mã để nạp HĐH (boot the computer). N ó chứa một đoạn chương trình sẽ được đọc vào máy khi khởi động hệ điều hành Mặc dù Boot block chỉ cần thiết khi khởi động máy nhưng tương tự với Boot record của DOS, tất cả các hệ thống file UN IX đều có một Boot block (block này có thể để trống). 22
- Block 1: Là Super Block (siêu khối), trình bày trạng thái của hệ thống File (số lượng I-node, số Disk Block, điểm bắt đầu của danh danh sách của khối đĩa trống (free disk blocks)). Là một dạng bản ghi mô tả tình trạng của hệ thống file. N ó gồm các thông tin sau: - Kích thước hệ thống file. - Số khối còn trống trong hệ thống file. - Danh sách khối trống trong hệ thống file. - Chỉ số của khối tiếp theo trong danh sách khối trống. - Kích thước của danh sách inode. - Số inode còn trống trong hệ thống file. - Danh sách inode còn trống trong hệ thống file. - Chỉ số inode tiếp theo trong danh sách inode trống trong hệ thống file. - Trường khoá của danh sách khối và inode trống. - Cờ báo hiệu super block đã bị thay đổi. I-nodes Tương ứng bảng FAT trong MS-DOS, trình bày bên trong của một File được cho bởi một I-node, chứa đựng các thông tin mô tả về lưu trữ file trên đĩa và một số thông tin khác như: người chủ sở hữu, quyền truy nhập, thời gian truy nhập file. Mỗi I-node dài 64 byte và miêu tả chính xác một file. Inode là một bảng chứa các thông tin chi tiết về một file. Mỗi file đều được gắn với một inode qua số hiệu inode. Khi file được sử dụng bởi một tiến trình nào đó thì inode sẽ được đọc vào bộ nhớ và quản lý bởi kernel. Mỗi inode bao gồm các thông tin sau: - Quyền sở hữu file: Quyền sở hữu được chia làm hai phần là người sở hữu file và nhóm người sở hữu. N gười sở hữu thường là người tạo ra file đó. N hóm người sở hữu file, trong UN IX System V thì thường thuộc về nhóm của người tạo ra file đó, còn trong BSD UN IX thì file thuộc về nhóm sở hữu thư mục mà file được tạo ra. Quyền sở hữu của người sử dụng và của nhóm đối với mỗi file có thể thay đổi được (ví dụ lệnh chown, chgrp của shell). Quyền sở hữu này cùng với quyền truy nhập của file sẽ quyết dịnh xem ai có thể truy nhập tới tập tin và có thể truy nhập như thế nào. - Loại file: Khái niệm file của UN IX có khác so với file trong DOS, ta có thể kể tới một số loại file sau. Kiểu file thường: Đó là các file văn bản , các file nhị phân, file dữ liệu hay là các file chương trình 23
- Thư mục con: Là những file tạo ra cấu trúc phân cấp cho hệ thống file gồm danh sách các file trong nó và có thể chứa cả các thư mục khác. N ó có một vai trò quan trọng trong việc biến đổi tên file thành số hiệu inode. Thư mục là một file mà toàn bộ dữ liệu là chuỗi các phần tử (entry), mỗi phần tử chứa một số hiệu inode và tên file tương ứng trong thư mục. Đối với hệ UN IX System V chỉ cho phép tên file tối đa dài 14 ký tự còn đối với các hệ khác chiều dài này có thể lớn hơn. Do thư mục là các file đặc biệt nên tuy các file có thể đọc dữ liệu trong thư mục như đối với các file thường nhưng kernel giành quyền ghi thư mục để đảm bảo tính chính xác của cấu trúc. Kiểu file đặc biệt: Đây là cơ chế mà UN IX sử dụng để truy nhập tới các thiết bị vào ra. Mỗi thiết bị vào ra trong UN IX đều được coi như là một file trong hệ thống file. Ta có thể truy nhập tới thiết bị vật lý thông qua việc truy nhập các file này. N gười ta chia kiểu này làm hai loại dựa trên cách truy nhập tới chúng, đó là kiểu ký tự (character, ví dụ như file ứng với cổng nối tiếp) và kiểu khối (block, ví dụ như file ứng với ổ đĩa). Kiểu file móc nối(symbolic link): Đây là file chứa đường dẫn tới một file khác. Cơ chế này cho phép ta truy nhập tới một tập tin bằng nhiều tên khác nhau. Thực chất của nó là định nghĩa một file với một tên khác. Kiểu FIFO: là một hàng đợi (queue) theo kiểu first-in-first-out hay còn được gọi là named pipe. FIFO được dùng để trao đổi dữ liệu giữa các tiến trình. Loại file này chỉ có trong hệ UN IX System V mà không có trong BSD UN IX. Kiểu socket: là một cơ chế tạo ra các đầu cuối (endpoint) cho phép các tiến trình liên hệ với nhau. Khái niệm socket sẽ được đề cập tới trong phần sau. - Quyền truy nhập file: Hệ thống bảo vệ file theo 3 lớp người sử dụng là chủ sở hữu, nhóm sở hữu và các người sử dụng khác. Mỗi lớp người sử dụng đều có 3 quyền đọc, ghi, và thực hiện. Các quyền này được thiết lập tách biệt nhau. Do thư mục là một kiểu file đặc biệt nên quyền truy nhập tới thư mục có thay đổi. Quyền đọc cho phép tiến trình được đọc thư mục, quyền ghi cho phép tạo ra hoặc xoá bỏ các phần tử của thư mục (thông qua lệnh creat, mknod, link hay unlink), quyền thực hiện cho phép tiến trình tìm kiếm tên file trong thư mục. - Thời gian: Lưu trữ thời gian mà file bị thay đổi gần nhất, thời gian file được truy cập gần nhất và thời gian inode bị thay đổi gần nhất. - Số file liên kết: Thể hiện số file có trong cấu trúc cây thư mục. 24
- - Bảng địa chỉ các khối dữ liệu: Mặc dù người sử dụng xử lý file như một chuỗi liên tiếp các byte nhưng trong kernel lưu trữ dữ liệu trên những khối không liên tiếp. inode phải xác định các khối chứa dữ liệu của file. Bảng này được mã hoá khá phức tạp để có thể chứa một số lượng địa chỉ thay đổi nhưng kích thước bảng lại không thay đổi. - Kích thước file: Lưu giữ chính xác kích thước thực của file. Chú ý : Inode hoàn toàn không lưu giữ tên file và không thể xác định đường dẫn tới file thông qua inode. Khi inode được đọc vào bộ nhớ, một số trường được thêm vào làm cho inode trong bộ nhớ ( in-core inode ) khác với inode trên đĩa. - Trường trạng thái inode báo hiệu: Inode bị khoá. Có một tiến trình đang đợi cho đến khi inode được mở khoá. In-core inode khác với inode trên đĩa do bị thay đổi. File trong bộ nhớ đã thay đổi so với file trên đĩa. File này là một điểm kết nốt với một hệ thống file khác (mount point). - Số hiệu thiết bị logic của hệ thống file chứa file này. - Số hiệu inode. - Con trỏ tới in-core inode khác. - Số đếm : Ghi nhận số file đang được mở. Ghi chú: Danh sách inode đứng ngay sau super block. N gười quản trị hệ thống sẽ quyết định kích thước của danh sách này khi thiết lập cấu hình hệ thống. Kernel của hệ điều hành tham chiếu tới vùng này bằng cách đánh chỉ số cho danh sách. Trong danh sách inode tồn tại một inode là inode gốc của hệ thống file (tương tự thư mục gốc trong hệ điều hành DOS). Inode này là điểm đầu tiên của cấu trúc thư mục trong hệ thống file và làm cho hệ thống file có thể truy nhập bình thường sau khi thực hiện lệnh "mount". Khối dữ liệu (data block) Tất cả các file và thư mục được lưu trữ tại đây. Hệ thống file trong Unix là một cấu trúc phân cấp có bảo mật cao. File có thể được tổ chức lưu trữ theo một vùng liên tục hay nhiều vùng liên tục. Bắt đầu từ sau danh sách inode cho tới khối cuối cùng của hệ thống file. Phần này chỉ chứa dữ liệu và thông tin quản trị hệ thống. Một khối dữ liệu chỉ được cấp phát cho một và chỉ một file duy nhất trong hệ thống file. 25
- Hình 2.1 Inodes 4. Cấu trúc cây thư mục của hệ thống file trong Linux Đối với hệ điều hành linux, không có khái niệm các ổ đĩa khác nhau. Sau quá trình khởi động, toàn bộ các thư mục và tập tin được “gắn” (mount) lên và tạo thành một hệ thống tập tin thống nhất, bắt đầu từ gốc ‘/’. Hình dưới là cây thư mục của đa số các Linux. Với cây thư mục trên ta không thể nào biết được số lượng ổ đĩa cứng, các phân mảnh (partition) của mỗi đĩa và sự tương ứng giữa các phân mảnh và thư mục như thế nào. Chúng ta có thể chia đĩa cứng thành nhiều phân mảnh (partition). Mỗi partition là một hệ thống tập tin độc lập. Sau đó, các hệ thống tập tin này được ‘gắn ‘ (mount) vào hệ thống tập tin thống nhất của toàn hệ thống. Chúng ta hoàn toàn có thể gắn thêm một đĩa cứng mới, format rồi mount vào hệ thống tập tin dưới tên một thư mục nào đó tại một điểm (mount point) nào đó. 26
- / + ! /bin ! /sbin ! /usr /usr/bin ! ! /usr/sbin ! ! /usr/local ! ! /usr/doc ! /dev ! /etc ! /lib ! /var /var/adm ! /var/log ! /var/spool Đối với các chương trình chạy trên Linux, không hề có khái niệm một thư mục nằm ở ổ đĩa nào hay partition nào. Hình sau đây cho thấy sự tương quan giữa vị trí vật lý trên đĩa và vị trí logic trong cây tập tin. ! ! ! / ! ! / ! ! ! | ! ! ! ! ! | | | | ! /usr ! /usr /squid ! ! | ! ! /usr/home ! /usr/home ! ! ! ! /squid ! ! ! Thư mục /usr/home là thư mục con của /usr trong cây thư mục, nhưng trên đĩa vật lý, đây là hai phân mảnh (partition) cạnh nhau. Một số thư mục quan trọng trong Unix/Linux 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 27
- N hư đã được giới thiệu thư mục /root có thể được coi là "thư mục riêng" của người quản trị hệ thố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. N hư vậy, chương trình ứng dụng trong Linux là một file nhị phân khả thi. Vì vậy, 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. N hư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ác thông tin có được do trình điều khiển thiết bị hiển thị đưa ra). Cũng không thể nhập được thông tin (những thông tin do trình điều khiển thiết bị bàn phím đọc và chuyển tới hệ thống), và cũng không thể sử dụng đĩa mềm của (được quản lý bởi trình điều khiển đĩa mềm). 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, v.v Để 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. 28
- 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) 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. Ví dụ, nếu đang soạn thảo một file, chương trình sẽ tạo ra một file là bản sao tạm thời (bản nháp) của file đó và lưu vào trong thư mục /tmp. Việc soạn thảo thực hiện trực tiếp trên file tạm thời này và sau khi soạn thảo xong, file tạm thời sẽ được ghi đè lên file gốc. Cách thức như vậy bảo đảm sự an toàn đối với file cần soạn thảo. 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, v.v 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. 29
- 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. 5. Các file chuẩn vào /ra trên Linux Khi chạy chương trình Linux, nó giao tiếp với chúng ta qua việc hiển thị thông tin ra màn hình. Thông tin hiển thị màn hình có thể là dữ liệu của chương trình hay lỗi phát sinh khi có lỗi xảy ra. Chúng ta giao tiếp với chương trình qua các kí tự gõ vào bàn phím. Luồng dữ liệu vào từ bàn phím gọi là chuNn input. Luồng dữ liệu ra màn hình gọi là chuNn output còn luồng dữ liệu thông báo lỗi là chuNn error. Trong Linux các luồng giao tiếp chuNn được xem như các file dữ liệu và được đánh số theo thứ tự, khi cho một file chạy, Shell tự động mở 3 file vào/ra chuNn: − Vào chuNn (stdin) fd = 0. − Ra chuNn (stdout) fd = 1. − Lỗi chuNn(stderror) fd = 2. Các số fd này được gọi là file descriptor. Hình 2.2 Các chuẩn vào ra Ví dụ về các file ra vào chuNn: Sử dụng chương trình cat để soạn thảo, chúng ta gõ $ cat du lieu vao tu ban phim dong du lieu thu hai 30
- Để kết thúc luồng dữ liệu vào chúng ta gõ . Tất cả các dữ liệu chúng ta đưa vào từ bàn phím được xem là file input chuNn. Dùng lệnh ls chúng ta sẽ nhận được dữ liệu ra màn hình, đó là file output chuNn. Một thông báo lỗi xuất hiện ở màn hình khi chúng ta gõ lệnh sai hoặc truy xuất vào các tập tin hay thư mục không có quyền chính là file error chuNn. Ví dụ như chúng ta gõ lệnh listn thì sẽ xuất hiện lỗi invalid command. Chuyển tiếp (redirection) Chuyển tiếp là hình thức thay đổi luồng dữ liệu của các input, output chuNn và error. Khi dùng chuyển tiếp, input chuNn có thể lấy dữ liệu từ file thay vì bàn phím, output chuNn hoặc error có thể chuyển vào tập tin hay ra máy in. Có 3 loại chuyển hướng : − Input redirection. − Output redirection. − Error redirection. Input direction Theo qui ước thì các lệnh lấy dữ liệu từ input chuNn (bàn phím). Để lệnh lấy dữ liệu từ file chúng ta dùng ký hiệu $lệnh > tên_file Ví dụ Liệt kê nội dung thư mục và chuyển vào file : $ls –l > tm.txt Để thêm vào dữ liệu có sẵn trên file, chúng ta dùng dấu >> thay cho dấu > $lệnh >> tên_file hoặc $cat a.txt >> sum.txt 31
- CHƯƠNG 3: THAO TÁC TRÊN HỆ THỐNG FILE CỦA UNIX 1. Quản lý quyền thâm nhập hệ thống file 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 thâm nhập (truy cập). Cho phép thay đổi các quyền thâm nhập và quyền sở hữu file và thư mục nhằm cung cấp thâm nhập nhiều hơn hay ít hơn. Người sử dụng Một người sử dụng được mô tả bằng các thông tin sau: - Tên. - [mật khNu (nếu có]. - số nhận dạng (uid : user identify number). - số của nhóm (gid : group identify number). - [chú thích]. - thư mục tiếp nhận (HOME directory). - [tên chương trình cho chạy lúc bắt đầu tên làm việc]. Các thông tin trên được chứa trong file /etc/passwd. mail:x:8:12:mail:/var/spool/mail: games:x:12:100:games:/usr/games: gopher:x:13:30:gopher:/usr/lib/gopher-data: duonglk:x:500:0:Le Khanh Duong:/home/duonglk:/bin/bash anhth:x:17:100:Tran Hong Anh:/home/anhth:/bin/bash Nhóm người dùng Một nhóm người sử dụng là tập hợp của một số người sử dụng có thể dùng chung các file của nhau. Một nhóm người sử dụng được mô tả bằng các thông tin sau: - tên của nhóm. - [mật khNu]. - số của nhóm (gid : group identify number). - [danh sách những người khách (guest)]. Các thông tin trên được chứa trong file /etc/group. Do Unix là một hệ điều hành đa người dùng và đa nhiệm, nhiều người cùng có thể sử dụng một máy Unix và một người có thể cho chạy nhiều chương trình khác nhau. Có hai vấn đề lớn được đặt ra: quyền sở hữu các dữ liệu trên đĩa và phân chia tài nguyên hệ thống như CPU, RAM giữa các tiến trình. Chúng ta sẽ bàn về sở hữu các tập tin và các quyền truy xuất tập tin. 32
- Tất cả các tập tin và thư mục của Linux đều có người sở hữu và quyền truy nhập. Ta có thể đổi các tính chất này cho phép nhiều hay ít quyền truy nhập hơn đối với một tập tin hay thư mục. Quyền của tập tin còn cho phép xác định tập tin có là một chương trình (application) hay không (khác với MSDOS và MSWindows xác định tính chất này qua phần mở rộng của tên tập tin) Thuộc tính thâm nhập file bao gồm các thuộc tính: Đọc (R), Ghi (W), thực thi (X). N hư vậy, một file có 9 thuộc tính thâm nhập ngoài ra có thêm thuộc tính chỉ định nó là file hay thư mục. 1 2 3 4 5 678910 1 : kiểu file 2, 3, 4 : quyền thâm nhập của USER 5, 6, 7 : quyền thâm nhập của GROUP 8, 9, 10: quyền thâm nhập của OTHER Có một số kiểu file trong Linux. Ký tự đầu tiên mô tả kiểu file và quyền thâm 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) Trong mỗi nhóm quyền thâm nhập có 3 thuộc tính: (R) được đọc, (W) được ghi, (X) được thực thi, (-) rỗng. - r w -r r 1 van_a group 166 Oct 4 08:02 thu.txt - : chỉ rằng đây là File r w - : USER có quyền đọc ghi r - - : GROUP có quyền đọc r - - : OTHER có quyền đọc 1 : số liên kết van_a : tên người sở hữu group : tên nhóm sử dụng 33
- 166 : độ dài file Oct 4 08: 02 : thời gian tạo file Thu.txt : tên file Để hiểu được chính xác quyền thâm nhập có ý nghĩa như thế nào đối với hệ thống máy tính, phải nhớ rằng Linux xem mọi thứ đều là file. N ếu cài đặt một ứng dụng, nó cũng sẽ được xem như mọi chương trình khác, trừ một điều: hệ thống nhận biết rằng một ứng dụng là một chương trình khả thi, tức là nó có thể chạy được. Một bức thư gửi cho mẹ là một dạng file văn bản bình thường, nhưng nếu thông báo cho hệ thống biết đó là một chương trình khả thi, hệ thống sẽ cố để chạy chương trình (và tất nhiên là lỗi). Quyền đọc: cho phép người dùng có thể xem nội dung của file với rất nhiều chương trình khác nhau, nhưng họ sẽ không thể thay đổi, sửa chữa hoặc xóa bất kỳ thông tin nào trong đó. Tuy nhiên, họ có thể sao chép file đó thành file của họ và sửa chữa file bản sao. Quyền ghi: là quyền thâm nhập tiếp theo. N gười sử dụng với quyền ghi khi truy nhập vào file có thể thêm thông tin vào file. N ếu có quyền ghi và quyền đọc đối với một file, có thể soạn thảo lại file đó - quyền đọc cho phép xem nội dung, và quyền ghi cho phép thay đổi nội dung file. N ếu chỉ có quyền ghi, sẽ thêm được thông tin vào file, nhưng lại không thể xem được nội dung của file. Quyền thực hiện hay thực thi: quyền này cho phép người dùng có thể chạy được file, nếu đó là một chương trình khả thi. Quyền thực hiện độc lập với các quyền truy nhập khác, vì thế hoàn toàn có thể có một chương trình với quyền đọc và quyền thực hiện, nhưng không có quyền ghi. Cũng có trường hợp một chương trình chỉ có quyền thực hiện, có nghĩa là người dùng có thể chạy ứng dụng, nhưng họ không thể xem được cách nó làm việc hay sao chép nó. Quyền thâm nhập Ý nghĩa 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) Song song với cách ký hiệu miêu tả bằng ký tự như ở trên, quyền thâm nhập tập tin còn có thể cho dưới dạng chữ số hệ 8. Đối với file thu.txt ở trên có quyền là 644. 34
- Điều quan trọng là phải hiểu cách ký hiệu bằng số vì nó liên quan đến việc thay đổi các quyền sau này. Các số có thể nhận tất cả các giá trị từ 0 đến 7. Số đầu tiên miêu tả quyền của USER, số thứ hai cho GROUP và số thứ ba cho OTHER. Mỗi số là tổng của các quyền theo quy tắc sau : read permission (QUYỀN ĐỌC) 4 Write permission (QUYỀN GHI) 2 Execute permission (QUYỀN THỰC THI) 1 Vì vậy, một tập tin với quyền 751 có nghĩa là USER có quyền read, write, và execute bằng 4+2+1=7, GROUP có quyền read và execute bằng 4+1=5, và OTHER có quyền execute bằng 1. N ếu ta xem kỹ, ta sẽ thấy mọi số từ 0 đến 7 đều tương ứng với một tổ hợp duy nhất các quyền thâm nhập tập tin. 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 N ếu ta quen với hệ nhị phân, hãy suy nghĩ bằng hệ thống nhị phân. Khi đó, rwx sẽ như số nhị phân 3 bit. N ếu quyền được cho, số nhị phân tương ứng sẽ bằng 1, ngược lại, nó sẽ bằng 0. Ví dụ r-x sẽ là số nhị phân 101, và theo hệ thập phân sẽ là 4+0+1, hay 5. x sẽ tương ứng 001, hay 0+0+1 = 1 2. Nhóm lệnh quản lý quyền thâm nhập file N hóm lệnh chown, chgrp và chmod được sử dụng rất phổ biến, cho phép thay quyền thâm nhập của tập tin hay thư mục. Chỉ có chủ sở hữu và superuser mới có quyền thực hiện các lệnh này. 2.1 Lệnh chmod Cho phép thay đổi quyền thâm nhập các file và thư mục. Có thể chạy lệnh theo 2 cách: Theo thông số tuyệt đối chmod mode tên_file trong đó thông số mode là một số cơ số 8 (octal) 35
- r w x r - x r - - 1 1 1 1 0 1 1 0 0 7 5 4 $chmod 754 tên_file Cách thay đổi tuyệt đối này có một số ưu điểm vì nó là cách định quyền tuyệt đối, kết quả cuối cùng không phụ thuộc vào quyền thâm nhập trước đó của tập tin. Đồng thời, dễ nói “thay quyền tập tin thành bảy-năm-năm” thì dễ hơn là “thay quyền tập tin thành đọc-viết-thực hiện, đọc-thực hiện, đọc-thực hiện” Dùng các ký hiệu tượng trưng Ta cũng có thể thay đổi quyền truy nhập một cách tương đối và dễ nhớ. Để chỉ ra nhóm quyền nào cần thay đổi, ta có thể sử dụng u (user), g (group), o (other), hay a (all). Tiếp theo đó là dấu + để thêm quyền và – để bớt quyền. Cuối cùng là bản thân các quyền viết tắt bởi r,w,x. Ví dụ như để bổ sung quyền thực hiện cho group và other, ta nhập vào dòng lệnh: chmod who [operation] [right] filename who : u có nghĩa user g group o other a all operation: + thêm quyền - bớt quyền = gán giá trị khác right: r reading w writing x execution s đặt suid hoặc guid Ví dụ: $ chmod go+x tenfile Đây là cách thay đổi tương đối vì kết quả cuối cùng phụ thuộc vào quyền đã có trước đó mà lệnh này không liên quan đến. Trên quan điểm bảo mãt hệ thống, cách thay đổi tuyệt đối dẫn đến ít sai sót hơn. Thay đổi quyền thâm nhập của một thư mục cũng được thực hiện giống như đối với một tập tin. Chú ý là nếu ta không có quyền thực hiện (execute) đối với một thư mục, ta không thể thay đổi thư mục cd vào thư mục đó. Mọi người sử dụng có quyền viết vào thư mục đều có quyền xóa tập tin trong thư mục đó, không phụ thuộc vào quyền của người đó đối với tập tin. 36
- Vì vậy, đa số các thư mục có quyền drwxr-xr-x. N hư vậy chỉ có người sở hữu của thư mục mới có quyền tạo và xóa tập tin trong thư mục. N goài ra, thư mục còn có một quyền đặc biệt, đó là cho phép mọi người đều có quyền tạo tập tin trong thư mục, mọi người đều có quyền thay đổi nội dung tập tin trong thư mục, nhưng chỉ có người tạo ra mới có quyền xóa tập tin. Đó là sticky bit (bít đính kèm) cho thư mục. Thư mục /tmp thường có sticky bit bật lên drwxrwxrw 7 root root 16384 Oct 21 15:33 tmp 2.2 Lệnh chown Để thay đổi quyền sở hữu đối với một file, hãy sử dụng lệnh chown với cú pháp như sau: chown [tùy chọn] [chủ][.nhóm] Lệnh này cho phép thay chủ sở hữu file. 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 (lệnh chgrp được trình bày dưới đây). Các tùy chọn của 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 Formatted: Bullets and Numbering (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. Ví dụ, thư mục vidu có thông tin về các quyền truy nhập như sau: drwxr-xr-x 11 duonglk root 4000 Oct 21 2008 vidu N gười sở hữu hiện tại thư mục vidu là người dùng duonglk. Để người dùng anhth là chủ sở hữu thư mục trên, hãy gõ lệnh: # chown anhth vidu Khi chuyển quyền sở hữu file cho một người khác, người chủ cũ mất quyền sở hữu file đó. 2.3 Lệnh chgrp 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 37
- nhập, mặc định sẽ là thành viên của một nhóm được thiết lập khi 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. Để thay đổi quyền sở hữu nhóm đối với một hoặc nhiều file, hãy sử dụng lệnh chgrp với cú pháp như sau: 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 của lệnh là (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 Formatted: Bullets and Numbering (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. Ví dụ: Cho phép thay đổi nhóm sở hữu. $echo Hello > file1 $chmod 700 file1 $ls -l file1 -rwx 1 user1 stagiair 6 Apr 5 14:06 file1 $cat file1 Hello $chgrp animator file1 $ls -l file1 -rwx 1 user1 animator 6 Apr 5 14:06 file1 $chown user2 file1 $ls -l file1 -rwx 1 user2 animator 6 Apr 5 14:06 file1 $cat file1 cat: cannot open file1 38
- 3. Các lệnh thao tác trên thư mục 3.1 Thay đổi thư mục làm việc hiện thời với lệnh cd Cú pháp lệnh: cd Chuyển đến thư mục /usr/include : $cd /usr/include Chuyển trở lại thư mục “home”: $cd Chuyển đến thư mục cha: $cd 3.2 Xem nội dung thư mục với lệnh ls Sử dụng lệnh ls và một số các tùy chọn của nó là có thể biết được mọi thông tin về một 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 của lệnh: - a : liệt kê tất cả các file, bao gồm cả file Nn. Formatted: Bullets and Numbering - 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 ",". - 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ụ: 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: id* sed* sh@ sha256sum* shred* sln* stat* sulogin@ install* seq* sha1sum* sha384sum* shuf* sort* stty* sum* 39
- ipmask* setterm* sha224sum* sha512sum* sleep* split* su* sync* 3.3 Tạo thư mục với lệnh mkdir Lệnh mkdir tạo một thư mục, cú pháp: 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 Formatted: Bullets and Numbering 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. - - 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. N ếu muốn tạo thư mục có khoảng cách giữa các từ ta phải sử dụng dấu “ ”. N ếu muốn tạo thư mục My Documents ta sử dụng lệnh: mkdir “ My Documents” Ví dụ: nếu muốn tạo thư mục test trong thư mục home, hãy gõ lệnh sau: mkdir /home/test 3.4 Xóa thư mục với lệnh rmdir 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 suy nghĩ cNn thận trước khi quyết định xóa một thư mục. Các tùy chọn của lệnh: - - ignore-fail-on-non-empty : bỏ qua các lỗi nếu xóa một thư mục không rỗng. Formatted: Bullets and Numbering - 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 rmdir: /: No such file or directory 40
- Dòng lệnh trên sẽ lần lượt xóa ba thư mục test2, test1, test và hiển thị thông báo trên màn hình kết quả của lệnh. 3.5 Xem đường dẫn thư mục hiện thời với lệnh pwd 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. Ví dụ: gõ lệnh pwd tại dấu nhắc lệnh sau khi người dùng duonglk vừa đăng nhập thì màn hình hiển thị như sau: # pwd /home/duonglk 3.6 Lệnh đổi tên thư mục với lệnh mv 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. Ví dụ: # mv Tongket thongke sẽ đổi tên thư mục Tongket thành thongke . 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. 4. Các lệnh thao tác trên file 4.1 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. Ví dụ: dùng lệnh touch để tạo file newfile: # touch newfile 4.2 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, 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 > filename 41
- 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. N gườ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. N hượ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ụ: tạo file newfile trong thư mục /home/vd bằng lệnh cat. # cat > /home/vd/newfile This is a example of cat command ^D 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. Khi sử dụng lệnh này, nếu file chưa tồn tại thì sẽ tạo file mới, nếu file đó đã tồn tại thì sẽ xóa file cũ và tạo file mới. Có thể sử dụng luôn lệnh cat để xem nội dung của file vừa soạn thảo: # cat /home/vd/newfile This is a example of cat command Để thêm nội dung vào phần cuối của file có sẵn dùng lệnh: cat >> filename. Để tổng hợp hai tập tin thành một ta sử dụng cú pháp lệnh sau: $cat file1 file2 > file3 4.3 Xem nội dung các file lớn với lệnh more 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 theo từng trang màn hình, đó là lệnh more. Cú pháp lệnh: more [-tùy chọn] [-số] [+/xâumẫu] [+dòng-số] [file ] Các tùy chọn: - số: xác định số dòng nội dung của file được hiển thị (số). Formatted: Bullets and Numbering - 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. 42
- - 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ố. Ví dụ: # more -d vdmore total 1424 drwxr-xr-x 6 root root 4096 Oct 31 2000 AfterStep-1.8.0 drwxr-xr-x 2 root root 4096 Oct 31 2000 AnotherLevel drwxr-xr-x 2 root root 4096 Oct 31 2000 ElectricFence drwxr-xr-x 2 root root 4096 Oct 31 2000 GXedit-1.23 drwxr-xr-x 3 root root 4096 Oct 31 2000 HTML drwxr-xr-x 3 root root 4096 Oct 31 2000 ImageMagick drwxr-xr-x 6 root root 4096 Oct 31 2000 LDP drwxr-xr-x 3 root root 4096 Oct 31 2000 ORBit-0.5.0 drwxr-xr-x 2 root root 4096 Oct 31 2000 SVGATextMode drwxr-xr-x 2 root root 4096 Oct 31 2000 SysVinit-2.78 drwxr-xr-x 2 root root 4096 Oct 31 2000 WindowMaker More (9%) [ Press space to continue, "q" to quit .] Đối với lệnh more, có thể sử dụng một số các phím tắt để thực hiện một số các thao tác đơn giản trong khi đang thực hiện lệnh. Bảng dưới đây liệt kê các phím tắt đó: Phím tắt Chức năng [Space] N hấn phím space để hiển thị màn hình tiếp theo n Hiển thị n dòng tiếp theo [Enter] Hiển thị dòng tiếp theo h Hiển thị danh sách các phím tắt d hoặc CTRL+D Cuộn màn hình (mặc định là 11 dòng) q hoặc CTRL+Q Thoát khỏi lệnh more s Bỏ qua n dòng (mặc định là 1) 43
- f Bỏ qua k màn hình tiếp theo (mặc định là 1) b hoặc CTRL+B Trở lại k màn hình trước (mặc định là 1) = Hiển thị số dòng hiện thời :n xem k file tiếp theo :p Trở lại k file trước v Chạy chương trình soạn thảo vi tại dòng hiện thời CTRL+L Vẽ lại màn hình :f Hiển thị tên file hiện thời và số dòng . Lặp lại lệnh trước 4.4 Thêm số thứ tự của các dòng trong file với lệnh nl N hư đã biết lệnh cat với tham số -n sẽ đánh số thứ tự của các dòng trong file, tuy nhiên Linux còn cho phép dùng lệnh nl để thực hiện công việc như vậy. 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 chuNn, 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 chuNn. Các tuỳ chọn: - b, body-numbering=STYLE: sử dụng kiểu STYLE cho việc đánh thứ tự các Formatted: Bullets and Numbering dòng trong nội dung file. Có các kiểu STYLE sau: - a : đánh số tất cả các dòng kể cả dòng trống; - t : chỉ đánh số các dòng không trống; - 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). 44
- - 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ố. - - help : hiển thị trang trợ giúp và thoát. Ví dụ: # cat > hello noi dung trong file hello noi dung trong file hello ^D # nl body-numbering=a number-format=rz hello 000001 noi dung trong file hello 000002 noi dung trong file hello Lệnh trong ví dụ trên cho thêm số thứ tự của các câu trong file hello theo dạng: đánh số thứ tự tất cả các dòng, kể cả dòng trống, các số thứ tự được căn phải và có số 0 ở đầu (lưu ý rằng có dòng trong file được hiện ra thành hai dòng trên giấy). 4.5 Xem nội dung file với lệnh head 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] [filename] 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ố filename, hoặc filename là dấu "-", thì ngầm định sẽ đọc từ thiết bị vào chuNn. 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ể Formatted: Bullets and Numbering 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. 4.6 Xem nội dung file với lệnh tail Lệnh thứ hai cho phép xem qua nội dung của file là lệnh tail. Cú pháp lệnh: tail [tùy-chọn] [file] 45
- 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 chuNn. 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. Formatted: Bullets and Numbering - 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 quá 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. 4.7 Sử dụng lệnh file để xác định kiểu file Cú pháp lệnh file: 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. Formatted: Bullets and Numbering - 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. Một số tuỳ chọn sau đây: - b : cho phép chỉ đưa ra kiểu file mà không đưa kèm theo tên file. Formatted: Bullets and Numbering - 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 chuNn, sử dụng dấu "-". - z : xem kiểu của file nén. Ghi chú: N hớ rằng kết quả của lệnh file không phải lúc nào cũng chính xác tuyệt đối. 46
- 4.8 Lệnh wc dùng để đếm số ký tự, số từ, hay số dòng trong một 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ự. N gầm định khi không có tên file trong lệnh thì sẽ đọc và đếm trên thiết bị vào chuNn. Các tuỳ chọn: - c, byte, chars : đưa ra số ký tự trong file. Formatted: Bullets and Numbering - 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. Khi gõ lệnh wc mà không có một tham số nào, mặc định sẽ soạn thảo trực tiếp nội dung trên thiết bị vào chuNn. Dùng CTRL+d để kết thúc việc soạn thảo, kết quả sẽ hiển thị lên màn hình. Bằng cách kết hợp lệnh wc với một số lệnh khác, có thể có nhiều cách để biết được Formatted: Bullets and Numbering những thông tin cần thiết. Kết hợp với lệnh ls để xác định số file có trong một thư mục: # ls | wc -l Kết hợp với lệnh cat để biết số tài khoản cá nhân có trên máy của người dùng: # cat /etc/passwd | wc -l 4.9 So sánh nội dung hai file sử dụng lệnh diff Việc tìm ra sự khác nhau giữa hai file đôi khi là rất cần thiết. Linux có một lệnh có tác dụng như vậy, đó là lệnh diff . Cú pháp: 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. Formatted: Bullets and Numbering 47
- - 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. 4.10 Xóa file với lệnh rm 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 cNn trọng khi sử dụng lệnh này. Lệnh rm cho phép xóa bỏ một file hoặc nhiều file. Cú pháp lệnh: rm [tùy-chọn] 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ó Formatted: Bullets and Numbering 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ề quá 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). Dùng lệnh # rm bak/*.h xóa mọi file với tên có hai kí hiệu cuối cùng là ".h" trong thư mục con bak. 4.11 Sao chép tập tin với lệnh cp Lệnh cp có hai dạng như sau: cp [tùy-chọn] 48
- 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). Formatted: Bullets and Numbering - b, backup[=CON TROL] : 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ề quá 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. Ví dụ: # cp /home/ftp/vd /home/test/vd1 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. # cp /home/ftp/vd /home/test/ Trong ví dụ này, tên file đích sẽ là vd nghĩa là tạo một file mới /home/test/vd. 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. # cp . newdir cp: .: omitting directory 49
- Ví dụ: về việc lệnh cp cho phép sao nhiều file cùng một lúc vào một thư mục. # cp vd vd1 newdir # pwd /newdir # ls -l total 8 -rw-r r 1 root ftp 15 Nov 14 11:00 vd -rw-r r 1 root ftp 12 Nov 14 11:00 vd1 Đố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 đó. Ví dụ, lệnh: # cp * bak thực hiện việc sao chép mọi file có trong thư mục hiện thời sang thư mục con của nó có tên là bak. Dùng lệnh: # cp /usr/src/linux-2.2.14/include/linux/*.h bak cho phép sao chép mọi file với tên có hai kí hiệu cuối cùng là ".h" sang thư mục con bak. Chính vì lí do nói trên, dù trong nhiều lệnh tuy không nói đến việc sử dụng kí hiệu mô tả nhóm file nhưng chúng ta có thể áp dụng chúng nếu điều đó không trái với suy luận thông thường. Do những tình huống như thế là quá phong phú cho nên không thể giới thiệu hết trong tài liệu. Chúng ta chú ý một giải pháp là mỗi khi sử dụng một lệnh nào đó, nên thử nghiệm cách thức hiệu quả này. 4.12 Đổi tên file với lệnh mv Cú pháp lệnh đổi tên file: 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 Lệnh này sẽ đổi tên file vd thành 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 4.13 Lệnh uniq loại bỏ những dòng không quan trọng trong file 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 chuNn) 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 chuNn). Các tuỳ chọn: 50
- - c, count : đếm và hiển thị số lần xuất hiện của các dòng trong file. Formatted: Bullets and Numbering - 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. Ví dụ: người dùng sử dụng lệnh cat để xem nội dung file vduniq # cat vduniq Gnome có hai phương pháp để thoát ra ngoài. Gnome có hai phương pháp để thoát ra ngoài. Để thoát bằng cách sử dụng menu chính, hãy mở menu chính, chọn mục Logout ở đáy menu. Chọn YES/ NO để kết thúc phiên làm việc với Gnome. Chọn YES/ NO để kết thúc phiên làm việc với Gnome. Nếu muốn thoát bằng cách sử dụng nút Logout trên Panel, trước hết phải thêm nút này vào Panel. Chọn YES/ NO để kết thúc phiên làm việc với Gnome. Trong file vduniq có hai dòng bị trùng lặp và kề nhau là dòng thứ 1 và 2. Gnome có hai phương pháp để thoát ra ngoài. Gnome có hai phương pháp để thoát ra ngoài. và dòng thứ 5 và 6 Chọn YES/ NO để kết thúc phiên làm việc với Gnome. Chọn YES/ NO để kết thúc phiên làm việc với Gnome. Dùng lệnh uniq để loại bỏ dòng trùng lặp: # uniq vduniq Gnome có hai phương pháp để thoát ra ngoài. Để thoát bằng cách sử dụng menu chính, hãy mở menu chính, chọn mục Logout ở đáy menu. Chọn YES/ NO để kết thúc phiên làm việc với Gnome. Nếu muốn thoát bằng cách sử dụng nút Logout trên Panel, trước hết phải thêm nút này vào Panel. Chọn YES/ NO để kết thúc phiên làm việc với Gnome. Dòng cuối cùng trong file vduniq có nội dung trùng với dòng thứ 5, nhưng sau lệnh uniq, nó không bị xóa vì không kề với dòng có nội dung trùng lặp. 51
- 4.14 Sắp xếp nội dung file với lệnh 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 chuNn là tác dụng của lệnh sort. N gầ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: Formatted: Bullets and Numbering + [- ] : 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. Formatted: Bullets and Numbering - 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 # cat vdsort trước hết phải thêm nút này vào Panel. 21434 bạn xác nhận là có thực sự muốn thoát hay không. menu chính, chọn mục Logout ở đáy menu. Bạn có thể sử dụng mục Logout từ menu chính Gnome có hai phương pháp để thoát ra ngoài. hoặc nút Logout trên Panel chính để thoát ra ngoài. Khi đó một hộp thoại Logout sẽ xuất hiện yêu cầu 57879 Lựa chọn YES hoặc NO để kết thúc phiên làm việc với Gnome. Nó không cung cấp chức năng hoạt động nào khác ngoài chức năng này. Nó không cung cấp chức năng hoạt động nào khác ngoài chức năng này. Nếu muốn thoát bằng cách sử dụng nút Logout trên Panel, # sort -f vdsort 21434 52
- 57879 Bạn có thể sử dụng mục Logout từ menu chính bạn xác nhận là có thực sự muốn thoát hay không. Gnome có hai phương pháp để thoát ra ngoài. hoặc nút Logout trên Panel chính để thoát ra ngoài. Khi đó một hộp thoại Logout sẽ xuất hiện yêu cầu Lựa chọn YES hoặc NO để kết thúc phiên làm việc với Gnome. menu chính, chọn mục Logout ở đáy menu. Nếu muốn thoát bằng cách sử dụng nút Logout trên Panel, Nó không cung cấp chức năng hoạt động nào khác ngoài chức năng này. Nó không cung cấp chức năng hoạt động nào khác ngoài chức năng này. trước hết phải thêm nút này vào Panel. Có thể kết hợp lệnh sort với các lệnh khác, ví dụ: # ls -s | sort –n Lệnh này cho thứ tự sắp xếp của các file theo kích thước trong thư mục hiện thời 4.15 Tìm theo nội dung file bằng lệnh grep 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, tác dụng thứ nhất là lọc đầu ra của một lệnh khác. Cú pháp là: | grep tác dụng thứ hai, là tìm dòng chứa mẫu đã định trong file được chỉ ra. Formatted: Bullets and Numbering Cú pháp lệnh grep: 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 chuNn 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à Formatted: Bullets and Numbering 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. N goà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 N UM, after-context=N UM : đưa ra N UM dòng nội dung tiếp theo sau dòng Formatted: Bullets and Numbering có chứa mẫu. - B N UM, before-context=N UM : đưa ra N UM dòng nội dung trước dòng có chứa mẫu. - C [N UM], context[=N UM] : hiển thị N UM dòng (mặc định là 2 dòng) nội dung. 53
- - N UM : giống context=N UM đư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. Cũng có thể sử dụng các ký hiệu biểu diễn thông thường (regular - expression) trong mẫu lọc để đưa ra được nhiều cách tìm kiếm file khác nhau. N goài các tùy chọn khác nhau, lệnh grep còn có hai dạng nữa trên Linux. Hai dạng đó là Formatted: Bullets and Numbering egrep - sử dụng với các mẫu lọc phức tạp, và fgrep - sử dụng để tìm nhiều mẫu lọc cùng một lúc. Thỉnh thoảng một biểu thức đơn giản không thể xác định được đối tượng cần tìm, ví dụ, như đang cần tìm các dòng có một hoặc hai mẫu lọc. N hững lúc đó, lệnh egrep tỏ ra rất có ích. 54
- egrep - expression grep - có rất nhiều các ký hiệu biểu diễn mạnh hơn grep. Dưới đây là các ký hiệu hay dùng: Ký hiệu Ý nghĩa c - thay thế cho ký tự c \c - hiển thị c như là một ký tự bình thường nếu c là một ký tự điều khiển ^ - bắt đầu một dòng $ - kết thúc dòng . - thay cho một ký tự đơn [xy] - chọn một ký tự trong tập hợp các ký tự được đưa ra [^xy] - chọn một ký tự không thuộc tập hợp các ký tự được đưa ra c* - thay cho một mẫu có hoặc không chứa ký tự c c+ - thay cho một mẫu có chứa một hoặc nhiều hơn ký tự c c? - thay cho một mẫu không có hoặc chỉ có chứa duy nhất một ký tự c a | b - hoặc là a hoặc là b (a) - a một biểu thức Ví dụ: giả sử bây giờ muốn tìm các dòng có chứa một hoặc nhiều hơn ký tự b trên file passwk với lệnh egrep. # egrep 'b+' /etc/passwd | head cho ra các dòng kết quả sau: root : x : 0 : 0 : root : /root : /bin/bash bin : x : 1 : 1 : bin : /bin : daemon : x : 2 : 2 : daemon : /sbin : sync : x : 5 : 0 : sync : /sbin : /bin/sync shutdown : x : 6 : 0 : shutdown : /sbin : /sbin/shutdown halt : x : 7 : 0 : halt : /sbin : /sbin/halt gopher : x : 13 : 30 : gopher : /usr/lib/gopher-data : nobody : x : 99 : 99 : Nobody : / : xfs : x : 43 : 43 : X Font Server : /etc/X11/fs : /bin/false named : x : 25 : 25 : Named : /var/named : /bin/false Bất kỳ lúc nào muốn tìm các dòng có chứa nhiều hơn một mẫu lọc, egrep là lệnh tốt nhất để sử dụng. Có những lúc cần phải tìm nhiều mẫu lọc trong một lúc. Ví dụ, có một file chứa rất nhiều Formatted: Bullets and Numbering mẫu lọc và muốn sử dụng một lệnh trong Linux để tìm các dòng có chứa các mẫu đó. Lệnh fgrep sẽ làm được điều này. 55
- Ví dụ: file thu có nội dung như sau: # cat thu /dev/hda4: Linux/i386 ext2 filesystem /dev/hda5: Linux/i386 swap file /dev/hda8: Linux/i386 swap file /dev/hda9: empty /dev/hda10: empty thutest toithutest và file mauloc có nội dung là: # cat mauloc empty test Bây giờ muốn sử dụng nội dung file mauloc làm mẫu lọc để tìm các câu trong file thu, hãy gõ lệnh: # fgrep -i -f mauloc thu /dev/hda9: empty /dev/hda10: empty thutest toithutest Một số ví dụ sử dụng lệnh grep Với file data file có nội dung sau: # cat datafile northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 southwest SW Lewis Dalsass 2.7 .8 2 18 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13 # grep NW datafile northwest NW Charles Main 3.0 .98 3 34 # grep '^n' datafile northwest NW Charles Main 3.0 .98 3 34 northeast NE AM Main Jr. 5.1 .94 3 13 56
- north NO Margot Weber 4.5 .89 5 9 # grep '4$' datafile northwest NW Charles Main 3.0 .98 3 34 # grep TB Savage datafile grep: Savage: No such file or directory datafile: eastern EA TB Savage 4.4 .84 5 20 # grep 'TB Savage' datafile eastern EA TB Savage 4.4 .84 5 20 # grep '5\ ' datafile western WE Sharon Gray 5.3 .97 5 23 southern SO Suan Chin 5.1 .95 4 15 northeast NE AM Main Jr. 5.1 .94 3 13 central CT Ann Stephens 5.7 .94 5 13 # grep '\.5' datafile north NO Margot Weber 4.5 .89 5 9 # grep '^[we]' datafile western WE Sharon Gray 5.3 .97 5 23 # grep '[^0-9]' datafile northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 southwest SW Lewis Dalsass 2.7 .8 2 18 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13 eastern EA TB Savage 4.4 .84 5 20 # grep '[A-Z][A-Z] [A-Z]' datafile eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 # grep 'ss* ' datafile northwest NW Charles Main 3.0 .98 3 34 southwest SW Lewis Dalsass 2.7 .8 2 18 # grep '[a-z]\{9\}' datafile northwest NW Charles Main 3.0 .98 3 34 southwest SW Lewis Dalsass 2.7 .8 2 18 southeast SE Patricia Hemenway 4.0 .7 4 17 northeast NE AM Main Jr. 5.1 .94 3 13 # grep '\(3\)\.[0-9].*\1 *\1' datafile 57
- northwest NW Charles Main 3.0 .98 3 34 # grep '\ ' datafile north NO Margot Weber 4.5 .89 5 9 # grep '\ ' datafile northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 southern SO Suan Chin 5.1 .95 4 15 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 central CT Ann Stephens 5.7 .94 5 13 #grep –n '^south' datafile 3:southwest SW Lewis Dalsass 2.7 .8 2 18 4:southern SO Suan Chin 5.1 .95 4 15 5:southeast SE Patricia Hemenway 4.0 .7 4 17 # grep –i 'pat' datafile southeast SE Patricia Hemenway 4.0 .7 4 17 # grep –v 'Suan Chin' datafile northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 southwest SW Lewis Dalsass 2.7 .8 2 18 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13 # grep –l 'SE' * (tìm file chứa xâu “SE”) datafile datebook # grep –w 'north' datafile north NO Margot Weber 4.5 .89 5 9 # echo $LOGNAME lewis # grep -i "$LOGNAME" datafile southwest SW Lewis Dalsass 2.7 .8 2 18 4.16 Tìm theo các đặc tính của file với lệnh find 58
- 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 của lệnh find: 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. Các toán tử: Formatted: Bullets and Numbering (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 Formatted: Bullets and Numbering thức: - daystart : đo thời gian (-amin, -atime, -cmin, -ctime, -mmin, -mtime). - 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). - 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. - help, help : hiển thị kết quả của lệnh find và thoát. các test - amin n : tìm file được truy nhập n phút trước. - atime n : tìm file được truy nhập n*24 giờ trước. - cmin n : trạng thái của file được thay đổi n phút trước đây. - ctime n : trạng thái của file được thay đổi n*24 giờ trước đây. - empty : file rỗng và hoặc là thư mục hoặc là file bình thường. - fstype kiểu : file thuộc hệ thống file với kiểu. - gid n : chỉ số nhóm của file là n. - group nhóm : file thuộc quyền sở hữu của nhóm. - links n : file có n liên kết. - mmin n : dữ liệu của file được sửa lần cuối vào n phút trước đây. - mtime n : dữ liệu của file được sửa vào n*24 giờ trước đây. - 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ư dấu "*", "?" 59
- - 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 - uid n: chỉ số người sở hữu file là n. - 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: - 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 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 ';' - 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 đã tồn tại thì sẽ bị thay thế nội dung. - print : hiển thị đầy đủ tên file trên thiết bị ra chuNn. - 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). Ví dụ: # find -name 'what*' ./usr/bin/whatis ./usr/bin/whatnow ./usr/doc/AfterStep-1.8.0/TODO/1.0ỴtoỴ1.5/whatsnew ./usr/doc/gnome-libs-devel-1.0.55/devel-docs/gnome-dev-info/gnome-dev- info/what.html ./usr/doc/gnome-libs-devel-1.0.55/devel-docs/gnome-dev-info/gnome-dev- info/whatis.html # find . -type f -exec grep -l -i mapping {} \ ; ./OWL/WordMap/msw-to-txt.c ./.elm/aliases.text ./Mail/mark ./News/usenet.alt ./bin/my.new.cmd: Permission denied ./src/fixit.c 60
- ./temp/attach.msg 4.17 Nén và sao lưu các file Sao lưu các file (lệnh tar) Dữ liệu rất có giá trị, sẽ mất nhiều thời gian và công sức nếu phải tạo lại, thậm chí có lúc cũng không thể nào tạo lại được. Vì vậy, Linux đưa ra các cách thức để người dùng bảo vệ dữ liệu của mình. Có bốn nguyên nhân cơ bản khiến dữ liệu có thể bị mất: lỗi phần cứng, lỗi phần mềm, lỗi do con người hoặc do thiên tai. Sao lưu là cách để bảo vệ dữ liệu một cách kinh tế nhất. Bằng cách sao lưu dữ liệu, sẽ không có vấn đề gì xảy ra nếu dữ liệu trên hệ thống bị mất. 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). N goà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. 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. Việc sao lưu toàn bộ có thể được thực hiện dễ dàng với lệnh tar . Cú pháp: 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. Lệnh tar có các lựa chọn: - c, create : tạo file lưu trữ mới. Formatted: Bullets and Numbering - 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ữ. 61