Giáo trình Hệ điều hành mã nguồn mở (Phần 2)

pdf 52 trang Gia Huy 16/05/2022 3090
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Hệ điều hành mã nguồn mở (Phần 2)", để 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:

  • pdfgiao_trinh_he_dieu_hanh_ma_nguon_mo_phan_2.pdf

Nội dung text: Giáo trình Hệ điều hành mã nguồn mở (Phần 2)

  1. BÀI 6: QUẢN TRỊ HỆ THỐNG LINUX Mã bài: MĐSCMT 26.06 Giới thiệu Bài này sẽ bàn về một số cơng việc và vấn đề chủ chốt của một quản trị viên hệ thống trong mơi trường multiuser của Linux. Nếu đọc giáo trình này để tìm hiểu và cài đặt Linux, thì tức khắc gần như chúng ta đã trở thành quản trị viên hệ thống. Nhiều mục trong chương này sẽ thiên về quản trị hệ thống cho các mạng cơ quan. Tuy nhiên, cho dù chỉ là user duy nhất dùng Linux trên máy gia đình, chúng ta cũng nên làm quen với việc quản trị mạng lớn để mở rộng nhận thức về những vấn đề tổng quát hơn. Những chủ đề chính sẽ được đề cập trong bài này bao gồm: - Tầm quan trọng của quản trị hệ thống - Khái niệm multiuser - Các hệ thống xử lý tập trung - Các hệ thống xử lý phân tán - Mơ hình khách/chủ - Quản trị trong mơi trường mạng - Xác định vai trị quản trị viên mạng. Mục tiêu - Mở rộng nhận thức tổng quát hơn những cơng việc của một quản trị viên hệ thống. - Nắm được các kiến thức cơ bản về các hệ thống xử lý, mơ hình clien/sever, xác định vai trị của một quản trị viên mạng. - Thiết lập được hệ thống mạng, thao tác các thiết bị ngoại vi và giám sát hệ thống cũng như nâng cấp phần mềm ở mức độ cơ bản nhất. Nội dung chính 1. Các hệ thống và các thành phần xử lý Mục tiêu : - Trình bày được các thành phần của hệ thống xử lý tập trung - Trình bày được các thành phần của hệ thống xử lý phân tán 1.1. Các hệ thống xử lý tập trung Trên đà phát triển của cơng nghệ thơng tin, trong những thập niên 1950 và 1960, các hệ điều hành multiuser đã ra đời, cho phép nhiều user chia sẻ tài nguyên từ các terminal riêng lẻ. Sử dụng batch-processing sequence (trình tự xử lý theo lơ), hai user cĩ thể thực thi hai chương trình khác nhau trong khi vẫn dùng chung một bộ xử lý trung tâm, một thiết bị lưu trữ và một thiết bị kết xuất. Với sự phổ biến của mạng điện thoại chuyển mạch (PSTN), máy tính bắt đầu sử dụng được nhiều tài nguyên tin học ở xa mà khơng phụ thuộc khoảng cách địa lý. Trong mơ hình này, từng bộ xử lý sẽ sử dụng tài nguyên xử lý liên lạc để kết nối với các terminal ở xa. Từ đĩ đã phát triển ra mơ hình front-end processing (xử lý mặt trước) về mặt liên lạc và mơ hình xử lý tập trung về mặt dữ liệu. Trước khi các máy tính được giảm giá mạnh mẽ và trở nên phổ biến khắp nơi thì hầu hết các hệ UNIX đều dùng mơ hình xử lý tập trung. Với cách xử lý này, một máy tính lớn (mainframe) cĩ thể phụ trách mọi xử lý. Các user chỉ việc kết nối tới đĩ và dùng chung tài nguyên của máy lớn. Hiện nay mơ hình này càng ngày càng ít được dùng, mặc dù nĩ vẫn thích hợp cho những trường hợp các user ở cách nhau quá xa. Thí dụ cơ quan của chúng ta cĩ một trung tâm xử lý chính và tất cả các chi nhánh từ xa đều 59
  2. cĩ thể truy cập trung tâm này. Trên bàn của mỗi user là một terminal, bao gồm bàn phím và màn hình được kết nối với máy lớn và dùng chung những tài nguyên như máy in, bộ lưu trữ, vv Mơ hình xử lý tập trung thường gồm nhiều thành phần như server, bộ xử lý mặt trước (front processor), terminal, modem và những bộ ghép nối nhiều cổng. Khi một user cần truy vấn từ xa, yêu cầu này được gửi về trung tâm và máy tính tại đây sẽ xử lý, sau đĩ trung tâm sẽ gửi kết quả về nơi yêu cầu. Mọi dữ liệu đều được xử lý và lưu trữ bởi máy lớn. 1.2. Các thành phần của mơ hình xử lý tập trung Muốn làm việc theo mơ hình xử lý tập trung, chúng ta phải cĩ một số thành phần như server, bộ xử lý mặt trước, terminal, modem và những bộ ghép nối nhiều cổng. Cĩ thể định nghĩa server như là một máy tính được thiết lập cấu hình nhằm chia sẻ tài nguyên với những máy khác. Thí dụ chúng ta cĩ thể dùng một máy tính tương thích họ IBM PC làm server với điều kiện máy phải cĩ đủ chỗ trên ổ cứng và đủ RAM. Bộ xử lý mặt trước kết nối các kênh liên lạc với server và giữ vai trị thao tác các chi tiết liên lạc để server rảnh rang mà xử lý dữ liệu. Terminal gồm cĩ hai loại phổ biến, đĩ là terminal thường (dumb) và terminal thơng minh (smart). Trước nay UNIX được sử dụng với terminal thường, vốn chỉ cĩ bàn phím và màn hình mà thơi. Điểm nổi bật đối với terminal thường là chúng khơng cĩ khả năng xử lý. Cổng liên lạc ở terminal thường được nối trực tiếp hoặc gián tiếp với server. Khi gõ bàn phím ở terminal thường, mỗi ký tự gõ vào đều được chuyển về server xử lý. Trong khi đĩ terminal thơng minh cĩ thể xử lý tại chỗ vài cơng việc đơn giản. Chẳng hạn như máy thu tiền hoặc máy rút tiền tự động là những terminal thơng minh. Terminal thơng minh lưu trữ yêu cầu giao dịch, sau đĩ mới chuyển tồn bộ yêu cầu này, thay vì chuyển từng ký tự mỗi lần gõ phím như terminal thường. Muốn kết nối terminal với server qua mạng điện thoại, chúng ta cần hai modem. Modem thứ nhất ở đầu này chuyển đổi tín hiệu số của terminal (hoặc của máy tính) thành tín hiệu tương tự (analog) phù hợp cho đường điện thoại, modem thứ hai kết nối đường điện thoại ở đầu kia với server. Muốn làm việc từ xa, qua terminal chúng ta quay số điện thoại ở đầu kia và liên lạc được với server khi modem ở đầu kia nhận lời. Muốn tăng số lượng các cổng cho user kết nối vào, chúng ta cần cài đặt một bộ ghép nối đa cổng. Thơng thường một máy PC chỉ cĩ hai cổng nối tiếp COM1 và COM2. Nếu muốn PC của mình trở thành server cho hơn hai user, chúng ta phải dùng bộ ghép nối đa cổng. Đĩ là một bìa để lắp đặt vào bus trong PC, đi cùng một cái hộp cĩ tám ổ nối hoặc nhiều hơn và với một bĩ cáp nối bìa với hộp. Bộ ghép nối đa cổng cịn đi kèm một phần mềm để giúp PC điều khiển các cổng nối tiếp đĩ. 1.3. Các hệ thống xử lý phân tán Ở mơ hình xử lý phân tán, terminal được thay thế bằng trạm làm việc (workstation), vốn là một máy vi tính chạy DOS hoặc Linux/UNIX, và chúng ta cĩ thể chạy chương trình hoặc lưu thơng tin trên server hay ở trạm làm việc cũng được. Sau khi xử lý tệp ở trạm làm việc xong, chúng ta lưu trữ thơng tin trên server để những user khác cĩ thể truy cập. Chúng ta cĩ thể tuỳ ý in từ máy in tại chỗ hoặc máy in kết nối với server. Bởi vì hiện nay các trạm làm việc rất mạnh và rẻ tiền, cĩ khả năng là cơ quan của chúng ta sử dụng hệ thống xử lý phân tán thay vì hệ thống xử lý tập trung. 60
  3. 1.4. Các thành phần của mơ hình xử lý phân tán Mơ hình xử lý phân tán sử dụng các server tệp, trạm làm việc, bìa giao diện mạng, cùng với một số thiết bị khác như bộ tập trung (hub), bộ khuếch đại (repeater), bộ cầu (bridge), bộ định tuyến (router) và bộ cổng ngõ (gateway). Chức năng của server tệp là phân phối các tệp và các đoạn chương trình đến các trạm làm việc. Hơn 90% cơng việc xử lý được tiến hành tại các trạm làm việc, chỉ cĩ từ 5 đến 10% cơng việc dành cho server, chủ yếu là các nhiệm vụ quản trị. Ngồi chức năng server tệp, chúng ta cĩ thể dùng PC như là một trạm làm việc Linux. Linux được thiết kế để chạy với một cấu hình phần cứng rất khiêm tốn: trước kia vào giữa thập niên 1990 chúng ta đã cĩ thể chạy các bản Linux đầu tiên với CPU 386 SX và 4 MB RAM! Vì các máy tính hiện nay mạnh hơn hẳn yêu cầu tối thiểu của Linux, chúng ta cĩ thể yên tâm, tất nhiên cịn phải tuỳ theo phiên bản và nhà sản xuất Linux: như với RedHat, bản 5.x cĩ thể chạy với 4 MB RAM cịn bản 7.x thì chỉ chạy tốt khi bộ nhớ RAM lớn hơn 64 MB. Cịn phải chừa bao nhiêu khoảng trống trên ổ cứng thì tuỳ vào việc chúng ta muốn cài đặt bao nhiêu phần mềm. Nếu chạy Linux hồn tồn từ CD-ROM (thí dụ như bản SuSE Linux 7.3 cho CPU Intel) thì chúng ta chỉ cần 5 MB đĩa cứng. Nếu cài đặt từ đĩa cứng thì cần tối thiểu từ 80 đến 300 MB, cịn cài trọn bộ thì cần khoảng 3.5 GB, tuỳ theo phiên bản và nhà sản xuất. Nĩi chung, các tài nguyên cần dành ưu tiên cho trạm làm việc, nơi mà phần lớn cơng tác xử lý được thực thi. Tuỳ vào loại cơng việc dự định thực hiện, chúng ta sẽ dần dà đưa thêm tài nguyên vào. Thí dụ những phần mềm xử lý văn bản chiếm chẳng bao nhiêu tài nguyên (ổ cứng, RAM, chất lượng màn hình) khi so với những cơng việc xử lý hình ảnh, chẳng hạn như các chương trình CAD (thiết kế bằng máy tính). Với những ứng dụng kiểu CAD, chúng ta cần những ổ cứng lớn (hơn 1 GB) và đầy đủ RAM (hơn 16 MB, cĩ thể lên đến 512 MB), cùng với màn hình và bìa video độ phân giải cao (1280 X 1024 điểm hoặc nhiều hơn). Sau đĩ, chúng ta cĩ thể cần đến một ổ băng từ để sao lưu và một ổ CD-ROM để đọc các chương trình lớn. -NIC (bìa giao diện mạng) được gắn vào một khe trên bo mẹ (mother board) và thực hiện qua ổ nối (BNC hoặc RJ-45) mối liên kết vật lý giữa máy tính với dây cáp mạng. Chúng ta cĩ thể nối mạng bằng cáp đồng trục hoặc cáp xoắn đơi. -Hub (bộ tập trung) là nơi kết nối các cáp mạng, chẳng hạn loại hub khuếch đại thụ động (passive repeater hub) thường cĩ bốn ổ nối RJ-45. Hub chuyển mạch (switching hub) thường cĩ ít nhất tám cổng RJ-45. Loại Hub này vừa khuếch đại vừa chủ động chuyển mạch các tín hiệu. -Repeater (bộ khuếch đại) cĩ chức năng khuếch đại hoặc tái sinh tín hiệu trên mạng để tăng khoảng cách kết nối của cáp mạng. -Brigde (bộ cầu) được dùng để nối hai mạng cĩ giao thức và giao diện giống nhau. -Router (bộ định tuyến) được dùng ở các mạng lớn và phức tạp, cho phép tạo lập và lựa chọn đường đi cho các gĩi tin đạt mục đích về cùng một địa chỉ trên mạng. Router sẽ xác định đâu là lộ trình tối ưu tại mỗi thời điểm và gửi gĩi tin theo lộ trình ấy. -Gateway (cổng ngõ) sẽ chuyển đổi các giao thức cần thiết để cho hai mạng dùng các giao thức khác nhau liên lạc được với nhau. Thí dụ muốn liên lạc giữa các mạng TCP/IP, Netware hoặc AppleTalk thì đều phải qua trung gian gateway thích hợp. 2. Các mơ hình và quản trị trong mơi trường mạng Mục tiêu : - Nêu được vai trị của mơ hình client/server 61
  4. - Lựa chọn được phần cứng và phần mềm - Trình bày được những cơng việc chung trong quản trị mạng 2.1. Mơ hình client/server Kết quả của việc xử lý phân tán là mơ hình client/server (khách/chủ). Các hệ Linux cĩ thể được dùng cho mơ hình này với tư cách là khách, hoặc là chủ, hoặc cả hai. Để tìm hiểu việc thiết lập quan hệ client/server, chúng ta hãy giả định nhiều trạm làm việc Linux (client) được kết nối với một server theo topo hình tuyến. Server này sẽ dành thư mục riêng cho từng client. Mỗi thư mục chứa nhiều tệp và đêm đêm lại được sao lưu đều đặn. Server cũng cĩ những thư mục chung để các client cĩ thể chia sẻ một số tệp với nhau. Thường thì một máy in laser được nối với server để mọi người dùng chung và một ổ băng từ cũng nối như thế để sao lưu các ổ cứng dung lượng lớn. Ngồi ra, một số client cịn cĩ máy in riêng của mình được kết nối tại chỗ. 2.2. Quản trị trong mơi trường mạng Hình thức thường gặp của một mạng Linux/UNIX bao gồm nhiều máy tính lớn nhỏ khác nhau được kết nối bằng cáp mạng hoặc đường điện thoại. Quản trị mạng là cơng việc của một hoặc nhiều người tại một (số) trong những máy của mạng. Hầu như ai cũng cĩ khả năng tìm hiểu về Linux và quản trị một mạng máy vi tính. Với tính kiên trì cộng với nhiều thực hành, ngay cả những người với hiểu biết hạn chế về tin học cũng cĩ thể học cách quản trị một mạng Linux. 2.3. Xác định vai trị quản trị viên mạng Gần như nơi nào cĩ một số máy chạy UNIX/Linux được nối mạng thì nơi ấy sẽ cĩ một người chuyên trách mạng. Quản trị viên mạng cần cĩ kiến thức nhất định để quyết định các kết nối vào hệ thống (qua mạng cục bộ hay modem), mức độ an ninh cần thiết và việc chia sẻ các thiết bị ngoại vi. Hàng ngày, quản trị viên kiểm tra danh sách tên hệ thống, địa chỉ mạng và việc vào ra của các user. Những tổ chức lớn với mạng lưới hàng trăm máy vi tính thường cĩ nhiều quản trị viên ở các lĩnh vực liên quan. Việc này là cần thiết nếu các user cĩ nhu cầu chuyên mơn, thí dụ về in ấn hoặc tạo mẫu đa dạng. Việc quản lý máy in và cơng tác in địi hỏi kiến thức sâu rộng về những loại máy in nhất định và làm cách nào để cho chúng tương thích với các máy tính và phần mềm tác nghiệp. 2.4. Lựa chọn phần cứng và phần mềm Là một quản trị viên hệ thống, chúng ta phải quan tâm đến nhiều yếu tố trước khi quyết định chọn phần cứng và phần mềm cho những hệ thống nằm trong phạm vi trách nhiệm của mình. Nếu những hệ thống ấy ở cự ly gần và tập trung trong cùng một tồ nhà, thì mạng cục bộ (LAN) là giải pháp vừa ít tốn kém vừa cĩ tốc độ cao. Lúc này chúng ta chỉ cần gắn cho mỗi chiếc máy Linux một bìa giao diện mạng Ethernet cĩ chạy giao thức TCP/IP, bởi vì TCP/IP là giao thức chuẩn cho các bản phát hành Linux. Để kết nối tốc độ thấp ở cự ly lớn hơn, chúng ta nên dùng modem thoại chạy giao thức PPP (Point–to–Point Protocol), hoặc giao thức SLIP (Serial Line Internet Protocol, giao thức Internet đường nối tiếp), cho các kết nối TCP/IP khơng đồng bộ. Chúng ta cũng cĩ thể dùng giao thức UUCP (UNIX-toUNIX Copy Protocol) cho thư điện tử, diễn đàn News và truyền tệp FTP (mặc dù UUCP cĩ giới hạn nhất định). Đối với cự ly dài hơn và tốc độ cao hơn, chúng ta chọn cơng nghệ ISDN hoặc xDSL hoặc thuê đường truyền riêng (Leased Line) của một cơng ty viễn thơng phù hợp. Chúng ta khơng nên mua bất kỳ thiết bị mạng nào đã qua sử dụng. Một số thiết bị mạng được bán cùng với phần mềm điều khiển (driver) giúp chúng chạy với DOS, 62
  5. nhưng điều đĩ khơng cĩ nghĩa là chúng sẽ chạy trơn tru với Linux. Hệ thống Linux cĩ thể cĩ nhiều driver chuẩn cho mạng được gắn kèm (built-in). Bảng sau liệt kê vài bìa Ethernet được Linux hỗ trợ. Chúng ta nên kiểm tra lại tệp HOWTO về Ethernet để theo dõi những cập nhật mới nhất. Bảng 6.1: Vài loại bìa Ethernet được Linux hỗ trợ Nhà sản xuất Bìa 3Com 3c503, 3c503/16, 3c509, 3c579 SMC (Western WD8003, WD8013, SMC Elite, SMC Elite Plus, SMC Elite 16 Digital) ULTRA Novell Ethernet NE1000, NE2000, NE1500, NE2100 D-Link DE-600, DE-650, DE-100, DE-200, DE-220-T Hewlett-Packard 27245A, 27247B, 27252A, 27247A, J2405A Digital DE200, DE210, DE202, DE100, DEPCA (rev.E) Allied Telesis AT1500, AT1700 PureData PDUC8028, PI8023 Các phần mềm ứng dụng khơng được đĩng gĩi chung với những sản phẩm về mạng vẫn cĩ thể sử dụng ở mơi trường mạng. Thí dụ chúng ta cài đặt một ứng dụng trên Linux, sau đĩ nhiều user trên những máy khác vẫn cĩ thể dùng ứng dụng này bằng cách chạy các lệnh từ xa được viết cho UNIX. Một thí dụ khác: chúng ta cĩ thể chia sẻ một ứng dụng bằng cách lắp ghép từ xa hệ thống tệp chứa ứng dụng ấy, sau đĩ lại chạy ứng dụng ngay từ hệ thống tại chỗ. 2.5. Những cơng việc chung trong quản trị mạng Quản trị mạng cĩ nhiều cơng việc khác nhau. Mạng máy tính khơng chỉ được thiết lập một lần rồi thơi mà nĩ luơn luơn phát triển. Khi mua phần cứng và phần mềm, quản trị viên cần hiểu rõ các user trơng chờ điều gì ở mình và họ sẽ được những tiện ích nào. 2.5.1. Thiết lập hệ thống Nếu là người dùng mạng, dù chỉ trong một phân đoạn (segment) Ethernet, chúng ta nên thực hiện các thử nghiệm về tính liên tác (interoperability). khi kết nối xa qua mạng điện thoại, chúng ta cũng nên thử nghiệm đường truyền. Khi là quản trị viên, chúng ta càng cần thử nghiệm tồn bộ việc nối các cáp, thiết bị mạng và thiết bị tin học. Phần mềm mạng phải được cài đặt và sẵn sàng kết nối. Ngay cả khi hệ thống cĩ các tiện ích Plug and Play (cắm là chạy) chúng ta cũng cần kiểm tra lại chúng. Điều cĩ lợi khi mua một máy chưa cài đặt sẵn hệ điều hành là chúng ta cĩ cơ hội thiết lập hệ thống tệp sao cho phù hợp với yêu cầu riêng biệt của mình. Chúng ta biết hệ thống mạng sẽ dùng phần mềm nào, cũng như tổng số user và cường độ sử dụng máy của họ. Lưu ý: để khỏi tốn nhiều thời gian và cơng sức vào việc thiết lập lại mạng, chúng ta cần sao lưu tức khắc các tệp cấu hình ngay sau khi thiết lập một hệ thống. Khi thiết lập Linux xong và thấy hệ thống chạy tốt, chúng ta sẽ cài các phần mềm ứng dụng. Như đã biết, phần mềm chạy với Linux thường phức tạp hơn các hệ đơn dụng, do đĩ chúng ta nên thử những phần mềm ấy nhiều lần sau khi cài đặt để đảm bảo rằng chúng chạy trơn tru, trước hết là các tiện ích. Đến đây, mặc dù chưa nối mạng song chúng ta vẫn cần chuẩn bị đưa danh sách user vào hệ thống. Chúng ta phải cấp các định danh đăng nhập (login ID) cho một vài 63
  6. user chính, cùng với mật khẩu chung ban đầu. Việc này vừa đảm bảo an ninh ban đầu, vừa tạo cơ hội cho những user quan trọng sử dụng hệ thống ngay sau khi cài đặt xong. Sau khi cài đặt, chúng ta nên nối mạng ngay để chắc chắn rằng mình cĩ thể liên lạc với mọi nơi. Tiếp theo chúng ta thử chuyển một số tệp lớn nhỏ khác nhau từ máy này sang máy khác. Thư điện tử phải được thơng suốt. Tất cả các máy phải nhận diện được mỗi máy mới nối vào hệ thống, cĩ nghĩa là chúng ta phải thêm tên của máy mới vào cơ sở dữ liệu host name. Nếu đang sử dụng dịch vụ tên miền tại chỗ, chúng ta phải thêm host name vào cơ sở dữ liệu DNS. Nếu khơng dùng DNS thì chúng ta thêm tên vào các tệp /etc/hosts trên các hệ thống khác. 2.5.2. Thao tác các thiết bị ngoại vi In ấn là một thao tác phổ biến mà quản trị viên cần quan tâm chuẩn bị sẵn sàng. Theo dõi, bảo trì máy in là một cơng việc khá quan trọng và chiếm nhiều thời gian của quản trị viên. Người quản trị phải biết quy trình in ấn và thiết lập các cấu hình thích hợp với đặc điểm của từng loại thiết bị. Cịn modem là phương tiện ít tốn tiền nhất để nối mạng ở cự ly lớn. Modem làm việc với giao thức PPP hoặc UUCP cĩ thể giúp một nhĩm nhỏ quản trị viên trơng coi được nhiều máy tính. Tuy nhiên cũng như máy in, modem cần được chăm sĩc từ đầu để luơn luơn chạy tốt. Chúng ta nên chọn thử một vài modem cĩ thương hiệu nổi tiếng và tìm hiểu kỹ các tính năng của chúng. 2.5.3. Giám sát hệ thống Khi cài đặt xong UNIX/Linux, chúng ta cĩ thể thiết lập các cơng cụ để giám sát hệ thống mới. Việc giám sát một hệ thống đang hoạt động là cơng việc thường trực của quản trị viên, song gánh nặng này sẽ ổn định sau một thời gian (dĩ nhiên nếu chúng ta khơng liên tục bổ sung vào mạng nhiều máy mới hoặc phần mềm mới). Thỉnh thoảng cũng cĩ thiết bị nào đĩ ngưng hoạt động hoặc cần điều chỉnh. Một quản trị viên giỏi là người biết rõ vấn đề phát sinh do phần cứng hay phần mềm và cách giải quyết. 2.5.4. Nâng cấp phần mềm Cĩ vài gĩi phần mềm trong Linux cần được cập nhật thường xuyên. Quản trị viên phải lo việc này, bởi vì Linux được cấp miễn phí trên Internet và luơn được chỉnh sửa. Việc chỉnh sửa nhằm để khắc phục những lỗi đã phát hiện, nhưng chúng ta lại mất thời gian tải nạp bản cập nhật và cài đặt nĩ trên các máy. Chúng ta khơng nên cài đặt hết mọi phiên bản mới vào tồn bộ các máy, mà trước hết hãy thử nghiệm bản nâng cấp trên một máy. Khi nào chắc chắn rằng bản nâng cấp chạy tốt, lúc ấy hãy cập nhật nĩ vào những máy khác. Quản trị viên giỏi là người biết cài đặt những phần chỉnh sửa hoặc những phiên bản mới mà khơng cần phải thân chinh đi đến từng máy trong mạng. Mới nghe qua điều này cĩ vẻ khĩ tin, song UNIX cĩ những cơng cụ giúp chúng ta thực hiện cơng tác này. 2.6. Huấn luyện quản trị viên Thơng thường các cơ quan đều cĩ người biết sử dụng máy vi tính, nhưng lại hiếm cĩ quản trị viên hệ thống chuyên nghiệp. Cơng tác quản trị UNIX/Linux địi hỏi cĩ kiến thức vững chắc về một số chủ đề chung sau đây: -Thiết kế và sử dụng các hệ Linux/UNIX. Quản trị viên phải cĩ hiểu biết xuyên suốt về một số kỹ thuật như đổi hướng (redirection), ống dẫn (pipeline), xử lý hậu trường (background processing), v.v. -Trình soạn thảo văn bản vi. Hầu như bất kỳ chiếc máy tính nào được cài đặt UNIX/Linux thì đều cĩ sẵn trình soạn thảo vi. Nhiều người khơng thích vi và chuyển 64
  7. sang dùng các trình soạn thảo khác thân thiện hơn, tuy nhiên quản trị viên nên cĩ kiến thức và kỹ năng sử dụng vi bởi vì đĩ là mẫu số chung của các hệ UNIX/Linux. -Lập trình shell script. Phần lớn chương trình dùng để quản trị UNIX/Linux được viết theo ngơn ngữ kịch bản shell script nhưng chúng ta nên sửa đổi chúng chút ít cho phù hợp nhu cầu của mình. Nhiều cơng cụ được nhắc đến ở đây địi hỏi chúng ta phải biết phối hợp và sử dụng các chương trình shell. Mỗi user thường thích sử dụng loại shell quen thuộc nhất của mình. Thí dụ bash là một bản nâng cấp rất mạnh từ bản Shell Bourne mà Linux dùng làm shell mặc định. Ngồi ra hai bản khác là Z shell và T shell cũng hay được kèm theo các bản phát hành Linux. Tuy nhiên ở bước đầu chúng ta hãy dùng Shell Bourne cho thật thuần thục. Nên biết rằng các chương trình kịch bản của những đồng tác giả Linux đều được viết trong Shell Bourne. Chúng ta cũng nên tìm hiểu ngơn ngữ quản trị hệ thống Perl. Ngơn ngữ này giúp chúng ta một bộ cơng cụ rất tốt để quản trị hệ thống trong mơi trường lập trình. -Liên lạc. Muốn quản trị mạng máy tính cho thật hiệu quả, điều chủ yếu là chúng ta phải cĩ kiến thức về TCP/IP và các giao thức cĩ liên quan. Tương tự, chúng ta sẽ phải hiểu biết về PPP nếu muốn thiết lập một kết nối Internet khơng đồng bộ. Tất cả các giao thức ấy cĩ thể học ngay tại mơi trường thực hành với nhiều tuỳ chọn sẵn cĩ. Đương nhiên chúng ta vẫn cĩ thể ghi danh học tại các lớp lý thuyết hoặc tự mua sách về học, song nếu như thế chúng ta phải mất thêm thời gian thử nghiệm. -Các kiến thức cơ bản về UNIX. Trong nhà trường, các kiến thức cơ bản về UNIX thường khơng được dạy, thậm chí cịn khơng được đề cập đến và chúng ta sẽ phải nắm bắt chúng trong quá trình thực tế. Thí dụ chúng ta sẽ biết rằng các tệp thi hành nhị phân thường được lưu trữ tại các thư mục bin, chẳng hạn như /usr/bin, hoặc /bin, hay là /urs/local/bin. Tương tự, những thư mục lib, chẳng hạn như /usr/lib được dùng để chứa tệp thư viện, do đĩ chúng ta sẽ đưa các thư viện riêng của mình vào một thư mục đại loại như /usr/local/lib. Nắm được và làm theo những kiến thức cơ bản về UNIX/Linux, chúng ta sẽ tiết kiệm được thì giờ khi dị tìm và giải quyết nhiều vấn đề phức tạp hơn. Chúng ta nên theo những chương trình đào tạo thực hành, tức là học đến đâu làm đến đấy. Học xong một bài nào đĩ ở lớp, chúng ta cần áp dụng ngay điều mình vừa học vào thực tiễn. CÂU HỎI VÀ BÀI TẬP Câu 1: Trình bày những cơng việc của một quản trị viên hệ thống? Câu 2: Em hãy xác định vai trị của một quản trị viên mạng? Câu 3: Trình bày các mơ hình và quản trị trong mơi trường mạng? Câu 4: Nêu những cơng việc chung trong quản trị mạng? Câu 5: Thực hành các tập tin cấu hình mạng? Hướng dẫn thực hành: 1. Tập tin /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomailocalhost 200.201.202.1 linuxsvr.dng.vn linuxsvr 2. Tập tin /etc/sysconfig/network NETWORKING=yes FORWARD_IPV4=false HOSTNAME=linuxsvr.edu.vn DOMAIN=edu.vn GATEWAY=200.201.202.1 3. Tập tin /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 65
  8. BOOTPROTO=none ONBOOT=yes USERCTL=no PEERDNS=no TYPE=Ethernet IPADDR=200.201.202.1 NETMASK=255.255.255.0 NETWORK=200.201.202.0 BROADCAST=200.201.202.255 4. Chạy chương trình X- Windows hỗ trợ cấu hình hệ thống : redhat-config-network 5. Khởi động lại dịch vụ mạng [root@linuxsvr root]#/etc/init.d/network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Setting network parameters: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] 6. Kiểm tra bằng lệnh : [root@linuxsvr root]#hostname linuxsvr.dng.vn 7. Xem thơng tin về cấu hình thiết bị mạng [root@linuxsvr root]#ifconfig eth0 Link encap:Ethernet HWaddr 00:06:7B:02:71:21 inet addr:200.201.202.1 Bcast:200.201.202.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2326 errors:0 dropped:0 overruns:0 frame:0 TX packets:70927 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:218392 (213.2 Kb) TX bytes:6939053 (6.6 Mb) Interrupt:9 Base address:0x4c00 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:933 errors:0 dropped:0 overruns:0 frame:0 TX packets:933 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:87261 (85.2 Kb) TX bytes:87261 (85.2 Kb Cấu hình dịch vụ mạng bằng tiện ích redhat-config-network Câu 6: Thực hành cấu hình dịch vụ DNS? Hướng dẫn thực hành: 1. Các tập tin cấu hình dịch vụ DNS a. Tập tin /etc/host.conf 66
  9. order hosts,bind b. Tập tin /etc/resolv.conf:search dng.vn nameserver 200.201.202.1 c. Tập tin /etc/named.conf # named.conf - configuration for bind # Generated automatically by redhat-config-bind, alchemist et al. # Any changes not supported by redhat-config-bind should be put # in /etc/named.custom controls { inet 127.0.0.1 allow { localhost; } keys { rndckey; }; }; include "/etc/named.custom"; include "/etc/rndc.key"; zone "0.0.127.in-addr.arpa" { type master; file "0.0.127.in-addr.arpa.zone"; }; zone "localhost" { type master; file "localhost.zone"; }; zone "dng.vn" { type master; file "dng.vn.zone"; }; zone "edu.vn" { type master; file "edu.vn.zone"; }; d. Tập tin /var/named/dng.vn.zone$TTL 86400@ IN SOA dng. root.localhost ( 1 ; serial28800 ; refresh 7200 ; retry604800 ; expire 86400 ; ttl) IN NS 200.201.202.1 e. Tập tin /var/named/edu.vn.zone $TTL 86400 @ IN SOA edu. root.localhost ( 2; serial 28800; refresh 7200 ; retry 604800 ; expire 86400; ttl ) IN NS 200.201.202.1. www IN A 200.201.202.1 tankhoi01 IN A 200.201.202.1 tankhoi02 IN A 200.201.202.2 g. Tập tin /var/named/0.0.127.in-addr.arpa.zone $TTL 86400 @ IN SOA localhost. root.linuxsvr.dng.vn ( 36; serial 28800; refresh 7200 ; retry 604800 ; expire 86400; ttk) @ IN NS localhost. 1 IN PTR localhost. 1 IN PTR www. 1 IN PTR tankhoi01. 67
  10. 2 IN PTR tankhoi02. 1 IN PTR www. 1 IN PTR tankhoi01. 2 IN PTR tankhoi02. h. Tập tin /var/named/localhost.zone $TTL 86400 @ IN SOA @ root.localhost ( 1 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 IN NS localhost. @ IN A 127.0.0.1 i. Lệnh khởi động dịch vụ DNS /etc/init.d/named restart 2. Các lệnh và tiện ích hỗ trợ a. Lệnh nslookup #nslookup Note: nslookup is deprecated and may be removed from future releases. Consider using the `dig' or `host' programs instead. Run nslookup with the `-sil[ent]' option to prevent this message from appearing. > www.dng.vn Server: 200.201.202.1 Address: 200.201.202.1#53 Name: www.dng.vn Address: 200.201.202.1 > tankhoi02.edu.vn Server: 200.201.202.1 Address: 200.201.202.1#53 Name: tankhoi02.edu.vn Address: 200.201.202.2 b. Lệnh host #host tankhoi01.dng.vn tankhoi01.dng.vn has address 200.201.202.1 c. Lệnh dig # dig dng.vn ; > DiG 9.2.1 > dng.vn ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58922 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;dng.vn. IN A ;; AUTHORITY SECTION: dng.vn. 86400 IN SOA dng. root.localhost.dng.vn. 1 28800 7200 604800 86400 ;; Query time: 28 msec ;; SERVER: 200.201.202.1#53(200.201.202.1) ;; WHEN: Mon Mar 22 09:14:13 2004 ;; MSG SIZE rcvd: 78 d. Tiện ích redhat-config-bind #redhat-config-bind 68
  11. Cấu hình dịch vụ BIND bằng tiện ích redhat-config-bind. 69
  12. BÀI 6: KHỞI ĐỘNG VÀ ĐĨNG TẮT Mã bài: MĐSCMT 26.06 Giới thiệu Hai thao tác bắt buộc và thơng thường nhất đối với một quản trị viên là khởi động và đĩng tắt hệ thống. Tuy nhiên muốn khởi động Linux thì những thao tác đĩ cần được tiến hành đúng hướng dẫn. Mục tiêu - Trình bày được trình quản lý mồi LILO. - Trình bày được trình quản lý mồi GRUB. - Nêu được tiến trình khởi động. - Nêu được các bước mồi Linux bằng đĩa mềm. - Khởi động được bằng trình mồi. - Đĩng tắt được Linux. Nội dung chính 1. Trình quản lý mồi LILO Mục tiêu : - Thiết lập được cấu hình LILO - Sử dụng được LILO LILO là một trình mồi nằm trong các bản phát hành Red Hat Linux và là trình mồi mặc định của các phiên bản Red Hat trước 7.1, từ phiên bản 7.2, ta cĩ thêm trình mồi GRUB. Nếu muốn sử dụng GRUB thay vì LILO, chúng ta cĩ thể bỏ qua mục này và chuyển sang mục sau (trình quản lý mồi GRUB). Chúng ta tuỳ ý cài đặt LILO vào đĩa cứng hoặc đĩa mềm. Cách dễ nhất để cài đặt LILO là dùng chương trình cài đặt của Red Hat hoặc Caldera, vì hai chương trình này giúp chúng ta tự động thực hiện một phần lớn cơng việc theo menu (thực đơn). Lưu ý: Chúng ta nên cài đặt LILO bằng chương trình cài đặt của Red Hat hoặc Caldera. Cài đặt trình mồi là một tiến trình nhiều rủi ro, dễ gây ra hỏng hĩc dữ liệu trên ổ cứng nếu làm khơng đúng cách (xem “Cài đặt LILO”). Khi cài đặt LILO xong, chúng ta cĩ thể chọn ngay hệ điều hành mong muốn ở thời điểm mồi. Nếu khơng, LILO sẽ đếm giá trị timeout (thời gian chờ đợi), sau đĩ sẽ tự động mồi cho hệ điều hành mặc định khởi động. 1.1. Thiết lập cấu hình LILO LILO đọc thơng tin chứa ở tệp cấu hình /etc/lilo.conf để biết xem trong máy chúng ta cĩ những hệ điều hành nào và các thơng tin khởi động đang nằm ở đâu. LILO được lập cấu hình để mồi các đoạn thơng tin của tệp trên cho từng hệ điều hành. Sau đây là thí dụ về ba đoạn của một tệp /etc/lilo.conf. Đoạn 1: boot = /dev/hda map = /boot/map install = /boot/boot.b prompt timeout = 50 message = /boot/message lba32 default = linux Đoạn 2: 70
  13. image = /boot/vmlinuz-2.4.0-0.43.6 label=linux initrd = /boot/inditrd-2.4.0-0.43.6.img read-only root = /dev/hda5 Đoạn 3: other = /dev/hda1 label = dos Đoạn thứ nhất cho LILO biết: - Trình mồi nằm ở ổ đĩa cứng /dev/hda/ - Kiểm tra tệp map trong thư mục /boot/map - Nạp các thơng báo trong tiến trình mồi từ tệp /boot/message - Cĩ thể cài đặt một tệp đặc biệt (/boot/boot.b) như là một rãnh mồi mới - Ổ đĩa cứng đang hỗ trợ LBA32 (dịng này thường cĩ giá trị là linear, khơng nên đổi lại dịng này nếu chúng ta chưa biết rõ đĩa cứng của mình; chúng ta cĩ thể tìm hiểu đĩa cứng cĩ hỗ trợ LBA32 hay khơng bằng cách kiểm tra thơng tin BIOS) - Hệ điều hành mặc định là Linux - Thời gian chờ trước khi nạp hệ mặc định là 5 giây (đơn vị tham số được tính bằng 1/10 của giây) Đoạn thứ hai cho LILO biết: - lõi Linux đang ở tệp /boot/vmlinuz-2.4.0-0.43.6 - Linux là tên hệ điều hành sẽ xuất hiện tại menu khởi động của LILO - Vị trí root của hệ thống tệp Linux đang ở ổ đĩa cứng /dev/hda5 Đoạn thứ ba cho LILO biết: - Cĩ phân vùng của một hệ điều hành nữa đang ở ổ đĩa cứng /dev/hda1 - DOS là tên hệ điều hành thứ hai (cịn dùng để chạy Windows) 1.2. Sử dụng LILO Khi cài đặt LILO, chúng ta sẽ đặt giá trị timeout và hệ điều hành mặc định. Giá trị này cho phép chúng ta suy nghĩ trong một thời gian ngắn trước khi hệ mặc định tự khởi động, xem cĩ nên đổi sang một hệ điều hành khác hay khơng. Sau thời gian timeout nếu chúng ta khơng can thiệp gì cả, LILO sẽ khởi động hệ điều hành mặc định. Từ RedHat 7.x trở đi, ta cĩ một menu với giao diện đồ hoạ để tiện cho việc chọn hệ điều hành. Khi bật nút điện một máy tính cĩ LILO ở đĩa cứng hay ở đĩa mềm, màn hình LILO: sẽ xuất hiện. Đến đây chúng ta cĩ nhiều tuỳ chọn. Hoặc chúng ta chờ LILO khởi động hệ điều hành mặc định, hoặc chúng ta bấm , hay cho LILO khởi động tức khắc. Chúng ta cĩ thể nhấn khi thấy tên hệ điều hành mà chúng ta muốn LILO khởi động ngay đang được chọn. Sau đĩ việc khởi động bắt đầu được chuyển từ LILO về cho hệ điều hành quản lý. Nếu máy chúng ta khơng cài đặt GRUB, chúng ta cĩ thể xem tiếp mục 9.4 để hiểu hơn về tiến trình khởi động ở mức hệ điều hành. 2. Tiến trình khởi động Mục tiêu : - Trình bày được các bước khởi động hệ thống Linux Red Hat và phần lớn các bản phát hành sau này của Linux sử dụng tiến trình khởi động mang tên SysV init thay vì kiểu BSD init cũ. SysV init là chương trình đầu tiên mà 71
  14. kernel thực thi ngay từ lúc khởi động máy, do đĩ init được mang số định danh tiến trình (PID) số 1, trở thành tiến trình “mẹ” của tất cả các tiến trình khác chạy dưới Linux.PID của một tiến trình là mã số mà hệ điều hành dùng để nhận diện tiến trình ấy. Nhiều lệnh của Linux dùng PID ấy làm tham số. Khi khởi động, Linux đi theo những bước sau: - Kernel chạy SysV init, chương trình này nằm trong thư mục /sbin. - SysV init chạy shell script /etc/rc.d/rc.sysinit. - rc.sysinit lập các biến hệ thống khác nhau và thực hiện các thao tác ban đầu. - SysV init chạy shell script /etc/rc.d/rc.serial. - rc.serial sử dụng một số lệnh setserial để thiết lập cấu hình của các cổng serial cho hệ thống. Chúng ta cĩ thể xem trang man của lệnh setserial để biết cách sử dụng. - SysV init chạy tất cả các script được quy ước là mặc định. - SysV init chạy script /etc/rc.d/rc.local. Chương trình này khởi động nhiều tiến trình khác, đồng thời chuyển thơng báo cho thiết bị và cho tệp đăng nhập hệ thống /var/log/messages biết về trạng thái của từng tiến trình đã khởi động. Lưu ý: Tệp đăng nhập hệ thống /var/log/messages là để giúp chúng ta giải quyết các vấn đề cĩ thể gặp khi khởi động. Kernel lưu tất cả những thơng báo lỗi trong tệp này, do đĩ chúng ta khỏi mất cơng ghi chép lại khi chúng xuất hiện (nhưng nhanh chĩng bị xố mất). Sau đây là một trình tự khởi động điển hình: April 1 23:23:42 ns syslogd 1.3-3: restart. April 1 23:23:43 ns kernel: klogd 1.3-3, log source = /proc/kmsg started. April 1 23:23:45 ns kernel: Loaded 4189 sysmbols from /boot/System.map. April 1 23:23:45 ns kernel: Symbold match kernel version 2.0.31. April 1 23:23:45 ns kernel: Loaded 2 symbols from 3 modules. April 1 23:23:45 ns kernel: Console: 16 point font, 400 scans April 1 23:23:45 ns kernel: Console: colour VGA+ 0x25, 1 virtual console (max 630 April 1 23:23:45 ns kernel: pci_init: no BIOS32 detected April 1 23:23:45 ns kernel: Calibrating delay loop ok - 49.97 BogoMIPS April 1 23:23:45 ns kernel: Memory: 30816k/32768k available (736k kerne code, 384k reserved, 382k data) April 1 23:23:45 ns kernel: This processor honours the WP bit even when in supervisor mode. Good. April 1 23:23:45 ns kernel: Swansea University Computer Society NET3.035. April 1 23:23:45 ns kernel: Swansea University computer society TCP/IP for NET3.034. April 1 23:23:45 ns kernel: IP Protocols: IGMP, ICMP, UDP, TCP April 1 23:23:45 ns kernel: VFS: Diskquotas version dquot_5.6.0 initialized April 1 23:23:45 ns kernel: April 1 23:23:45 ns kernel: Checking 386/387 coupling ok, fpu using exception 16 error reporting. April 1 23:23:45 ns kernel: Checking ‘hlt’ instruction ok. April 1 23:23:45 ns kernel: Linux version 2.0.31 (root@porky.redhat.com) (gcc version 2.7.2.3) #1 Sun Now o 21:45:23 EST 1997 April 1 23:23:45 ns kernel: Starting kswapd v 1.4.2.2 April 1 23:23:45 ns kernel: Serial driver version 4.13 with no serial options enabled 72
  15. April 1 23:23:45 ns kernel: tty00 at 0x03f8 (irq = 4) is a 16550A April 1 23:23:45 ns kernel: tty01 at 0x02f (irq = 3) is a 16550A April 1 23:23:45 ns kernel: Real Time Clock Driver v1.07 April 1 23:23:45 ns kernel: Ramdisk driver initialized : 16 ramdisks of 4096K size April 1 23:23:45 ns kernel: hda: Micropolis 2217A, 1551MB w/508kB Cache, CHS=3152/16/63 April 1 23:23:45 ns kernel: hdb: Maxtor 72700 AP, 2583MB w/128kB Cache, CHS=20746/15/17 April 1 23:23:45 ns kernel: ide0 at 0x1f0-0x1f7, 0x3f6 on irq 14 April 1 23:23:45 ns kernel: Floppy drive(s): fd0 is 1.44M April 1 23:23:45 ns kernel: FDC 0 is an 8272A April 1 23:23:45 ns kernel: md driver 0.35 MAX_MD_DEV=4, MAX_REAL=8 April 1 23:23:45 ns kernel: scsi : 0 hosts. April 1 23:23:45 ns kernel: scsi :mdetected total. April 1 23:23:45 ns kernel: Phân vùng check: April 1 23:23:45 ns kernel: hda: hda1 April 1 23:23:45 ns kernel: hdb: hdb1 hdb2 April 1 23:23:45 ns kernel: VFS: Mounted root (ext2 filesystem) readonly. April 1 23:23:45 ns kernel: Adding Swap: 3300k swap-space (priority -1) April 1 23:23:45 ns kernel: sysct1: ip forwarding off April 1 23:23:45 ns kernel: Swansea Univerity Computer Society IPX 0.34 for NET 3.035 April 1 23:23:45 ns kernel: IPX Portions Copyright 1995 Caldera, Inc. April 1 23:23:45 ns kernel: Appletalk 0.17 for Linux NET 3.035 April 1 23:23:45 ns kernel: eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 60 97 13 30 e1, IRQ 10. April 1 23:23:45 ns kernel: 3c509.c:1.12 6/4/97 becker@cesdis.gsfc.nasa.gov April 1 23:23:45 ns kernel: eth0: Setting Rx mode to 1 addesses. April 1 23:23:45 ns named[2431]: starting. named 4.9.6-REL Thu Nov 6 23:29:57 EST 1997 ^Iroot@porky.redhat.com:/usr/src/bs/BUILD/ bind-4.9.6/named SysV init kích hoạt mọi tiến trình do hệ điều hành yêu cầu, chẳng hạn như cho phép việc thao tác trên mạng, sử dụng con chuột, cùng một số thao tác cơ bản khác như vào ra terminal. SysV init biết phải kích hoạt những tiến trình nào bằng cách đọc các tệp cấu hình trong thư mục /etc/rc.d. Sau này những tệp ấy sẽ được xử lý riêng lẻ tuỳ theo cấp chạy chương trình (run level) đã xác định. Cấp chạy chương trình quy định việc cung cấp các loại dịch vụ, từ chế độ chạy single-user (một người sử dụng, cấp 1) đến multiuser, multitasking và chế độ chạy tất cả các tiến trình (cấp 3). Bảng sau giới thiệu các cấp chạy của Linux. Giá trị mặc định của cấp chạy được lưu trong tệp /etc/inittab. Bảng 7.1: Các cấp chạy của Linux Cấp Mơ tả 0 Ngừng chạy 1 Single-user, khơng chạy các dịch vụ mạng NFS 2 Multiuser, khơng chạy các dịch vụ mạng NFS 3 Multiuser, hỗ trợ hồn tồn các dịch vụ mạng 4 Khơng sử dụng (đang để dành) 5 Multiuser với các dịch vụ mạng và đăng nhập với giao diện đồ hoạ 73
  16. 6 Khởi động lại Chương trình SysV init sử dụng cấu trúc thư mục như sau: init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d Những con số n trong tên thư mục rcn.d tương ứng với cấp chạy n trong bảng 9.1. Mỗi thư mục chứa nhiều shell script cĩ khả năng kích hoạt hoặc dừng hẳn các dịch vụ cần thiết cho mỗi cấp chạy. Các script này cũng kích hoạt hệ thống tệp và khố tệp vào trạng thái theo ý user. Thật ra các tệp trong các thư mục rcn.d chỉ là các liên kết đến các tệp script trong thư mục init.d. Do đĩ khi chúng ta muốn sửa chữa gì trong các tệp script khởi động, chúng ta khơng cần phải vào từng thư mục của chế độ khởi động mà chỉ cần vào thư mục init.d để sửa. (xem thêm ở dưới). Mỗi thư mục chứa nhiều shell script, tên mỗi tệp script bắt đầu bằng ký tự S hoặc K (Start hoặc Kill: Bắt đầu hoặc Huỷ) theo sau là một con số cĩ hai chữ số. Con số này chỉ để xếp thứ tự trình tự chứ khơng cĩ ý nghĩa nào khác. Mặc dù cĩ thể chấp nhận nhiều tham số, song mỗi script thường chấp nhận một đối số dịng lệnh, đối số này dùng để kích hoạt hoặc dừng hẳn, init cung cấp một trong hai thứ, hoặc bắt đầu hoặc dừng hẳn tuỳ thuộc vào việc liệu rc cĩ được gọi vào để thay đổi cấp chạy hay khơng. Chúng ta cĩ thể thực hành các script theo cách thủ cơng nếu cần phải cấu hình lại một dịch vụ nào đĩ. Chẳng hạn chúng ta cĩ thể dùng sendmail với lệnh sau (chúng ta phải đăng nhập với tư cách root mới được phép ra lệnh thực thi các script init): /etc/rc.d/init.d/sendmail stop /etc/rc.d/init.d/sendmail stop /etc/rc.d/init.d/sendmail start Chúng ta lưu ý hai điều sau đây. Thứ nhất, câu lệnh được lặp lại hai lần với tham số stop là để đảm bảo hệ thống cĩ đủ thời gian ngừng tiến trình trước khi lệnh start được gọi. Thứ hai, chúng ta nhận thấy script được thực thi từ thư mục init.d, mà khơng từ thư mục của cấp chạy. Ngồi ra script này cũng khơng cĩ chữ nào hoặc số nào. Khi liệt kê các tệp trong bất kỳ thư mục cấp chạy nào, chúng ta sẽ thấy rằng chúng liên kết với các tệp trong thư mục init.d. Sau đây là một thư mục rc.3.d điển hình: Irwxrwxrwx 1 root root 16 Jan 25 21:56 K08autofs-> /init.d/autofs Irwxrwxrwx 1 root root 18 Dec 14 12:17 K10pnserver-> /init.d/pnserver Irwxrwxrwx 1 root root 17 Dec 14 12:17 K20rusersd-> /init.d/rusersd Irwxrwxrwx 1 root root 15 Dec 14 12:17 K20rwhod-> /init.d/rwhod Irwxrwxrwx 1 root root 15 Dec 14 12:17 S15nfsfs-> /init.d/nfsfs Irwxrwxrwx 1 root root 16 Dec 14 12:17 S20random-> /init.d/random Irwxrwxrwx 1 root root 16 Dec 14 12:17 S30syslog-> /init.d/syslog Irwxrwxrwx 1 root root 13 Dec 14 12:17 S40atd-> /init.d/atd Irwxrwxrwx 1 root root 15 Dec 14 12:17 S40crond-> /init.d/crond Irwxrwxrwx 1 root root 14 Dec 14 12:17 S50inet-> /init.d/inet 74
  17. Irwxrwxrwx 1 root root 15 Dec 14 12:17 K10pnserver-> /init.d/pnserver Irwxrwxrwx 1 root root 15 Dec 14 12:17 S55named-> /init.d/named Irwxrwxrwx 1 root root 13 Dec 14 12:17 S60lpd-> /init.d/lpd Irwxrwxrwx 1 root root 13 Jar 31 20:17 S72amd-> /init.d/amd Irwxrwxrwx 1 root root 18 Dec 14 12:17 S75keytable-> /init.d/keytable Irwxrwxrwx 1 root root 18 Dec 14 12:17 S80sendmail-> /init.d/sendmail Bảng sau sẽ giới thiệu vài script kích hoạt quan trọng trong thư mục ấy. Bảng 7.2: Các script của rc.3 init Tên script Daemon Mơ tả S15nfsfs nfs Xử lý dịch vụ tệp mạng NFS S30syslog syslog Ghi lại các thơng báo hệ thống vào /var/log/messages S40atd atd Cho phép các user thực hiện một cơng việc nhất định vào thời gian nhất định qua lệnh atd S40crond cron Lập thời biểu batch cho Linux qua lệnh crontab S50inet inetd Super server PID 1 S55named name server Cung cấp dịch vụ tên miền DNS S601pd lpd Nạp daemon máy in để chuẩn bị in SysV init kiểm tra tất cả các tệp trong thư mục cấp chạy được chỉ định và chuyển một trong hai tham số start hay stop dựa vào ký tự đầu tiên của tên tệp. Thư mục rc.d cịn chứa ba hay bốn tệp gọi là rc, rc.local, rc.sysinit và (hoặc khơng cĩ) rc.serial. Shell script mang tên rc cĩ nhiệm vụ khởi động lại hệ thống ở một cấp chạy khác, script này sẽ căn cứ vào tham số là con số tương ứng với cấp chạy mới. Sau khi tiến trình khởi động kích hoạt xong tất cả các script khác thì mới đến lượt tệp rc.local. Chúng ta cĩ thể đặt bất kỳ chỉ lệnh kích hoạt tại chỗ nào vào tệp này. Tệp rc.local sau đây giới thiệu một thí dụ về việc kích hoạt một tiến trình tại chỗ, gọi là secure shell, tiến trình này cho phép truy cập từ xa cĩ bảo vệ hệ thống. #!/bin/sh # This script will be executed *after* # all the other init scripts # You can put your own initialization stuff # in here if you don’t # want to do the full sys v style init stuff. if [-f/etc/redhat-release]; then R=$(cat / etc/redhat-release) else R=release 3.0.3 if arch=$(uname-m) a=a case_$arch in _a*) a=an;; _i*) a=an;; esac # This will overwrite /etc/inssue at every boot. # So, make any changes you want to make to /etc/issue # here or you will lose them when you reboot. echo >/etc/issue 75
  18. echo RedHat Linux $R>> /etc/issue echo Kernel $(uname-r) on $a$ (uname-m)>> /etc/issue cp-f /etc/issue/etc/issue.net echo>> /etc/issue ##Start sshd /usr/local/sbin/sshd rc.sysinit là tệp đầu tiên mà SysV init chạy ngay khi khởi hành. Script này thực thi một số chức năng, chẳng hạn như thiết lập các biến cho cả hệ thống (thí dụ như hostname), kiểm tra hệ thống tệp và bắt đầu sửa chữa, bật mở quota của các user và nạp hệ thống tệp /proc. Script trên cũng kích hoạt một tiến trình tại chỗ mang tên sshd, vốn là một shell daemon an tồn, chuyên hỗ trợ các lệnh từ xa và telnet. Cấp chạy mặc định được quyết định tại /etc/initab bằng lệnh: id:3:initdefault: Nhận được lệnh này, khi khởi động hệ thống sẽ chạy ở cấp 3 (chế độ multiuser và multitasking hỗ trợ hồn tồn các dịch vụ mạng). Sau đây là một tệp /etc/inittab điển hình: # initrtab This file describes how the INIT process # hold set up the system in a certain run-level # # Author: Mique1 van Smoorenburg. # Modified for RHS Linux by Marc Ewing and Donnie Barnes # # Default run level. The run levels used by RHS are: # 0-halt (Do NOT set initdefault to this) # 1-Single user mode # 2-Multiuser.without NFS (The same as 3. # if you do not have networking) # 3-Full multiuser mode # 4-unused # 5-X11 # 6-reboot (Do Not set initdefault to this) id:3:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit 10:0:wait:/etc/rc.d/rc 0 11:1:wait:/etc/rc.d/rc 1 12:2:wait:/etc/rc.d/rc 2 13:3:wait:/etc/rc.d/rc 3 14:4:wait:/etc/rc.d/rc 4 15:5:wait:/etc/rc.d/rc 5 16:6:wait:/etc/rc.d/rc 6 # Things to run in every run level. ud::once:/sbin/update # Trap CTRL-ALT-DELETE - Allow shutdown system with # key combination CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now # When our UPS tells us power has failed 76
  19. # assume we have a few minutes # of power left. Schedule a shutdown # for 2 minutes from now # This does, of course. # assume you have power installed and your # UPS connected and working correctly pf::powerfail:/sbin/shutdown -f -h +2 “Power Failure: System Shutting Down” # If power was restored # before the shutdown kicked in cancel it pr:12345:powerokwait:/sbin/shutdown -c “Power Restored: Shutdown Cancelled” # Run gettys in standard run levels 1:12345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 # Run xdm in run level 5 x:5:respawn:/usr/bin/x11/xdm-nodaemon Chúng ta đừng vội chạy mặc định ở cấp 0 hoặc cấp 6 nếu khơng hệ thống sẽ khơng làm gì cả vì nĩ sẽ dừng ngay khi khởi động lại (restart) hay mồi lại (reboot) liên tục, đơi khi cịn làm hỏng tệp. Nếu vì lý do nào đĩ mà tệp inittab bị hỏng, hay khơng thể đăng nhập được (quên mật khẩu hay tệp passwd bị hỏng), chúng ta cĩ thể khởi động lại ở chế độ single-user để sửa chữa. Để làm như thế, tại dấu nhắc khởi động LILO, chúng ta gõ tham số “linux single” như sau: LILO boot: linux single LILO là chương trình mồi Linux, được bàn kỹ trong giáo trình này. Cịn nếu chúng ta đã cài GRUB, chúng ta cần thực hiện lần lượt các bước sau: + Tại màn hình khởi động GRUB, chọn Red Hat Linux và bấm phím để sửa. + Chọn dịng kernel và bấm + Tại dấu nhắc, gõ “single” và + Khi đã trở lại màn hình GRUB với thơng tin về kernel, bấm để khởi động cấp chạy 1. 3. Đĩng tắt Linux Mục tiêu : - Nêu được các lưu ý khi đĩng tắt linux - Đĩng tắt được hệ thống Linux bằng các lệnh cơ bản Với Linux, chúng ta nên cẩn thận khi đĩng tắt, khơng được tắt điện ngay. Linux lưu các thơng tin I/O của hệ thống tệp trong vùng đệm bộ nhớ, do đĩ việc chúng ta tắt điện đột ngột cĩ thể sẽ làm hệ thống tệp hỏng hĩc. Cách tốt nhất để đĩng tắt Linux là sử dụng lệnh shutdown, với cú pháp như sau: /sbin/shutdown [các cờ] thời gian [thơng báo] “thơng báo” là thơng báo cho tồn thể các user hiện đang làm việc, và “thời gian” là thời gian mà việc đĩng tắt xảy ra. Đối số thời gian cĩ những dạng như sau: - Dạng thời gian tuyệt đối theo kiểu gg:pp, với gg là số giờ (một hoặc hai chữ số) và pp là số phút của thời gian ấy. Giá trị pp phải cĩ hai chữ số. 77
  20. - Dạng +m, với m là số phút phải chờ trước khi đĩng tắt. Chúng ta cĩ thể thay +0 bằng từ now khi muốn tắt ngay. Thí dụ: [root@web root]#/sbin/shutdown -h now Cờ Ý nghĩa -t sec Chờ một thời gian đã được xác định bằng số giây giữa thời điểm phát lời cảnh báo và thời điểm đĩng tắt tất cả mọi tiến trình. Thời gian trì hỗn này đủ để các chương trình khác kết thúc tiến trình đĩng tắt riêng biệt - k Khơng thực sự đĩng tắt hệ thống mà chỉ cảnh báo các user khác - r Khởi động lại (reboot) sau khi đĩng tắt - h Dừng hẳn hệ thống (halt) sau khi đĩng tắt - n Đừng đồng bộ hố các đĩa trước khi khởi động lại hoặc dừng hẳn. Chúng ta cẩn thận khi dùng flag này, vì cĩ nguy cơ làm hỏng dữ liệu - f Khởi động “nhanh”. Flag này sẽ tạo ra tệp /etc/fastboot. Boot script cĩ tên rc sẽ tìm tệp này và nếu cĩ, sẽ khơng thực hiện fsck - c Huỷ một tiến trình đĩng tắt đang thi hành. Flag này vơ hiệu hố đối số thời gian Bảng 7.3: Các cờ (flag) của lệnh shutdown Lệnh shutdown thơng báo các user biết hệ thống sắp đĩng tắt, đĩng cổng đăng nhập hệ thống, sau đĩ gửi một tín hiệu SIGTERM đến tất cả các tiến trình để thực hiện việc tắt đúng cách. Tiếp theo shutdown dựa vào sự chọn lựa của chúng ta ở dịng lệnh shutdown để khởi động lại hoặc dừng hẳn. Lưu ý: Chúng ta muốn dừng hẳn hoặc khởi động lại bằng cách gõ trực tiếp lệnh halt hoặc reboot cũng được. Tuy nhiên nếu làm như vậy thì hệ thống sẽ đĩng tắt tức khắc mà các user khác khơng thể biết trước. Chúng ta chỉ nên dùng hai lệnh vừa kể khi chỉ cĩ một mình sử dụng hệ thống. Muốn biết trên mạng cịn user nào khơng, chúng ta bấm hoặc dùng lệnh who. B. CÂU HỎI VÀ BÀI TẬP Câu 1: Trình bày trình quản lý mồi LILO? Câu 2: Trình bày trình quản lý mồi GRUB? Câu 3: Nêu các tiến trình khởi động? 78
  21. BÀI 7: QUẢN LÝ TÀI KHOẢN Mã bài: MĐSCMT 26.07 Giới thiệu Muốn làm quản trị viên Linux, chúng ta phải tìm hiểu các cơng cụ và kỹ thuật khác nhau để quản lý tài khoản của các user. Tác vụ này bao gồm việc đăng ký các user mới để họ cĩ thể đăng nhập hệ thống; thiết lập các quyền ưu tiên cho họ; tạo ra các thư mục “nhà” (home directory) và gán chúng cho họ; sắp xếp user nào vào nhĩm nào và ngược lại sẽ xố tên của một vài user trong hệ thống khi cần thiết. Mục tiêu - Làm việc được với các user. - Làm việc được với nhĩm user. - Quản lý được home directory. - Quản trị được các user qua giao diện web. - Rèn luyện khả năng tổ chức, quản trị. Nội dung chính 1. Làm việc với các user và nhĩm user Mục tiêu : - Thêm được một user vào hệ thống - Sử dụng được lệnh adduser - Thiết lập được mật khẩu cho user - Thêm và xĩa được một nhĩm của hệ thống 1.1. Làm việc với các user Chúng ta cần cho mỗi user một tên đăng nhập đặc trưng và riêng biệt. Tên này giúp chúng ta nhận dạng từng user và tránh được tình trạng người này xố dữ liệu của người kia. Mỗi user phải cĩ mật khẩu riêng. User chỉ khơng cần mật khẩu khi cĩ một mình trong hệ thống và hồn tồn khơng kết nối với ai khác qua modem hoặc qua mạng. Khi cĩ lý do chính đáng để bỏ ai đĩ ra ngồi hệ thống, quản trị viên phải xố tên đăng nhập của người ấy cùng với các tệp mà các user khác khơng cịn nhu cầu sử dụng nữa. 1.1.1. Thêm vào một user Khi thêm một user vào hệ thống, tệp mật khẩu cĩ thêm một mục với dạng như sau: logname:encrpt_passwd:userID:groupID:userInfor:login_directory:login_shell Trong cú pháp trên, các trường được phân cách bằng dấu hai chấm. Bảng 8.1: Các trường trong một mục ghi của tệp /etc/paswd Trường Mơ tả Logname Tên dùng khi đăng nhập encrpt_passwd Mật khẩu để nhận dạng user; đây là biện pháp đầu tiên để ngăn chặn việc vi phạm an ninh. Trường này thường được mã hố userID Số định danh mà hệ thống dùng để phân biệt từng user groupID Số định danh hoặc tên đặc trưng dùng để nhận dạng nhĩm sơ cấp gán cho user. Nếu thuộc về nhiều nhĩm, một user cĩ thể chuyển qua lại các nhĩm khác khi được quản trị viên cho phép userInfo Thơng tin về user, chẳng hạn như tên họ hoặc chức vụ login_directory Home directory của user, nơi user cĩ mặt khi đăng nhập 79
  22. login_shell Shell được user dùng sau khi đăng nhập (thí dụ /bin/bash nếu user dùng shell bash) Thí dụ: [root@web etc]# cat /etc/passwd nva:45b9d200f5f4683e569dcaa3ed6f6fb:500:231:Nva:/home/nva:/bin/bash pla:aeswb00fè90e9cd47a01d86514a976:511:787:Pla:/home/pla:/bin/bash bhh:4d844e2e58e14a0b377b276065c86036:515:787:Bhh:/home/bhh:/bin/bash root:8aaa77148543346ea015cf18c57b0ce4d:0:0:root:/root:/bin/bash Lệnh adduser hoặc useradd sẽ thêm user vào hệ thống. Chúng ta gõ lệnh này với tên của user mà chúng ta muốn thêm vào. Mục sau sẽ nĩi chi tiết hơn về chủ đề này. Trong thực tế kể từ phiên bản 6.x, RedHat Linux đã sử dụng cơng cụ shadow để bảo mật hơn nữa. Khi đĩ tệp passwd cĩ dạng rút gọn, thí dụ như sau: gdm:x:42:42::/home/gdm:/bin/bash squid:x:23:23::/var/spool/squid:dev/null nva:x:500:231:Ngo Van An:/home/ nva:/bin/bash pla:x:511:787:Phan Lan Anh (PI):/home/pla:/bin/bash bhh:x:515:787: Bui Huy Hung (PI):/home/bhh:/bin/bash Trong đĩ x đĩng vai trị đại diện cho mật khẩu thật đang được chứa trong tệp /etc/shadow, thí dụ: nva:$1$32rbaeg0d$4UtJgG/7rMqQJypA7pf0p0:10857:0:9999:7:-1:-1:134537356 pla: $1$3j86/RIF$qVUOxa.ZuPXnGLWuAC6i/:11360:0:9999:7:-1:-1:134549706 bhh:$1$EdjW7kPY$Hyn/xTNttk8fsWsZyvQo.0:10857:0:9999:7:-1:-1:134538444 1.1.2. Sử dụng lệnh adduser Trong các phiên bản cũ (RedHat Linux 5.x), khi thêm vào một user, chúng ta chỉ việc gõ lệnh adduser kèm với tên của user ấy, thí dụ: [root@digital alberto] # adduser lananh Looking for first available UID 502 Looking for first availbable GID 502 Adding login:lananh done. Creating home directory: /home/lananh done. Creating mailbox: /var/spool/mail/lananh done. Don’t forget to set the password. Lệnh adduser chép các tệp cĩ tên bắt đầu bằng dấu chấm (.) từ thư mục /etc/skel sang home directory của user. Thư mục /etc/skel phải cĩ các tệp khuơn mẫu (template) để cho tất cả các user dùng chung. Những template ấy phải cĩ các tệp cấu hình “riêng” như .profile, .cshrc và .login để cấu hình shell; .mailrc để thiết lập thư điện tử; .emacs để cho các user cĩ thể sử dụng emacs làm trình soạn thảo v.v. Lệnh adduser là một shell script nằm ở thư mục /usr/sbin, do đĩ chúng ta cĩ thể tuỳ nghi chỉnh sửa script này chạy theo ý mình khi cần thực hiện thêm vài động tác nữa lúc thêm trương khoản mới vào. Loại chỉnh sửa thường gặp nhất là bắt adduser cung cấp nguyên tên user thay vì ép một tên user mặc định vào tệp mật khẩu. Nếu khơng thích thay đổi trong script để script hỏi tên user, chúng ta phải thay đổi thủ cơng bằng lệnh chfn như sau: # chfn bhh changing finger information for bhh. Name [RH Linux User]: tvl Office []: 80
  23. Office Phone []: Home Phone []: Finger information changed. Chúng ta khơng thể dùng lệnh adduser để thiết lập mật khẩu cho trương khoản mà phải dùng lệnh passwd. Trong các phiên bản từ 6.x trở đi, RedHat Linux đã chuyển script này thành một lệnh với các tham số như sau: adduser [-u uid [-o]] [-g group] [-G group ] [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire] [-p passwd] [-n] [-r] name adduser -D [-g group] [-b base] [-s shell] [-f inactive] [-e expire] Trong đĩ: Trường Ký hiệu (ghi chú) logname Name (tên đăng nhập) userID uid (nên để tự động) groupID group (cĩ thể dùng tên của nhĩm hay dùng gid) userInfo comment (cần đĩng ngoặc đơn hoặc kép cho thơng tin sẽ điền) login_directory Home (thư mục “nhà” mặc định dùng khi đăng nhập) login_shell Shell (shell mặc định dùng khi đăng nhập) Thí dụ: [root@mail /boot]# adduser -u 401 -g mail -c “thu ky” office [root@mail /boot]# adduser -g mail -c ‘trien khai’ develop 1.1.3. Thiết lập mật khẩu cho user Chúng ta dùng lệnh passwd để thiết lập mật khẩu ban đầu cho user. Sau đĩ từng user sẽ tự thay mật khẩu theo ý mình khi đã đăng nhập vào hệ thống. Sau đây là các bước căn bản để sử dụng lệnh passwd. + Gõ lệnh và tên đăng nhập (thí dụ như passwd pla) rồi bấm + Tại dấu nhắc New password:, chúng ta gõ mật khẩu vào. + Khi máy nhắc phải gõ mật khẩu lần nữa, chúng ta chỉ việc gõ lại mật khẩu mới như sau: New password (again): mật_khẩu_mới Rồi mật khẩu đĩ được mã hố và cất vào tệp /etc/passwd. Mật khẩu phải đáp ứng hai điều kiện: dài ít nhất sáu ký tự (tám ký tự thì an tồn hơn), cĩ cả chữ thường và chữ hoa cùng với các dấu phân cách và chữ số. Khi đăng ký thêm nhiều user, chúng ta thường thích cho họ mật khẩu ngắn gọn và dễ nhớ. Việc quy định số ký tự tối thiểu là ở chúng ta, theo mặc định RedHat Linux 7.x yêu cầu chúng ta phải nhập ít nhất 6 ký tự. Chúng ta cĩ thể quy định lại thơng qua trình linuxconf nhưng khơng nên giảm bớt số ký tự này và khơng nên chọn mật khẩu dễ nhớ cho người dùng, bởi vì một mật khẩu tốt là tuyến phịng thủ đầu tiên chống lại tin tặc. Chúng ta cần giải thích điều này cho các user biết và nên đều đặn thay đổi mật khẩu. - Cĩ những nơi mật khẩu được yêu cầu thay đổi hàng tuần. Tuy nhiên điều đĩ dễ đưa đến tình trạng quên và nhầm lẫn mật khẩu. Chúng ta cần nhắc nhở việc ghi mật khẩu ra giấy cũng sơ hở như việc chọn mật khẩu dễ nhớ cho người dùng. 81
  24. - Để tránh tình trạng quên mật khẩu, cĩ thể cho ghi lại mật khẩu đĩ, bỏ vào phong bì dán niêm phong và cất trong tủ sắt. Mỗi khi một user được gán mật khẩu, mục ghi của tệp sẽ cĩ dạng thí dụ như sau: pla: Anh.89&^0gW:123:21:Phan Lan Anh:/users/pla:/bin/bash Trường thứ hai là mật khẩu ở dạng mã hố, khơng phải là những ký tự lung tung. Ghi chú: Thỉnh thoảng các user lại quên mật khẩu của mình. Chúng ta khơng thể nhắc cho từng user nhớ mật khẩu riêng. Tuy nhiên chúng ta cĩ thể xố mật khẩu bị quên bằng cách dùng lệnh passwd thiết lập một mật khẩu mới và thơng báo nĩ cho user biết để tự đặt lại mật khẩu. Với tư cách quản trị viên, chúng ta nên thiết lập quy trình xử lý trường hợp vừa kể và cho các user biết quy trình ấy. 1.1.4. Gỡ bỏ một user Chúng ta cĩ thể gỡ bỏ một user theo nhiều cấp độ khác nhau. Việc gỡ bỏ một user ra khỏi hệ thống khơng phải là động tác “một đi khơng trở lại”. Sau đây là một vài tuỳ chọn: Chỉ gỡ khả năng đăng nhập. Điều này cĩ ích khi một user nào đĩ phải đi xa một thời gian và sau đĩ sẽ trở lại vào hệ thống. Thư mục, tệp và thơng tin về nhĩm của user đĩ được giữ nguyên. Quản trị viên chỉ phải chỉnh sửa tệp mật khẩu và gõ dấu sao (*) vào trường thứ hai của mục ghi user như sau: pla:*:123:21:Phan Lan Anh:/users/pla:/bin/bash Cách này khơng cịn áp dụng trên các phiên bản mới với cơng cụ shadow. Gỡ bỏ user khỏi tệp mật khẩu nhưng vẫn để dữ liệu của user trên hệ thống. Hình thức này cĩ ích khi các user khác muốn sử dụng những tệp dữ liệu ấy, hoặc cĩ ai đĩ nhận nhiệm vụ thay cho user cũ. Quản trị viên xố mục ghi của user cũ khỏi tệp mật khẩu bằng trình soạn thảo hoặc bằng lệnh: userdel tên_đăng_nhập. Sau đĩ thay đổi quyền sở hữu và vị trí các tệp của user đĩ bằng lệnh chown và mv. Gỡ bỏ user ra khỏi tệp mật khẩu và gỡ bỏ tất cả tệp thuộc sở hữu của user ấy. Đây là hình thức cao nhất và đầy đủ nhất để xố bỏ một user. Quản trị viên xố mục ghi của user ở tệp mật khẩu và huỷ luơn tất cả các tệp của user ấy trong tồn hệ thống theo lệnh find như sau: find user_home_directory exec rm{}\; Ta cũng cĩ thể dùng lệnh userdel với tham số -r như sau: userdel -r tên_đăng_nhập Ghi chú: Nếu hệ thống của chúng ta sử dụng các tệp cấu hình khác, chẳng hạn như tệp bí danh e-mail, thì vì an tồn chúng ta cũng phải xố tên user ở những tệp ấy. 1.2. Làm việc với nhĩm Mỗi user là thành viên của một nhĩm. Tuỳ theo tính chất của mỗi nhĩm, quản trị viên sẽ chỉ định nhĩm ấy cĩ khả năng gì hoặc ưu tiên nào. Thí dụ cĩ nhĩm chuyên về việc phân tích doanh số của cơng ty, quản trị viên sẽ cho quyền nhĩm này truy cập phạm vi tệp rộng lớn hơn so với một nhĩm khác chỉ chuyên về tìm tịi sản phẩm mới. Tệp mật khẩu chứa thơng tin của một user. Trong khi đĩ thơng tin của cả nhĩm được chứa tại tệp /etc/group. Sau đây là thí dụ một mục ghi: office::21:tvl, pla, nva Ở thí dụ này, tên nhĩm là office, số định danh nhĩm là 21 và các thành viên của nhĩm là tvl, pla và nva. Các thư mục và tệp cĩ thuộc tính quyền hạn gắn liền với chủ sở 82
  25. hữu, nhĩm và các yếu tố khác. Một user cĩ thể là thành viên của nhiều nhĩm khác nhau và quản trị viên cĩ thể thay đổi việc tham gia các nhĩm của user. 1.2.1. Thêm vào một nhĩm Chúng ta cĩ thể tạo ra một nhĩm mới bằng cách chỉnh sửa trực tiếp trong tệp /etc/group và đưa thơng tin của nhĩm ấy vào làm một mục ghi. Trong tệp /ect/group, mỗi nhĩm đều cĩ số định danh riêng. Linux chỉ quan tâm đến con số này chứ khơng quan tâm đến tên nhĩm. Do đĩ nếu chúng ta cấp cho hai nhĩm cùng một con số định danh, Linux sẽ coi đây chỉ là một nhĩm. 1.2.2. Xố bỏ một nhĩm Muốn xố bỏ một nhĩm, chúng ta xố đi mục ghi tương ứng trong tệp /etc/group. Tiếp theo chúng ta phải chuyển tất cả các tệp với GID tương ứng sang cho một nhĩm khác. Chúng ta dùng lệnh find như sau: find /-gid nhĩm_A find user_home_directory -exec chgrp nhĩm_mới {}\; Chúng ta cũng cĩ thể dùng các lệnh về nhĩm như: groupdel, groupmod và groupadd để xử lý các thao tác trên. 2. Quản lý home directory Mục tiêu : - Trình bày được cách quản lý home directory Nếu chúng ta dự kiến hệ thống của mình sẽ cĩ nhiều user, hãy suy nghĩ trước về cách sắp xếp các home directory cho hợp lý. Cần cố gắng đặt tất cả các home directory của cùng một hệ thống vào một thư mục cấp cao nhất. Như thế, nếu sau này chúng ta cĩ sắp xếp chúng lại như thế nào thì chúng cũng nằm chung với nhau. Thí dụ chúng ta cĩ thể chỉ định rằng thư mục /home là thư mục cấp cao nhất dành cho các thư mục của user. Dưới thư mục /home này, chúng ta tập hợp các user theo từng khối. Các trương khoản cho user của khối office (văn phịng) sẽ nằm ở /home/office, các trương khoản cho user của khối develop (triển khai) sẽ nằm ở /home/develop, v.v. Từ đĩ các home directory của những user trên hệ thống máy chúng ta sẽ nằm trong những thư mục ấy, hoặc chúng ta sẽ tạo ra thêm thư mục mới khi cĩ yêu cầu. Vì các thư mục cho phép user sẽ chiếm nhiều chỗ trên ổ cứng, chúng ta phải suy nghĩ cách xếp đặt các nhĩm logic trên nhiều hệ thống tệp vật lý khác nhau. Khi cần thêm khoảng trống trên ổ cứng, chúng ta chỉ việc tạo ra một hạng mục mới cho các home directory mới và lắp hạng mục ấy vào một hệ thống tệp như là một điểm ghép (mount point) trong thư mục /home. 3. Quản trị qua giao diện web Mục tiêu : - Quản trị được các user và nhĩm qua giao diện web Từ bản phát hành Red Hat 5.1 bắt đầu cĩ một cơng cụ quản trị hệ thống mang tên Linuxconf. Cơng cụ này giúp chúng ta xử lý nhiều tác vụ quản trị, chẳng hạn như làm việc với user và với nhĩm. Ngồi hai giao diện thường gặp là dịng lệnh và X Windows, Linuxconf cịn hỗ trợ tác vụ quản trị qua giao diện web. Chúng ta cũng cĩ thể dùng một trình duyệt sẵn cĩ trong giao diện đồ hoạ GNOME, gọi là Nautilus. Khi khởi động GNOME, cơng cụ Nautilus hoạt động ngay và mở cửa sổ “START HERE” trong đĩ chúng ta cĩ thể thấy các biểu tượng “System settings”, “Server Configuration” (tương tự trong “Control Panel” của Windows) để quản lý các cấu hình của hệ thống. CÂU HỎI VÀ BÀI TẬP Câu 1: Nêu cách thêm user và thiết lập password cho user? 83
  26. Câu 2: Nêu cách thêm một nhĩm và xĩa bỏ một nhĩm? Câu 3: Trình bày cách quản lý home directory và quản trị qua giao diện web? Câu 4: Thực hành quản lý tài khoản của hệ thống? Hướng dẫn thực hành: 1. Tài khoản người dùng: Mỗi người sử dụng trên hệ thống được mơ tả qua các thơng tin sau: - username : tên người sử dụng - password : mật khẩu (nếu cĩ) - uid : số nhận dạng (user identify number ) - gid : số của nhĩm (group identify number ) - comment : chú thích - Thư mục chủ của tài khoản (home directory ) - Shell đăng nhập (chương trình chạy lúc bắt đầu phiên làm việc) Các thơng tin trên được chứa trong tập tin /etc/passwd 2. Tài khoản nhĩm người dùng: Một nhĩm người sử dụng được mơ tả bằng các thơng tin sau: - groupname : tên của nhĩm - gid : số của nhĩm (gid: group identify number) - danh sách các tài khoản thuộc nhĩm Các thơng tin trên được chứa trong tập tin /etc/group 3. Thực hành tạo tài khoản hệ thống Tạonhĩmcntt2004 #groupaddcntt2004 Xemtậptin /etc/group #cat/etc/group Tạo một account user01 mớithuộc nhĩmcntt2004 #useradd -g cntt2004 -c “Tai khoan user01” user01 #passwduser01 Xemtậptin /etc/passwd, /etc/shadow #cat /etc/passwd #cat /etc/shadow Thửđăng nhậpvàohệthốngvớitài khoảnlà user01 Tạo một account user02 #useradduser02 #passwduser02 Đưa user02 vào nhĩmcntt2004 #usermod -g cntt2004 user02 Thửđăng nhậpvàohệthốngvớitài khoảnlà user02 Xĩauser02 #userdel user02 #cat /etc/passwd Câu 5: Thực hành phân quyền người dùng trên hệ thống tập tin? Hướng dẫn thực hành: 1. Các quyền truy xuất trên tập tin Khi tập tin được tạo lập, các thơng tin sau đây đồng thời được ghi lại: - uid của người tạo tập tin 84
  27. - gid của người tạo tập tin - Các quyền thâm nhập tập tin khác . . . - Tập tin được bảo vệ bởi một tập hợp các bit định nghĩa quyền thâm nhập r wx r wx r wx suid sgid owner group other Trong đĩ: r Quyền đọc nội dung tập tin, thư mục w Quyền tạo và xố nội dung tập tin, tạo và xĩa tập tin trong thư mục x Quyền thực thi tập tin. Quyền truy xuất qua lại trên thư mục. • Các quyền với thư mục chỉ cĩ hiều lực ở một mức nhất định, thư mục con cĩ thể được bảo vệ trong khi thư mục cha thì khơng. • Lệnh ls -lF liệt kê danh sách các tập tin và các thuộc tính của chúng trong một danh mục, qua đĩ ta cĩ thể xem các thơng tin như loại tập tin, quyền truy nhập, người sở hữu và kích thước của tập tin. . . 2. Lệnh chmod Lệnh chmod cho phép thay đổi quyền trên tập tin của người dùng. Chỉ những người sở hữu tập tin này mới cĩ thể thay đổi được mức đặc quyền đối với tập tin này. Cĩ thể thực hiện lệnh theo hai cách: + Dùng các ký hiệu tượng trưng: Cú pháp : chmod {a,u,g,o}{+,-,=}{r,w,x} Trong đĩ : u (user), g (group), o (other), a (all) Các tốn tử : + thêm quyền. - bớt quyền. = gán giá trị khác + Dùng thơng số tuyệt đối: Cú pháp : chmod trong đĩ mode là một số cơ số 8 ( octal ) r w x r - x r - - 1 1 1 1 0 1 1 0 0 7 5 4 $chmod 754 filename $chmod g-w,o+r baitho.doc $chmod a+r baocao.txt $chmod +r baocao.txt $chmod og-x baocao.txt khơng cho thực thi $chmod u+rwx baocao.txt cho phép người sở hữu cĩ thể đọc, viết và thực thi. $chmod o-rwx baocao.txt khơng cho truy nhập tập tin. $chmod 777 * Đặt các quyền cho tất cả các đối tượng sử dụng . trên tồn bộ tập tin trong thư mục hiện hành 3. Thay đổi người hoặc nhĩm sở hữu tập tin - Lệnh chown cho phép thay đổi người sở hữu, nhĩm sở hữu trên tập tin. - Lệnh chgrp cho phép thay đổi nhĩm sở hữu trên tập tin. 4. Thực hành thay đổi quyền sử dụng cho các đối tượng trên tập tin a. Tạo một tập tin mới /home/baocao.txt b. Đổi chủ sở hữu của tập tin /home/baocao.txt là user01 #chown user01 /home/baocao.txt c. Phân quyền rwxr r cho các đối tượng trên tập tin /home/baocao.txt. #chmod 744 /home/baocao.txt d. Đăng nhập vào hệ thống với tài khoản user01. Thử thay đổi nội dung tập tin 85
  28. /home/baocao.txt. e. Đăng nhập vào hệ thống với tài khoản khác. Thử thay đổi nội dung tập tin /home/baocao.txt. Nhận xét ? 5. Thực hành phân quyền sử dụng cho các đối tượng a. Tạo nhĩm người sử dụng cĩ tên cntt2004. b. Bổ sung các user01, user02 vào nhĩm cntt2004. #usermod -g cntt2004 user01 #usermod -g cntt2004 user02 c. Tạo thư mục /home/common #mkdir /home/common d. Đổi nhĩm sở hữu của thư mục /home/common là nhĩm cntt2004. #chown :cntt2004 /home/common hoặc #chgrp cntt2004 /home/common e. Phân quyền rwx cho đối tượng nhĩm cntt2004 trên thư mục /home/common #chmod g+rwx /home/common #ls -lF /home f. Đăng nhập vào hệ thống với tài khoản user01. Tạo thư mục mới trong /home/common. g. Đăng nhập vào hệ thống với một tài khoản khác khơng thuộc nhĩm cntt2004. Thử tạo thư mục mới trong /home/common. Nhận xét ?. 86
  29. BÀI 8: QUẢN LÝ TỆP VÀ THƯ MỤC Mã bài: MĐSCMT 26.08 Giới thiệu Hầu hết các lệnh Linux (và do đĩ cả các shell script) đều tập trung vào thao tác trên các tệp và thư mục. Những thao tác này được các shell Linux diễn dịch dễ dàng nhờ một cú pháp thích hợp. Nĩi chung cĩ thể chia các lệnh ấy thành hai hạng: - Những lệnh thao tác bản thân tệp như là đối tượng - Những lệnh chỉ thao tác nội dung tệp Chương này cung cấp cho quản trị viên và độc giả quan tâm những lệnh coi bản thân tệp như là đối tượng, nghĩa là những lệnh cĩ chức năng di dời, đổi tên, xố bỏ, định vị và thay đổi các thuộc tính của tệp và thư mục. Ngồi ra ở đây cũng lướt nhanh qua những lệnh thao tác nội dung tệp. Mục tiêu - Liệt kê được các tệp - Tổ chức được các tệp - Sao chép được các tệp - Di dời và đặt tên lại tệp - Xố tệp hoặc thư mục - Xem nội dung của tệp - Duyệt tìm tệp - Thay đổi nhãn ngày giờ - Nén và nới tệp - Rèn luyện khả năng tổ chức, quản trị. Nội dung chính 1. Các thao tác cơ bản với tệp Mục tiêu : - Trình bày được các thao tác cơ bản với tệp - Thực hiện được thành thạo các thao tác cơ bản với tệp 1.1. Liệt kê tệp Lệnh cơ bản để liệt kê tệp là ls, hoạt động tuỳ theo cách ra lệnh. Nếu dùng trong ống dẫn (pipe), mỗi tệp sẽ hiển thị trên một dịng như mặc định của vài phiên bản UNIX, chẳng hạn như SCO. Những phiên bản khác liệt kê tệp thành nhiều cột. Hầu hết người sử dụng đều thích hình thức cột. Phiên bản nào mặc định ls là lệnh liệt kê thành từng dịng thường cĩ riêng một lệnh khác, chẳng hạn như lc, để liệt kê thành từng cột. Hành động của lệnh ls thay đổi tuỳ theo các cờ (flag) đi kèm, dạng như -abcd. Nhìn chung các phiên bản của lệnh ls cĩ hai dạng: dạng xuất phát từ UNIX System V và dạng xuất phát từ UNIX Berkeley. Bởi vì các hệ Berkeley dần dần hội tụ với System V cho nên chương này tập trung phân tích các cờ của System V. Muốn biết mình đang dùng phiên bản ls nào, chúng ta xem tài liệu kèm theo hệ hoặc gõ lệnh manls. Các cờ được lệnh ls sử dụng cĩ thể viết liền hay viết rời, kết quả như nhau. Thí dụ ls -l -F và ls -lF đều cho cùng một kết quả. Bảng 10.1: Các cờ dùng với lệnh ls Cờ Mơ tả 87
  30. -a Liệt kê mọi tệp vì ls mặc định khơng liệt kê những tệp bắt đầu bằng dấu chấm (thường đĩ là các tệp cấu hình cĩ rất nhiều trong home directory nên sẽ làm rối mắt nếu ls lại mặc định là liệt kê mọi tệp) -A Như –a, song khơng liệt kê 2 bí danh “.” và “ ”. Vì tên những tệp này bắt đầu bằng dấu chấm nên -a liệt kê cả chúng -b Buộc các ký tự phi đồ hoạ phải xuất hiện ở dạng bát phân \ddd, cờ -b tiện dùng hơn -q vì nĩ giúp chúng ta hình dung các ký tự ấy ra như thế nào -c Sử dụng thời gian của lần truy cập, chỉnh sửa gần nhất đề phân loại. Linux dán 3 loại nhãn ngày giờ vào tệp: lúc tạo ra tệp, lần truy cập gần nhất và lần chỉnh sửa gần nhất. Các tệp thường liệt kê theo thứ tự abc, nhưng chữ in hoa được xếp trước chữ thường -d Nếu đối số là một thư mục, cờ này chỉ liệt kê tên (khơng liệt kê nội tên_tệp dung); thường dùng với -l để xem trạng thái thư mục. Thường nội dung thư mục chỉ được liệt kê khi nào được khẳng định là phải liệt kê, hoặc dùng chung với wildcard (ký tự đại diện). Do đĩ lệnh ls chỉ liệt kê tên thư mục, trong khi ls * lại liệt kê tệp, thư mục và nội dung của bất kỳ thư mục nào cĩ mặt trong thư mục hiện hành -F Đánh dấu thư mục bằng dấu chéo /, đánh dấu tệp khả thi bằng dấu sao, các kết nối tượng trưng bằng dấu a vịng @, các FIFO bằng dấu | và các rãnh cắm (socket) bằng dấu - -i In các inode tại cột đầu tiên của bản báo cáo. Nếu chúng ta liệt kê những tệp kết nối, nên lưu ý là chúng đều cĩ cùng số inode. -l Liệt kê mục ghi thư mục ở dạng dài, bao gồm cả quyền hạn, số kết nối, chủ sở hữu, kích thước tính bằng byte và ngày giờ chỉnh sửa gần nhất. Nếu đấy là tệp đặc biệt, trường kích thước sẽ chứa số hiệu thiết bị trưởng và thứ. Nếu thời gian chỉnh sửa cách nay hơn sáu tháng, sẽ hiển thị tháng, ngày và năm; ngược lại sẽ chỉ hiện ngày giờ. Nếu tệp là kết nối tượng trưng, tên đường dẫn của tệp đích sẽ được hiển thị sau dấu mũi tên. Chúng ta cĩ thể phối hợp -l với các tuỳ chọn khác, thí dụ như -n -n Thay vì tên, sẽ hiển thị số ID của user và nhĩm kết hợp với từng tệp và thư mục. Thơng thường ls chỉ liệt kê tên. –n rất tiện lợi khi thiết lập mạng, chẳng hạn như TCP/IP, vì chúng ta cần biết số ID để cấp quyền hạn qua nhiều hệ thống khác nhau đang nối mạng -q Hiển thị các ký tự phi đồ hoạ trong tên tệp thành dấu hỏi. Đối với ls, đây là hành động mặc định khi xuất ra terminal. Nếu vơ tình tệp được tạo ra bằng những ký tự khơng in được, cờ -q sẽ hiển thị tệp ấy -r Đảo ngược thứ tự sắp xếp abc hoặc thời gian -s Hiển thị kích thước tệp, gồm cả những block gián tiếp ánh xạ tệp. Nếu cĩ biến mơi trường POSIX_CORRECT, mỗi block sẽ là 512 byte -t Sắp xếp theo thứ tự thời điểm chỉnh sửa (gần nhất xếp trước) thay vì theo tên. Nếu muốn xem những tệp lâu đời trước, chúng ta gõ -rt. -u Sử dụng thời điểm truy cập gần nhất, thay vì thời điểm thay đổi gần nhất để sắp xếp (với -t) hoặc để in (với –l). -x Buộc Linux xuất mục ghi ra thành dạng nhiều cột dàn hàng ngang, thay vì ở cuối trang. 88
  31. Nếu cĩ bản Linux Slackware, chúng ta sẽ nhận thấy rằng ls cũng hiện các màu khác nhau cho từng loại tệp. Màu được xác định ở tệp cấu hình DIR_COLORS trong thư mục /etc (từ phiên bản 6.1 trở đi, RedHat cũng sử dụng màu khi liệt kê tệp). Cấu hình mặc định bao gồm: - Tệp khả thi: màu xanh lá cây (green) - Thư mục: màu xanh biển (blue) - Kết nối tượng trưng: màu lục lam (cyan). Muốn căn chỉnh màu, chúng ta chép tệp DIR_COLORS về home directory rồi đổi tên thành .dir_colors. Bảng sau liệt kê các định nghĩa màu khả dụng. Mời chúng ta tham khảo thêm các trang man về tệp DIR_COLORS. Bảng 10.2: Các giá trị DIR_COLORS thể hiện màu sắc. Giá trị Mơ tả 0 Phục hồi các màu mặc định 1 Cho vùng cĩ màu sáng hơn. 4 Cho vùng văn bản gạch dưới. 5 Cho vùng văn bản nhấp nháy. 30 Cho vùng tiền cảnh màu đen. 31 Cho vùng tiền cảnh màu đỏ. 32 Cho vùng tiền cảnh màu xanh lá cây. 33 Cho vùng tiền cảnh màu vàng (hoặc nâu). 34 Cho vùng tiền cảnh màu xanh biển. 35 Cho vùng tiền cảnh màu đỏ tía. 36 Cho vùng tiền cảnh màu lục lam. 37 Cho vùng tiền cảnh màu trắng hoặc xám. 40 Cho vùng nền màu đen. 41 Cho vùng nền màu đỏ. 42 Cho vùng nền màu xanh lá cây 43 Cho vùng nền màu vàng hoặc nâu. 44 Cho vùng nền màu xanh biển. 45 Cho vùng nền màu đỏ tía. 46 Cho vùng nền màu lục lam. 47 Cho vùng nền màu trắng hoặc xám. 1.2. Tổ chức tệp Linux khơng cĩ quy định bất biến cho việc tổ chức tệp. Tệp của Linux khơng cĩ phần mở rộng (thí dụ như phần đuơi .EXE cho những tệp khả thi của DOS). Chúng ta cĩ thể và chúng ta nên tổ chức cách đặt tên tệp cho riêng mình. Xin nhắc chúng ta rằng ở thuở ban đầu của Linux mỗi tên tệp đều ghi đầy đủ đường dẫn với các thư mục của nĩ. Tuy nhiên, phải nhìn nhận việc ngày càng cĩ nhiều ứng dụng Linux đến từ thế giới của DOS và các ứng dụng này mang theo những quy ước của mình đến cho Linux. Giới cung cấp phần mềm thường khuyên chúng ta nên đặt tên tệp cĩ phần mở rộng và thích hợp với ứng dụng của tệp. Nếu muốn tạo ra những lệnh riêng của mình, chúng ta nên tổ chức thư mục dựa theo cách của Linux, với những thư mục /bin, /lib và /etc. Hãy tạo cấu trúc thư mục cấp dưới trong thư mục /home của chúng ta. Để cho mọi việc được đơn giản, chúng ta nên 89
  32. đặt các lệnh thi hành trong /bin, các lệnh phụ trong /lib và các tệp cấu hình khởi động trong /etc. Và đây chỉ là một gợi ý chứ khơng phải là bắt buộc. Chúng ta tạo ra thư mục bằng lệnh mkdir với cú pháp đơn giản như sau: mkdir tên_thư_mục Với tên_thư_mục là tên đặt cho thư mục mới. Trên nguyên tắc, để tạo ra một thư mục cấp dưới, chúng ta phải cĩ quyền hạn ghi trong thư mục hiện hành. Tuy nhiên ở đây chúng ta tạo ra thư mục cấp dưới trong chính /home của chúng ta, do đĩ sẽ khơng gặp rắc rối gì cả. Giả sử chúng ta tạo ra ba chương trình mang tên prog1, prog2 và prog3, tất cả đều đặt trong $HOME/bin. Xin nhớ $HOME chính là home directory của chúng ta. Nếu muốn những chương trình riêng của mình được chạy như thể chúng là thành phần tiêu chuẩn của bộ lệnh Linux, chúng ta phải ghi $HOME/bin vào biến mơi trường PATH. Để thực hiện việc này, chúng ta dùng lệnh sau đây trong shell của Bourne và Korn. PATH = $PATH :$HOME/bin; export PATH Với shell C, chúng ta sẽ gõ như sau: setenv PATH $PATH $HOME/bin Ghi chú: $HOME đại diện cho đường dẫn đầy đủ đến home directory của chúng ta. Nếu đĩ là /home/ams, thì $HOME/bin sẽ được viết là /home/ams/bin. Nếu các chương trình của chúng ta gọi đến chương trình phụ, chúng ta nên tạo thư mục cấp dưới trong thư mục $HOME/lib. Chúng ta cĩ thể tạo ra thư mục cấp dưới cho từng chương trình phụ. Thí dụ lệnh riêng pgm1 cĩ thể gọi $HOME/lib/pgm1a. Tương tự, nếu lệnh prog1 yêu cầu phải cĩ bảng cấu hình khởi động, chúng ta cĩ thể đặt tên bảng đĩ là $HOME/etc/pgm1.rc. Dữ liệu của chúng ta cĩ thể đặt trong thư mục $HOME/data/pgm1. 1.3. Sao chép tệp Lệnh sao chép tệp cĩ dạng: cp tệp_nguồn tệp_đích Chúng ta phải cĩ quyền hạn đọc từ tệp_nguồn mà chúng ta định sao chép và quyền hạn ghi vào thư mục đích (và tệp mà chúng ta định ghi đè lên phải cĩ thực). Chúng ta nên lưu ý một số điểm như sau: -Nếu tệp_đích là tên của một tệp cĩ sẵn, thì chúng ta sẽ ghi đè lên tệp cĩ sẵn ấy. -Nếu gõ tên thư mục đích sau lệnh cp, tệp sẽ được chép vào thư mục ấy và vẫn giữ nguyên tên cũ. Thí dụ chúng ta gõ lệnh: cp tệp_nguồn thư_mục_đíchthì tệp sẽ được chép vào thư_mục_đích dưới dạng thư_mục_đích /tên_tệp_nguồn. Chúng ta cĩ thể chép một danh sách các tệp1, tệp2, tệp3 vào thư_mục_đích bằng lệnh: cp tệp1, tệp2, tệp3 thư_mục_đích Nếu thư_mục_đích khơng phải là một thư mục, máy sẽ báo lỗi. Ngồi thư_mục_đích, nếu bất kỳ thành phần nào của danh sách tệp lại là một thư mục, thì máy cũng báo lỗi. Hãy cẩn thận khi dùng wildcard (ký tự thay thế) với lệnh cp, bởi vì cĩ khả năng rủi ro là chúng ta sẽ chép nhiều thứ hơn là dự định. Ghi chú: Những người sử dụng Linux thường để trong máy nhiều tệp dạng DOS, đồng thời làm cho Linux truy cập được hệ thống tệp DOS. Hầu hết các lệnh Linux nhận biết khi nào một phân vùng DOS là đích hoặc nguồn, cho nên trong tiến trình chép tệp, 90
  33. DOS cĩ thể xử lý việc diễn dịch tệp. Thơng thường khi mở ra và lưu lại một tệp văn bản của UNIX/Linux trong DOS bằng WordPad, WordPad luơn lưu thêm ký tự về đầu dịng (CR) cạnh ký tự xuống dịng (LF), trong khi các hệ Linux và UNIX chỉ dùng một ký tự LF để báo hiệu về đầu dịng mới. 1.4. Di dời và đặt tên lại tệp Lệnh mv của Linux giúp chúng ta di dời và đặt lại tên cho cả tệp lẫn thư mục. Cú pháp và quy định của mv cũng giống như của cp, nghĩa là chúng ta tồn quyền di dời bao nhiêu tệp cũng được, miễn là cuối lệnh phải cĩ tên thư mục và chúng ta phải cĩ quyền ghi đối với thư mục đĩ. Chỉ khác là cp khơng thể di dời và đặt lại tên thư mục. Khi chúng ta ra lệnh di dời hoặc đặt lại tên tệp, thực ra chỉ cĩ mục ghi trong tệp thư mục là thay đổi. Ngoại trừ trường hợp vị trí mới nằm trên ổ đĩa hoặc phân vùng vật lý khác, nếu khơng tệp và nội dung thư mục khơng di dời gì cả. Nếu chúng ta gõ lệnh rm (xố) hoặc cp mà khơng cho thêm tuỳ chọn về thư mục, máy sẽ khơng thi hành lệnh và báo lỗi rằng chúng ta đang xử lý một thư mục. Muốn xố hoặc chép thư mục, chúng ta phải dùng cờ -r với rm và cp. Tuy nhiên lệnh mv lại di dời thư mục khơng gặp vấn đề gì. 1.5. Xố tệp hoặc thư mục Như chúng ta đã biết, muốn xố bỏ tệp hoặc thư mục, chúng ta dùng lệnh rm. Muốn xố tệp khơng thuộc quyền sở hữu của mình, chúng ta phải cĩ quyền hạn ghi trên thư mục chứa tệp cần xố. Nếu đang làm chủ tệp, tất nhiên là chúng ta cĩ thể tuỳ ý xố bỏ, nhưng với điều kiện là quyền hạn của thư mục chứa tệp đĩ cho phép chúng ta ghi. Lệnh rm * sẽ xố tồn nhĩm tệp mà chúng ta cĩ quyền ghi trong thư mục hiện hành, nhưng thư mục cấp dưới khơng bị ảnh hưởng. Muốn xố thư mục cấp dưới, chúng ta phải dùng tuỳ chọn -r (recursive, đệ quy). Ở một vài phiên bản, rm sẽ tạm dừng để hỏi chúng ta cĩ thực sự muốn xố tệp mà chúng ta cĩ quyền sở hữu nhưng lại khơng cĩ quyền hạn ghi. Một vài phiên bản khác lại thắc mắc khi chúng ta gõ lệnh rm kèm với wildcard. Đương nhiên chúng ta cĩ thể viết riêng cho mình một macro hoặc một shell script để tạo cơ hội suy nghĩ trước khi khẳng định xố tệp. Nếu phiên bản rm đang sử dụng đắn đo khi chúng ta ra lệnh xố những tệp mà mình sở hữu nhưng lại khơng cĩ quyền hạn ghi, chúng ta cĩ thể phịng ngừa việc lỡ tay xố mọi thứ trong thư mục bằng lệnh sau đây: # touch "0 0" Lệnh trên tạo ra tệp mang tên "0 0". Trong chuỗi ASCII, ký tự số “0” được sắp xếp trước mọi ký tự chữ, do đĩ khi gõ lệnh rm * thì rm sẽ thử xố tệp "0 0" đầu tiên và dừng lại hỏi. Nếu quả thật khơng muốn xố mọi thứ trong thư mục, chúng ta cịn kịp bấm hoặc để huỷ (kill) tiến trình rm. Muốn thử, chúng ta hãy xố tệp "0 0" xem. Đừng gõ rm * nữa nếu phiên bản chúng ta đang dùng lại khơng dừng lại hỏi. Một cách hay hơn nữa để phịng trường hợp lỡ tay xố tất là chúng ta dùng cờ -i với rm. Ở đây -i viết thay chữ interactive (tương tác). Nếu gõ rm -i tên_tệp, máy sẽ yêu cầu chúng ta khẳng định. Và chúng ta phải trả lời "yes" trước khi tệp được xố. Nếu chúng ta gõ rm -i *, máy sẽ buộc chúng ta trả lời cho từng tệp trong thư mục. Khi phải thường xuyên sử dụng rm -i, chúng ta cĩ thể cài lệnh này vào trong một shell script hoặc tạo ra một chức năng shell. Nếu thảo ra shell script, chúng ta nên nhớ là shell sẽ duyệt qua các lệnh trong thư mục liệt kê ở biến PATH theo đúng thứ tự liệt kê. Nếu thư mục $HOME/bin của chúng ta ở dưới chĩt, shell script mang tên rm sẽ 91
  34. khơng bao giờ được tìm thấy. Chúng ta cĩ thể đặt thư mục $HOME/bin ở đầu danh sách của biến PATH, hoặc tạo ra một lệnh mới, chẳng hạn như del. Nếu tạo ra shell script mang tên “del”, chúng ta phải đánh dấu "khả thi" bằng lệnh chmod để shell cĩ thể nhận ra nĩ. Khi tạo ra lệnh del, chúng ta chỉ phải ghi một lệnh duy nhất là rm -i $*. Bởi vì khi gõ lệnh del *, shell sẽ diễn dịch ra là rm -i *. Cịn một cách khác để xố tệp là dùng alias (bí danh). Chúng ta cĩ thể hiểu alias như là một lệnh shell nội bộ (giống các lệnh doskey như của DOS kể từ phiên bản 5.0). Trong khi đang dùng shell C, nếu muốn thêm alias chúng ta phải chỉnh sửa lại tệp mang tên .cshrc. Chúng ta cĩ thể sử dụng bất kỳ trình soạn thảo văn bản nào, chẳng hạn như vi (xem "Sử dụng trình soạn thảo vi") để chỉnh sửa tệp này. Với shell C, chúng ta thêm những dịng sau đây vào đầu tệp .cshrc: rm() { /bin/rm -i $* } Muốn thêm alias vào shell Korn, chúng ta thêm những dịng sau vào tệp $HOME/.kshrc aliasrm 'rm -i $*' Khi định xố một thư mục bằng lệnh rm, máy sẽ báo đấy là thư mục và khơng được xố. Nếu muốn xố các thư mục rỗng, chúng ta dùng lệnh rmdir như với DOS. Linux cịn một cách khác để xố thư mục cùng với nội dung, nhưng cách này rất nguy hiểm: lệnh rm -r sẽ xố bất kỳ thư mục và tệp nào được phát hiện. Thí dụ chúng ta cĩ thư mục ./foo chứa tệp và thư mục cấp dưới, lệnh rm -r foo sẽ xố sạch nội dung thư mục ./foo, kể cả các thư mục cấp dưới. Với lệnh rm -i -r, máy sẽ yêu cầu chúng ta khẳng định trước khi thực hiện thao tác xố. Trong trường hợp thư mục chứa rỗng, rm sẽ khơng tự ý xố, giống như trường hợp chúng ta ra lệnh rm mà khơng kèm tuỳ chọn nào. Ghi chú: Chúng ta khơng nhất thiết phải đặt từng cờ cho mỗi lệnh Linux. Nếu cờ nào khơng cần đối số kèm theo, chúng ta cĩ thể phối hợp chúng với nhau. Thí dụ, rm -i -r cĩ thể được viết là: rm -ir 1.6. Xem nội dung của tệp Hầu hết các lệnh Linux đều đưa kết quả ra thiết bị xuất chuẩn, tức màn hình. Những lệnh này thường hiển thị ngay lên màn hình trong hoặc sau khi thao tác tệp hoặc nhập liệu trực tiếp từ bàn phím. Muốn tệp được hiển thị theo ý mình, chúng ta hãy chọn một lệnh Linux thích hợp, trong đĩ cĩ ba lệnh tiêu chuẩn sẽ được bàn kỹ hơn ở dưới đây, đĩ là: cat, more và less. 1.6.1. Các thiết bị xuất nhập chuẩn Linux, cũng như mọi hệ thống UNIX, khi khởi động sẽ mở ra bốn (tệp) thiết bị xuất nhập chuẩn đĩ là: nhập tiêu chuẩn (stdin), xuất tiêu chuẩn (stdout), lỗi tiêu chuẩn (stderr) và cổng phụ (AUX). Những thiết bị này được coi như mặc định, tức là khơng cần nêu tên trong dịng lệnh. Đầu vào/ra Tiếng Anh Tên Thiết bị mặc định Nhập tiêu chuẩn standard input stdin Bàn phím Xuất tiêu chuẩn standard output stdout Màn hình Lỗi tiêu chuẩn standard error stderr Màn hình Cổng phụ auxiliary AUX Cổng COM 92
  35. Ghi chú: Nếu khơng muốn dùng những giá trị mặc định, chúng ta cĩ thể dùng các dấu > và và để máy biết khi nào thì cho trơi hay dừng lại. Nếu khơng, chúng ta cĩ thể xem từng trang màn hình bằng các lệnh more hoặc less. 1.6.3. Xem tệp bằng lệnh more Cả lệnh more và less đều hiển thị mỗi lần một trang màn hình. Căn cứ vào biến mơi trường TERM và cơ sở dữ liệu về các loại terminal cĩ trên máy, lệnh more và less sẽ xác định mỗi trang đĩ gồm bao nhiêu dịng. Lệnh more ra đời trước less, xuất xứ từ phiên bản Berkeley UNIX. Lệnh này ngày càng chứng tỏ hiệu quả của mình nên đã trở thành một tiêu chuẩn, cũng như trường hợp của trình soạn thảo vi. Cũng như cat, hình thức đơn giản nhất của lệnh more là: more tên_tệp Máy sẽ hiển thị trang màn hình đầu tiên của tệp. Muốn xem tiếp trang sau, chúng ta bấm thanh phím Spacebar, cịn nếu bấm phím thì màn hình chỉ dịch lên một dịng. Nếu đang xem một chuỗi tệp (bằng lệnh more tệp1 tệp2 ) và muốn dừng lại để chỉnh sửa tệp nào đĩ, chúng ta bấm phím hoặc . Bấm phím với more nghĩa là chúng ta gọi một trình soạn thảo đã được xác định trong biến mơi trường shell EDIT liên quan đến tệp hiện hành. Nếu bấm , máy sẽ gọi trình soạn thảo nào được xác định trong biến mơi trường VISUAL. Nếu chúng ta chưa định nghĩa các biến này trong mơi trường, more sẽ mặc định dùng trình soạn thảo ed khi chúng ta bấm và trình soạn thảo vi khi bấm . Với lệnh more, nếu muốn xem lại trang màn hình đã lật qua, chúng ta dùng phím Ngồi ra lệnh less cũng cĩ thể giúp chúng ta việc này. 1.6.4. Xem tệp bằng lệnh less Điểm bất tiện của lệnh less là chúng ta khơng thể sử dụng phần mềm soạn thảo với tệp đang được hiển thị. Tuy nhiên để bù lại, lệnh less giúp chúng ta di chuyển tới lui khi xem tệp. Cơng dụng của lệnh less gần giống lệnh more. Để xem từng trang của tệp, chúng ta gõ: Máy sẽ hiển thị đầy một trang màn hình. Cũng như với lệnh more, chúng ta bấm phím Spacebar để xem trang tiếp theo. Muốn xem màn hình vừa trơi qua, chúng ta bấm . Muốn di chuyển đến vị trí nào đĩ trong tệp (vị trí này được biểu thị bằng số phần trăm), chúng ta bấm và khi dấu nhắc hiện ra, chúng ta gõ số phần trăm vào. 93
  36. 1.6.5. Duyệt tìm xuyên tệp và thốt khỏi shell Hai lệnh less và more giúp chúng ta duyệt suốt tệp đang hiển thị để tìm ra một chuỗi ký tự. Lệnh less cịn cho phép chúng ta tìm ngược về phía đầu tệp bằng cú pháp sau: less / chuỗi_ký_tự Sau khi tìm thấy chuỗi_ký_tự, lệnh less và more sẽ hiển thị chuỗi ấy ở đầu một trang mới mở. Với less, khi chúng ta bấm máy sẽ lặp lại thao tác tìm vừa rồi. Khi dùng hai lệnh less và more, nếu bấm chúng ta sẽ thốt khỏi shell. Thực ra khi thốt khỏi bằng lệnh , chúng ta đang ở trong một shell thứ cấp. Từ đây chúng ta phải thốt khỏi giống như chúng ta đăng xuất một phiên làm việc bình thường. Tuỳ vào shell đang sử dụng, chúng ta cĩ thể bấm hoặc gõ exit để trở về màn hình more hoặc less mà chúng ta vừa thốt khỏi. Nếu bấm mà máy yêu cầu chúng ta dùng lệnh logout thay vì , chúng ta hãy làm theo máy. 1.6.6. Xem tệp bằng những cách khác Cĩ thể hiển thị nội dung tệp bằng nhiều cách khác. Thí dụ, nếu muốn xem nội dung của một tệp nhị phân, chúng ta dùng lệnh od (từ chữ octal dump). Lệnh od hiển thị tệp dưới dạng mặc định là bát phân (hệ đếm cơ sở 8). Dùng kèm với những cờ khác, od cĩ thể hiển thị tệp nhị phân dưới dạng thập phân, ASCII, hoặc thập lục phân (cơ sở 16). Sở dĩ phải hiển thị tệp theo những gián tiếp như dạng bát phân, thập phân, hoặc thập lục phân là vì hiển thị dữ liệu ở dạng nhị phân vẫn cịn là một vấn đề nan giải. Nếu dữ liệu được thể hiện ở dạng ASCII thì rất dễ đọc, vì các ký tự ASCII là dạng mà mọi người nhìn thấy khi xem hầu hết các tệp văn bản. Song nếu tệp là một chương trình nhị phân thì dữ liệu khơng thể được trình bày ở dạng ASCII. Trong trường hợp này chúng ta phải hiển thị bằng hình thức chuyển đổi hệ đếm số. UNIX ra đời trên những máy minicomputer sử dụng các ký tự 12 bit. Chúng ta ngày nay thường lấy byte (8 bit) làm một chuẩn độ dài bộ nhớ. Mặc dù cĩ thể hiển thị theo hệ thập phân quen thuộc, song vấn đề là hiển thị cái gì - một byte, một chữ, hay 32 bit? Thao tác hiển thị một số lượng bit nào đĩ, địi hỏi phải chuyển đổi hệ nhị phân căn cứ trên số lượng bit ấy. Với hệ 12 bit chúng ta cĩ thể hiển thị tồn bộ 12 bit với bốn con số (hiển thị bằng 23, dưới dạng bát phân). Các hệ UNIX trước đây đều chạy trên những máy tính 12 bit như thế, do đĩ phần lớn các phép ghi của UNIX (và do đĩ của Linux) đều ở dạng bát phân. Bất cứ byte nào cũng cĩ thể hiển thị bằng một mã bát phân với ba chữ số cĩ dạng như sau (thí dụ hiển thị giá trị thập phân của 8): \010 Vì thế giới ngày nay đã chuyển sang dạng byte 8 bit nên bát phân khơng cịn hiệu quả khi trình bày dữ liệu. Hệ thập lục phân (cơ sở 16 hoặc 24) là cách tốt hơn. Một byte 8 bit cĩ thể trình bày bằng hai chữ số thập lục phân. Thí dụ byte cĩ giá trị thập phân là 10 sẽ được hiển thị thành 0A theo cơ sở 16. Lệnh od giúp chúng ta chọn lựa cách hiển thị dữ liệu. Hình thức tổng quát như sau: od [tuỳ_chọn] [tệp] hoặc: od - traditional [tệp] [[+]offset[[+]nhãn]] Bảng 10.3: Các cờ dùng với lệnh od Cờ ngắn Cờ dài Mơ tả -A address-radix=cơ sở Xác định cách in những khoảng trống offset trong 94
  37. tệp -N read-bytes=byte Giới hạn phần kết xuất bằng lượng byte nhập liệu cho mỗi tệp -j skip-bytes=byte Bỏ qua lượng byte nhập liệu đầu tiên ở mỗi tệp -s strings[=byte] Xuất chuỗi với ít nhất là bao nhiêu byte ký tự đồ hoạ -t format=loại Chọn một hoặc nhiều dạng xuất liệu -v output-duplicates Khơng cho phép dùng * để đánh dấu việc bỏ dịng -w width[=byte] Xuất bao nhiêu byte ở mỗi dịng xuất liệu traditional Chấp nhận đối số ở dạng pre-POSIX help Hiển thị phần trợ giúp này và thốt khỏi version Xuất thơng tin phiên bản và thốt khỏi Chúng ta cĩ thể dùng chung dạng thức pre-POSIX ở bảng sau đây với các lệnh ở bảng trên và nhận được kết quả tổng hợp. Bảng 10.4: Các đặc tả dạng pre-POSIX dùng với lệnh od. Cờ ngắn Tương đương POSIX Mơ tả -a - t a Chọn các ký tự cĩ tên -b -t c Chọn các byte bát phân -c -t c Chọn các ký tự ASCII hoặc backlash escape -d -t u2 Chọn các thập phân ngắn khơng đánh dấu -f -t fF Chọn các float -h -tx2 Chọn các thập lục phân ngắn -I -t d2 Chọn thập phân ngắn -l -t d4 Chọn thập phân dài -o -t o2 Chọn bát phân ngắn -x -t x2 Chọn thập lục phân ngắn Trong bảng trên, kích cỡ là một số và cũng cĩ thể là C cho sizeof(char), S cho sizeof(short), I cho sizeof(int), hoặc L cho sizeof(long). Nếu là loại f, kích cỡ cĩ thể là F cho sizeof(float), D cho sizeof(double), hoặc L cho sizeof(Long double). Ghi chú: Trong ngơn ngữ C, sizeof là một chức năng phản hồi số byte trong cấu trúc dữ liệu được dùng làm tham số. Thí dụ chúng ta sẽ dùng chức năng gọi sau đây để xác định số byte trong một số nguyên trên hệ thống máy, bởi vì số byte trong một số nguyên tuỳ thuộc vào hệ thống: sizeof(int);cơ số trong bảng 17.3 đại diện cho số hệ thống và sẽ là d cho thập phân deca, O cho bát phân (octa), X cho thập lục (hexa), hoặc n cho none (khơng cĩ). Byte là thập lục phân với tiền tố 0x hoặc 0X; byte được nhân với 512 nếu cĩ hậu tố b (bit), nhân với 1024 nếu cĩ k (kilo) và với 1.048.476 nếu cĩ m (mega). Nếu khơng cĩ con số nào, -s sẽ mặc định 3, trong trường hợp tương tự, -w sẽ mặc định 32. Theo mặc định, od dùng -A0 -td2 -w16. 1.7. Duyệt tìm tệp Nếu dùng lệnh ls tìm vẫn khơng ra một tệp, chúng ta thử dùng lệnh find. find là cơng cụ cực kỳ mạnh và cũng chính vì thế mà find lại trở thành một trong những lệnh khĩ dùng nhất. find cĩ ba phần, mỗi phần lại cĩ thể gồm nhiều phần nhỏ: -Tìm ở đâu -Tìm cái gì -Tìm được rồi thì thực hiện thao tác nào. Nếu biết tên tệp nhưng khơng biết vị trí tệp ấy, chúng ta gõ lệnh như sau: 95
  38. find /-name tên_tệp -print Ghi chú: Hãy cẩn thận khi duyệt tìm từ thư mục gốc. Trên những hệ thống lớn, nếu tìm từ thư mục gốc, máy sẽ lục lọi mọi thư mục bên dưới rồi đến phiên các thư mục cấp dưới nữa, chưa kể những ổ đĩa khác tại chỗ và ổ đĩa từ xa, do đĩ sẽ tốn rất nhiều thì giờ. Do đĩ cĩ lẽ chúng ta nên giới hạn việc duyệt tìm ở một hai thư mục thơi. Thí dụ, khi biết cĩ tệp ở thư mục /usr hoặc /usr2, chúng ta gõ lệnh: find /usr /usr2 -name tên_tệp -print Chúng ta cĩ thể dùng nhiều tuỳ chọn với find. Bảng sau đây chỉ liệt kê một phần nhỏ. Muốn tham khảo mọi tuỳ chọn, chúng ta gõ lệnh: man find Bảng 10.6: Một mẫu các cờ dùng với lệnh find. Lệnh Mơ tả - name tệp Biến tệp cĩ thể là tên của một tệp hoặc tên tệp kèm ký tự wildcard. Nếu cĩ kèm wildcard, những tệp nào khớp với wildcard sẽ được chọn để xử lý. -links n Bất kỳ tệp nào cĩ số kết nối bằng hoặc lớn hơn n sẽ được chọn. Chúng ta thay thế n bằng con số cần thiết. -size n [c] Bất kỳ tệp nào cĩ số block 512 byte bằng hoặc lớn hơn n sẽ được chọn. Nếu cĩ c gắn theo n, máy sẽ chọn những tệp cĩ số ký tự bằng hoặc lớn hơn n. -atime n Tệp nào được truy cập trong vịng n ngày sẽ được chọn. Chúng ta lưu ý là thao tác duyệt tìm tệp bằng lệnh find sẽ thay đổi nhãn ngày tháng của tệp. -exec cmd Sau khi chọn xong danh sách tệp, chúng ta cĩ thể dùng danh sách này làm đối số để chạy một lệnh Linux. Cĩ hai quy định đơn giản với -exec: tên của tệp được đại diện bởi {} và lệnh phải tận cùng bằng dấu chấm phẩy thốt, nghĩa là \;. Giả sử khi đã đăng nhập với quyền hạn root, chúng ta tạo ra một thư mục user. Kết quả là mọi tệp đều thuộc về root, nhưng lẽ ra chúng phải thuộc quyền sở hữu của user đĩ. Chúng ta phải ra lệnh sau đây để đổi chủ sở hữu của mọi tệp trong /usr/pla và mọi thư mục cấp dưới từ root sang pla: find /home/pla -exec chown pla {}\; -print In tên và vị trí các tệp được chọn. Lệnh find giúp chúng ta thực hiện nhiều thử nghiệm logic đối với tệp. Thí dụ chúng ta muốn tìm một loạt những tên tệp nhưng khơng thể dùng wildcard để đại diện, vì khơng khớp hồn tồn. Trường hợp này chúng ta dùng tuỳ chọn or (-o) như sau: find /home (-name tệp1 -o -name tệp2) -print 1.8. Thay đổi nhãn ngày giờ Mỗi tệp Linux duy trì ba nhãn ngày giờ: -Ngày giờ tạo ra tệp -Ngày giờ lần thay đổi gần nhất và -Ngày giờ lần truy cập gần nhất Chúng ta cĩ thể thay đổi nhãn thời gian tạo ra tệp, trừ khi chúng ta thực hiện thao tác sao chép và đặt lại tên tệp. Mỗi khi tệp được mở hoặc được đọc, nhãn thời gian truy cập sẽ thay đổi. Và như đã nĩi ở đoạn trên, dùng lệnh find duyệt tìm tệp cũng khiến nhãn ngày tháng truy cập thay đổi. 96
  39. Nhãn thời gian của tệp cĩ ích khi chúng ta cần sao lưu cĩ chọn lọc những tệp nào đã thay đổi ở thời điểm nhất định. Ở đây chúng ta cũng dùng lệnh find. Nếu muốn thay đổi nhãn thời gian trong khi vẫn giữ nguyên tệp, chúng ta dùng lệnh touch (sửa lại). Theo mặc định, touch cập nhật nhãn thời gian truy cập và chỉnh sửa theo đồng hồ hệ thống hiện hành. Cũng theo mặc định, nếu chúng ta định thao tác một tệp hiện vẫn chưa cĩ thực, touch sẽ tạo ra tệp ấy. Chúng ta cĩ thể dùng touch để "đánh lừa" lệnh nào cĩ chức năng kiểm tra ngày tháng. Thí dụ nếu hệ thống máy chạy sao lưu một số tệp đã thay đổi vào thời gian nào đĩ, chúng ta cĩ thể touch một tệp để tệp ấy được hay khơng được tính đến. Lệnh touch cĩ ba cờ sau đây: -a Chỉ cập nhận nhãn thời gian truy cập tệp. -m Chỉ cập nhật nhãn thời gian chỉnh sửa tệp. -c Khơng cho touch tạo ra một tệp mới. Cú pháp mặc định của touch là: touch -am danh_sách_tệp 2. Nén và nới tệp Mục tiêu : - Trình bày được cách nén và nới tệp Nếu sức chứa của hệ thống cĩ hạn, hoặc nếu cĩ những tệp ASCII quá lớn mà ít khi dùng đến, chúng ta cĩ thể nén chúng lại để tiết kiệm khoảng trống trên đĩa. Tiện ích tiêu chuẩn của Linux để nén tệp là gzip. Lệnh này cĩ thể nén tệp ASCII cịn chừng 20% kích thước ban đầu. gzip tên_tệp Hầu hết các hệ UNIX đều cĩ lệnh compress, thường dùng với tar để nén từng nhĩm tệp dùng cho tồn trữ. Tệp nén bằng lệnh compress cĩ đuơi .z, thí dụ archive1.tar.z. Bản phát hành Red Hat cịn cĩ các chương trình zip và unzip để nén và tồn trữ một loạt các tệp. Sau khi nén thành cơng một tệp bằng lệnh gzip tên_tệp, tệp nén sẽ mang tên dạng tên_tệp.gz, sau đĩ tệp nguyên thuỷ bị huỷ. Muốn phục hồi tệp nén về trạng thái cũ, chúng ta dùng lệnh sau: gunzip tên_tệp Ghi chú: Khi bung một tệp, chúng ta khơng cần phải gõ đủ cái đuơi .gz phía sau tên tệp. Lệnh gunzip sẽ tự động hiểu. Trong trường hợp muốn giữ tệp ở thể nén, những lại muốn đặt ống dẫn dữ liệu sang một lệnh khác, chúng ta dùng lệnh zcat. Lệnh này hoạt động như lệnh cat, song địi hỏi phía đầu vào phải là tệp nén. zcat bung tệp rồi hiển thị lên thiết bị kết xuất tiêu chuẩn. Thí dụ. chúng ta đã nén một loạt nhiều tên và địa chỉ trong tệp mang tên namelist và tệp nén xong mang tên namelist.gz. Giờ đây nếu muốn dùng nội dung tệp nén để làm nhập liệu cho một chương trình, chúng ta dùng lệnh zcat để bắt đầu một ống dẫn: zcat namelist | chươngtrình1 | chươngtrình2 zcat cũng cĩ cùng những hạn chế như cat: khơng thể trở lui về sau trong một tệp. Linux cĩ chương trình zless hoạt động như less, chỉ khác là zless làm việc với tệp nén. Những lệnh nào làm việc được với less sẽ làm việc được với zless. Những chúng ta nào đã quen sử dụng pkzip của pkware giờ cĩ thể dùng zip và unzip trong bản phát hành Red Hat, vì chúng hoạt động tương tự nhau. Mời chúng ta đọc các trang man của zip và unzip để biết thêm chi tiết. 97
  40. 3. Hệ thống thư mục trong Linux Mục tiêu : - Trình bày được thư mục UNIX cổ điển - Nêu được Các thư mục trong Linux 3.1. Thư mục UNIX cổ điển Trước UNIX System V Release 4 (thí dụ UNIX System V Release 3.2 và các bản trước đĩ), hầu hết các bản UNIX đều cĩ dạng tổ chức thư mục như sau: / /etc /lib /tmp /bin /usr /spool /bin /include /tmp /adm /lib Thư mục /etc chứa hầu hết các dữ liệu liên quan đến hệ thống và cần thiết để khởi động máy. Nĩ chứa các tệp như passwd và inittab, rất cần thiết để hệ thống hoạt động tốt. Thư mục /lib chứa thư viện các hàm (chức năng) dành cho trình biên dịch C. Ngay cả khi hệ thống của chúng ta khơng cĩ trình biên dịch này, thư mục /lib cũng quan trọng bởi vì nĩ chứa mọi hàm C dùng chung mà nhiều chương trình ứng dụng sẽ truy cập. Thư viện các hàm C dùng chung (cũng gọi là thư viện chia sẻ) chỉ được nạp vào bộ nhớ khi nào cĩ chương trình gọi nĩ được thực hiện. Như thế các chương trình khả thi sẽ nhỏ gọn, nếu khơng chúng lại phải cộng thêm những đoạn mã chức năng giống nhau làm tốn cả đĩa cứng lẫn bộ nhớ. Thư mục /tmp dùng để lưu trữ tạm thời. Thơng thường, chương trình nào dùng đến /tmp sẽ tự động xố sạch các tệp mà nĩ tạm lưu trong thư mục này sau khi chạy xong. Và bởi vì thỉnh thoảng hệ thống lại tự động dọn /tmp, chúng ta đừng lưu những gì quan trọng trong thư mục này. Thư mục /bin và /sbin chứa mọi tệp khả thi cần thiết để khởi động hệ thống và những lệnh thường dùng nhất của Linux. Tuy nhiên, chúng ta nên nhớ là tệp khả thi khơng nhất thiết phải là tệp nhị phân. Một số tệp nhỏ trong /bin thực ra chỉ là shell script. Thư mục /usr chứa tất cả mọi thứ cịn lại. Biến PATH của chúng ta cĩ chuỗi /bin:/usr/bin bởi vì trong thư mục /usr/bin chứa mọi lệnh Linux nào khơng cĩ mặt trong thư mục /bin. Việc này cĩ lý do lịch sử của nĩ. Linux cần ít nhất ba thư mục /etc, /tmp và /bin để tự thi hành. Vào thuở Linux cịn sơ khai, đĩa cứng khơng cĩ dung lượng lớn và chỉ đủ sức chứa ba thư mục ấy mà thơi, tất cả những gì cịn lại đều phải đặt trên đĩa khác, đợi sau khi Linux chạy được rồi mới nạp vào. Trước đây khi Linux hãy cịn là một hệ điều hành tương đối nhỏ, việc đặt thêm các thư mục con vào thư mục /usr khơng mấy khĩ khăn, do đĩ Linux cĩ thể chạy với hai đĩa: đĩa root và đĩa /usr. 98
  41. Thư mục /usr/adm chứa mọi thơng tin thống kê và chẩn đốn cần thiết cho quản trị viên hệ thống. Hiện nay đĩ là thư mục /var. Nếu cả hai chương trình thống kê và chẩn đốn đều khơng được bật lên, thư mục này sẽ trống. Thư mục /include, hiện nay là /usr/include, chứa mọi đoạn mã nguồn cần thiết cho những biểu thức #include trong các chương trình C. Chúng ta phải cĩ ít nhất quyền hạn đọc đối với thư mục này bởi vì trong đĩ cĩ tất cả đoạn mã và cấu trúc hình thành hệ thống của chúng ta. Chúng ta khơng nên thay đổi các tệp trong thư mục này. Thư mục /usr/spool, nay là /var/spool, chứa thơng tin tạm thời, cần thiết cho trình in ấn lp, cho daemon cron và cho trình liên lạc UUCP. Những tệp nào được "tuồn" (spooled) cho máy in đều nằm tạm trong thư mục spool cho đến khi chúng được in xong. Mọi chương trình chờ để được cron điều khiển, kể cả các tệp crontab, các tệp batch và at đang trong thời gian chờ đợi đều tạm trú ở đây. Thư mục /usr/lib chứa tất cả những gì cịn lại thuộc về hệ thống Linux chuẩn. Nĩi chung, thư mục này chứa mớ tệp hỗn độn nằm ở hậu trường Linux. Thư mục /usr/bin chứa tệp cấu hình cho máy in và terminal, chứa các trình được gọi bởi trình khác của /bin và /usr/bin, trình thư tín, cron và trình liên lạc UUCP. Thư mục /usr, nay là thư mục /home chứa mọi thư mục con được cấp cho user. Quy ước chung là nếu ID đăng nhập là "phan_an" thì home directory sẽ là /usr/phan_an. Cách sắp xếp thư mục như chúng ta vừa xem qua được hình thành xưa kia khi đĩa cứng vừa nhỏ vừa đắt tiền. Giờ đây khi đĩa cứng cĩ dung lượng lớn và rẻ hơn, chúng ta cĩ thêm một cách tổ chức Linux tốt hơn sẽ được bàn đến ở mục sau. 3.2. Các thư mục trong Linux Cấu trúc cổ điển của UNIX gặp khĩ khăn khi phải sao lưu các tệp dữ liệu với thư mục /usr bị phân mảnh. Nhìn chung một hệ thống địi hỏi phải cĩ ba cấp sao lưu: bản thân hệ thống cơ bản; dữ liệu của user; và bất kỳ thay đổi nào trong những bảng định nghĩa hệ thống cơ bản. Chúng ta chỉ nên sao lưu hệ thống cơ bản một lần sau khi cĩ thay đổi trong những bảng điều khiển và những thay đổi này đã được sao lưu trước đĩ rồi. Dữ liệu của user luơn thay đổi do đĩ nên sao lưu thường xuyên. Dưới đây là cấu trúc điển hình của Linux, tuy nhiên cấu trúc trong máy chúng ta cĩ thể khác đơi chút, tuỳ theo chúng ta đã cài đặt những gĩi phần mềm nào. Các thư mục /bin, /etc và /tmp cĩ cùng chức năng như ở cấu trúc cổ điển. Các bảng định nghĩa hệ thống được chuyển sang thư mục /var, nhờ đĩ mỗi khi trong thao tác của hệ thống cĩ gì thay đổi, chúng ta chỉ cần sao lưu thư mục này mà thơi. Nét mới là mọi chương trình hệ thống đều chuyển sang thư mục /sbin. Tất cả những chương trình chuẩn Linux đều nằm trong /usr/bin và thư mục này được kết nối với /bin. Để dễ dàng tương thích, mọi thư mục cổ điển đều được duy trì bằng những kết nối tượng trưng. Thư mục /usr, giờ đây khơng cịn chứa dữ liệu user, được tổ chức lại để chứa mớ tệp hỗn độn trước kia nằm trong thư mục /usr/lib. / /etc /passwd (user database) /rc.d (system initialization scripts) /sbin /bin /tmp /var 99