Nhập môn Linux và phần mềm mã nguồn mở

pdf 164 trang hapham 3770
Bạn đang xem 20 trang mẫu của tài liệu "Nhập môn Linux và phần mềm mã nguồn mở", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfnhap_mon_linux_va_phan_mem_ma_nguon_mo.pdf

Nội dung text: Nhập môn Linux và phần mềm mã nguồn mở

  1. Nhập môn Linux và phần mềm mã nguồn mở TS Hà Quốc Trung, ThS Lê Xuân Thành Ngày 22 tháng 7 năm 2010
  2. Phần I Giới thiệu về phần mềm mã nguồn mở và Linux 1
  3. Chương 1 Phần mềm mã nguồn mở 2
  4. 1.1 Khái niệm phần mềm mã nguồn mở 1.1.1 Khái niệm phần mềm tự do-mã nguồn mở Các thao tác có thể thực hiện trên phần mềm Phần mềm là một sản phẩm trí tuệ đặc biệt, đặc trưng cho ngành CNTT và CNPM. Trên các phần mềm, có thể thực hiện các thao tác: Sản xuất phần mềm : nghiên cứu nhu cầu NSD, thiết kế, coding, com- piling and releasing. Cài đặt phần mềm : Để có thể được sử dụng, phần mềm cần được cài đặt. Cài đặt là thao tác ghi các mã cần thiết cho việc thực hiện môi trường vào bộ nhớ thích hợp để NSD có thể sử dụng. Như vậy để cài đặt phần mềm cần có các mã máy cần thiết cho việc thực hiện phần mềm. Các mã này có thể để dưới dạng hiểu được bởi con người hoặc dưới dạng ngôn ngữ máy. Sử dụng phần mềm : cài đặt và sử dụng phần mềm trên máy tính. Máy tính này có thể là máy tính cá nhân, máy chủ, máy tính công cộng, . . . Tùy theo từng bối cảnh việc sử dụng phần mềm có thể có các ràng buộc khác nhau. (cài trên 1 máy, trên nhiều máy, trên nhiều CPU, . . . ). Các phần mềm có bản quyền thường bảo vệ việc sử dụng phần mềm bằng serial key, activate code và có những trường hợp bằng khóa vật lý! Thay đổi phần mềm Trong quá trình sử dụng có thể xuất hiện nhu cầu thay đổi. Việc thay đổi này có thể được tiến hành bởi tác giả phần mềm hoặc có thể do một người khác. Để thay đổi tính năng phần mềm cần có mã nguồn của phần mềm. Nếu không có mã nguồn, có thể dịch ngược để thu được mã nguồn từ mã thực hiện. Mã nguồn phần mềm có thể được phân phối theo nhiều kênh khác nhau (mạng, lưu trữ, truyền tay, lây nhiễm) Các thao tác khác Phân tích ngược mã nguồn, phân tích giao diện, mô phỏng, thực hiện luân phiên Phần mềm được quản lý bởi các qui tắc về bản quyền và sở hữu trí tuệ, cho phép thực hiện hoặc không thực hiện các thao tác nói trên trong các điều kiện khác nhau. 3
  5. Bản quyền phần mềm (BQPM) là tài liệu qui định việc thực hiện các thao tác trên phần mềm. Có thể có các bản quyền phần mềm sở hữu, bản quyền cho phần mềm miễn phí/phần mềm chia sẻ, bản quyền cho phần mềm tự do và mã nguồn mở 1.1.2 Phần mềm sở hữu là phần mềm có bản quyền ràng buộc chặt chẽ các thao tác trên phần mềm, đảm bảo quyền lợi của người làm ra phần mềm. Copy Right (bản quyền)là thuật ngữ chỉ quyền quản lý đối với phần mềm, cho phép/không cho phép thực hiện các thao tác khác trên phần mềm. Với các phần mềm sở hữu, thông thường bản quyền có các ràng buộc chặt chẽ đảm bảo quyền lợi của người làm ra phần mềm, nhất là việc bảo lưu bản quyền khi thực hiện các thao tác trên phần mềm. Do đó, bản quyền của các phần mềm chủ sở hữu thường rất chặt chẽ về quyền phân phối và quản lý, hạn chế quyền thay đổi và cải tiến và hầu như không cho phép việc phân tích ngược mã. Một số phần mềm sở hữu còn phân biệt các quyền này cho các đối tượng sử dụng Bạn đọc có thể tham khảo trong các thỏa thuận bản quyền dành cho NSD được phân phối kèm theo các phần mềm sở hữu. Việc ràng buộc chặt chẽ các quyền phân phối và quản lý trên phần mềm một mặt đảm bảo quyền lợi và từ đó là động lực cho người phát triển phần mềm, mặt khác hạn chế những thành phần khác hoàn thiện và bổ sung trực tiếp các tính năng, chức năng của phần mềm. Trong thực tế, các chủ sở hữu phần mềm chỉ cung cấp 1 phần quyền sử dụng (ví dụ sử dụng trên một máy tính, không được sử dụng trên máy chủ, không được sử dụng dịch vụ kết nối từ xa để sử dụng phần mềm). Khi NSD muốn có quyền sử dụng bổ sung cần trả tiền bổ sung theo tính chất và qui mô của quyền sử dụng. Các quyền phân phối thường bị hạn chế. NSD không có quyền phân phối cho NSD khác. Để đảm bảo kỹ thuật cho các hạn chế này, các phần mềm sở hữu thường có một mô đun để xác thực và kiểm tra quyền sử dụng. Đây cũng là một lý do mà quyền thay đổi phần mềm không bao giờ được cung cấp, trừ khi chủ sở hữu có ý định chuyển đổi sở hữu của phần mềm. Quyền quản lý phần mềm có giá rất cao, có thể coi là giá trị trí tuệ của phần mềm. 1.1.3 Phần mềm tự do mã nguồn mở Một xu hướng khác trong việc phân phối các phần mềm là không hạn chế các quyền thực hiện trên phần mềm. Hiển nhiên là các quyền quản lý phần mềm không thể không bị hạn chế, nếu không phần mềm sẽ trở thành sở hữu của một chủ thể khác có quyền hạn chế các quyền thực hiện khác của phần 4
  6. mềm. Như vậy, các phần mềm này sẽ được phân phối kèm theo tất cả các quyền, trừ quyền quản lý. Các chủ thể có thể sử dụng hoàn toàn tự do phần mềm, trừ việc sử dụng quyền quản lý để áp đặt hạn chế lên các quyền còn lại. Các phần mềm được phân phối theo cách thức này gọi là phần mềm tự do. Để đảm bảo cho việc thực hiện các quyền chỉnh sửa, nâng cấp, phân tích ngược phần mềm, các phần mềm này thường được phân phối kèm với mã nguồn. Chính vì nguyên nhân này nên thuật ngữ phần mềm tự do thường được gọi là phần mềm tự do mã nguồn mở hoặc phần mềm mã nguồn mở. Chú ý Trong khái niệm phần mềm mã nguồn mở, không qui định việc trả phí cho việc thực hiện các thao tác trên phần mềm. Điều này có nghĩa là phần mềm mã nguồn mở hoàn toàn có thể được bán, được kinh doanh giống như phần mềm sở hữu. Tất nhiên, việc NSD có trong tay mã nguồn, mã thực hiện từ một nguồn khác không mất phí có động lực để trả một khoản phí nào đó cho nhà phát triển phần mềm mang tính chất tài trợ nhiều hơn là thanh toán phí. Chú ý Cũng liên quan đến phí của phần mềm, cần phân biệt phần mềm mã nguồn mở với các phần mềm miễn phí. Với các phần mềm miễn phí, NSD sẽ có quyền sử dụng chứ không có quyền phân phối lại, thay đổi, chỉnh sửa, Chú ý Do có hạn chế về quyền quản lý phần mềm, nên phần mềm tự do mã nguồn mở khi phân phối vẫn cần kèm theo bản quyền. Bản quyền của phần mềm mã nguồn mở chỉ ra NSD có thể sử dụng bất cứ quyền nào trên phần mềm, trừ việc hạn chế bớt quyền trên phần mềm. Đây cũng là lý do bản quyền của phần mềm mã nguồn mở thường được gọi bằng thuật ngữ Copy Left thay cho Copy Right. Ranh giới giữa quyền quản lý và các quyền khác là một ranh giới mờ, do đo khái niệm mã nguồn mở được hiểu một cách khác nhau bởi các chủ thể khác nhau, phụ thuộc vào tập hợp quyền được cung cấp. Bản quyền GPL (Global Public License) tập hợp các tiêu chí chính để một phần mềm có thể được coi là phần mềm mã nguồn mở: • Tự do phân phối • Luôn kèm mã nguồn • Cho phép thay đổi phần mềm • Không cho phép thay đổi các ràng buộc bản quyền 5
  7. • Có thể có ràng buộc về việc • Tích hợp mã nguồn • Đặt tên phiên bản • Không phân biệt cá nhân/nhóm khác nhau • Không phân biệt mục đích sử dụng • Không hạn chế các phần mềm khác • Trung lập về công nghệ Một số các nhà phát triển khác không coi việc phân biệt nhóm, cá nhân khác nhau, hạn chế các phần mềm khác là một đặc điểm của PMMNM. Ví vậy, trước khi sử dụng phần mềm mã nguồn mở, cần kiểm tra xem bản quyền của phần mềm mã nguồn mở này qui định những gì.Trái với suy nghĩ của nhiều NSD, PMMNM có bản quyền và có thể bị vi phạm bản quyền. Có rất nhiều trường hợp mã nguồn sau khi chỉnh sửa đã bị đóng lại. 1.2 Phát triển PMMNM Nếu như các phần mềm sở hữu do một chủ thể duy nhất phát triển, quá trình phân tích thiết kế xây dựng phần mềm được hoạch định và kiểm soát chặt chẽ (mô hình dàn nhạc) thì PMMNM được phát triển theo mô hình chợ trời, trong đó NSD đóng vai trò của người phát triển phần mềm. Quá trình ra quyết định là động, không có một định hướng cứng nhắc từ thời điểm ban đầu. Độ tự do của nhà phát triển là rất lớn, có thể lựa chọn các quyết định theo xu hướng cá nhân, thiểu số và cũng có khi là đa số. Có rất nhiều trường hợp khi các ý kiến không thống nhất đã sinh ra 2 dòng phần mềm từ một phần mềm ban đầu trong quá trình phát triển( ví dụ iTexMac và TexShop). Kịch bản phát triển phổ biến của PMMNM là: có một nhà phát triển đưa ra một phiên bản đầu tiên+ý tưởng về phần mềm. Các nhà phát triển khác hoàn thiện các chức năng đề ra trong ý tưởng đó, tiếp tục đề xuất tính nằng mới. Quá trình liên tục được lặp lại. Để thuận tiện hơn cho các loại NSD, các phiên bản của PMMNM thường được qui định như sau: • Phiên bản dịch đêm: với mã nguồn được thay đổi thường xuyên, hàng ngày vào buổi đêm bản nhị phân của phiên bản mới nhất này được dịch. Phiên bản này chứa các tính năng mới nhất, tuy nhiên chưa được kiểm tra và rà soát kỹ càng, còn tiềm ẩn nhiều lỗi, chưa ổn định. Phiên bản này chủ yếu cho các nhà phát triển thử nghiệm và hoàn thiện. 6
  8. • Phiên bản thử nghiệm: Đã được rà soát các lỗi, tuy nhiên vẫn chưa ổn định. Dành cho NSD thử nghiệm để có ý kiến phản hồi. • Phiên bản bền vững: không tích hợp các tính năng chưa ổn định. Dành cho NSD đinh khai thác phần mềm. 1.3 Lịch sử phát triển PMMNM Việc sử dụng hệ điều hành UNIX và các công cụ hỗ trợ đi kèm đã khiến cho các nhà phát triển phần mềm cảm thấy bản quyền hạn chế sự sáng tạo của họ. Năm 1983, dự án GNU (GNU is NOT UNIX) ra đời, do Richard Stallman sáng lập. Dự án này phát triển thành Tổ chức phần mềm tự do (FSF-Free Software Foundation). Tổ chức này tập hợp các nhà phát triển thường xuyên sử dụng UNIX, hướng tới mục tiêu là phát triển các công cụ tương tự như của UNIX nhưng hoàn toàn tự do và mã nguồn mở. gcc (GNU C Complier) là sản phẩm đầu tiên, cho phép phát triển các sản phẩm khác. vi là chương trình soạn thảo thông dụng, và rất nhiều sản phẩm khác. Năm 1998 các nỗ lực ủng hộ PMMNM đã hình thành OSI (Open Source Initiative). OSI nỗ lực để tạo ra các khung pháp lý, cung cấp các thông tin cần thiết cho NSD, các nhà phát triển, các công ty dịch vụ có thể phát triển, khai thác, cung cấp dịch vụ, kinh doanh PMMNM. Mặc dù có một quá trình phát triển khá lâu dài, tuy nhiên trên thực tế phải đến năm 2008 mới có những qui định chặt chẽ của pháp luật một số nước bảo hộ PMMNM. Ví dụ khi vi phạm bản quyền của phần mềm, tất cả các quyền được gán trong bản quyền lập tức trở thành vô hiệu. Qui định này không tác động nhiều đến phần mềm sở hữu, nhưng với PMMNM, khi các quyền trở thành vô hiệu hầu như chắc chắn NSD sẽ vi phạm các sở hữu trí tuệ. 1.4 Nguồn lực phát triển phần mềm mã nguồn mở Khái niệm PMMNM không ràng buộc việc phần mềm có thể được bán hay không, tuy nhiên, với việc cung cấp kèm theo mã nguồn và cho phép NSD có thể tùy ý sửa đổi, việc thu một khoản phí từ NSD với các PMMNM không có cơ sở hợp lý, trừ những trường hợp rất đặc biệt khi phần mềm chỉ phục vụ cho số lượng ít NSD nào đó. Việc phát triển phần mềm, cho dù là sở hữu hay tự do, đều cần có nguồn lực về con người, tài chính. Câu hỏi đặt ra là 7
  9. làm thế nào để thu hút được nguồn lực để phát triển một PMMNM nào đó. Có thể liệt kê một số cách thức để thu hút các nguồn lực. Tư vấn Nguồn lực để phát triển mã nguồn mở có thể thu được từ các đơn vị chịu trách nhiệm tư vấn cho tổ chức sử dụng cuối cùng. Việc làm chủ được các PMMNM, các giải pháp sử dụng chúng cho phép các chuyên gia về PMMNM có thể tư vấn hiệu quả cho các tổ chức để lựa chọn các giải pháp, để quản lý kỹ thuận hệ thống thông tin của mình. Hỗ trợ kỹ thuật Nắm vững mã nguồn và cách thức khai thác PMMNM cho phép cung cấp dịc vụ hỗ trợ kỹ thuật cho các tổ chức không chuyên về IT. Đào tạo Khi các giải pháp PMMNM được sử dụng rộng rãi, sẽ xuất hiện nhu cầu về nhân lực phát triển, khai thác các PMMNM. Những công ty đi trước có thể cung cấp các dịch vụ đào tạo, dịch vụ cấp chứng chỉ để đáp ứng nhu cầu này. Cung cấp các giải pháp mã nguồn mở Không chỉ cung cấp các PMMNM, hoàn toàn có thể cung cấp các giải pháp tích hợp một hoặc nhiều PMMNM để đáp ứng nhu cầu chung về phần mềm của một tổ chức. Người cung cấp dịch vụ có thể không phải là người phát triển phần mềm, mà chỉ là người tích hợp các PMMNM khác lại với nhau, tuy nhiên đã cấu hình các PMMNM này để có hiệu năng tối ưu, có giao diện thuận tiện, nói chung là đáp ứng yêu cầu của NSD. Tài trợ/quảng cáo Khi một tổ chức cần một phần mềm, tổ chức này có thể tự phát triển phần mềm, có thể mua một phần mềm khác, có thể tài trợ cho một nhóm các nhà phát triển PMMNM. Nếu một số tổ chức có cùng nhu cầu về một phần mềm, các tổ chức này còn phối hợp với nhau, tài trợ các nguồn lực (con người, tài chính, cơ sở vật chất) để xây dựng một PMMNM, chia sẻ bớt kinh phí phát triển phần mềm. PMMNM không bị hạn chế về quyền sử dụng và phân phối, do đó có số lượng NSD lớn. Hoàn toàn có thể sử dụng lợi thế này để tạo nguồn kinh phí từ quảng cáo trên phần mềm hoặc trên các thông tin liên quan đến phần mềm. Có nhiều trường hợp có 2 phiên bản của phần mềm: phiên bản MNM tuân thủ GPL nhưng hạn chế về chức năng, phiên bản sở hữu (hoặc chuyên nghiệp) có đầy đủ các tính năng. Có thể thấy phiên bản MNM sẽ đóng vai trò quảng cáo cho phiên bản đầy đủ/chuyên nghiệp. Thương mại hóa (một phần/tất cả) Một cách thức nữa để có nguồn lực phát triển là sau một thời gian phát triển PMMNM có thể tiến hành 8
  10. thương mại hóa phần mềm để thu hồi chi phí. Tuy nhiên, hiệu quả của việc này phụ thuộc vào chất lượng của phần mềm có thuyết phục được NSD đang dùng phiên bản MNM chuyển sang phiên bản thu phí. 1.5 So sánh phần mềm mã nguồn mở và phần mềm mã nguồn đóng Tồn tại nhiều ý kiến ủng hộ và không ủng hộ xu hướng phát triển PMMNM. Các ý kiến ủng hộ cho rằng: • PM MNM có thể phát triển theo nhu cầu NSD • Không bị giới hạn sự sáng tạo • Tin cậy và bảo mật: Mã nguồn được đông đảo NSD kiểm tra. • Giảm chi phí phát triển • Không bị cản trở bởi động lực kinh tế Các ý kiến không ủng hộ tập trung chủ yếu vào một số luận điểm Triệt tiêu động lực phát triển Việc xuất hiện các phần mềm mã nguồn mở làm cho không còn động lực để phát triển phần mềm nói chung. Thiếu tính chuyên nghiệp Do PMMNM do nhiều người cùng tham gia phát triển, do đó khó có thể kiểm soát được qui trình phát triển và chất lượng của phần mềm. Chính vì thế nên PMMNM khó có thể thuyết phục được NSD không chuyên về IT Không bảo mật Mã nguồn công khai cho tất cả NSD, kể cả những NSD muốn tấn công hệ thống. 1.6 Một số phần mềm mã nguồn mở thông dụng Phần mềm mã nguồn mở hiện nay đã đạt đến mức phát triển ổn định, các lỗi cơ bản được khắc phục, được NSD chấp nhận rộng rãi. Có thể kể ra một vài phần mềm/bộ phần mềm được sử dụng rộng rãi hiện nay là: FireFox Trình duyệt của Mozilla, cho phép có thể phát triển các plug-in bổ sung 9
  11. Open Office Bộ soạn thảo văn bản của Sun Micro System, có thể thay thế MS Office Apache Web server được sử dụng rộng rãi PHP-MySQL Application Server Thunder Bird Mail Client của Mozilla Unikey Chương trình gõ tiếng Việt 1.6.1 Kho dữ liệu PMMNM PMMNM có thể được tải về theo cách thông thường như với các phần mềm miễn phí hoặc chia sẻ. Kho dữ liệu sourceforge.net định nghĩa khung thông tin cần thiết để cập nhật các thông tin chi tiết về một dự án PMMNM. Để thuận tiện cho việcsử dụng mã nguồn, các mã nguồn theo phiên bản của các phần mềm được lưu trữ tại các kho phần mềm. Các kho phần mềm này cho phép NSD tải mã nguồn và cập nhật mã nguồn mởi. Các sản phẩm thường được sử dụng là: CVS Concurrent Versions System: Hệ thống cho phép lưu trữ mã nguồn, kiểm soát các thay đổi trong mã nguồn và kiểm soát phân nhánh khi cần thiết SVN Hệ thống kiểm soát mã nguồn và quá trình chỉnh sửa mã nguồn, thay thế CVS. 10
  12. Chương 2 Khái niệm Linux 11
  13. 2.1 Linux: Nhân, hệ điều hành, bản phân phối hay hệ thống Thuật ngữ Linux được sử dụng rộng rãi trong thực tế. Tuy nhiên, trong các ngữ cảnh khác nhau, thuật ngữ này có thể được hiểu với nghĩa khác nhau. Khi sử dụng Linux trên các thiết bị nhúng, thiết bị di động, trong trường hợp này, chỉ có nhân của HĐH Linux được sử dụng. Thuật ngữ Linux được dùng để chỉ nhân của hệ điều hành Linux. Nhân của HĐH bao gồm các phần mềm cần thiết để quản lý và sử dụng các phần cứng của hệ thống. Khi cài đặt các phần mềm trên máy tính, có thể có nhiều lựa chọn: Windows, Linux, Sun, MacOS. Trong ngữ cảnh này. Linux được hiểu là một Hệ Điều Hành. Linux thường được phân phối không phải chỉ gồm có nhân và các phần mềm hệ thống. Đi kèm theo HĐH, còn có các phần mềm ứng dụng phục vụ các nhu cầu của từng lớp NSD. Giao diện đồ họa, các chương trình hỗ trợ. Tất cả các thành phần đó kết hợp với nhân của hệ điều hành và HĐH tạo ra một bản phân phối của Linux. Có rất nhiều bản phân phối khác nhau, có thể sử dụng chung một phiên bản của nhân, một tập hợp chung các phần mềm hệ thống, nhưng được phân phối với các bộ phần mềm khác nhau dành cho máy chủ, máy để bàn, máy xách tay, Khi so sánh hiệu năng giữa các sản phẩm Linux, MacOS, Sun Solaris, thực tế ta đã so sánh các hệ thống trên đó các HĐH tương ứng đã được cài đặt. Linux trong trường hợp này được sử dụng để chỉ một hệ thống máy tính cài đặt hệ điều hành Linux. Khi sử dụng thuật ngữ Linux, cần xác định rõ bỗi cảnh để tránh hiểu nhầm. 2.2 Lịch sử phát triển của Linux Linux ra đời dựa trên một số yếu tố lịch sử đặc biệt. Hệ điều hành Unix Thế hệ thứ nhất của các máy tính lớn chủ yếu sử dụng hệ điều hành Unix. Đây là một hệ điều hành được viết và sử dụng ngôn ngữ lập trình C. Nhược điểm duy nhất của HĐH Unix là giá thành cao. Với sự ra đời của các máy tính cá nhân, nhu cầu về một hệ điều hành đa nhiệm, đa NSD giá thành tương xứng với máy tính ngày càng trở nên mạnh mẽ. HĐH DOS của IBM và Microsoft đáp ứng được nhu cầu về giá thành, tuy nhiên lại là đơn nhiệm. 12
  14. FSF-GNU Hurd Các nỗ lực của FSF hướng tới mục tiêu là viết lại các công cụ của Linux để có thể phổ biến chúng dưới GPL. Một trong các dự án đó hướng tới việc xây dựng một HĐH mã nguồn mở có tên là GNU-Hurd. Rất tiếc, dự án này đã bị đóng băng và không có một HĐH mã nguồn mở nào có tên là Hurd. Andrew Tanenbaum là một giáo sư tại trường Đại học Vrije của Hà Lan. Ông là tác giả của rất nhiều cuốn sách kinh điển có giá trị trong CNTT. Một trong những cuốn sách đó là cuốn “Hệ Điều Hành”, xuất bản lần đầu tiên năm 1987. Cuốn sách này mô tả chi tiết hoạt động của một HĐH hiện đại, đa nhiệm, đa NSD. Đặc biệt, cuốn sách này được cung cấp kèm theo mã nguồn của HĐH Minix, điều này cho phép bạn đọc có thể tự mình kiểm nghiệm các tính năng của HĐH. Sau khi cuốn sách được phổ biến, việc có thể tìm hiểu, nghiên cứu, thử nghiệm một HĐH chi tiết đã tạo cho các SV cơ hội “viết lại” các HĐH. Một số trong đó có thể phát triển ra những phiên bản HĐH mới. Việc xuất hiện các máy tính cá nhân càng làm cho việc thử nghiệm HĐH trở nên dễ dàng. Tuy nhiên, Tanenbaum chỉ cho phép SV phân phối mã nguồn ban đầu của Minix, không cho phép họ phân phối mã nguồn đã được sửa đổi. Do đó các đóng góp của nhiều SV sẽ không được tích hợp lại. Một trong những sinh viên của Trường, Linux Tovard đã hoàn thành một nhân hệ điều hành có tính năng gần giống với nhân HĐH Linux. Linux Tovald thay vì giữ sản phẩm cho riêng mình, đã công bố mã nguồn cho cộng đồng các nhà phát triển (1991). Đó là sự xuất hiện của nhân Linux 1.0. Hiện tại nhân Linux đang có phiên bản 2.6 bền vững. Được sự đóng góp của cộng đồng, nhân của HĐH Linux đã trở nên ổn định, có thể chạy trên rất nhiều máy tính khác nhau, phục vụ nhiều loại nhu cầu khác nhau của NSD như dùng máy tính để bàn, server, Tanenbaum đã cho rằng Linux không có tương lai phát triển. Ông cho rằng Linux được thiết kế theo mô hình nhân khối (tất cả các tính năng của nhân được tích hợp vào trong một mã duy nhất) trong khi mô hình phù hợp là mô hình vi nhân. Một số ý kiến khác thì cho rằng Linux đã sử dụng phần lớn mã từ mã của Minix. Tanenbaum tuy có những ý kiến phản biện, nhưng cũng khẳng định là mã Linux được phát triển từ đầu. Với một nhân HĐH hoạt động ổn định (1993), các công cụ hỗ trợ từ Unix được xây dựng bởi các dự án FSF cho phép NSD có một HĐH tương đối đầy đủ, thuận tiện cho NSD, chi phí thấp hơn nhiều so với Unix. Có rất nhiều các phiên bản của nhân Linux, do đó nhân Linux được thống nhất đánh số theo dạng X.Y.Z-D: • X: thế hệ. Hiện tại có thế hệ 1 và 2. 13
  15. • Y: phiên bản chính • Z: phiên bản phụ • Các số lẻ là phiên bản thử nghiệm, số chẵn là phiên bản bền vững • D: Phần còn lại bổ sung bởi các nhà phân phối Ví dụ 2.6.31-14-generic-pae biểu diễn nhân Linux thế hệ 2, phiên bản 6, phiên bản phụ 31. Phần bổ sung bởi nhàn phân phối thường là tên nhà phân phối và dòng máy tính phù hợp. 2.3 Ứng dụng của Linux Mặc dù ban đầu chỉ được xây dựng cho các máy tính i386, tuy nhiên do tính chất mã nguồn mở, NSD với phần cứng hoặc nhu cầu khác nhau đều có thể thay đổi Linux cho phù hợp, nên Linux có thể được ứng dụng trong nhiều lĩnh vực khác nhau, trên các dòng phần cứng khác nhau. Máy tính để bàn Linux được sử dụng ngày càng nhiều trên máy tính để bàn. Linux ngày nay thường được phân phối cùng với các giao diện đồ họa như GNOME, KDE, Các phần mềm ứng dụng xuất hiện ngày càng nhiều, hoạt động ổn định, cung cấp cho NSD những công cụ mạnh mẽ để xử lý văn bản, chỉnh sửa đồ họa, duyệt Internet, tóm lại tất cả các thao tác mà người sử dụng mong chờ ở một máy tính để bàn. Các chương trình phổ biến trên các HĐH thương mại Windows và MacOSX hầu hết đều có các phần mềm có tính năng tương đương trên Linux. Máy chủ Linux được sử dụng phổ biến hơn trên các máy chủ. Một máy tính Linux có thể được kết nối và thực hiện các thao tác quản trị máy tính thông qua một giao diện văn bản. Việc truy cập vào giao diện console này nhanh và thuận tiện hơn nhiều so với truy cập vào giao diện đồ họa. Linux có thị phần vượt trội và có xu hướng tăng đân trong thị trường máy chủ. Điều này có thể giải thích dựa trên tổ hợp LAMP (Linux-Apache-PHP-MySQL) rất thuận tiện cho việc triển khai các web site và ứng dụng web. Trên các máy tính lớn, Linux cũng được dùng phổ biến bởi 2 nguyên nhân: giá thành rẻ và tính tương thích tương tự Unix. Các siêu máy tính hầu hết được thiết kế để có thể hoạt động với Unix, nên có thể hoạt động dễ dàng trên Linux. Một số siêu máy tính còn được phân phối cùng Linux. Máy tính IBM Sequoi cũng sẽ sử dụng HĐH Linux. 14
  16. Hình 2.4.1: Các thành phần của Linux Các hệ nhúng Linux còn được sử dụng rộng rãi trên các thiết bị nhúng vì khả năng tùy biến và giá thành hạ. HĐH Maemo mà Nokia sẽ sử dụng trong một loạt các điện thoại thông minh sắp ra đời là một HĐH dựa trên Linux. Trong nhiều router, switch cũng sử dụng HĐH Linux. 2.4 Các thành phần của Linux HĐH Linux gồm các thành phần: nhân hệ điều hành, các công cụ hệ thống, giao diện đồ họa và ứng dụng. Hình 2.4.1 mô tả các thành phần của Linux. Nhân hệ điều hành Nhân hệ điều hành cung cấp một giao diện cho các chương trình và NSD có thể quản lý và khai thác phần cứng máy tính. Nhân HĐH bao gồm các driver của một số phần cứng cơ bản, các chương trình lập lịch CPU, quản lý bộ nhớ và quản lý các thiết bị vào ra. Các drivers Ngoài các phần cứng cơ bản của các hệ thống máy tính, còn nhiều các phần cứng khác được quản lý bởi các driver chưa được tích hợp trong nhân. Các driver này có thể được tải cùng với nhân hoặc sau khi nhân 15
  17. đã được tải. Việc một driver được tích hợp vào trong nhân hay đặt dưới dạng một mô đun hoàn toàn do người dịch nhân quyết định. Các phần mềm hệ thống Các phần mềm liên quan đến cấu hình hệ thống, giám sát hệ thống, thực hiện các thao tác quản trị Các phần mềm ứng dụng Các phần mềm ứng dụng cho NSD: bộ soạn thảo, mail client, trình biên dịch, thông dịch, X Windows và Các phần mềm ứng dụng với giao diện đồ họa Giao diện đồ họa được xây dựng trên cơ sở X, phần mềm cho phép quản lý các vùng logic của màn hình theo các cửa sổ. Trên nền của X, có các chương trình quản lý cửa sổ như KDE, GNOME cho phép quản lý các cửa sổ một cách thống nhất. NSD có thể sử dụng các chương trình chạy trên nền đồ họa của X. 2.5 Các bản phân phối của Linux Linux được các nhà phân phối đóng gói để tạo điều kiện thuận lợi cho NSD. Ban đầu việc đóng gói đơn giản chỉ là tích hợp các phần mềm cần thiết vào một ổ lưu trữ ngoài như đĩa cứng, đĩa mềm. Dần dần, khái niệm bản phân phối là một hoặc nhiều phương tiện lưu trữ có thể tạo ra một môi trường làm việc tương đối đầy đủ cho NSD, chỉ cần NSD khai báo các thông tin cơ bản về hệ thống chứ không cần phải can thiệp vào các chi tiết của quá trình cài đặt. Một bản phân phối hiện đại thường gồm các thành phần sau: nhân HĐH, các gói phần mềm cơ bản, công cụ quản lý các phần mềm, công cụ hỗ trợ cài đặt. 2.5.1 Các thành phần của một bản phân phối Linux Nhân hệ điều hành Nhà phân phối lựa chọn một phiên bản của nhân Linux, chỉnh sửa, đóng gói để làm nền tảng cho bản phân phối. Các gói phần mềm cơ bản Linux được phân phối kèm theo các gói phần mềm. Số lượng các gói phần mềm lên đến cỡ hàng ngàn, do đó các nhà phân phối thường phân chia các gói phần mềm thành các nhóm phần mềm phục vụ các yêu cầu khác nhau: nhóm công cụ quản trị hệ thống, nhóm công cụ phát triển, nhóm công cụ xử lý văn bản, nhóm các công cụ đồ họa, để thuận tiện hơn cho người sử dụng cho việc lựa chọn. 16
  18. Hình 2.5.2: Lựa chọn các bản phân phối của Linux Công cụ quản lý phần mềm Với số lượng phần mềm lớn, không tránh khỏi có xung đột và ràng buộc lẫn nhau. Các bản phân phối thường sử dụng các công cụ chuyên biệt, có CSDL riêng để có thể quản lý các xung đột và ràng buộc này. Có 2 công cụ được sử dụng phổ biến: Redhat package manager và Debian Package Manager. Các bản phân phối khác thường dựa trên một trong 2 công cụ này. Công cụ hỗ trợ cài đặt Là công cụ hỗ trợ NSD trong quá trình cài đặt, nhận thông tin về nhu cầu của NSD và thực hiện các thao tác cài đặt chi tiết thay cho NSD. Các công cụ được các bản phân phối hiện tại thường cho phép NSD thực hiện các tùy chọn: Chạy thử nghiệm từ CD, không cần cài đặt, cài đặt với giao diện đồ họa, cài đặt kiểu quản trị viên, thực hiện chế độ phục hồi. Các chương trình cài đặt này cho phép NSD có thể dễ dàng có một hệ thống Linux phù hợp với nhu cầu sử dụng của mình. 2.5.2 Lựa chọn bản phân phối Linux phù hợp Mỗi bản phân phối thường hướng đến một đối tượng sử dụng cụ thể. Người sử dụng có thể lựa chọn bản phân phối phù hợp với nhu cầu sử dụng của mình. Hình ?? đề xuất một số bản phân phối phù hợp theo nhu cầu của NSD. 17
  19. Phần II Quản trị hệ thống Linux 18
  20. Chương 3 Các thao tác cơ bản 19
  21. 3.1 Cài đặt linux 3.1.1 Lựa chọn cách thức cài đặt Bạn đọc có thể cài đặt Linux bằng một trong các phương án sau: • Cài từ bộ cài trên đĩa CD • Cài qua mạng từ đĩa Net Install • Cài từ bộ cài trên máy • Cài thông qua một máy chủ Linux trong mạng nội bộ bằng NFS • Cài từ bộ cài trong file .iso (dùng máy ảo) Bạn đọc cũng có thể lựa chọn cài đặt hệ thống Linux trên: • Máy tính đã cài sẵn hệ điều hành Windows và chạy song song hai hệ điều hành • Máy tính chỉ cài Linux • Máy ảo Trên các phương án trên, tác giả khuyến cáo bạn đọc nên cài Linux trên máy ảo và cài từ bộ cài đầy đủ trên file iso. Phương án này không làm ảnh hưởng đến hệ thống hiện tại đang hoạt động của bạn đọc, không cần phải ghi bộ cài ra đĩa CD và dễ dàng sao chép, sử dụng lại sau này. 3.1.2 Các bước chuẩn bị trước khi cài đặt Để tiến hành cài đặt hệ thống bạn đọc cần các công việc sau: • Tải về máy bộ cài linux dưới dạng file iso • Tải về máy và cài đặt phần mềm máy ảo VirtualBox cho Windows bản mới nhất tại: • Chuẩn bị các thông tin về cấu hình địa chỉ IP cho máy tính • Tham khảo các bước cài đặt cụ thể trên mạng Internet 20
  22. 3.1.3 Các lưu ý trong quá trình cài đặt Tạo máy ảo bằng VitualBox . Máy ảo này chính là hệ thống để bạn đọc tiếp cận với Linux trong những phần sau nên không cần phần cứng quá mạnh. Trong bước lựa chọn bộ nhớ RAM, dung lượng 256Mb là đủ. Trong bước lựa chọn ổ đĩa cứng, dung lượng 8Gb và tùy chọn ”Dynamically expanding storage” (dùng đến đâu file ổ cứng lớn lên đến đó) là một lựa chọn thông minh. Sau khi kết thúc phần khởi tạo, bạn đọc có thể tinh chỉnh một chút cấu hình hệ thống như sau: Cấu hình card mạng nên để ở chế độ NAT để máy vẫn vào mạng được và không ảnh hưởng đến hệ thống mạng nội bộ đang dùng. Bạn đọc cũng có thể remove phần ổ đĩa mềm đi để hệ thống nhanh hơn chút ít. Trỏ ổ đĩa CD vào file .iso mà bạn đã tải về. Tiến hành cài đặt . Sau khi cho chạy máy ảo hệ thống sẽ boot từ đĩa CD ảo và bắt đầu cài đặt hệ thống như đối với máy thật thông thường. Trong quá trình này tác giả lưu ý với bạn đọc vài điểm sau: • Phần lựa chọn ngôn ngữ cài đặt nên để tiếng anh mỹ (US) tránh trường hợp một số phần mềm không tương thích với hệ điều hành tiếng việt • Phần lựa chọn quốc gia nên chọn Việt Nam để có thể chọn đúng được múi giờ ở phần lựa chọn múi giờ hệ thống • Phần lựa chọn ổ cứng nên để mặc định (cài tất cả cây thư mục lên một ổ cứng). Việc tùy biến ổ cứng nên để sau này khi bạn đọc đã thành thạo Linux và xác định rõ mình cài đặt Linux cho một hệ thống cụ thể nào đó. • Phần đặt mật khẩu cho tài khoản ”root” cần được lưu ý tuân thủ các quy tắc sau: lớn hơn 10 ký tự, kết hợp chữ hoa, thường với ký tự số hoặc ký tự đặc biệt để bảo mật • Không được bỏ qua phần tạo thêm một tài khoản người sử dụng khác vì bạn đọc sẽ chủ yếu dùng tài khoản này 3.2 Đăng nhập 3.2.1 Khởi động hệ thống Sau khi bấm nút bật máy tính, hệ thống được khởi động. Sau quá trình POST của máy tính, trình khởi động hệ thống (hiện nay thường là GRUB) sẽ đưa ra danh sách các cách khởi động hệ điều hành, bạn đọc chọn chế độ 21
  23. muốn khởi động hoặc để hệ thống chạy mặc định. Trong quá trình khởi chạy hệ điều hành màn hình sẽ hiện lên rất nhiều thông tin nhưng ta không xem xét đến vấn đề này (sau này, khi đã thành thạo và làm quen với Linux nâng cao bạn đọc sẽ có thể tìm hiểu được chúng), cuối cùng sẽ xuất hiện màn hình cho người dùng đăng nhập. Ở đây chúng ta không cài đặt chế độ đồ họa nên màn hình đăng nhập sẽ hiện như sau: (hình ảnh minh họa). 3.2.2 Đăng nhập vào hệ thống Khi máy tính hiện ra màn hình như trên, bạn đọc cần nhập tên tài khoản người dùng và mật khẩu để đăng nhập vào hệ thống. Nếu trong quá trình cài đặt người dùng đã tạo tài khoản người dùng thì nhập tên truy cập và mật khẩu của tài khoản này để đăng nhập. Còn nếu đã bỏ qua việc tạo một tài khoản sử dụng thì ở lần đăng nhập này cần phải đăng nhập bằng tài khoản ”root”. Bạn đọc nhập tên truy cập là ”root”và mật khẩu đã tạo trong quá trình cài đặt để đăng nhập vào. Tác giả khuyến cáo bạn đọc không nên sử dụng thường xuyên đến tài khoản ”root” này vì đây là tài khoản có quyền cao nhất của hệ thống, nhưng thao tác không cẩn thận sẽ làm hỏng hệ thống bất cứ lúc nào. Nếu người dùng gõ sai mật khẩu hệ thống sẽ hiện ra thông báo dưới đây để người dùng nhập lại (hình minh họa). Bạn đọc lưu ý kiểm tra các phím số, caplock trước khi nhập mật khẩu để tránh gõ nhầm, gõ sai. Nếu gõ đúng phiên làm viêc sẽ được thiết lập với màn hình sử dụng và dấu nhắc hệ thống như hình dưới (hình minh họa) Linux còn hỗ trợ người dùng đăng nhập thông qua thiết bị giao tiếp (console). Có hai kiểu console đó là: Console với giao diện dòng lệnh (CLI - Command Line Interface) Ở kiểu đăng nhập này một trình thông dịch lệnh được tự động kích hoạt khi phiên làm việc, trình thông dịch này giúp hệ thống tương tác với người sử dụng thông qua các câu lệnh. Người sử dụng sẽ nhập lệnh bằng bàn phím và kết quả đưa ra trên màn hình dưới dạng văn bản như hình minh họa dưới đây. Kiểu giao diện sử dụng này hoạt động dựa trên một ngôn ngữ lập trình dạng kịch bản (script) và tiêu tốn cực ít tài nguyên của hệ thống nên rất thích hợp khi người quản trị tương tác với hệ thống từ xa. Console với giao diện đồ họa (GUI - Graphic User Interface) . Khi đăng nhập bằng giao diện đồ họa, chế độ cửa sổ (windows) được kích hoạt, người sử dụng sử dụng hệ thống với giao diện đồ họa như trên các máy sử dụng hệ điều hành Windows bình thường. Kiểu giao tiếp này tiêu tốn nhiều tài nguyên hơn tuy nhiên lại dễ sử dụng, thích hợp với những người quản trị 22
  24. hệ thống không chuyên (làm việc kiêm nhiệm thêm do thiếu người và không được đào tạo bài bản). 3.3 Giao diện dòng lệnh CLI 3.3.1 Terminal và console ảo Trước khi tìm hiểu về giao diện dòng lệnh, tác giả sẽ trình bày hai khái niệm rất hay dùng trong Linux là Terminal và Console. Terminal Khái niệm Terminal xuất hiện từ xa xưa khi các hệ thống máy tính rất lớn, người sử dụng không tương tác trực tiếp với hệ thống mà thông qua các Terminal ở xa. Các hệ thống Terminal này gồm màn hình và bàn phím, ngày nay do kích thước bé đi nên các terminal này chính là máy tính của người sử dụng. Console Ngoài ra hệ thống Linux nói chung hay các máy chủ dịch vụ của các hệ điều hành khác nói riêng đều cung cấp cho người quản trị một giao diện Terminal đặc biệt gọi là Console. Trước kia console tồn tại dưới dạng một cổng giao tiếp riêng biết, còn ngày nay nó xuất hiện trong các hệ thống Linux dưới dạng một Console ảo cho phép mở cùng lúc nhiều phiên làm việc trên một máy tính. Để chọn console ảo người sử dụng có thể ấn tổ hợp phím + + - F* chạy từ F1 - F8 - Trong đó + + là danh cho chế độ đăng nhập bằng đồ họa. Để thoát khỏi console nào người sử dụng gõ lệnh ”exit” hoặc tổ hợp phím + 3.3.2 Shell Shell là trình thông dịch dòng lệnh trong hệ thống Linux. Mỗi khi người sử dụng đăng nhập vào hệ thống bằng giao điện dòng lệnh tức là người sử dụng khởi động một shell để sử dụng. Nếu người sử dụng mở thêm một hay vài console ảo cũng tức là người sử dụng mở thêm một vài shell mới và khi thoát khỏi các Console này tức là đã tắt shell đó đi. Chú ý dấu nhắc của shell ”root” là ký tự còn tất cả các shell khác là ký tự ”đô la” Mỗi Shell làm các nhiệm vụ sau: • Thông dịch và thực hiện các lệnh • Soạn thảo dòng lênh, lịch sử các lệnh đã gõ 23
  25. • Scripting • Quản lý tác vụ Bạn đọc cũng có thể tìm hiểu thêm thông tin về các Shell thông dụng sau: sh, csh, tcsh, ksh, zsh 3.4 Một số lệnh thường dùng 3.4.1 Cấu trúc dòng lệnh trong Linux Một lệnh trong Linux được cấu tạo bởi 3 phần như sau: [Op- tions]> [Arguments] Trong đó: • : tên của lệnh, giúp cho hệ thống biết được: hệ thống sẽ làm gì Option : tham số của lệnh (thường được truyền vào bằng cách thêm vào sau dấu hoặc ), giúp hệ thống hiểu được: hệ thống sẽ làm việc đó như thế nào Argument : đối số của lệnh, giúp hệ thống biết được: hệ thống sẽ thực hiện lệnh này ở đâu (trên thư mục nào hay trên file nào) Có một vài lưu ý cho bạn đọc khi sử dụng lệnh trong Linux như sau: • Câu lệnh trong Linux phân biệt chữ hoa và chữ thường • Giữa các phần của câu lệnh phải có khoảng trắng • Đằng sau các dấu và không được có khoảng trắng • Các phần đặt trong dấu ngoặc vuông [] là không bắt buộc, không có lệnh vẫn thực hiện được. Hình minh họa ví dụ 3.4.2 Các phím tắt để sửa lỗi Trong quá trình gõ lệnh, sẽ có lúc bạn đọc gõ sai cú pháp lệnh hay nhầm lẫn khi truyền vào các tùy chọn và tham số, tuy có thể gõ lại lệnh mới hoàn toàn nhưng đối với những lệnh dài, sửa chữa lại chỗ gõ nhầm là phương án hợp lý hơn. Ở dưới đây tác giả đưa ra một bảng với các tổ hợp phím thường sử dụng trong quá trình sửa chữa lệnh, người dùng cũng có thể tự tích lũy 24
  26. thêm trong quá trình sử dụng của riêng mình. Chèn hình hay bảng mình họa Có một lưu ý với người sử dụng là hệ thống Linux hỗ trợ một cơ chế tự động hoàn thiện lệnh giúp giảm thiểu sai sót của người sử dụng bằng cách sử dụng phím . Ví dụ: thay vì phải gõ đầy đủ lệnh người sử dụng gõ và gõ thêm . Điều này cũng đúng khi người dùng gõ phần của lênh. Ví dụ thay vì gõ người sử dụng có thể gõ + + + . Bạn đọc nên tập thói quen sử dụng phím này ngay cả với các lệnh ngắn như cat, more, tail 3.4.3 Nhóm các lệnh xem thông tin hệ thống man : Lệnh xem help của hệ thống, được sử dụng để xem hướng dẫn sử dụng lệnh hay thông tin về các tiện ích của hệ thống. Cú pháp: . Ví dụ: hay . Info : Lệnh này tương tự như lệnh Man nhưng có một ưu điểm là nội dung đưa ra dưới dạng siêu văn bản (như website) nên người dùng có thể xem các phần khác nhau của trợ giúp mà không cần thoát ra ngoài, vì thế người dùng hoàn toàn có thể bật info lên ở một console ảo và làm việc ở một console ảo khác, khi cần tra cứu lệnh thì chuyển sang. date : Lệnh hiển thị thông tin về ngày tháng, lệnh này sẽ hiển thị chi tiết thông tin về ngày giờ hiện tại. Để biết thêm thông tin về các của lệnh này người sử dụng có thể sử dụng lệnh logname : lệnh hiển thị tên người sử dụng đang ở phiên làm việc. Trong quá trình cài đặt hệ thống bạn đọc đã trải qua bước tạo một tài khoản để sử dụng, trong quá trình đó có 3 bước khai báo: Khai báo họ tên người dùng tài khoản, khai báo tên đăng nhập tài khoản và khai báo mật khẩu. Lệnh này sẽ hiển thị thông tin về Họ tên người sử dụng. hostname : Lệnh này sẽ hiển thị tên của trạm làm việc. Nếu bạn đọc sử dụng lệnh này trên chính máy cài đặt linux thì tên của máy Linux sẽ được hiển thị ps : Lệnh hiển thị các tiến trình đang chạy. Sử dụng lệnh này với tham số bạn đọc sẽ xem được cả thông tin về user khởi chạy các tiến trình đó 25
  27. 3.4.4 Nhóm lệnh về tài khoản người dùng useradd : lệnh tạo tài khoản người dùng. Cú pháp: . Nếu bạn đọc không đưa vào đường dẫn đến thư mục chứa tài khoản, thư mục này sẽ được thiết lập mặc định tại passwd : lệnh thay đổi mật khẩu. Cú pháp . Nếu chỉ gõ mà không thi hệ thống hiểu là đổi mật khẩu cho tài khoản hiện tại đang đăng nhập. Sau khi gõ lệnh hệ thống sẽ đưa ra thông báo yêu cầu gõ mật khẩu mới 2 lần để người sử dụng gõ vào mật khẩu mới. 3.4.5 Nhóm lệnh thao tác với file và thư mục ls : lệnh dùng để liệt kê thông tin về file và thư mục chứa trong thư mục muốn xem. Cú pháp . Ví dụ: sẽ hiển thị thông tin về các file và thư mục trong thư mục mkdir Lệnh tạo thư mục, cú pháp: . Ví dụ hay , lệnh đầu tiên sẽ tạo thư mục tên là ở thư mục làm việc hiện hành, lệnh thứ 2 sẽ tạo thư mục trong thư mục cp Lệnh sao chép, được dùng để sao chép thư mục hoặc file. Cú pháp , với nguồn là thư mục hoặc file cần copy và đích là nơi cần đặt thư mục hoặc tài liệu vào. Chú ý rằng các thao tác với thư mục cần có op- tion là . Ví dụ: hoặc , ví dụ đầu sẽ sao chép file congvan.txt ở thư mục hiện hành vào thư mục , ví dụ thứ hai sẽ sao chép thư mục vào thư mục mv Lệnh di chuyển, dùng để di chuyển thư mục hoặc file. Lệnh này có cú pháp và cách sử dụng giống hệt lệnh tuy nhiên nó không sao chép mà di chuyển file hoặc thư mục đến đích. Bạn đọc có thể vận dụng hai lệnh và một cách khéo léo để đổi tên thư mục ví dụ như sau: lệnh này sẽ đổi tên file ở thư mục hiện hành thành , hoặc lệnh này sẽ copy file ở thư mục hiện hành đến thư mục và đổi tên file đó thành 26
  28. rm Lệnh xóa, dùng để xóa file và thư mục, cú pháp và cách sử dụng giống hai lệnh và . Để thao tác lên thư mục bạn đọc nhớ thêm . Ngoài ra còn có một lệnh xóa thư mục nữa nhưng lệnh này chỉ có tác dụng xóa các thư mục rỗng . touch Lệnh tạo file, lệnh này sẽ tạo một file rỗng, người sử dụng thêm nội dung vào sau. Cú pháp , ví dụ ví dụ này tạo một file rỗng tên là trong thư mục hiện hành echo Lệnh này cho phép ghi một thông tin vào file, cú pháp TenFile> hoặc . Lệnh đầu tiên sẽ xóa nội dung file và ghi đè nội dung mới vào, lệnh thứ hai sẽ ghi tiếp nội dung mới và cuối file 3.5 Bài tập Bài tập 3.1 Cài đặt hệ điều hành • Cài Debian với giao diện dòng lệnh. Yêu cầu: Cài đặt, cấu hình địa chỉ IP, cập nhật hệ điều hành lên bản mới nhất • Cài Ubuntu với giao diện đồ họa. Yêu cầu: Cài đặ, cấu hình địa chỉ IP, cập nhật hệ điều hành và cài phần mềm bằng cách tải gói về Bài tập 3.2 Thực hành các lệnh cơ bản Đưa vào sau 27
  29. Chương 4 Hệ thống tệp 28
  30. 4.1 Khái niệm hệ thống tệp Các hệ thống máy tính sử dụng các thiết bị lưu trữ ngoài để lưu trữ thông tin một cách bền vững. Các thiết bị lưu trữ quản lý không gian bộ nhớ ngoài theo từng khối dữ liệu. Giữa các khối dữ liệu chỉ có liên quan về mặt vật lý, không có liên quan gì về ngữ nghĩa. Để có thể sử dụng các khối dữ liệu này một cách thuận tiện, các khối dữ liệu có chung ngữ nghĩa, có chung mục đích sử dụng được gộp lại với nhau và được quản lý bởi một khối dữ liệu điều khiển. Các khối dữ liệu được gộp lại như vậy gọi là một tệp (file). Khi người sử dụng có nhiều tệp, để có thể quản lý các tệp dễ dàng hơn, các tệp được gộp lại với nhau theo yêu cầu của NSD, bổ sung thêm một tệp chứa danh mục và vị trí của các tệp được gộp. Tệp chứa danh mục này được gọi là tệp thư mục. Về phần mình, tệp thư mục cũng có thể được gộp vào với các tệp khác để tạo thành thư mục. Với cách nhóm các tệp như vậy, trong hệ thống sẽ có 2 loại tệp cơ bản: • Tệp thông thường chỉ chứa dữ liệu. • Tệp thư mục chỉ chứa danh mục các tệp và thư mục con nằm trong thư mục đó. Các tệp và các thư mục kết hợp với nhau tạo ra một hoặc nhiều cây thư mục, trong đó các tệp thông thường luôn luôn là các nút lá. Nút gốc của các cây là điểm cố định để từ đó có thể truy cập được các nút trong cây. Ở dưới HĐH Linux, các tệp và thư mục tạo thành một cây duy nhất có thư mục gốc ký hiệu là / - (thư mục gốc). Các thư mục con thường gặp của thư mục gốc là các thư mục: • /bin : thư mục tệp chương trình cơ bản • /boot : thư mục chứa hạt nhân của HĐH • /etc : thư mục các tệp cấu hình • /dev : thư mục các tệp thiết bị • /home : thư mục chứa dữ liệu NSD • /lib : thư viện hệ thống • /usr : thư mục ứng dụng • /var : thư mục dữ liệu cập nhật • /proc : thư mục chứa các dữ liệu của nhân hệ điều hành và BIOS 29
  31. Các tệp thư mục lưu trữ các thư mục con và tệp. Các thư mục con và tệp đều được đặt tên. Giống như trong HĐH Windows, Linux cho phép tên tệp có thể dài đến 255 ký tự, có thể bao gồm các ký tự đặc biệt. Để truy cập được vào các thư mục và tệp, xuất phát từ nút gốc truy cập vào các thư mục con cho đến khi đến được tệp cần thiết. Tập hợp tên của các thư mục con từ nút gốc đến tệp cần truy cập, phân cách các tên bằng dấu / gọi là đường dẫn tuyệt đối đến tệp. Trong mọi trường hợp, luôn luôn có thể dùng đường dẫn tuyệt đối để tham chiếu tới tệp. Khi NSD truy cập vào hệ thống hoặc khi các chương trình đang thực hiện, một thư mục được sử dụng để tham chiếu tới tất cả các tệp và thư mục khác trong hệ thống. Với NSD đó thường là thư mục nhà (/home, đượctham chiếu tới bằng /). Với chương trình, đó thường là thư mục gọi câu lệnh thực hiện. Thư mục này gọi là thư mục làm việc hiện tại. Trong một thư mục luôn luôn có 2 thư mục đặc biệt: ./ để biểu diễn thư mục hiện tại và / biểu diễn thư mục cha của thư mục hiện tại. Trong nhiều trường hợp, sẽ hiệu quả hơn nếu truy cập vào một tệp thông qua đường đi trong cây từ thư mục hiện tại đến tệp cần truy cập bằng cách sử dụng ./ và /. Một đường dẫn như vậy sẽ phụ thuộc vào thư mục làm việc hiện tại, được gọi là đường dẫn tương đối. 4.2 Quản lý thư mục Các câu lệnh thực hiện thao tác cơ bản để làm việc với các thư mục là: • cd (change directory) Chuyển đến một thư mục. • pwd Xác định thư mục hiện tại: trunghq@ubuntu:~/temp$ whoami trunghq trunghq@ubuntu:~/$ pwd /home/trunghq trunghq@ubuntu:~/$ cd temp (or cd ./temp) trunghq@ubuntu:~/temp$ pwd /home/trunghq/temp trunghq@ubuntu:~/temp$ cd (or cd /) trunghq@ubuntu:~/$ pwd /home/trunghq • ls Liệt kê nội dung của thư mục. 30
  32. drwxr-xr-x 2 trunghq trunghq 4096 2010-04-15 22:40 . drwxr-xr-x 5 trunghq trunghq 4096 2010-04-15 22:40 trunghq@ubuntu:~/temp$ ls -la total 8 drwxr-xr-x 2 trunghq trunghq 4096 2010-04-15 22:40 . drwxr-xr-x 5 trunghq trunghq 4096 2010-04-15 22:40 trunghq@ubuntu:~/temp$ mkdir d1 trunghq@ubuntu:~/temp$ ls -la total 12 drwxr-xr-x 3 trunghq trunghq 4096 2010-04-15 22:42 . drwxr-xr-x 5 trunghq trunghq 4096 2010-04-15 22:40 drwxr-xr-x 2 trunghq trunghq 4096 2010-04-15 22:42 d1 • mkdir Tạo ra thư mục mới khi thư mục cha đã tồn tại. Trường hợp muốn tạo tự động thư mục cha sử dụng -p. trunghq@ubuntu:~/temp$ mkdir d2/d3 mkdir: cannot create directory ‘d2/d3’: No such file or directory trunghq@ubuntu:~/temp$ mkdir -p d2/d3 trunghq@ubuntu:~/temp$ ls -la total 16 drwxr-xr-x 4 trunghq trunghq 4096 2010-04-15 22:42 . drwxr-xr-x 5 trunghq trunghq 4096 2010-04-15 22:40 drwxr-xr-x 2 trunghq trunghq 4096 2010-04-15 22:42 d1 drwxr-xr-x 3 trunghq trunghq 4096 2010-04-15 22:42 d2 trunghq@ubuntu:~/temp$ ls -la d2/ total 12 drwxr-xr-x 3 trunghq trunghq 4096 2010-04-15 22:42 . drwxr-xr-x 4 trunghq trunghq 4096 2010-04-15 22:42 drwxr-xr-x 2 trunghq trunghq 4096 2010-04-15 22:42 d3 • rmdir Xóa một thư mục cũ với điều kiện là thư mục rỗng. trunghq@ubuntu:~/temp$ rmdir d1 trunghq@ubuntu:~/temp$ ls -la total 12 drwxr-xr-x 3 trunghq trunghq 4096 2010-04-15 22:53 . drwxr-xr-x 5 trunghq trunghq 4096 2010-04-15 22:40 drwxr-xr-x 3 trunghq trunghq 4096 2010-04-15 22:42 d2 trunghq@ubuntu:~/temp$ rmdir d2 rmdir: failed to remove ‘d2’: Directory not empty 31
  33. trunghq@ubuntu:~/temp$ rmdir -p d2/d3 trunghq@ubuntu:~/temp$ ls -la total 8 drwxr-xr-x 2 trunghq trunghq 4096 2010-04-15 22:54 . drwxr-xr-x 5 trunghq trunghq 4096 2010-04-15 22:40 4.3 Quản lý tệp 4.3.1 Các loại tệp Linux phân biệt 9 loại tệp. Kiểu của tệp được hiển thị khi sử dụng câu lệnh ls -la, biểu diễn bằng chữ cái đầu tiên trong hàng. Tệp thông thường được biểu diễn bằng ký hiệu -. Thư mục được biểu diễn bằng ký hiệu d. Các thiết bị cũng được biểu diễn bằng tệp. Các tệp ứng với các thiết bị trao đổi thông tin theo ký tự (character device) được biểu diễn bằng ký hiệu c. Các thiết bị trao đổi thông tin theo khối (block device) được biểu diễn bằng b. Khi trao đổi thông tin với nhau, các tiến trình sử dụng socket. Các socket cũng được biểu diễn bằng các tệp , ký hiệu bằng s. Đường ống được biểu diễn bằng p (pipeline). Các liên kết biểu tượng được biểu diễn bằng l. Các tệp biểu diễn một vùng bộ nhớ ký hiệu bằng m. [trunghq@localhost trunghq]$ ls -la total 24 drwx 2 trunghq trunghq 4096 Apr 7 13:17 . drwxr-xr-x 3 root root 4096 Apr 7 09:29 -rw 1 trunghq trunghq 1930 Apr 14 08:39 .bash_history -rw-r r 1 trunghq trunghq 24 Apr 7 09:29 .bash_logout -rw-r r 1 trunghq trunghq 191 Apr 7 09:29 .bash_profile -rw-r r 1 trunghq trunghq 124 Apr 7 09:29 .bashrc [trunghq@localhost trunghq]$ ls -la /dev/sda1 brw-rw 1 root disk 8, 1 Jan 30 2003 /dev/sda1 [trunghq@localhost trunghq]$ ls -la /dev/tty1 crw w 1 root tty 4, 1 Apr 16 18:55 /dev/tty1 [trunghq@localhost trunghq]$ ls -la /etc/init.d/network -rwxr-xr-x 1 root root 6784 Feb 4 2003 /etc/init.d/network [trunghq@localhost trunghq]$ ls -la /etc/rc3.d/S S05kudzu S13portmap S25netfs S80sendmail S95atd S08iptables S14nfslock S26apmd S85gpm S97rhnsd S09isdn S17keytable S28autofs S90crond S99local S10network S20random S55sshd S90xfs S12syslog S24pcmcia S56rawdevices S95anacron 32
  34. [trunghq@localhost trunghq]$ ls -la /etc/rc3.d/S12syslog lrwxrwxrwx 1 root root 16 Apr 2 19:34 /etc/rc3.d/S12syslog ->. ./init.d/syslog 4.3.2 Các thao tác trên tệp Để tạo ra một tệp mới, có thể dùng một chương trình soạn thảo như vi, nano, pico, hoặc có thể dùng lệnh touch. Một cách khác để tạo ra một tệp là sử dụng câu lệnh echo > tentep. Ví dụ: [trunghq@localhost trunghq]$ vi test.txt [trunghq@localhost trunghq]$ cat test.txt Tao tep bang vi [trunghq@localhost trunghq]$ touch test1.txt [trunghq@localhost trunghq]$ ls test* test1.txt test.txt [trunghq@localhost trunghq]$ echo "Tao tep bang echo" >test2.txt [trunghq@localhost trunghq]$ cat test2.txt Tao tep bang echo Lệnh rm cho phép có thể xóa một hoặc nhiều tệp. Để có thể xóa đệ qui thư mục với các thư mục con, sử dụng câu lệnh rm -Rf. Câu lệnh này có thể thay thế câu lệnh rmdir. Chú ý, nếu không có tùy biến -r, sẽ không xóa được thư mục. [trunghq@localhost trunghq]$ mkdir d1 [trunghq@localhost trunghq]$ mkdir d1/d1 [trunghq@localhost trunghq]$ rm d1 rm: cannot remove ‘d1’: Is a directory [trunghq@localhost trunghq]$ rm -Rf d1 [trunghq@localhost trunghq]$ ls test1.txt test2.txt test.txt [trunghq@localhost trunghq]$ Việc sao chép và dịch chuyển tệp/thư mục được thực hiện bằng câu lệnh mv và cp. Có thể thực hiện việc sao chép và dịch chuyển nhiều tệp, thư mục. [trunghq@localhost trunghq]$ pwd /home/trunghq [trunghq@localhost trunghq]$ ls -la temp1 ls: temp1: No such file or directory 33
  35. [trunghq@localhost trunghq]$ mkdir temp1 [trunghq@localhost trunghq]$ touch temp1/t1 [trunghq@localhost trunghq]$ touch temp1/t2 [trunghq@localhost trunghq]$ touch temp1/t3 [trunghq@localhost trunghq]$ touch temp1/t4 [trunghq@localhost trunghq]$ touch temp1/t5 [trunghq@localhost trunghq]$ nkdir temo -bash: nkdir: command not found [trunghq@localhost trunghq]$ mkdir temp [trunghq@localhost trunghq]$ ls -la total 40 drwx 4 trunghq trunghq 4096 Apr 18 07:17 . drwxr-xr-x 3 root root 4096 Apr 7 09:29 -rw 1 trunghq trunghq 2170 Apr 16 20:24 .bash_history -rw-r r 1 trunghq trunghq 24 Apr 7 09:29 .bash_logout -rw-r r 1 trunghq trunghq 191 Apr 7 09:29 .bash_profile -rw-r r 1 trunghq trunghq 124 Apr 7 09:29 .bashrc drwxrwxr-x 2 trunghq trunghq 4096 Apr 18 07:17 temp drwxrwxr-x 2 trunghq trunghq 4096 Apr 18 07:17 temp1 -rw-rw-r 1 trunghq trunghq 0 Apr 16 19:28 test1.txt -rw-rw-r 1 trunghq trunghq 18 Apr 16 19:28 test2.txt -rw-rw-r 1 trunghq trunghq 16 Apr 16 19:27 test.txt [trunghq@localhost trunghq]$ mv temp1 temp [trunghq@localhost trunghq]$ ls temp/ temp1 [trunghq@localhost trunghq]$ ls temp/temp1 t1 t2 t3 t4 t5 #Copy thư mục cần dùng -R [trunghq@localhost trunghq]$ mkdir temp2 [trunghq@localhost trunghq]$ cp temp/temp1 temp2 cp: omitting directory ‘temp/temp1’ [trunghq@localhost trunghq]$ cp -R temp/temp1 temp2 [trunghq@localhost trunghq]$ ls temp2/temp1/ t1 t2 t3 t4 t5 [trunghq@localhost trunghq]$ Để đọc nội dung của tệp, có thể sử dụng nhiều câu lệnh khác nhau. Bảng dưới đây mô tả các câu lệnh thường dùng 34
  36. Câu lệnh Mô tả cat Hiển thị tệp từ đầu đến cuối tac Hiển thị tệp từ cuối đến đầu head -n Hiển thị n dòng đầu của tệp tail -n Hiển thị n dòng cuối của tệp wc Đếm số từ và số dòng của tệp more Hiển thị tệp theo trang less Hiển thị tệp theo dòng Bảng 4.1: Một số câu lệnh hiển thị tệp 4.4 inode và liên kết 4.4.1 Khái niệm inode Trong mục trước, cấu trúc hệ thống tệp logic đã được đề cập. Mỗi tệp sẽ được xác đinh bởi tên và đường dẫn tuyệt đối. Tuy nhiên để truy cập các tệp trong Linux, cần có một ánh xạ giữa các địa chỉ logic này và vị trí của các khối dữ liệu trên ổ cứng. Các thông tin về vị trí, về quyền truy cập, về chủ sở hữu của một tệp được lưu trữ trong cấu trúc dữ liệu đặc biệt gọi là inode. Việc kết hợp giữa không gian địa chỉ logic và các inode cần đảm bảo hiệu quả của việc truy cập nội dung của các tệp. Trong các phân vùng, mỗi inode có một mã số riêng. Số lượng các inode trong một phân vùng được giới hạn khi định dạng phân vùng. Để có thể xem số thứ tự inode của các tệp, sử dụng câu lệnh ls -lia [trunghq@localhost trunghq]$ ls -lia total 40 113635 drwx 4 trunghq trunghq 4096 Apr 18 07:19 . 452541 drwxr-xr-x 3 root root 4096 Apr 7 09:29 113639 -rw 1 trunghq trunghq 2411 Apr 18 09:00 .bash_history 113636 -rw-r r 1 trunghq trunghq 24 Apr 7 09:29 .bash_logout 113637 -rw-r r 1 trunghq trunghq 191 Apr 7 09:29 .bash_profile 113638 -rw-r r 1 trunghq trunghq 124 Apr 7 09:29 .bashrc 113661 drwxrwxr-x 3 trunghq trunghq 4096 Apr 18 07:18 temp 549879 drwxrwxr-x 3 trunghq trunghq 4096 Apr 18 07:19 temp2 113652 -rw-rw-r 1 trunghq trunghq 0 Apr 16 19:28 test1.txt 113654 -rw-rw-r 1 trunghq trunghq 18 Apr 16 19:28 test2.txt 113653 -rw-rw-r 1 trunghq trunghq 16 Apr 16 19:27 test.txt Để có thể truy cập được vào một tệp, cần phải biết được số thứ tự inode của 35
  37. tệp đó. Số thứ tự này được Linux lưu trong nội dung của thư mục chứa tệp. Để đọc được nội dung của thư mục, cần biết được inode của tệp thư mục. Inode này được lưu trữ trong nội dung của thư mục cha. Như vậy quá trình tìm inode của một tệp là quá trình đệ qui, với điểm xuất phát là inode của thư mục gốc. Để quá trình truy cập tệp có thể được thực hiện nhanh hơn, nếu vị trí hiện tại và tệp cần truy cập tương đối gần nhau, có thể sử dụng các tên . và cho thư mục hiện tại và thư mục cha. Các tệp được truy cập bằng đường dẫn tương đối sẽ lấy mốc xuất phát là thư mục hiện tại, có thể không cần đi qua nút gốc, giảm số bước truy cập vào các tệp trung gian. 4.4.2 Liên kết vật lý Có nhiều trường hợp một tệp được sử dụng trong các bối cảnh khác nhau, cần sử dụng 2 tên tuyệt đối khác nhau để truy cập vào tệp. Trường hợp này chỉ cần tạo ra một bản ghi trong thư mục mới, trong đó chứa inode của tệp cũ. Bản ghi này được gọi là một liên kết vật lý đến tệp, được tạo ra bởi câu lệnh ln [trunghq@localhost temp1]$ ln t1 /t1-link [trunghq@localhost temp1]$ ls -la t1 -rw-rw-r 2 trunghq trunghq 0 Apr 18 07:17 t1 [trunghq@localhost temp1]$ ls -la /t t1-link temp1 [trunghq@localhost temp1]$ ls -la /t1-link -rw-rw-r 2 trunghq trunghq 0 Apr 18 07:17 /t1-link [trunghq@localhost temp1]$ ls -lia t1 113656 -rw-rw-r 2 trunghq trunghq 0 Apr 18 07:17 t1 [trunghq@localhost temp1]$ ls -lia /t1-link 113656 -rw-rw-r 2 trunghq trunghq 0 Apr 18 07:17 /t1-link Câu lệnh ls -lia còn cho biết số liên kết vật lý trỏ vào inode đang xem xét. Sau khi tạo ra, liên kết vật lý và tên tệp ban đầu có ý nghĩa hoàn toàn như nhau, không phân biệt được đâu là liên kết và đâu là tệp liên kết. Mọi thay đổi trên liên kết đều có tác động đến tệp. [trunghq@localhost temp1]$ echo "Thi nghiem lan 1" >t1 [trunghq@localhost temp1]$ cat /t1-link Thi nghiem lan 1 [trunghq@localhost temp1]$ echo "Thi nghiem lan 2" > /t1-link [trunghq@localhost temp1]$ cat t1 Thi nghiem lan 2 36
  38. Khi một trong các liên kết được xóa đi, hệ thống chỉ xóa bản ghi trong thư mục tương ứng. Trường hợp không còn bản ghi nào trỏ vào inode, inode được đánh dấu là đã bị xóa, nội dung của tệp sẽ bị ghi đè khi hệ thống cần không gian ổ đia. [trunghq@localhost temp1]$ ln t1 /t1-link-02 [trunghq@localhost temp1]$ ln t1 /t1-link-03 [trunghq@localhost temp1]$ ls -lia t1 113656 -rw-rw-r 4 trunghq trunghq 17 Apr 18 23:44 t1 [trunghq@localhost temp1]$ rm /t1-link-01 rm: cannot lstat ‘ /t1-link-01’: No such file or directory [trunghq@localhost temp1]$ rm /t1-link-02 [trunghq@localhost temp1]$ ls -lia t1 113656 -rw-rw-r 3 trunghq trunghq 17 Apr 18 23:44 t1 [trunghq@localhost temp1]$ rm /t1-link-03 [trunghq@localhost temp1]$ ls -lia t1 113656 -rw-rw-r 2 trunghq trunghq 17 Apr 18 23:44 t1 [trunghq@localhost temp1]$ rm /t1-link [trunghq@localhost temp1]$ ls -lia t1 113656 -rw-rw-r 1 trunghq trunghq 17 Apr 18 23:44 t1 [trunghq@localhost temp1]$ rm t1 [trunghq@localhost temp1]$ ls -lia t1 ls: t1: No such file or directory Trong Linux, dùng câu lệnh ln không tạo được liên kết cứng đến các thư mục. Tuy nhiên mặc định khi tạo ra một thư mục, luôn luôn có 2 thư mục con được tạo ra một cách mặc định là . và Như vậy một thư mục tối thiểu phải có 2 liên kết cứng trỏ vào, cứ thêm 01 thư mục con sẽ có thêm 01 liên kết cứng nữa [trunghq@localhost temp]$ ls -lia temp* total 8 113655 drwxrwxr-x 2 trunghq trunghq 4096 Apr 19 00:17 . 113661 drwxrwxr-x 3 trunghq trunghq 4096 Apr 19 00:16 [trunghq@localhost temp]$ ls -lia temp1 total 8 113655 drwxrwxr-x 2 trunghq trunghq 4096 Apr 19 00:17 . 113661 drwxrwxr-x 3 trunghq trunghq 4096 Apr 19 00:16 [trunghq@localhost temp]$ cd temp1/ [trunghq@localhost temp1]$ ls -la total 8 37
  39. drwxrwxr-x 2 trunghq trunghq 4096 Apr 19 00:17 . drwxrwxr-x 3 trunghq trunghq 4096 Apr 19 00:16 [trunghq@localhost temp1]$ mkdir t1 [trunghq@localhost temp1]$ ls -la total 12 drwxrwxr-x 3 trunghq trunghq 4096 Apr 19 00:18 . drwxrwxr-x 3 trunghq trunghq 4096 Apr 19 00:16 drwxrwxr-x 2 trunghq trunghq 4096 Apr 19 00:18 t1 Việc sử dụng liên kết cứng có thể tạo ra các bối cảnh, trong đó nội dung của tệp có thể bị thay đổi mà NSD không hề hay biết. Chính vì vậy liên kết cứng không được khuyến khích sử dụng. 4.4.3 Liên kết biểu tượng Một cách đơn giản và an toàn hơn để truy cập vào các tệp từ các bối cảnh khác nhau là sử dụng liên kết biểu tượng. Liên kết biểu tượng là các tệp có nội dung chứa đường dẫn tới tệp đích. Khi truy cập vào tệp này, hệ thống sẽ tự động truy cập vào tệp đích. Các liên kết biểu tượng được xếp vào tệp loại l. Đường dẫn tới tệp đích có thể là tương đối hay tuyệt đối theo vị trí của liên kết biểu tượng. Chú ý là khi tạo liên kết biểu tượng bằng câu lệnh ls -s, shell sẽ tự động điền đường dẫn tương đối theo vị trí gõ lệnh chứ không theo vị tí của liên kết, nên có khả năng đường dẫn được kiểm tra bởi shell sẽ không trỏ đến tệp đích hợp lệ của liên kết biểu tượng. [trunghq@localhost temp]$ touch temp1/test1 [trunghq@localhost temp]$ echo "Thu lien ket bieu tuong" temp1/test1 Thu lien ket bieu tuong temp1/test1 [trunghq@localhost temp]$ echo "Thu lien ket bieu tuong" > temp1/test1 [trunghq@localhost temp]$ ln -s temp1/test1 slink-01 [trunghq@localhost temp]$ cat slink-01 Thu lien ket bieu tuong [trunghq@localhost temp]$ ls -la total 16 drwxrwxr-x 4 trunghq trunghq 4096 Apr 19 00:44 . drwx 4 trunghq trunghq 4096 Apr 18 07:19 lrwxrwxrwx 1 trunghq trunghq 11 Apr 19 00:44 slink-01 -> temp1/test1 drwxrwxr-x 3 trunghq trunghq 4096 Apr 19 00:43 temp1 drwxrwxr-x 2 trunghq trunghq 4096 Apr 19 00:43 temp2 [trunghq@localhost temp]$ ls -l total 8 lrwxrwxrwx 1 trunghq trunghq 11 Apr 19 00:44 slink-01 -> temp1/test1 38
  40. Tùy biến Mô tả -name Tìm kiếm theo tên tệp -iname Tìm kiếm theo tên tệp, không phân biện hoa thường -atime n Tìm kiếm các tệp đã được truy cập n ngày trước -amin n Tìm kiếm các tệp đã được truy cập n phút trước -mtime n Tìm kiếm các tệp đã được thay đổi n ngày trước -mmin n Tìm kiếm các tệp đã được thay đổi n phút trước -ctime n Tìm kiếm các tệp đã được thay đổi thuộc tính n ngày trước -cmin n Tìm kiếm các tệp đã được thay đổi thuộc tính n phút trước Bảng 4.2: Một số tham số chính của lệnh find drwxrwxr-x 3 trunghq trunghq 4096 Apr 19 00:43 temp1 drwxrwxr-x 2 trunghq trunghq 4096 Apr 19 00:43 temp2 [trunghq@localhost temp]$ ls -a . slink-01 temp1 temp2 [trunghq@localhost temp]$ ln -s temp1/test1 ./tempslink-01 temp1 temp2 [trunghq@localhost temp]$ ln -s temp1/test1 ./temp2/slink-01 [trunghq@localhost temp]$ ls -la temp2/ total 8 drwxrwxr-x 2 trunghq trunghq 4096 Apr 19 00:45 . drwxrwxr-x 4 trunghq trunghq 4096 Apr 19 00:44 lrwxrwxrwx 1 trunghq trunghq 11 Apr 19 00:45 slink-01 -> temp1/test1 4.5 Chỉ số và tìm kiếm tệp Để tìm kiếm một tệp nào đó trên hệ thống linux, có các công cụ sau: find, locate. 4.5.1 Câu lệnh find Câu lệnh find cho phép duyệt các tệp có các tiêu chí phù hợp trong một thư mục và các thư mục con, đồng thời thực hiện các thao tác định nghĩa trước trên các tệp đó. Bảng mô tả một số tiêu chí để có thể tìm kiếm tệp dùng lệnh find. [root@localhost trunghq]# find / -name ’passwd’ /etc/passwd /etc/pam.d/passwd 39
  41. /usr/bin/passwd /usr/share/doc/nss_ldap-202/pam.d/passwd /usr/share/doc/pam_krb5-1.60/krb5afs-pam.d/passwd /usr/share/doc/pam_krb5-1.60/pam.d/passwd Hoặc [root@localhost trunghq]# find / -name ’passw*’ /etc/passwd /etc/pam.d/passwd /etc/passwd- /etc/passwd.lock /usr/bin/passwd /usr/share/doc/nss_ldap-202/pam.d/passwd /usr/share/doc/pam_krb5-1.60/krb5afs-pam.d/passwd /usr/share/doc/pam_krb5-1.60/pam.d/passwd /usr/share/doc/samba-2.2.7a/docs/pam_smbpass/samples/password-mature /usr/share/doc/samba-2.2.7a/docs/pam_smbpass/samples/password-migration /usr/share/doc/samba-2.2.7a/docs/pam_smbpass/samples/password-sync /usr/share/pixmaps/password.png /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz /usr/share/awk/passwd.awk Một ví dụ về tìm kiếm nhiều tiêu chí [root@localhost trunghq]# find / -name ’passwd’ -or -size +10000k /proc/kcore /var/lib/rpm/Packages /var/log/lastlog /etc/passwd /etc/pam.d/passwd /root/test2.img /usr/bin/passwd /usr/lib/locale/locale-archive /usr/share/doc/nss_ldap-202/pam.d/passwd /usr/share/doc/pam_krb5-1.60/krb5afs-pam.d/passwd /usr/share/doc/pam_krb5-1.60/pam.d/passwd /usr/share/comps/i386/hdlist2 /test.img /test2.img Thực hiện các câu lệnh trên kết quả tìm kiếm 40
  42. [trunghq@localhost trunghq]$ sudo time find / -size +10000k -exec ls -l {} \; -r 1 root root 536875008 Apr 19 03:37 /proc/kcore -rw-r r 1 rpm rpm 11350016 Apr 2 19:52 /var/lib/rpm/Packages -r 1 root root 19136220 Apr 19 03:23 /var/log/lastlog -rw-r r 1 root root 51200000 Apr 14 07:05 /root/test2.img -rw-r r 1 root root 30301680 Apr 2 19:33 /usr/lib/locale/locale-a rchive -rw-r r 1 root root 19066344 Mar 14 2003 /usr/share/comps/i386/hd list2 -rw-r r 1 root root 512000000 Apr 14 08:24 /test.img -rw-r r 1 root root 51200000 Apr 14 07:07 /test2.img 0.22user 0.54system 0:00.77elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (1503major+361minor)pagefaults 0swaps Câu lệnh find duyệt trên cả cây thư mục, nên tốc độ tìm kiếm thường chậm. Để có thể tìm kiếm nhanh hơn vị trí của một tệp, câu lệnh locate được sử dụng: [trunghq@localhost trunghq]$ time locate gpasswd /usr/bin/gpasswd /usr/share/man/man1/gpasswd.1.gz /usr/share/man/pt_BR/man1/gpasswd.1.gz /usr/share/man/fr/man1/gpasswd.1.gz /usr/share/man/hu/man1/gpasswd.1.gz /usr/share/man/it/man1/gpasswd.1.gz /usr/share/man/ja/man1/gpasswd.1.gz /usr/share/man/pl/man1/gpasswd.1.gz real 0m0.031s user 0m0.010s sys 0m0.030s Câu lệnh locate sử dụng CSDL để đánh chỉ số các tệp, do đó quá trình tệp nhanh hơn nhiều. Tuy nhiên trước khi sử dụng locate cần khởi tạo CSDL và cập nhật thường xuyên bằng lệnh updatedb. Câu lệnh slocate thực hiện chức năng của locate một cách bảo mật, không cho các NSD khác có thể tìm kiếm trong CSDL chỉ số của các tệp. 4.6 Bài tập Bài tập 4.1 Trong thư mục nhà, hãy tạo ra các thư mục /d1/d2/d3. Đổi tên d2 thành d22. Xóa thư mục d3. 41
  43. Bài tập 4.2 Viết lệnh copy thư mục /etc/ về thư mục /root/backup/etc. Tạo liên kết đến thư mục này đặt tên là etc-backup đặt trong thư mục nhà của root. Bài tập 4.3 Viết câu lệnh để có thể hiển thị số thư mục con của /etc/. Bài tập 4.4 Trong thư mục nhà, tạo thư mục /temp/d1 và /temp/d2. Trong thư mục d1 tạo tệp t1. Viết các câu lệnh tạo các liên kết vật lý và biểu tượng p-link và s-link trong thư mục d2 trỏ đến t1 sử dụng đường dẫn tương đối. Dịch chuyển t1 đến d2. Xác định trạng thái của các liên kết Bài tập 4.5 Trong thư mục nhà, tạo thư mục /temp/d1 và /temp/d2. Trong thư mục d1 tạo tệp t1. Viết các câu lệnh tạo các liên kết vật lý và biểu tượng p-link và s-link trong thư mục d2 trỏ đến t1 sử dụng đường dẫn tuyệt đối. Dịch chuyển t1 đến d2. Xác định trạng thái của các liên kết Bài tập 4.6 Viết câu lệnh find tìm các tệp có đuôi .wri và có kích thước nhỏ hơn 10M. Bài tập 4.7 Viết câu lệnh locate tìm vị trí của tệp cp. 42
  44. Chương 5 Tài khoản và quyền 43
  45. 5.1 Khái niệm tài khoản và nhóm tài khoản 5.1.1 Tài khoản Để có thể sử dụng hệ thống, NSD cần có một tài khoản. Tài khoản được đặc trưng bởi một cặp tên đăng nhập (user name, login) và mật khẩu (password). Mỗi tài khoản có một mã số người sử dụng (user id) mà hệ thống sử dụng để xác định tài khoản thực hiện các thao tác sau khi đăng nhập. Trong hệ điều hành Linux có 3 loại tài khoản: tài khoản của người quản trị hệ thống (root) có toàn quyền thực hiện các thao tác trên hệ thống, tài khoản thông thường chỉ có toàn quyền trên một thư mục dành riêng gọi là thư mục nhà, trên các thư mục khác chỉ có quyền hạn chế. Loại tài khoản thứ 2 này được chia làm 2 loại, một loại chỉ dùng để chạy các ứng dụng hệ thống (daemon), và một loại dành cho NSD thông thường. Với tài khoản của người sử dụng thông thường, ngoài tên, mật khẩu và mã số tài khoản, Linux còn cung cấp thêm thư mục nhà, shell mặc định cho NSD. Các thông tin này thường được đặt ở tệp /etc/passwd. Tệp /etc/passwd là một tệp văn bản, mỗi dòng tương ứng với một tài khoản. Trong dòng có nhiều trường thông tin phân cách nhau bằng dấu :, lần lượt là tên tài khoản, mật khẩu, mã số tài khoản, mã số nhóm mặc định của tài khoản, Mô tả ngắn về tài khoản, thư mục nhà và shell, [trunghq@localhost trunghq]$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin news:x:9:13:news:/etc/news: uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin trunghq:x:500:500::/home/trunghq:/bin/bash Trường mật khẩu trong mỗi hàng thường có giá trị x. Giá trị này chỉ ra rằng mật khẩu không được lưu ở trong tệp /etc/passwd mà được mã hóa và lưu trong tệp /etc/shadow. Trường thứ 3 và thứ 4 lần lượt lưu trữ mã số của tài khoản và mã số của nhóm tài khoản mặc định. Linux phân biệt NSD chỉ thông qua mã số NSD, do đó nếu tồn tại 2 dòng có cùng mã só NSD, hệ 44
  46. thống sẽ báo lỗi. Nếu có 2 dòng có cùng mã số tài khoản, khi đăng nhập vào hệ thống tài khoản đứng trước sẽ được sử dụng. Tệp shadow chứa mật khẩu và các thông tin có liên quan đến mật khẩu. Tương tự như /etc/passwd, /etc/shadow gồm nhiều dòng, phân tách nhau bằng dấu :. User:Pwd:Last pwd change :Minimum:Maximum:Warn:Inactive :Expire User: Tên đăng nhập Password: Mật khẩu Last password change : Số ngày từ 01/01/1970 đến ngày thay đổi mật khẩu cuối cùng Minimum: Số ngày tối thiểu giữa 2 lần thay đổi mật khẩu. Maximum: Số ngày tối đa mật khẩu có giá trị. Warn : Số ngày đến khi mật khẩu bị hết hạn. Inactive : Số ngày đến khi mật khẩu bị vô hiệu hóa vì quá hạn. Expire : Số ngày từ 01/01/1970 đến khi mật khẩu bị vô hiệu 5.1.2 Nhóm tài khoản Để có thể quản trị các tài khoản NSD một cách có hiệu quả hơn, NSD thường được gộp vào thành nhóm người sử dụng. Việc gộp thành các nhóm cho phép giảm bớt số lượng các thao tác quản trị khi thực hiện phân quyền theo nhóm chứ không phân theo NSD. Mặc định, tất cả NSD đều nằm trong một nhóm. Khi mới được tạo ra, NSD nằm trong nhóm có tên trùng với tên đăng nhập, có mã số trùng với mã số của NSD. Thông tin về các nhóm được lưu trữ trong tệp /etc/group. Tệp /etc/group bao gồm nhiều dòng, mỗi dòng chia thành các trường bằng dấu :. Trường đầu tiên là tên nhóm, trường thứ 2 là mật khẩu nhóm và trường thứ 3 là mã số của nhóm, trường cuối cùng là danh sách NSD thuộc nhóm, phân tách bằng dấu ,. Giá trị x trong trường mật khẩu chỉ ra là nhóm sử dụng mật khẩu lưu trữ trong tệp /etc/gpasswd. Cấu trúc của tệp /etc/gpasswd tương tự như tệp /etc/passwd. 5.2 Các thao tác quản lý tài khoản Các thao tác liên quan đến quản lý tài khoản bao gồm: thêm, xóa, thay đổi thông tin về tài khoản NSD, thay đổi mật khẩu NSD. Các thao tác quản lý nhóm NSD liên quan đến thêm, xóa, thay đổi thông tin, thêm thành viên của nhóm NSD. Ngoài ra còn một số thao tác bổ sung như thay đổi NSD và nhóm sử dụng hiện tại, hiển thị các tài khoản đang kết nối, hiển thị các nhóm mà người sử dụng là thành viên, thay đổi mật khẩu nhóm. 45
  47. Chức năng Câu lệnh Thêm NSD useradd Xóa NSD userdel Thay đổi thông tin NSD usermod Thay đổi mật khẩu NSD passwd Thêm nhóm NSD groupadd Xóa nhóm NSD groupdel Thay đổi thông tin nhóm NSD groupmod Thêm thành viên gpasswd -a Thay đổi NSD hiện tại su Thay đổi nhóm NSD hiện tại sg, newgrp Hiển thị các tài khoản đang đăng nhập users Hiển thị các nhóm của NSD groups Thay đổi mật khẩu nhóm gpasswd Bảng 5.1: Các lệnh quản lý nhóm và NSD Để thực hiện các thao tác này, có thể không cần sử dụng bất cứ câu lệnh đặc biệt nào, nà chỉ cần thay đổi nội dung của các tệp /etc/passwd, /etc/shadow, /etc/group và /etc/gpasswd. Để cho thuận tiện, các phần mềm đã được phát triển để thực hiện các thay đổi trong các tệp nói trên một cách tự động. Trừ các thao tác thay đổi thông tin và mật khẩu của chính nhóm hoặc NSD, các thao tác khác đều đòi hỏi có quyền của người quản trị root. Bảng 5.2 chỉ ra một số câu lệnh thực hiện các chức năng nói trên. Ví dụ 5.2.1 Quyền quản trị root Để thực hiện các thao tác quản trị hệ thống cần có quyền của quản trị hệ thống (root). Để có quyền này, NSD có 2 cách: • Đăng nhập bằng tài khoản root hoặc sử dụng lệnh su. Cả 2 trường hợp đều cần có mật khẩu của root. • Đăng nhập bằng tài khoản thông thường và sử dụng lệnh sudo để thực hiện các thao tác cần quyền quản trị root. Sử dụng tài khoản root có lợi thế là thuận tiện, khi gõ các câu lệnh không cần phải gõ thêm câu lệnh sudo. Tuy nhiên, chính điểm thuận tiện này đôi khi lại tạo điều kiện cho NSD thực hiện các thao tác quản trị một cách không 46
  48. chủ ý, dẫn đến các sai sót có hậu quả lớn đến hệ thống. Một điểm hạn chế khác của việc dùng tài khoản root là các quản trị viên phải chia sẻ tài khoản root, như vậy rất khó qui trách nhiệm và giám sát hoạt động của các quản trị viên. Sử dụng lệnh sudo không cần phải sử dụng mật khẩu root mà chỉ cần sử dụng mật khẩu của chính NSD. Như vậy khi thực hiện lệnh sudo, NSD đã chắc chắn muốn thực hiện một thao tác với quyền của quản trị hệ thống. Từng NSD quản trị viên đăng nhập bằng tài khoản và mật khẩu của mình, sử dụng sudo với mật khẩu của mình, do đó có thể dễ dàng giám sát các thao tác của các quản trị viên. Hiển nhiên mọi quản trị viên khi đó đều có thể thay đổi mật khẩu của các thành viên khác hoặc của root, nhưng khi đó các thao tác này sẽ bị ghi lại. Trong các hệ thống sử dụng sudo, thông thường tài khoản root không được kích hoạt (mật khẩu rất khó). NSD quản trị viên có quyền thực hiện lệnh sudo nếu tên đăng nhập hoặc ID của quản trị viên có trong /etc/sudoers. 5.3 Khái niệm quyền truy cập và chủ sở hữu Các tài nguyên trong hệ thống Linux được biểu diễn bằng các tệp. Việc phân quyền các tài nguyên này cũng được tiến hành dựa trên các tệp. Phân quyền cần chỉ ra ai được làm cái gì trên đối tượng đang được xem xét. Hệ thống tệp Linux có 2 loại tệp cơ bản: Thư mục và tệp thông thường. 5.3.1 Các quyền Trên một tệp hoặc một thư mục có thể có 3 loại quyền: r- đọc, w-ghi và x-thực hiện. Còn một loại quyền thứ 4, quyền đặc biệt sẽ được xem xét sau. Trên một tệp, quyền r có nghĩa là được đọc nội dung tệp. Quyền w là quyền được thay đổi nội dung tệp. Quyền x là quyền có thể được thực hiện tệp như một lệnh nhị phân hoặc một kịch bản shell. Có thể thấy quyền x chỉ được thực hiện khi có quyền đọc. Các ví dụ minh họa về các quyền của tệp được minh họa trong Hình 5.3.2. Trên một thư mục, quyền r là quyền được đọc nội dung của thư mục (liệt kê các tệp nằm trong thư mục), quyền w là quyền thay đổi danh sách này, còn quyền x tương ứng với việc chọn thư mục là thư mục làm việc hiện tại. Điểm cần chú ý là để thực hiện quyền r và quyền w với thư mục, cần có quyền x Các ví dụ minh họa về các quyền của thư mục được minh họa trong Hình 5.3.2. 47
  49. 5.3.2 Các đối tượng sử dụng Trên một tệp hoặc thư mục phân biệt 3 lớp NSD khác nhau. Chủ sở hữu (owner) là NSD đã tạo ra tệp và có quyền thay đổi các quyền trên tệp. Nhóm chủ sở hữu là nhóm đã tạo ra tệp. Tất cả các đối tượng còn lại được ký hiệu là khác (other). Chỉ có chủ sở hữu của tệp hoặc root có quyền thay đổi quyền trên các tệp. Với mỗi nhóm NSD có thể định nghĩa cả 3 quyền đã trình bày ở trên. Như vậy với mỗi một tệp sẽ có 9 loại quyền khác nhau. Khi liệt kê các tệp bằng câu lệnh ls -la, các quyền này được biểu diễn bằng 9 chữ cái ngay sau chữ cái biểu diễn kiểu của tệp. 3 chữ cái đầu tiên biểu diễn các quyền của chủ sở hữu, 3 chữ cái tiếp theo biểu diễn các quyền của nhóm sở hữu, 3 chữ cái cuối cùng biểu diễn các quyền của những NSD khác. Mỗi bộ 3 chữ rwx biểu diễn 3 quyền đọc ghi thực hiện đầy đủ. Quyền thiếu được thay thế bởi dấu -. Ví dụ r-x biểu diễn quyền đọc và thực hiện. Để có thể truy cập vào các tệp trong một thư mục, cần có quyền truy cập vào thư mục, đồng thời phải có quyền thực hiện trên thư mục chứa tệp. Kể cả khi thư mục không có quyền ghi hay đọc, tệp vẫn có thể được đọc, ghi, nhưng không thể bị xóa đi. Một điểm mâu thuẫn là khi thư mục không có quyền đọc, sẽ không thể liệt kê được danh mục các thư mục con và tệp trong thư mục, nhưng lại có thể đọc được bản ghi inode tương ứng của tệp để từ đó đọc được nội dung của tệp. Quyền đọc của thư mục trên thực tế chỉ là quyền liệt kê nội dung. Quyền ghi của một thư mục tương ứng với việc tạo ra tệp mới và xóa tệp cũ. Ở đây cũng có một điểm mâu thuẫn là không cần có quyền đọc, các thư mục con và tệp của thư mục vẫn có thể được xóa đi và tạo thêm ra. 5.3.3 Các quyền đặc biệt Mặc dù với câu lệnh ls -la mỗi nhóm NSD chỉ hiển thị 3 quyền nhưng trên thực tế Linux lưu trữ thêm một bít cho mỗi nhóm NSD để biểu diễn các quyền đặc biệt. Các quyền này không có ý nghĩa với nhóm NSD khác. Cụ thể có 3 loại quyền, ứng với thư mục và tệp có các ý nghĩa như sau. SUID bít Là bít thứ 4 trong nhóm bít dành cho NSD. Chỉ dành cho tệp, không dành cho thư mục. Nếu bít này bằng 1, điều này có nghĩa là NSD thuộc nhóm sở hữu và những NSD khác, nếu có quyền được thực hiện tệp, sẽ được thực hiện tệp với quyền của chủ sở hữu tệp. Ví dụ khi thực hiện lệnh passwd từ tài khoản của 1 NSD, lệnh này sẽ được thực hiện với quyền chủ sở hữu của tệp /usr/sbin/passwd là root, do đó có thể thay đổi nội dung tệp /etc/shadow. Ví dụ về SUID bít được mô tả trong Hình 5.3.3 48
  50. #Truy cập tệp không có quyền rw-r 1 trunghq trunghq 0 Apr 19 17:22 test [trunghq@localhost trunghq]$ echo "Thi nghiem so 1" >test -bash: test: Permission denied [trunghq@localhost trunghq]$ cat test cat: test: Permission denied [trunghq@localhost trunghq]$ ./test -bash: ./test: Permission denied #Truy cập tệp chỉ có quyền ghi w-rw-r 1 trunghq trunghq 0 Apr 19 17:22 test [trunghq@localhost trunghq]$ echo "Thi nghiem so 1" >test [trunghq@localhost trunghq]$ cat test cat: test: Permission denied #Chỉ có quyền đọc -r rw-r 1 trunghq trunghq 9 Apr 19 17:24 test [trunghq@localhost trunghq]$ cat test Thi nghiem so 1 [trunghq@localhost trunghq]$ echo "Thi nghiem so 1" >test -bash: test: Permission denied [trunghq@localhost trunghq]$ ./test -bash: ./test: Permission denied #Có quyền thực hiện, không có quyền đọc xrw-r 1 trunghq trunghq 9 Apr 19 17:24 test [trunghq@localhost trunghq]$ ./test ./test: ./test: Permission denied [trunghq@localhost trunghq]$ cat test cat: test: Permission denied [trunghq@localhost trunghq]$ echo ls > test -bash: test: Permission denied #Có quyền đọc và thực hiện -r-xrw-r 1 trunghq trunghq 9 Apr 19 17:24 test [trunghq@localhost trunghq]$ ./test ./test: line 1: Thi: command not found Hình 5.3.1: Các quyền của tệp 49
  51. #Không có quyền thực hiện, có quyền ghi và đọc drw-rwxr-x 2 trunghq trunghq 4096 Apr 19 18:47 dtest [trunghq@localhost trunghq]$ cd dtest -bash: cd: dtest: Permission denied [trunghq@localhost trunghq]$ ls dtest/ ls: dtest/test: Permission denied [trunghq@localhost trunghq]$ cat dtest/test cat: dtest/test: Permission denied [trunghq@localhost trunghq]$ touch dtest/test2 touch: creating ‘dtest/test2’: Permission denied [trunghq@localhost trunghq]$ rm dtest/test rm: cannot lstat ‘dtest/test’: Permission denied #Có quyền thực hiện d x 2 trunghq trunghq 4096 Apr 19 18:47 dtest [trunghq@localhost trunghq]$ cd dtest [trunghq@localhost dtest]$ rm test rm: cannot remove ‘test’: Permission denied [trunghq@localhost dtest]$ touch test2 touch: creating ‘test2’: Permission denied [trunghq@localhost dtest]$ echo "Thi nghiem so 2" >test [trunghq@localhost dtest]$ cat test Thi nghiem so 2 #Có quyền thực hiện, không có quyền đọc d-wx 2 trunghq trunghq 4096 Apr 19 19:11 dtest [trunghq@localhost trunghq]$ cd dtest [trunghq@localhost dtest]$ rm test [trunghq@localhost dtest]$ echo "Thi nghiem so 2" >test [trunghq@localhost dtest]$ touch test2 [trunghq@localhost dtest]$ ls -l ls: .: Permission denied [trunghq@localhost dtest]$ cd [trunghq@localhost trunghq]$ ls -l dtest ls: dtest: Permission denied Hình 5.3.2: Các quyền trên thư mục 50
  52. [trunghq@localhost trunghq]$ ls -la /bin/cp -rwxr-xr-x 1 root root 47732 Feb 19 2003 /bin/cp [trunghq@localhost trunghq]$ cp proc.c / cp: cannot create regular file ‘/proc.c’: Permission denied [trunghq@localhost trunghq]$ ls -la /bin/cp -rwsr-xr-x 1 root root 47732 Feb 19 2003 /bin/cp [trunghq@localhost trunghq]$ cp proc.c / [trunghq@localhost trunghq]$ ls -la /proc proc proc.c [trunghq@localhost trunghq]$ ls -la /proc.c -rw-rw-r 1 root trunghq 62 Apr 20 00:21 /proc.c Hình 5.3.3: Ví dụ về SUID bít SGID bít Là bít thứ 4 trong nhóm bít dành cho nhóm sở hữu. Khi được đặt với tệp, bít này có ý nghĩa là tệp sẽ được thực hiện với quyền của nhóm sở hữu tệp, không phải là quyền của người thực hiện. Với thư mục, khi bít này được đặt bằng 1, tất cả các tệp và thư mục con tạo ra trong thư mục này sẽ có nhóm chủ sở hữu là nhóm chủ sở hữu của thư mục. Ví dụ về SGID bít với thư mục được trình bày ở Hình 5.3.4. Ví dụ về SGID bít với tệp xin dành cho bạn đọc. Sticky bit -t Là bít thứ 4 trong nhóm bít dành cho các NSD khác (other). Chỉ có ý nghĩa đối với thư mục. Khi bít này được đặt bằng 1, chỉ có chủ sở hữu của tệp trong thư mục mới có thể xóa được. Những NSD khác có thể sao chép, đọc, thay đổi nội dung nhưng không xóa được tệp. Ví dụ về sticky bít xem Hình 5.3.5 5.4 Quản lý quyền truy cập và chủ sở hữu 5.4.1 Thay đổi chủ sở hữu Chủ sở hữu của tệp và thư mục được thay đổi bằng 2 câu lệnh chgrp và chown. Chỉ có người quản trị (root) mới có quyền thực hiện được 2 câu lệnh này. Cả 2 câu lệnh đều có tùy biến -R cho phép có thể thay đổi các tệp và thư mục con trong một thư mục (Hình 5.4.1). 51
  53. [trunghq@localhost trunghq]$ ls -l total 8 drwsrwsrwx 3 trunghq g1 4096 Apr 20 00:51 dtest -rw-rw-r 1 trunghq trunghq 62 Apr 20 00:17 proc.c [trunghq@localhost trunghq]$ cd dtest [trunghq@localhost dtest]$ mkdir d2 [trunghq@localhost dtest]$ ls -l total 12 drwxrwxr-x 2 trunghq trunghq 4096 Apr 20 00:51 d1 drwxrwsr-x 2 trunghq g1 4096 Apr 20 00:53 d2 -rw-rw-r 1 trunghq trunghq 16 Apr 19 19:11 test -rw-rw-r 1 trunghq trunghq 0 Apr 19 19:11 test2 Hình 5.3.4: Ví dụ về SGID bít [trunghq@localhost dtest]$ ls -la /tmp/ total 8 drwxrwxrwt 2 root root 4096 Apr 19 16:40 . drwxr-xr-x 23 root root 4096 Apr 20 00:21 [temp@localhost root]$ echo "Ghi vao tep /tmp/xyz" >/tmp/xyz [temp@localhost root]$ rm /tmp/xyz rm: cannot remove ‘/tmp/xyz’: Operation not permitted [temp@localhost root]$ whoami temp Hình 5.3.5: Sticky bit 52
  54. [root@localhost temp]# mkdir example [root@localhost temp]# ls -l total 4 drwxr-xr-x 2 root root 4096 Apr 20 01:06 example [root@localhost temp]# chown trunghq example [root@localhost temp]# ls example [root@localhost temp]# ls -l total 4 drwxr-xr-x 2 trunghq root 4096 Apr 20 01:06 example [root@localhost temp]# chgrp g1 example [root@localhost temp]# ls -l total 4 drwxr-xr-x 2 trunghq g1 4096 Apr 20 01:06 example [root@localhost temp]# mkdir example1 [root@localhost temp]# ls -l total 8 drwxr-xr-x 2 trunghq g1 4096 Apr 20 01:06 example drwxr-xr-x 2 root root 4096 Apr 20 01:07 example1 [root@localhost temp]# chown trunghq:g1 example1 [root@localhost temp]# ls -l total 8 drwxr-xr-x 2 trunghq g1 4096 Apr 20 01:06 example drwxr-xr-x 2 trunghq g1 4096 Apr 20 01:07 example1 Hình 5.4.6: Thay đổi sở hữu 53
  55. 5.4.2 Thay đổi quyền Quyền của thư mục và tệp được thay đổi bởi câu lệnh chmod. Câu lệnh chmod có dạng: chmod quyền Quyền sử dụng trong câu lệnh có thể được biểu diễn bằng 2 cách: Bằng cú pháp ugoa+-=rwxts Quyền được biểu diễn bằng một xâu có 3 phần. Phần đầu tiên có thể là một hoặc nhiều chữ cái tạo từ u (user), g(group) và o (other). Trường hợp muốn biểu diễn tất cả các đối tượng dùng a(all). Phần cuối cùng là các quyền. Phần thứ 2 là các toán tử. Toán tử = chỉ ra thao tác đặt đúng quyền của các đối tượng bằng quyền khai báo. Toán tử - chỉ ra quyền mới nhận được bằng quyền cũ và bỏ bớt đi các quyền được khai báo. Toán tử + biểu diễn quyền mới nhận được bằng quyền cũ và thêm các quyền được khai báo. Bằng cú pháp octan Mỗi nhóm quyền cho một đối tượng (3 bít) được biểu diễn bằng một số octan từ 0 đến 7. 3 loại đối tượng tạo thành một số octan có 3 chữ số (ugo). Các bít đặc biệt được tập trung vào thành chữ số đầu tiên (nếu có 4 chữ số). Ví dụ Hình 5.4.7 5.4.3 umask Để đảm bảo an ninh cho hệ thống, khi các tệp và thư mục được tạo ra lần đầu tiên, phải đặt một số quyền giới hạn cho tệp. Tập hợp các quyền ban đầu này gọi là quyền mặc định. Ví dụ với tệp, quyền mặc định hay được sử dụng là 644, với thư mục là 755. Như vậy để biểu diễn quyền mặc định của hệ thống cần 2 biến, một biến cho thư mục và một biến cho tệp. Để đơn giản hóa, thay vì dùng 2 biến, Linux chỉ dùng một biến chung gọi là umask. Quyền mặc định của tệp là 0666 trừ đi umask, còn của thư mục là 0777 trừ đi umask. Trong trường hợp trên umask sẽ là 022. Chú ý là các quyền đặc biệt bị hạn chế sử dụng do tính chất không an toàn của các quyền này, do đó luôn luôn không có mặt không phụ thuộc vào giá trị của umask. Ví dụ xin xem trong Hình 5.4.8 5.5 Bài tập Bài tập 5.1 Viết các câu lệnh tìm kiếm các tệp có bít suid trên cả hệ thống, kiểm tra có phải là tệp passwd, nếu không bỏ bít suid đi. 54
  56. [trunghq@localhost trunghq]$ chmod ug=r dtest [trunghq@localhost trunghq]$ ls -l total 8 dr r rwx 4 trunghq g1 4096 Apr 20 00:53 dtest -rw-rw-r 1 trunghq trunghq 62 Apr 20 00:17 proc.c [trunghq@localhost trunghq]$ chmod 777 dtest [trunghq@localhost trunghq]$ ls -l total 8 drwxrwxrwx 4 trunghq g1 4096 Apr 20 00:53 dtest -rw-rw-r 1 trunghq trunghq 62 Apr 20 00:17 proc.c [trunghq@localhost trunghq]$ chmod 4777 dtest [trunghq@localhost trunghq]$ ls -l total 8 drwsrwxrwx 4 trunghq g1 4096 Apr 20 00:53 dtest -rw-rw-r 1 trunghq trunghq 62 Apr 20 00:17 proc.c [trunghq@localhost trunghq]$ chmod 2777 dtest [trunghq@localhost trunghq]$ ls -l total 8 drwxrwsrwx 4 trunghq g1 4096 Apr 20 00:53 dtest -rw-rw-r 1 trunghq trunghq 62 Apr 20 00:17 proc.c [trunghq@localhost trunghq]$ chmod 1777 dtest [trunghq@localhost trunghq]$ ls -l total 8 drwxrwxrwt 4 trunghq g1 4096 Apr 20 00:53 dtest -rw-rw-r 1 trunghq trunghq 62 Apr 20 00:17 proc.c Hình 5.4.7: Thay đổi quyền của tệp 55
  57. [trunghq@localhost trunghq]$ umask 0002 [trunghq@localhost trunghq]$ touch tepmoi [trunghq@localhost trunghq]$ mkdir thumucmoi [trunghq@localhost trunghq]$ ls -l total 12 -rw-rw-r 1 trunghq trunghq 0 Apr 20 01:26 tepmoi drwxrwxr-x 2 trunghq trunghq 4096 Apr 20 01:27 thumucmoi [trunghq@localhost trunghq]$ umask 0022 [trunghq@localhost trunghq]$ touch tepmoi1 [trunghq@localhost trunghq]$ mkdir thumucmoi1 [trunghq@localhost trunghq]$ ls -l total 16 drwxrwxrwt 4 trunghq g1 4096 Apr 20 00:53 dtest -rw-rw-r 1 trunghq trunghq 62 Apr 20 00:17 proc.c -rw-rw-r 1 trunghq trunghq 0 Apr 20 01:26 tepmoi -rw-r r 1 trunghq trunghq 0 Apr 20 01:28 tepmoi1 drwxrwxr-x 2 trunghq trunghq 4096 Apr 20 01:27 thumucmoi drwxr-xr-x 2 trunghq trunghq 4096 Apr 20 01:28 thumucmoi1 Hình 5.4.8: Ví dụ về umask 56
  58. Bài tập 5.2 Thực hiện việc copy và đặt chủ sở hữu thành www-data, quyền thư mục 755 và tệp 644 cho Joomla trong thư mục /var/www/ 57
  59. Chương 6 Quản lý tiến trình và tác vụ 58
  60. 6.1 Tiến trình 6.1.1 Khái niệm Tiến trình là một chương trình đang được thực hiện. Để xây dựng một chương trình, NSD viết mã nguồn, dịch ra mã nhị phân. Khi tệp chứa mã nhị phân được gọi, mã nhị phân sẽ được tải vào bộ nhớ. Câu lệnh đầu tiên trong khối lệnh sẽ được đăng ký để hệ điều hành sẽ thực hiện. Trong các hệ điều hành đơn nhiệm, cùng một lúc chỉ có một tiến trình được thực hiện, do đó sau khi được tải vào bộ nhớ, điều khiển sẽ được chuyển về cho câu lệnh đầu tiên của tiến trình. Trong các hệ điều hành đa nhiệm, có nhiều tiến trình cùng được thực hiện. Các tiến trình này sẽ được đăng ký vào trạng thái thực hiện. Hệ điều hành căn cứ vào đăng ký và mức độ ưu tiên của tiến trình để thực hiện. Mỗi tiến trình luôn luôn được gọi bởi một tiến trình khác. Tập hợp các tiến trình tạo ra một cây các tiến trình. Một tiến trình khi được thực hiện sẽ có quyền để tác động vào các tài nguyên của hệ thống giống với quyền của người gọi thực hiện tiến trình, trừ trường hợp có bít phân quyền đặc biệt bằng 1. 6.1.2 Thuộc tính Linux quản lý tiến trình bằng cách gán cho mỗi tiến trình một tham số. Các tiến trình có một chủ sở hữu và nhóm chủ sở hữu. Các tiến trình cũng có mức độ ưu tiên để khi cần thiết có thể được phân phối tài nguyên phù hợp với mức độ ưu tiên. Một tiến trình ở trong Linux có thể có các thuộc tính sau: • Một định danh (pid) • Một tiến trình cha (ppid) • Người sở hữu (uid) và nhóm (gid) • Câu lệnh kích hoạt tiến trình • Một đầu vào chuẩn (stdin), một đầu ra chuẩn (stdout), một kênh báo lỗi chuẩn (stderr) • Thời gian sử dụng CPU (CPU time) và mức độ ưu tiên • Thư mục hoạt động hiện tại của tiến trình • Bảng các tham chiếu đến các file được tiến trình sử dụng. 59
  61. 6.1.3 Phân loại Các tiến trình có thể được chia làm 2 loại. Tiến trình hệ thống Một số tiến trình được khởi động bởi hệ thống, quản lý các tài nguyên của hệ thống, tương tác chủ yếu với các ứng dụng khác, không có giao diện với NSD. Các tiến trình này gọi là các tiến trình hệ thống. Các tiến trình hệ thống thường được thực hiện trên quyền của các tài khoản hệ thống hoặc tài khoản root. Tiến trình NSD Các tiến trình của NSD được NSD khởi động bằng câu lệnh. Thông thường các tiến trình này tương tác với NSD thông qua giao diện dòng lệnh hoặc giao diện đồ họa. Các tiến trình này được thực hiện với quyền của NSD đã khởi động tiến trình, trừ các trường hợp các lệnh có bít đặc biệt bằng 1. 6.1.4 Các trạng thái của tiến trình Khi được kích hoạt, nội dung của tệp nhị phân chứa lệnh được tải vào trong bộ nhớ. Câu lệnh đầu tiên của chương trình được xếp vào hàng đợi để hệ thống thực hiện. Tiến trình đã chuyển từ trang thái không được kích hoạt sang trạng thái đang được thực hiện. Trường hợp được khởi động từ giao diện dòng lệnh bởi NSD, nếu NSD ấn phím Ctrl-C, tiến trình sẽ kết thúc, nội dung tệp thực hiện được loại ra khỏi bộ nhớ. Tiến trình ở trạng thái kết thúc. Có thể thấy trạng thái kết thúc và trạng thái không kích hoạt là giống nhau, nên thường được gọi chung là trạng thái kết thúc. Trong quá trình thực hiện, nếu tiến trình vẫn chiếm console và NSD chọn tổ hợp Ctrl-Z, tiến trình chuyển sang trạng thái tạm dừng. Trong trạng thái tạm dừng, tiến trình vẫn còn ở trong bộ nhwos, tuy nhiên không được đăng ký để hệ thống thực hiện. Tất cả các giá trị trong bộ nhớ của tiến trình vẫn được bảo toán, tuy nhiên quá trình tính toán của tiến trình không được thực hiện. Hình?? mô tả các trạng thái của tiến trình. 6.1.5 Các thao tác với tiến trình Để quản lý các tiến trình, NSD cần thực hiện các thao tác: Liệt kê các tiến trình đang được thực hiện trong hệ thống, thay đổi mức độ ưu tiên của các tiến trình, thay đổi trạng thái của các tiến trình. Câu lệnh ps Câu lệnh ps hiển thị các tiến trình đang được thực hiện. Mặc định câu lệnh này chỉ hiển thị các tiến trình do NSD khởi động. Cần thêm 60
  62. Hình 6.1.1: Trạng thái của tiến trình tùy biến -aux để hiển thị các tiến trình khác với đầy đủ thông tin hơn về tiến trình. $ ps PID TTY TIME CMD 2803 pts/1 00:00:00 bash 2965 pts/1 00:00:00 ps $ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.1 1104 460 ? S 15:26 0:03 init[3] trunghq 951 0.0 0.3 1728 996 pts/0 S 16:09 0:00 bash trunghq 953 0.0 1.9 6860 4916 pts/0 S 16:09 0:00 emacs trunghq 966 0.0 0.3 2704 1000 pts/0 R 16:23 0:00 ps aux Câu lệnh pstree Tiến trình luôn luôn được kích hoạt bởi một tiến trình khác (tiến trình cha). Với mối quan hệ cha con, tập hợp các tiến trình trên hệ thống tạo ra một cây tiến trình. Cây tiến trình này được hiển thị bởi lệnh pstree và có nút gốc là tiến trình init. 61
  63. init-+-apache2 10*[apache2] |-atd |-console-kit-dae 63*[{console-kit-dae}] |-cron |-dbus-daemon |-dd |-6*[getty] |-mysqld_safe-+-logger | ‘-mysqld 14*[{mysqld}] |-rsyslogd 3*[{rsyslogd}] |-sshd-+-sshd sshd bash pstree | ‘-2*[sshd sshd] |-udevd 2*[udevd] ‘-upstart-udev-br Hình 6.1.2: Cây tiến trình hiển thị bằng câu lệnh pstree . Câu lệnh kill dùng để gửi các tín hiệu đến cho một tiến trình. Các tín hiệu quan trọng thường sử dụng là: • SIGTERM (15): tín hiệu yêu cầu tiến trình nhận hoàn tất các công việc đang thực hiện và chuyển sang trạng thái kết thúc. • SIGKILL (9): tín hiệu yêu cầu tiến trình chuyển sang trạng thái kết thúc ngay lập tức. Lệnh killall dùng để kết thúc tất cả các tiến trình của một câu lệnh thông qua việc truyền tên của câu lệnh dưới dạng một tham số. Quyền hủy tiến trình thuộc về người sở hữu tiến trình và root. Câu lệnh top được sử dụng để hiển thị và điều khiển các tiến trình thông qua một giao diện tương tác. Các phím tắt thường dùng là: • k: gửi tín hiệu SIGTERM đến cho tiến trình. • r: thay đổi mức độ ưu tiên của tiến trình. Câu lệnh nice $ nice [-n Value] [Command [Arguments ]] 62
  64. cho phép thay đổi mức độ ưu tiên của tiến trình. Trong hệ điều hành Linux, các tiến trình được thực hiện song song, phân chia thời gian của CPU dựa vào mức độ ưu tiên. Việc phân chia cụ thể hoàn toàn do nhân hệ điều hành thực hiện. NSD có thể cung cấp mức ưu tiên bằng giá trị nice từ -19 đến 10. Giá trị nice có thể được thay đổi ngay khi khởi tạo tiến trình bằng câu lệnh nice: nice +13 pico myfile.txt thực hiện lệnh pico với mức độ ưu tiên +13, hoặc được thay đổi khi tiến trình đang thực hiện với câu lệnh renice: 6.2 Quản lý tác vụ 6.2.1 Khái niệm tác vụ Các tiến trình có thể được gọi bằng một tiến trình khác. Trường hợp được NSD kích hoạt trực tiếp, tiến trình này chính là console (ttyX). Trong trường hợp này, tiến trình được gọi là một công việc-tác vụ của NSD. Mỗi tác vụ đều có một đầu vào chuẩn và đầu ra chuẩn để nhận đầu vào và hiển thị đầu ra. Mặc định đầu vào và đầu ra chuẩn này là consoleKhi tác vụ được khởi tạo từ console, luôn luôn chỉ có 1 tiến trình được sở hữu console. Tiến trình này có thể là chính console hoặc một trong các tác vụ được khởi tạo từ console. Tác vụ sở hữu console được gọi là thực hiện ở chế độ foreground (bề mặt), các tác vụ khác thực hiện ở chế độ nền (background). Quá trình chạy ở chế độ hiện sẽ tiến hành theo những bước như sau: • Thực hiện quá trình fork nhân bản tiến trình cha (trong trường hợp thực thi các lệnh, đó sẽ là tiến trình shell) • Thực hiện quá trình wait, đưa tiến trình cha vào trạng thái ngủ (sleep). • Thực hiện quá trình exec, thực thi tiến trình con. • Sau khi tiến trình con thực thi xong, một tín hiệu đánh thức sẽ được gửi đến tiến trình cha. • Do quá trình chạy như trên => trong quá trình thực hiện tiến trình con, người sử dụng không thể tương tác với tiến trình cha. • Quá trình chạy ở chế độ ngầm cho phép thực thi tiến trình cha và tiến trình con một cách độc lập. 63
  65. Hình 6.2.3: Các trạng thái và các thao tác trên tác vụ 6.2.2 Các thao tác trên tác vụ Ví dụ: $ emacs & [1] 756 $ stop 756 # or $ stop %1 $ bg 756 # or $ bg %1 $ kill 756 # or $ kill %1 6.3 Cơ chế đường ống 6.3.1 Đầu vào và đầu ra chuẩn của tiến trình Các tiến trình có một đầu vào chuẩn (stdin) và 2 đầu ra chuẩn (stdout). Mặc định, đầu vào chuẩn là bàn phím dùng để nhập thông tin vào tiến trình, đầu ra chuẩn thứ nhất để hiển thị thông tin, đầu ra chuẩn thứ 2 để báo lỗi. Các đầu vào và đầu ra được ký hiệu bằng 0,1,2. Thay vì sử dụng đầu vào và đầu ra mặc định, có thể thực hiện chuyển hướng đầu vào và đầu ra. 64
  66. • Chuyển hướng đầu vào chuẩn ( , ») $ ls > /dev/lp $ ls >> test.txt • Chuyển hướng kênh báo lỗi $ rm prog.c 2> /dev/null $ gcc prog.c 2>> erreur.txt 6.3.2 Thực hiện song song các câu lệnh Có thể gọi nhiều câu lệnh từ một dòng lệnh. Các câu lệnh này có thể được thực hiện theo 3 cách khác nhau. Thực hiện không phụ thuộc lẫn nhau Câu lệnh cm1 được thực hiện, sau đó câu lệnh cmd2 được thực hiện. cmd 1;cmd2 Thực hiện phụ thuộc lẫn nhau, tất cả cần kết thúc thành công Câu lệnh cm1 được thực hiện, sau đó câu lệnh cmd2 được thực hiện nếu câu lệnh cm1 được thực hiện thành công. cmd 1 && cmd2 Thực hiện theo cơ chế đường ống Câu lệnh cm1 được thực hiện, sau đó câu lệnh cmd2 được thực hiện. Câu lệnh cmd2 nhận đầu ra của cmd1 làm đầu vào chuẩn cmd1 | cmd2 cat /etc/passwd | grep trunghq Câu lệnh tee Câu lệnh tee cho phép copy đầu ra chuẩn thành 2 đầu ra khác nhau: ls -l | tee test | more 65
  67. Chương 7 Cấu hình hệ thống 66
  68. Trong chương này bạn đọc sẽ làm quen với các bước cấu hình cần thiết để một máy tính có thể kết nối với mạng nội bộ hoặc Internet 7.1 Các thông tin cần cấu hình Để một máy tính kết nối với mạng, nó cần phải có các thông tin sau: • Cấu hình card mạng: card mạng cần được ”bật” lên nếu đang ở trạng thái ”tắt” • Địa chỉ IP/Netmask: địa chỉ IP để định danh máy tính trên mạng, giúp các gói tin đến được đúng đích cần đến. • Gateway: địa chỉ để máy tính kết nối ra Internet • Cấu hình tên miền: gồm tên miền của máy (nếu máy dùng để chạy dịch vụ) và địa chỉ của máy chủ tên miền để máy tính phân giải được tên miền thành địa chỉ IP khi kết nối ra ngoài. 7.2 Kiểm tra cấu hình Trước khi tiến hành cấu hình, bạn đọc có thể kiểm tra cấu hình hiện tại hoặc kiểm tra kết nối mạng bằng các lệnh cơ bản sau: 7.2.1 Kiểm tra cấu hình mạng hiện tại của máy Sử dụng các lệnh sau để kiểm tra cấu hình mạng hiện tại của máy: ifconfig Kiểm tra cấu hình hiện tại của các card mạng gắn trên máy, thông tin trả về bao gồm cả thông tin về cấu hình của mạng loopback. Nếu người dùng muốn xem thông tin cụ thể của card mạng nào thì có thể gõ . Hình ví dụ minh họa cat /etc/resolve.conf Xem thông tin về cấu hình địa chỉ máy chủ DNS. Hình ví dụ mình họa route Xem thông tin về bảng định tuyến của máy tính, thông tin được liệt kê ra như hình dưới đây. 67
  69. hostname Xem thông tin về tên máy tính. Hình ví dụ minh họa Bằng các lệnh trên người sử dụng sẽ có đầy đủ thông tin về cấu hình hiện tại trước khi có quyết định xem cần cấu hình lại thông tin trên máy mình hay tiến hành bước tiếp theo là kiểm tra kết nối mạng hiện tại (xem mạng hoạt động hay bị lỗi) 7.2.2 Kiểm tra kết nối mạng Để kiểm tra kết nối mạng người sử dụng thường trải qua các bước như sau: • Kiểm tra dây cáp mạng xem đã cắm vào chưa? Đèn card mạng có sáng không (nháy xanh) • Dùng lệnh hoặc để kiểm tra xem cấu hình TCP/IP của mạng đã đúng chưa • Dùng lệnh để kiểm tra xem card mạng có hoạt động không • Dùng lệnh để kiểm tra xem đường kết nối đến cổng ra ngoài mạng có thông hay không • Dùng lệnh để kiểm tra xem có thể kết nối đến DNS server không • Dùng lệnh để kiểm tra kết nối ra bên ngoài có thông hay không • Dùng lệnh để kiểm tra tuyến đường gói tin đi đến đích Ví dụ: chèn hình ví dụ vào Sau khi kiểm tra, nếu thấy cần thay đổi lại cấu hình hệ thống của máy tính bạn đọc có thể lựa chọn một trong hai phương pháp: cấu hình bằng lệnh hoặc sửa file cấu hình hệ thống. Hai mục sau đây sẽ hướng dẫn bạn đọc chi tiết về hai phương pháp này. 7.3 Cấu hình bằng câu lệnh Để cấu hình card mạng bằng câu lệnh bạn đọc thực hiện các bước sau: Bước 1: Cấu hình địa chỉ IP và netmask bằng lệnh sau: ví dụ 68
  70. Bước 2: Cấu hình địa chỉ Default Gateway bằng lệnh sau: ví dụ Bước 3: Bật tắt card mạng để thay đổi có hiệu lực bằng lệnh: • Tắt card mạng: . Ví dụ: • Bật card mạng: . Ví dụ: 7.4 Sửa file cấu hình hệ thống Như đã đề cập ở các chương trên, làm việc trên linux là làm việc với các tập tin và thư mục, mọi thông tin hoặc cấu hình hệ thống đều nằm trong các file. Các lệnh cấu hình cũng chỉ là một cách sửa lại nội dung file hệ thống một cách nhanh chóng. Người sử dụng hoàn toàn có thể mở các file này ra bằng các trình soạn thảo văn bản như: vi, vim, emacs để sửa nội dung một cách ”trực quan” hơn. Mục này tác giả sẽ giới thiệu các file cấu hình hệ thống cơ bản, nội dung bên trong nó và cách thức sửa đổi thông tin trong các file này. Trước khi vào từng mục cụ thể bạn đọc nên nhớ kỹ một điều, trong hệ thống file của linux các thông tin nằm bên phải của dấu ”thăng” là thông tin ghi chú, các trình biên dịch lệnh bỏ qua các nội dung này. Lợi dụng đặc điểm đó bạn đọc có thể tạm thời vô hiệu hóa các lệnh hoặc thông tin không mong muốn bằng cách đặt trước nó một dấu ”thăng” mà không cần thiết phải xóa bỏ, điều này rất có ích nếu cần khôi phục các lệnh này một cách nhanh chóng ở lần cấu hình sau. Ngoài ra, bạn đọc có thể dùng phương án này để ghi chú lại các thay đổi để có thể nhớ lại được ở lần truy cập sau. 7.4.1 File /etc/network/interfaces Tập tin này chứa cấu hình của card mạng như ví dụ dưới đây Như ta bạn đọc thấy, tất các các cấu hình cần thực hiện ở phần trên như địa chỉ IP, netmask, gateway đều lưu trong file này. Bạn đọc sửa lại thông tin trong file này rồi tắt/bật lại card mạng để kích hoạt cấu hình mới. 7.4.2 File /etc/init.d/network Ngoài cách tắt bật card mạng như ở phần trên bạn đọc có thể thực hiện việc bật, tắt, khởi động lại dịch vụ mạng bằng cách truyền tham số vào tập tin như sau: • : Tắt dịch vụ mạng 69
  71. • : Bật dịch vụ mạng • : Khởi động lại dịch vụ mạng - Bạn đọc có thể dùng lệnh này để cấu hình thay đổi có hiệu lực thay vì tắt rồi bật lại card mạng hay dịch vụ mạng 7.4.3 /etc/resolve.conf Tệp tin này lưu thông tin về địa chỉ của máy chủ DNS, bạn đọc có thể thêm nhiều địa chỉ DNS khác nhau để máy tính dùng khi cần thiết. Thứ tự ưu tiên khi truy vấn là theo thứ tự từ trên xuống dưới. Khi máy tính truy vấn DNS đầu tiên không có được thông tin cần thiết nó sẽ truy vấn đến DNS thứ hai, ba, bốn đến khi tìm được thông tin hoặc hết địa chỉ lưu trong file này mới dừng lại. Hình ví dụ 7.4.4 File /etc/hosts Tệp tin này lưu thông tin ánh xạ địa chỉ IP của máy sang tên miền của máy 70
  72. Chương 8 Quản lý phần mềm 71
  73. 8.1 Nguyên tắc quản lý phần mềm 8.1.1 Các thành phần của phần mềm trên hệ thống Khi một phần mềm được cài đặt, trên hệ thống sẽ tồn tại các thành phần sau: Mã thực hiện Thành phần này chứa các mã có thể thực hiện được của phần mềm. Nếu là phần mềm thông thường chạy trực tiếp trên hệ điều hành, thành phần này chứa các mã nhị phân của phần mềm. Nếu là các phần mềm dạng khác, đây có thể là các mã phù hợp với nền tảng (vd Java bytecode, shell scripts). Các thư viện phần mềm Trong quá trình xây dựng phần mềm, có một số thành phần, chức năng sử dụng các thành phần của các phần mềm khác (hàm, thủ tục, thư viện, ảnh, ) Khi được cài đặt trên hệ thống, các thành phần này trở thành độc lập với phần mềm, có thể được sử dụng bởi các phần mềm khác Các tệp cấu hình Để có thể chạy trên một hệ thống và đáp ứng yêu cầu cụ thể của NSD, phần mềm cần được tùy biến. Giá trị của các tùy biến này cần được lưu lại, độc lập với thư viện phần mềm và mã thực hiện. Trong một số trường hợp, các tùy biến này cho phép có thể tìm kiếm các thư viện phần mềm cần thiết. Dữ liệu tạm thời Trong quá trình hoạt động của chương trình, các dữ liệu tạm thời được tạo ra. Các dữ liệu này chỉ có ý nghĩa trong một phiên làm việc. Các thành phần nói trên liên kết với nhau, đảm bảo cho phần mềm hoạt động và cung cấp các tính năng cho NSD. Khi hệ thống và NSD thay đổi nhu cầu sử dụng phần mềm, cần thực hiện một số thao tác để tác động tới các thành phần trên của phần mềm. 8.1.2 Các thao tác có thể thực hiện với các phần mềm trên hệ thống Cài đặt phần mềm Khi phần mềm chưa tồn tại trên hệ thống, để có thể sử dụng phần mềm cần thực hiện thao tác cài đặt. Việc cài đặt phần mềm cần dựa trên một tập hợp các tệp cần thiết cho phần mềm, cụ thể là các thành phần mã thực hiện, thư viện phần mềm, các tệp cấu hình mặc định. Mã thực hiện thường được đóng gói thành các tệp lưu trữ, bên trong có chứa 72