ở bất kỳ thời điểm nào để thoát ra khỏi màn hình xem man và quay lại dòng nhập lệnh. Bây giờ xin bạn đọc hãy thử xem thông tin về hai câu lệnh đã đề cập đến ở trên – login và passwd. Chú ý là có thể xem thông tin về chính bản thân câu lệnh man. Hãy chạy lệnh: [root]# man man Rất tiếc theo như tác giả biết thì hiện thời các trang thông tin man còn chưa được dịch sang tiếng Việt. Do đó bạn sẽ nhận được những trang này bằng tiếng Anh. Nếu như bạn không có khả năng đọc tiếng Anh, thì hay kiên nhẫn đọc cuốn sách này hoặc một cuốn sách khác cùng đề tài. Bạn đọc còn có thể thử chạy thêm một vài câu lệnh nữa và theo dõi xem hệ thống làm gì. Ví dụ, hãy thử những câu lệnh liệt kê trong bảng 3.1 (hãy nhập chúng cùng với những tham số có trong bảng). Bảng 3.1: Những câu lệnh đơn giản của Linux Câu lệnh Mô tả ngắn gọn whoami Thông báo tên đăng nhập của bạn w hoặc who Cho biết những người dùng nào hiện đang làm việc trên hệ thống pwd Cho biết tên của thư mục hiện thời ls -l Hiển thị danh sách tập tin và thư mục con của thư mục hiện thời cd tên_thư_mục Chuyển thư mục hiện thời đến tên_thư_mục ps ax Hiển thị danh sách các tiến trình đang chạy Hãy xem mô tả về những câu lệnh này bằng man. Chúng ta sẽ không xem xét chi tiết danh sách tất cả những câu lệnh có thể gặp. Vì thứ nhất, người dùng sẽ dần dần làm quen với chúng trong quá trình đọc cuốn sách này và thực hành trên HĐH Linux của mình. Thứ hai, có thể đọc về những câu lệnh chính trong bất kỳ cuốn sách nào nói về UNIX. 3.3 Console, terminal ảo và shell 47 3.3 Console, terminal ảo và shell Như vậy là bạn đọc đã có kinh nghiệm làm việc đầu tiên ở chế độ văn bản (hay còn gọi là kênh giao tác “console”) của hệ thống Linux. Chúng ta sẽ còn gặp thường xuyên những khái niệm trình lệnh “terminal” và “console”, do đó tác giả giải thích kỹ hơn những khái niệm này. Khi hệ thống UNIX đầu tiên mới được tạo ra, máy tính còn rất to (mainframe) và người dùng làm việc trên những máy tính này qua một hệ thống những giao diện kế tiếp nhau dùng để kết nối các terminal ở xa. Terminal – thiết bị dùng để giao tiếp giữa người dùng và máy tính, thường gồm màn hình và bàn phím. Máy tính cá nhân của bạn đọc là máy tính thế hệ mới, do đó chắc sẽ không có terminal ở xa nào kết nối tới, nhưng vẫn có bàn phím và màn hình thực hiện vai trò terminal đối với người dùng. Ngoài ra thêm vào thành phần của terminal bây giờ còn có chuột. Mainframe có một terminal đặc biệt dành cho nhà quản trị (system adminis trator) hệ thống, được gọi là console. Console thường kết nối tới máy tính không qua giao diện kế tiếp nhau mà qua một ổ cắm riêng (đôi khi thiết bị đưa ra không phải là màn hình mà là một thiết bị in). Vì trên các hệ thống UNIX người ta thường tuân theo các truyền thống, do đó bàn phím và màn hình máy tính cá nhân ngày nay làm việc giống như console ngày xưa. Điểm mạnh của giải pháp này ở chỗ tất cả những chương trình cũ đã dùng để quản trị hệ thống UNIX có thể làm việc không có vấn đề gì trên dạng console mới này. Tuy nhiên, ngoài console Linux còn cho phép kết nối các terminal ở xa tới máy tính. Và hơn thế nữa còn cung cấp khả năng làm việc với một vài terminal ảo từ một console duy nhất. Hãy nhấn tổ hợp phím+ + . Bạn đọc sẽ lại thấy dòng mời đăng nhập login:. Nhưng đây không phải là làm việc lại từ đầu với hệ thống mà bạn đọc chỉ chuyển sang một terminal ảo khác. Ở đây bạn đọc có thể đăng nhập dưới tên người dùng khác. Hãy thử vào hệ thống bằng tên người dùng vừa mới tạo ra (nhimlui). Sau đó hãy nhấn tổ hợp phím +< Alt>+ . Bạn sẽ quay lại màn hình ban đầu. Theo mặc định, hầu hết các bản phân phối Linux lớn (Red Hat, SuSE, Debian,. . . ) mở ra 6 phiên làm việc song song (terminal ảo) như vậy khi khởi động. Như vậy rất thuận tiện cho sử dụng. Để chuyển giữa các terminal ảo chúng ta sử dụng các tổ hợp phím + + — + + . Cần nói thêm là khi làm việc ở chế độ văn bản (không phải đồ hoạ) thì cũng có thể sử dụng các tổ hợp phím + — + và thu được kết quả tương tự. Tuy nhiên nếu làm việc ở chế độ đồ hoạ thì không thể không dùng phím . Do đó, tốt hơn hết là làm quen ngay từ đầu với tổ hợp 3 phím. Nhân tiện cũng cần nói luôn, nếu trong quá trình làm việc bạn đọc không nhớ đang nằm trong terminal ảo nào thì hãy sử dụng câu lệnh tty. Lệnh này sẽ đưa ra tên của terminal ở dạng: /dev/tty2. Xin nói ngay lập tức nếu bạn muốn thoát khỏi một trong các terminal thì có thể thực hiện bằng tổ hợp phím + . Thao tác này không tắt máy và cũng không khởi động lại hệ thống. Đừng quên rằng Linux là HĐH nhiều tiến trình (multiproccess) và nhiều người dùng (multiuser). Một người dùng nào đó dừng công việc không có nghĩa là cần phải tắt máy, còn có những người dùng khác vẫn tiếp tục làm việc. Tổ hợp phím nói trên chỉ đơn giản là dừng phiên làm việc hiện thời của một người dùng, và hệ thống sẽ hiển thị lại trên terminal này 48 Khởi động Linux lần đầu dấu mời đăng nhập (login:) mà bạn đọc đã thấy. Cũng có thể dừng phiên làm việc bằng một trong hai câu lệnh logout hoặc exit. Bây giờ khi đã biết cách bằng đầu và kết thúc phiên làm việc trên hệ thống, xin bạn hãy thực hiện những lời khuyên ở trên, tức là vào hệ thống dưới tên người dùng bình thường (không có quyền cao “cấp” của người dùng root). Hãy đóng tất cả những phiên làm việc mà root mở ra, rồi vào hệ thống dưới tên người dùng mới tạo ra. Còn bây giờ cần nói vài dòng về hệ vỏ. Hệ vỏ hay shell (từ này thường không dịch mà để nguyên tiếng Anh) là chương trình thực hiện việc giao tiếp của hệ thống với người dùng. Chính shell nhận tất cả những câu lệnh mà người dùng nhập vào từ bàn phím và tổ chức việc thực hiện những câu lệnh này. vì thế shell còn có thể gọi là bộ xử lý lệnh (thuật ngữ quen thuộc đối với người dùng DOS). Nói một cách chặt chẽ thì câu “hệ thống hiển thị dấu nhắc” là không đúng, vì dấu nhắc này là do shell đưa ra để đợi người dùng nhập vào câu lệnh tiếp theo. Mỗi lần người dùng nào đó vào hệ thống, câu lệnh login sẽ chạy cho người dùng này một bộ xử lý lệnh – shell. Nếu bạn đọc đăng nhập vào hệ thống từ terminal thứ hai dưới tên người dùng nhimlui (hoặc dưới tên người dùng bạn đã chọn), thì hãy chú ý đến sự khác nhau trong dấu nhắc của hai người dùng root và nhimlui. Dấu nhắc của người dùng root có ký tự # ở cuối, dấu nhắc của tất cả những người dùng còn lại – ký tự $. Không chỉ duy nhất lệnh login có khả năng chạy shell. Bạn chỉ cần nhập vào lệnh bash (đây cũng là tên của chương trình hệ vỏ trên phần lớn các hệ thống Linux) và như vậy là đã chạy một shell mới. Khi thoát khỏi hệ vỏ mới này (bằng câu lệnh exit hoặc tổ hợp phím + ), bạn sẽ quay lại hệ vỏ ban đầu (hệ vỏ mà từ đó bạn đã chạy lệnh bash). Hệ vỏ bash không chỉ là bộ xử lý lệnh mà còn là một ngôn ngữ lập trình mạnh. Trong bash có đầy đủ các câu lệnh tích hợp (nội bộ) và các toán tử, và ngoài ra còn có thể sử dụng các chương trình khác nằm trên đĩa làm câu lệnh. Có thể xem danh sách các câu lệnh tích hợp trong bash bằng lệnh help. Hãy thử lệnh này! Xem thông tin chi tiết về một lệnh nào đó cũng bằng lệnh help này với tham số là tên của lệnh, ví dụ: help cd. Vì hệ vỏ bash đóng một vai trò hết sức quan trọng trong Linux, nên tác giả sẽ dành riêng một chương của cuốn sách này để nói về nó. Tất nhiên là bạn có thể tìm thấy những thông tin tương tự trong bất kỳ cuốn sách nào về UNIX. Cũng cần lưu ý là đối với các hệ thống UNIX các nhà phát triển đã viết ra nhiều hệ vỏ khác thay thế cho bash. Cũng có thể sử dụng những hệ vỏ này trên Linux, nhưng theo mặc định sẽ chạy bash. Bây giờ chúng ta sẽ xem xét thêm một câu lệnh nữa mà bạn đọc cần biết. Máy tính của người dùng thông thường là máy cá nhân (personal computer hay nói gọn là PC) dù ở nhà hay ở cơ quan. Có nghĩa bạn đọc cũng là người dùng root của hệ thống. Nhưng như đã nói ở trên, đăng nhập dưới tên người dùng cao cấp này là không nên, vì mỗi thao tác không cẩn thận của người dùng này có thể dẫn đến những hậu quả không mong muốn. Khi đăng nhập dưới tên người dùng thông thường, ít nhất bạn đọc cũng không thể xóa hoặc làm hỏng các tập tin hệ thống (system files) do sự không cẩn thận của mình. Trong khi đó, có một loạt các thao tác, ví dụ gắn hệ thống tập tin, chỉ có người dùng cao cấp mới có thể thực hiện. Đừng khởi động lại máy tính mỗi lần như vậy! Câu lệnh su giúp đỡ giải quyết những trường hợp như vậy. Chỉ cần nhập câu lệnh su và shell hiện 3.4 Soạn thảo dòng lệnh. Lịch sử lệnh 49 thời (hay nói không đúng là “hệ thống”) sẽ chạy một shell mới mà khi vào trong đó bạn sẽ chạy tất cả các lệnh với quyền của root. Tất nhiên là để có quyền này bạn cần nhập mật khẩu của root vào dòng yêu cầu hiện ra (Password:). Sau khi thực hiện xong các công việc quản trị hệ thống, hãy thoát khỏi hệ vỏ và bạn sẽ trở thành người dùng bình thường với những quyền của mình. Bằng cách tương tự như vào hệ thống dưới tên root ở trên, còn có thể vào hệ thống dưới tên một người dùng bất kỳ mà bạn biết mật khẩu3(nói cách khác là “chạy một hệ vỏ shell mới dưới tên người dùng khác”). Nhưng cần chỉ ra tên của người dùng này trên dòng lệnh, ví dụ: [user]$ su nhimlui Câu lệnh su trước không kèm theo tên nào, theo mặc định sẽ đặt tên người dùng cao cấp root vào. Nhưng trong HĐH Linux còn có thêm một khả năng chuyển tạm thời vào tài khoản của người dùng root để thực hiện các chức năng quản trị. Hãy nhớ rằng Linux là hệ thống nhiều người dùng, trên hệ thống có thể làm việc cùng lúc nhiều người dùng. Vì thế có thể làm việc dưới tên người dùng root trên terminal ảo thứ nhất, còn trên terminal ảo thứ hai – dưới tên người dùng bình thường. Những công việc thường ngày (soạn thảo văn bản, đọc thư,. . . ) bạn có thể thực hiện bằng tài khoản bình thường, còn khi cần thực hiện các công việc quản trị, bạn sẽ dùng tài khoản người dùng cao cấp (root). Để thực hiện lựa chọn này bạn chỉ cần nhấn + + và sẽ có ngay quyền của nhà quản trị. Sau khi làm xong những thao tác mà chỉ có người dùng cao cấp mới có thể làm, hãy quay lại tài khoản của người dùng bình thường ngay lập tức bằng tổ hợp phím + + . Như vậy bạn đọc sẽ không có nguy cơ làm hỏng hệ thống khi còn chưa có nhiều kinh nghiệm sử dụng Linux. 3.4 Soạn thảo dòng lệnh. Lịch sử lệnh Trong những phần trước tác giả đã đề nghị bạn đọc thực hiện một vài lệnh của HĐH Linux. Tác giả cho rằng nếu trong quá trình nhập lệnh có xảy ra lỗi thì bạn có thể đoán được cách sửa chúng. Nhưng dù sao cũng có ích nếu đưa ra danh sách ngắn gọn những câu lệnh (hay nói đúng hơn là phím và tổ hợp phím) dùng để soạn thảo dòng lệnh, cũng như gây ảnh hưởng đến cách làm việc của shell bằng bàn phím (bảng 3.2, chúng ta sẽ nói về chuột ở một phần riêng). Ghi chú: Nếu bạn làm việc trong chương trình Midnight Commander, thì có thể sẽ không thể sử dụng những phím như <→>, <←>, , , để làm các công việc như bảng trên, vì chúng được Midnight Commander dùng để di chuyển dòng chiếu sáng trong bảng4 hiện thời. Nhưng một số tổ hợp phím dùng vớivà thì vẫn dùng được bình thường. Danh sách những câu lệnh (tổ hợp phím) có thể dùng không chỉ giới hạn trong phạm vi bảng 3.2, nhưng chúng ta chỉ xem xét những câu lệnh đơn giản và cần thiết trong lần làm quen đầu tiên với Linux này. Để có thêm thông tin hãy sử dụng câu lệnh man bash hoặc info bash. 3Người dùng root không cần phải biết mật khẩu để làm việc này. 4panel 50 Khởi động Linux lần đầu Bảng 3.2: Những phím soạn thảo dòng lệnh Phím Phản ứng của hệ thống <→>, + Di chuyển sang phải một ký tự (trong khuôn khổ những ký tự đã nhập cộng thêm một ký tự sẽ nhập) <←>, + Di chuyển sang trái một ký tự + Di chuyển sang phải một từ + Di chuyển sang trái một từ , + Di chuyển về đầu dòng lệnh , + Di chuyển về cuối dòng lệnh ,+ Xóa ký tự nằm tại vị trí con trỏ Xóa ký tự nằm bên trái con trỏ , + Bắt đầu thực hiện câu lệnh + Dọn màn hình và đưa dòng lệnh hiện thời lên dòng đầu tiên + Đổi chỗ hai ký tự: ký tự nằm tại vị trí con trỏ và ký tự nằm bên trái con trỏ, sau đó di chuyển con trỏ sang phải một ký tự + Đổi chỗ hai từ: từ nằm tại vị trí con trỏ và từ nằm bên trái con trỏ + Cắt phần dòng lệnh bắt đầu từ ký tự nằm tại vị trí con trỏ đến cuối dòng (phần dòng lệnh cắt ra được lưu trong bộ đệm và có thể đặt vào vị trí khác) + Cắt phần dòng lệnh bắt đầu từ ký tự nằm bên trái con trỏ đến đầu dòng (phần dòng lệnh cắt ra được lưu tron bộ đệm và có thể đặt vào vị trí khác) + Cắt phần dòng lệnh bắt đầu từ vị trí con trỏ đến cuối từ (nếu tại vị trí con trỏ là dấu cách thì cắt toàn bộ từ nằm bên phải nó) + Cắt phần dòng lệnh bắt đầu từ vị trí con trỏ đến đầu từ (nếu tại vị trí con trỏ là dấu cách thì cắt toàn bộ từ nằm bên trái nó)+ Cắt phần dòng lệnh bắt đầu từ vị trí con trỏ đến dấu cách ở bên trái + Đặt (dán) đoạn dòng lệnh đã cắt cuối cùng vào vị trí con trỏ + Chuyển ký tự tại vị trí con trỏ thành viết hoa rồi di chuyển con trỏ tới dấu cách đầu tiên ở bên phải so với từ hiện thời + Chuyển tất cả các ký tự bắt đầu từ vị trí con trỏ thành viết HOA rồi di chuyển con trỏ tới dấu cách đầu tiên ở bên phải + Chuyển tất cả các ký tự bắt đầu từ vị trí con trỏ tới cuối từ thành viết thường rồi di chuyển con trỏ tới dấu cách đầu tiên ở bên phải + , + Những tổ hợp phím này cho phép xem các trang màn hình đã hiển thị. Số lượng những trang này phụ thuộc vào bộ nhớ của cạc màn hình. Có ích khi có câu lệnh nào đó đưa ra màn hình rất nhiều thông tin chạy nhanh qua màn hình, người dùng không kịp thấy chúng + Dừng thực hiện câu lệnh vừa chạy (mà vẫn đang chạy) + Thoát ra khỏi hệ vỏ bash 3.5 Ngừng làm việc với Linux 51 Xin lưu ý bạn đọc trong hệ vỏ bash có chương trình tích hợp giúp dễ dành nhập câu lệnh trên dòng lệnh. Gọi chương trình con này bằng một hoặc hai lần nhấn phím sau khi nhập một vài ký tự. Nếu những ký tự này là phần đầu của ít nhất một trong những câu lệnh mà bash biết, thì có hai khả năng xảy ra. Nếu chúng là phần đầu của duy nhất một câu lệnh, tức là bash chỉ tìm thấy có một câu lệnh này, thì hệ vỏ sẽ thêm phần còn lại của câu lệnh này vào dòng lệnh. Nếu bash tìm thấy nhiều câu lệnh có phần đầu này, thì sẽ hiển thị danh sách tất cả những phương án có thể chọn. Nhờ đó người dùng có khả năng nhập thêm một vài ký tự nữa làm giảm số phương án chọn xuống còn 1 rồi là dùng phím một lần nữa. Nếu số phương án chọn là rất nhiều (ví dụ nhấn phím hai lần khi dòng lệnh trống rỗng) thì bạn đọc sẽ nghe thấy tiếng bíp sau lần nhấn đầu tiên, và sau lần nhấn thứ hai sẽ xuất hiện một dòng dạng Display all 2627 possibilities? (y or n) (Hiển thị tất cả 2627 khả năng? cần chọn y – có hoặc n – không). Nếu nhấn hai lần phím ở sau tên của một câu lệnh và một khoảng trắng, thì hệ vỏ bash sẽ coi như bạn đang tìm tên tập tin để dùng làm tham số cho lệnh này, và bash sẽ đưa ra danh sách tập tin của thư mục hiện thời. Đây là tính năng trợ giúp của bash trong trường hợp người dùng quên tên tập tin trong khi làm việc căng thẳng. Cũng giống như trường hợp câu lệnh, nếu đã nhập vào một phần tên tập tin thì phần còn lại sẽ được tự động thêm vào. Tương tự như vậy có thể đoán phần còn lại của các biến môi trường5, chỉ cần sử dụng tổ hợp phím +<$> thay cho . Trong khi làm việc với hệ vỏ sẽ có ích nếu biết rằng, bash ghi nhớ một số câu lệnh (theo mặc định là 1000 lệnh, giá trị này được đặt trong biến HISTSIZE, xem chương 5) và cho phép gọi lại chúng bằng cách chọn từ danh sách. Đây được gọi là lịch sử lệnh. Có thể xem lịch sử lệnh bằng câu lệnh history. Ở đây bạn cần sử dụng các tổ hợp phím + và + để xem danh sách (có thể) rất dài này. Lịch sử lệnh được lưu trong tập tin xác định bởi biến HISTFILE (thường là $HOME/.bash_history). Để làm việc với lịch sử câu lệnh trong hệ vỏ bash người ta sử dụng những tổ hợp phím trong bảng 3.3. 3.5 Ngừng làm việc với Linux Mặc dù máy tính làm việc dưới sự điều khiển của HĐH Linux có thể để chạy suốt ngày đêm, nhưng phần lớn người dùng máy tính cá nhân đã quen với việc tắt máy sau khi làm việc xong. Khi làm việc với HĐH Linux không thể tắt máy bằng cách ngắt nguồn điện như đối với MS-DOS. Vì trong bất kỳ thời điểm nào trên hệ thống cũng có rất nhiều quá trình đang làm việc. Bạn có thể thấy điều này bằng cách thực hiện lệnh: [nhimlui]$ ps ax Thực hiện lại lệnh này một lần nữa để xem lại. Nhưng nguyên nhân quan trọng hơn là ở chỗ một số tiến trình này có thể đang làm việc với các tập tin, và hệ thống còn chưa ghi nhớ tất cả các thay đổi với những tập tin lên đĩa mà chỉ lưu 5environment variable 52 Khởi động Linux lần đầu Bảng 3.3: Tổ hợp phím điều khiển lịch sử lệnh Phím Phản ứng của hệ thống <↑> hoặc + Chuyển tới (gọi vào dòng lệnh) câu lệnh trước trong danh sách (di chuyển ngược lại danh sách) <↓> hoặc
+ Chuyển tới câu lệnh tiếp theo trong danh sách (di chuyển theo danh sách) Chuyển tới câu lệnh đầu tiên trong danh sách lịch sử lệnh , Thực hiện (không cần nhấn câu lệnh thứ n trong danh sách , <->, Thực hiện câu lệnh thứ n tính từ cuối danh sách , dòng_ký_tự Thực hiện dòng lệnh, có phần đầu trùng với dòng_ký_tự. Việc tìm dòng lệnh cần thiết sẽ được thực hiện từ cuối tập tin lịch sử và dòng lệnh đầu tiên tìm thấy sẽ được thực hiện + Cũng giống như nhấn phím , sau đó hiển thị câu lệnh tiếp theo trong lịch sử lệnh tạm chúng trong bộ nhớ (cache). Nếu ngắt nguồn điện thì những thay đổi này sẽ không được lưu và sẽ bị mất, đôi khi có thể dẫn đến không khởi động được máy trong lần sau. Do đó cần biết dừng hệ thống một cách đúng đắn trước khi tắt máy. Công việc này do câu lệnh (chương trình) shutdown đảm nhiệm. Chỉ có người dùng root mới có thể thực hiện câu lệnh shutdown này6, do đó bạn cần đăng nhập vào hệ thống dưới tên người dùng này, hoặc dùng câu lệnh su để có đủ quyền tương ứng. Câu lệnh shutdown có cú pháp như sau: [root]# shutdown Ghi chú: Rất có thể khi chạy lệnh, bạn sẽ nhận được câu trả lời “bash: shutdown: command not found”. Điều đó có nghĩa là bash không biết tìm chương trình ở đây. Trong trường hợp đó bạn cần nhập vào đường dẫn đầy đủ đến chương trình, ở đây là /sbin/shutdown, vì tập tin chương trình của shutdown nằm tại /sbin. Thường sử dụng hai trong số các tùy chọn của chương trình shutdown: -h – dừng hoàn toàn hệ thống (halt, sẽ tắt máy) -r – khởi động lại hệ thống (reboot). Tham số thời_gian dùng để “hẹn giờ” thực hiện câu lệnh (không nhất thiết phải thực hiện câu lệnh ngay lập tức). Thời gian hẹn giờ được tính từ lúc nhấn phím . Ví dụ, nếu bạn muốn khởi động lại sau 5 phút thì hãy nhập vào câu lệnh: [root]# shutdown -r +5 Câu lệnh này có nghĩa là “dừng hệ thống sau 5 phút và khởi động lại sau khi hoàn thành công việc”. Đối với chúng ta thì tạm thời câu lệnh sau sẽ thích hợp hơn: 6Cũng có thể cấu hình để những người dùng khác thực hiện được shutdown, ví dụ qua sudo. 3.6 Trợ giúp khi dùng Linux 53 [root]# shutdown -h now Câu lệnh này sẽ tắt máy ngay lập tức. Tương đương với câu lệnh này là lệnh halt. Sau khi nhấn tổ hợp phím “nổi tiếng” + + trên Linux sẽ thực hiện các hành động tương tự với lệnh [root]# shutdown -r now Bằng cách này cũng có thể tắt máy, nhưng cần ngắt nguồn điện trong khi hệ thống bắt đầu khởi động lại. 3.6 Trợ giúp khi dùng Linux Như vậy là bạn đọc đã kết thúc phiên làm việc đầu tiên với HĐH Linux và tôi mong rằng bạn chưa cần trợ giúp trong một tình huống nào đó. Tác giả cũng mong cuốn sách này sẽ thực hiện vai trò trợ giúp trong thời gian đầu tiên này, nhưng có thể nó không giải quyết được tất cả những vấn đề của bạn. Vì thế tác giả sẽ đưa ra ngay lập tức những nguồn thông tin khác. Nhưng tôi sẽ phải “đi trước” kể về cách nhận thông tin trợ giúp trong giao diện đồ hoạ (X Window). Tác giả coi cách giải quyết này là đúng vì người dùng cần biết trước cách thoát khỏi những trường hợp khó khăn. 3.6.1 Các nguồn thông tin trợ giúp Nếu rơi vào tình huống mà bạn không biết phải làm gì để có được kết quả mong muốn, thì tốt nhất hãy tìm trợ giúp ở ngay trong hệ thống. Các phiên bản Linux có hàng nghìn trang tài liệu ở dạng tập tin, do đó câu trả lời cho câu hỏi của bạn đã nằm trong lòng bàn tay. Có một vài nguồn độc lập chứa thông tin về hầu hết các mặt của hệ thống Linux: các trang trợ giúp man trợ giúp siêu văn bản info tài liệu đi kèm với phần mềm HOWTO và FAQ của dự án The Linux Document Project (http://www. tldp.org) câu lệnh locate Cần nói ngay lập tức là phần lớn thông tin từ những nguồn này bằng tiếng Anh. Các dự án dịch chúng sang tiếng Việt còn chưa được tổ chức hoặc còn chưa được hoàn chỉnh. Do đó chúng ta sẽ xem xét từng nguồn thông tin này một cách cụ thể hơn. 54 Khởi động Linux lần đầu 3.6.2 Các trang trợ giúp man Như đã nói ngắn gọn ở trên về câu lệnh man, bằng câu lệnh này người dùng trong hình huống khó khăn luôn luôn có thể tìm trợ giúp về bất kỳ câu lệnh nào của hệ thống, về định dạng tập tin, và về các gọi hệ thống (system call). Đây là cách nhận trợ giúp chính trong tất cả các hệ thống UNIX. Các trang trợ giúp man chia thành các phần sau: Bảng 3.4: Các phần chính của trợ giúp man Phần Nội dung 0 Các tập tin header (thường nằm trong /usr/include) 1 Chương trình hoặc câu lệnh của người dùng 8 Câu lệnh dùng để quản trị hệ thống 2 Gọi hệ thống (system call, hàm do nhân cung cấp) 3 Gọi thư viện (library call, chương trình con, hàm trong thư viện của ứng dụng) 4 Thiết bị (tập tin đặc biệt, thường nằm trong /dev) 5 Định dạng tập tin và quy ước, ví dụ /etc/passwd 6 Trò chơi 7 Khác (bao gồm các gói macro và quy ước, ví dụ man(7), groff(7) 9 Nhân (kernel routines) n các lệnh Tcl/Tk Thứ tự liệt kê ở đây không phải là sự nhầm lẫn. Vấn đề ở chỗ các tập tin chứa thông tin của trợ giúp man nằm trong các thư mục con của thư mục /usr/share/man và khi câu lệnh man tìm kiếm thông tin cần thiết, thì nó sẽ xem các thư mục con này theo thứ tự đã chỉ ra trong bảng 3.4. Nếu bạn chạy lệnh [user]$ man swapon thì sẽ nhận được trợ giúp về câu lệnh swapon nằm trong phần 8. Vì thế nếu muốn xem trợ giúp về gọi hệ thống swapon cần chạy lệnh [user]$ man 2 swapon để chỉ ra số thứ tự của phần trợ giúp cần tìm kiếm thông tin. Các trang man được xem bằng chương trình less (hoặc chương trình xác định bởi biến PAGER), do đó có khả năng xem thông tin theo từng màn hình và di chuyển màn hình này xuống dưới và lên trên và để di chuyển có thể sử dụng các phím như trong chương trình less. Những phím thường dùng nhất là: Nếu bạn không thích đọc từ màn hình mà cầm tay đọc, thì có thể in ra trang man tương ứng bằng lệnh [user]$ man tên_câu_lệnh | lpr hoặc nếu máy in là postscript thì dùng: [user]$ man -t tên_câu_lệnh | lpr 3.6 Trợ giúp khi dùng Linux 55 Bảng 3.5: Phím sử dụng để xem trang man Phím Chức năngThoát khỏi chương trìnhXem từng dòng Hiển thị màn hình thông tin tiếp theo Quay lại màn hình trước >, dòng ký tự, Tìm kiếm dòng ký tự chỉ ra Lặp lại tìm kiếm vừa thực hiện. Tuy nhiên để có thể nhận được thông tin mong muốn thì còn cần phải biết chỗ tìm thông tin đó. Trong trường hợp này có thể dùng hai câu lệnh whatis và apropos. Câu lệnh whatis tìm kiếm từ khóa đưa ra trong cơ sở dữ liệu bao gồm danh sách các câu lệnh và mô tả ngắn gọn của chúng. Lệnh này chỉ đưa ra những trùng lặp chính xác với từ khóa tìm kiếm. Câu lệnh apropos thực hiện tìm kiếm theo các phần của từ khóa. Tương tự như lệnh apropos là câu lệnh man với tham số -k. Hãy thử chạy lệnh sau: [user]$ man -k net Cần phải nói luôn là để cho các câu lệnh man -k, whatis và apropos làm việc, thì đầu tiên cần tạo ra cơ sở dữ liệu về các câu lệnh có trên máy bằng cách chạy lệnh makewhatis. Trong trường hợp ngược lại khi tìm kiếm bạn sẽ nhận được thông báo “nothing appropriate”. Chỉ có người dùng root mới có quyền chạy câu lệnh makewhatis. Nếu bạn đọc để máy chạy cả đêm thì tốt nhất chạy câu lệnh này ở dạng công việc cho tiến trình cron7. Cuối cùng tác giả muốn nói rằng, các trang trợ giúp man không dành cho thời gian làm quen đầu tiên với Linux. Chúng dành cho những người dùng có kinh nghiệm cần có “sổ tay tra cứu” về định dạng, tuỳ chọn và cú pháp của lệnh trong quá trình làm việc để không phải nhớ một số lượng lớn những thông tin này trong đầu. 3.6.3 Câu lệnh info Câu lệnh info là dạng trợ giúp thay thế và tương đương với man. Để nhận thông tin về một câu lệnh nào đó, thì cũng giống như man, cần nhập vào info cùng với một tham số là tên của câu lệnh quan tâm. Ví dụ: [user]$ info man Thông tin màn bạn sẽ thấy trên màn hình trong phần lớn trường hợp sẽ khác với những gì mà câu lệnh man đưa ra. Và theo ý kiến của nhiều người dùng là về chiều hướng tốt hơn. Nhưng sự khác nhau cơ bản nhất ở chỗ info đưa ra thông tin dạng siêu văn bản (hypertext) giống như các trang web. Nhờ đó bạn có khả năng xem các phần khác nhau của trợ giúp mà không cần phải thoát ra khỏi chương trình xem này. Trong khi làm việc ở chế độ văn bản, bạn có thể 7cron là chương trình để chạy tự động các công việc theo thời gian đã định. 56 Khởi động Linux lần đầu chạy câu lệnh info trên một trong các terminal ảo (hãy nhớ đến các tổ hợp phím + + , + + v.v. . . ) để có thể chuyển sang terminal ảo đó tìm trợ giúp khi cần thiết. Trong trường hợp bạn không biết tìm thông tin cần thiết ở đâu thì có thể chuyển sang các phần khác nhau bằng các siêu liên kết (hyperlink) mà info tạo ra. Những liên kết này được đánh dấu bằng ký tự sao (*), khác với cách đánh dấu liên kết trên các trang Web nhưng vẫn giữ nguyên được sự thuận lợi. Có thể di chuyển qua các liên kết bằng phím . Sau khi di chuyển đến liên kết mong muốn, hãy nhấn phím . Phím đưa người dùng trở lại trang vừa xem, phím
đưa đến trang tiếp theo, còn chuyển lên trên một bậc trong cấu trúc phân bậc của các trang tài liệu này. Ngoài ra, còn có thể chuyển theo liên kết bằng cách khác tương tự như hệ thống trình đơn. Đầu tiên cần nhấn phím , sau đó nhập vào dòng Menu item: ở cuối màn hình một vài ký tự đầu tiên của tên của phần trợ giúp cần thiết. Tên của những phần trợ giúp này được hiển thị trên màn hình. Số ký tự phải đủ sao cho chỉ tương ứng với một phần trợ giúp, nếu không thì chương trình sẽ yêu cầu nhập thêm vào. Thoát ra khỏi info bằng phím . 3.6.4 Câu lệnh help Như đã nhắc đến ở trên, hệ thống trợ giúp về các lệnh tích hợp của hệ vỏ bash là câu lệnh help. Nếu chạy lệnh help không có tham số thì sẽ nhận được danh sách của tất cả các lệnh tích hợp của bash. Nếu chạy help tên, trong đó tên là tên của một trong những câu lệnh nói trên, thì bạn sẽ nhận được giới thiệu ngắn gọn về cách sử dụng câu lệnh này. 3.6.5 Tài liệu đi kèm với bản phân phối và chương trình ứng dụng Nếu trong quá trình cài đặt không bỏ đi những gói tài liệu, thì sau khi kết thúc bạn sẽ tìm thấy trong thư mục /usr/share/doc (hoặc /usr/doc) các thư mục con HOWTO, FAQ,. . . Những thư mục này chứa tài liệu đầy đủ về hệ thống Linux nói chung cũng như những phần riêng rẽ của nó. Những tài liệu này có ở dạng văn bản ASCII và có thể xem chúng bằng các câu lệnh more tên hoặc less tên hoặc bằng chương trình xem có trong Midnight Commander. Phần lớn các chương trình ứng dụng có kèm theo tài liệu hướng dẫn cài đặt và sử dụng. Nếu cài đặt chương trình từ gói (package) dạng rpm (Fedora Core, SuSE, Mandriva,. . . ) thì tài liệu sẽ nằm trong thư mục con tương ứng của thư mục /usr/share/doc. Tên của những thư mục con này tương ứng với tên của chương trình và phiên bản của nó. Ví dụ, chương trình nhập tiếng Việt mà tôi đang dùng để gõ những dòng này xvnkb phiên bản 0.2.9 có thư mục con tương ứng xvnkb-0.2.9 nằm trong /usr/share/doc sau khi cài đặt. Đôi khi để tìm tập tin trợ giúp mong muốn bạn sẽ cần đến câu lệnh locate. Câu lệnh này trong một chừng mực nào đó tương tự với các lệnh whatis và apropos. Khi chạy locate nó sẽ tìm tất cả những tập tin có tên chứa từ khóa đưa ra. Ví dụ locate net sẽ tìm tất cả những tên tập tin có tên chứa “net”. Những tập tin này có rất nhiều trên máy. Trong từ khóa (mẫu) có thể sử dụng các ký tự thay thế *, ?, []. Tuy nhiên câu lệnh locate không tìm kiếm theo các 3.6 Trợ giúp khi dùng Linux 57 thư mục của hệ thống tập tin, mà theo cơ sở dữ liệu đặc biệt chứa tên các tập tin được tạo ra (và đôi khi cần cập nhật) bằng lệnh updatedb. Trong một số bản phân phối locate được thay thế bởi slocate (secure lo cate). slocate tự tạo cho mình cơ sở dữ liệu nói trên sau khi chạy với tham số tương ứng. 3.6.6 Câu lệnh xman Đây là chương trình cho phép xem các trang trợ giúp man khi làm việc ở giao diện đồ hoạ (GUI). Việc tìm kiếm và hiển thị các trang trợ giúp được thực hiện bằng cách nhấn các nút và trình đơn. Còn lại (theo thông tin hiển thị) xman cũng giống như man. 3.6.7 Câu lệnh helptool Sau khi chạy lệnh helptool sẽ hiện ra một cửa sổ đồ hoạ, có một ô nhập vào để người dùng đưa ra thuật ngữ đang quan tâm. Chương trình sẽ xem tất cả các tập tin tài liệu (bạn có thể cấu hình để chọn những tài liệu nào cần xem khi tìm kiếm). Sau khi hoàn thành tìm kiếm chương trình sẽ hiện ra danh sách những tập tin có chứa thuật ngữ này. Nếu nhấn chuột vào một tập tin trong danh sách thì sẽ hiện ra một cửa sổ khác nội dung của tập tin đã chọn. Khi này tập tin sẽ được hiển thị ở dạng lưu trên đĩa: trang info, trang man, v.v. . . 3.6.8 Sách và Internet Tất nhiên, học Linux dễ dàng và đơn giản nhất khi có một cuốn sách tốt. Trước tiên bạn cần đọc tài liệu hướng dẫn đi kèm với bản phân phối của mình. Các bản phân phối lớn như Debian, SuSE, Fedora,. . . đều đã có những tài liệu này (rất có thể đã được dịch sang tiếng Việt). Rất tiếc người dịch chưa đọc cuốn sách tiếng Việt nào về Linux do đó không thể giới thiệu với bạn đọc. Tất nhiên nếu bạn có kết nối Internet (bây giờ không còn quá xa xỉ) và một chút tiếng Anh thì có thể tìm được câu trả lời cho mọi câu hỏi của mình. Tôi xin đưa ra một số địa chỉ sau làm bước khởi đầu cho bạn đọc trong biển thông tin vô bờ bến này. Các trang tiếng Việt 1. http://vnoss.org – trang web dành cho người dùng mã nguồn mở (MNM) Việt Nam. Có nhiều thông tin về Linux, tài liệu về Linux, diễn đàn cho phép bạn đặt câu hỏi của mình. Trang web do bác Nguyễn Đại Quý đang sống và làm việc tại Bỉ quản lý. 2. http://vnoss.net – tin tức về Linux và MNM. 3. http://vnlinux.org – đây là trang web dành cho nhóm người dùng Linux Việt Nam (vietlug). Bạn sẽ tìm thấy nhiều thông tin có ích ở đây và có thể đăng ký tham gia nhóm thư vietlug để đặt câu hỏi. Trang này do anh Larry Nguyễn, một Việt Kiều ở Mỹ, quản lý. 58 Khởi động Linux lần đầu 4. http://vnoss.net/dokuwiki/doku.php?id=linux:tailieutiengviet – trên trang này tổng hợp tất cả những tài liệu tiếng Việt về Linux, rất có thể bạn sẽ tìm thấy tài liệu về đề tài mình cần tìm hiểu trên trang này. 5. http://kde-vi.org – trang web của nhóm dịch giao diện KDE sang tiếng Việt. Các trang tiếng Anh 1. http://www.linux.com 2. http://www.linux.org 3. http://www.linux.org.uk – Trang web Linux của Châu Âu. Do Allan Cox một trong các nhà phát triển Linux hỗ trợ. 4. http://www.tldp.org – Trang web chính chứa tài liệu về Linux. Rất nhiều tài liệu bao gồm HOWTO, FAQ, sách. . . 5. http://freshmeat.net/ – Thông báo hàng ngày về những chương trình ứng dụng mới ra dành cho Linux. Kho phần mềm khổng lồ cho Linux. 6. http://www.li.org – Tổ chức Linux International. 7. http://www.linuxstart.com 8. http://oreilly.linux.co – Ở đây bạn sẽ tìm thấy rất nhiều tài liệu. 9. http://www.linuxplanet.com 10. http://www.kde.org – Trang chủ của môi trường làm việc KDE. 11. http://www.gnu.org – Các ứng dụng dành cho Linux, trong đó nổi tiếng nhất là trình soạn thảo Emacs (GNU’s Not UNIX). 12. http://slashdot.org – Những tin tức mới nhất về công nghệ máy tính trong đó có Linux. Có các bài báo và lời bình của người đọc (không qua kiểm duyệt). 13. http://www.linuxtoday.com – Danh sách dài những tin tức, thông báo quảng cáo và các thông tin khác. Xem trang này bạn sẽ biết phần lớn những sự kiện trong thế giới Linux. 14. http://www.lwn.net – Tin tức hàng tuần về Linux. Thông tin chia thành từng hạng mục: thông tin chung, thương mại, thông tin về nhân Linux, công cụ phát triển chương trình mới, chương trình cho Linux, v.v. . . Nếu bạn muốn tin tưởng rằng Linux phát triển rất nhanh và muốn nhận trợ giúp của các công ty thương mại lớn thì nhất định phải thăm trang này. Tin tức trên tuần báo này được ban biên tập chú thích rất tốt. 15. http://www.linuxnewbie.org – Trang web tốt cho những người dùng mới. 3.6 Trợ giúp khi dùng Linux 59 16. http://www.linuxjournal.com – tạp chí Linux. Thường đăng những bài báo về nhiều đề tài. 17. http://www.linuxgazette.com – tờ báo Linux này sẽ thú vị đối với cả người dùng mới và người dùng có kinh nghiệm. 18. http://www.linuxfocus.org – Tạp chí phi thương mại toàn cầu. 19. http://www.linuxworld.com – Một trang web tốt có rất nhiều bài báo hay. 20. http://www.linux-mag.com – Linux Magazin, một tờ tạp chí rất thú vị. 21. http://www.penguinmagazine.com. Tất nhiên đây không phải là danh sách đầy đủ những trang web nói về Linux. Những trang nói trên chỉ là điểm khởi đầu để từ đó bạn sẽ tìm được những trang web khác trong biển thông tin Internet. Đi đến đâu là phụ thuộc vào ý muốn của bạn. Nếu có vấn đề trong lúc cài đặt, thì hãy hỏi dịch vụ khách hàng của phân phối đĩa. Nếu bạn mua đĩa của một công ty chuyên môn thì sẽ có địa chỉ liên lạc của dịch vụ này. Nếu bạn mua đĩa ghi lại hoặc tự ghi đĩa từ tập tin ISO nhận được qua Internet thì rất có thể lỗi cài đặt là do khi ghi đĩa gây ra. Hãy sử dụng hộp thư điện tử. Bạn nên đăng ký với một vài nhóm thư chung (mailing list) nào đó, ví dụ mailto:[email protected]. Cách đăng ký còn phụ thuộc vào từng nhóm thư (nói chính xác hơn là phụ thuộc vào máy chủ điều khiển nhóm thư này). Nhưng hiện nay thường có hai cách đăng ký: gửi thư đến một địa chỉ xác định để yêu cầu, đăng ký qua giao diện web. Thông tin này bạn có thể tìm thấy trên trang web giới thiệu về nhóm thư chung. Tuy nhiên bạn cần biết là để đọc được tất cả thư chung thì cần rất nhiều thời gian, và còn phải đọc rất nhiều thư của những người dùng mới khác (ví dụ “Console là gì?”), hoặc thậm chí có cả những lá thư “ngớ ngẩn” (ví dụ “Hôm nay dùng Debian thật vui”) và tất nhiên là phải đọc cả những thư trả lời cho những câu hỏi này của những ai biết một chút gì đó. Do đó nếu muốn bạn có thể xem kho lưu trữ những lá thư này bằng trình duyệt, rất có thể đã có câu trả lời cho câu hỏi của bạn ở đó. Và như vậy bạn không cần phải đăng ký cũng như viết thư vào nhóm thư chung nữa. Tất nhiên nếu không tìm thấy thì đừng ngại ngần đặt câu hỏi. Người dùng Linux hết sức vui lòng trả lời thư của bạn. Bảo đảm là bạn sẽ nhận được câu trả lời, nếu không hiểu thì còn có thể yêu cầu giải thích thêm. Khi đặt câu hỏi có liên quan đến hệ thống Linux của bạn, cần luôn luôn thêm vào thư của mình càng nhiều chi tiết càng tốt (nhưng đừng thêm thông tin thừa) bao gồm: tên của bản phân phối (Debian, SuSE, Fedora, hay một cái nào khác), phiên bản nhân, có vấn đề với phần cứng nào (phiên bản, dòng chữ ghi trên mạch điện tử), thông báo nào hiện ra khi có vấn đề. Đừng đòi hỏi người dùng khác gửi câu trả lời thẳng đến địa chỉ của bạn, “viết thư vào nhóm thư chung là tự thể hiện, viết thư điện tử cũng là sự hỗ trợ kỹ thuật. Viết thư thì miễn phí, nhưng sự hỗ trợ kỹ thuật thì không”. Xin hãy luôn nhớ điều đó! Chương 4 Làm quen với hệ thống tập tin ext3fs1 Bây giờ bạn đã biết cách khởi động và dừng hệ thống Linux, đã đến lúc làm quen với một trong những thành phần chính và quan trọng của Linux – đó là hệ thống tập tin. Hệ thống tập tin – là cấu trúc nhờ đó nhân của hệ điều hành có thể cung cấp cho người dùng và các tiến trình tài nguyên của hệ thống ở dạng bộ nhớ lâu dài trên các đĩa lưu2thông tin: đĩa cứng, đĩa từ, CD, DVD, v.v. . . Mỗi hệ thống tập tin, giống như một cái đĩa ăn, có hai mặt. Một mặt của nó luôn quay về phía người dùng (hay nói chính xác hơn là quay về phía ứng dụng), chúng ta tạm gọi nó là mặt trước. Từ phía mặt trước này người dùng thấy hệ thống tập tin là một cấu trúc lôgíc của các thư mục và tập tin. Mặt còn lại, mà người dùng không thấy, quay về phía chính bản thân đĩa lưu tạo thành một vùng bên trong của hệ thống tập tin đối với người dùng, chúng ta tạm gọi là mặt sau. Mặt này của hệ thống tập tin có cấu trúc không đơn giản chút nào. Vì ở đây thực hiện các cơ chế ghi tập tin lên các đĩa lưu khác nhau, thực hiện việc truy cập (chọn thông tin cần thiết) và nhiều thao tác khác. Trong chương hiện tại chúng ta sẽ xem xét mặt quay về phía người dùng của hệ thống tập tin. Mặt còn lại sẽ dành cho một chương sách ở sau. Cần nói thêm là chúng ta sẽ xem xét một hệ thống tập tin cụ thể ext3fs, hệ thống tập tin cơ bản của Linux đến thời điểm hiện nay. Còn có những hệ thống tập tin khác nhưng chúng ta sẽ đề cập đến chúng muộn hơn. 4.1 Tập tin và tên của chúng Máy tính chỉ là công cụ để làm việc với thông tin không hơn không kém. Mà thông tin trên mỗi HĐH được lưu ở dạng tập tin trên các đĩa lưu. Từ phía của HĐH thì tập tin là một chuỗi liên tục các byte với chiều dài xác định. Hệ điều hành không quan tâm đến định dạng bên trong của tập tin. Nhưng nó cần đặt cho tập tin một cái tên nào đó để người dùng (hay nói đúng hơn là chương trình ứng dụng) có thể làm việc với tập tin. Làm sao để người dùng có thể làm việc với tập tin đó là công việc của hệ thống tập tin, người dùng thường không cần quan tâm đến. Vì thế, đối với người dùng thì hệ thống tập tin là một cấu trúc lôgíc của các thư mục và tập tin. Tên tập tin trong Linux có thể dài 255 ký tự bao gồm bất kỳ ký tự nào trừ ký tự có mã bằng 0 và ký tự dấu gạch chéo (/). Tuy nhiên còn có nhiều ký tự nữa có 1Chương này do người dịch viết 2Một số tác giả thích dùng thuật ngữ “vật chứa” ở đây. 4.1 Tập tin và tên của chúng 61 ý nghĩa đặc biệt trong hệ vỏ shell và do đó không nên dùng để đặt tên tập tin. Đó là những ký tự sau: ! @ # $ & ~ % * ( ) [ ] { } ’ " \ : ; > < ‘ dấu cách Nếu tên tập tin chứa một trong những ký tự này (không khuyên dùng nhưng vẫn có thể) thì trước nó phải đặt một dấu gạch chéo ngược (\) (điều này vẫn đúng trong trường hợp có chính bản thân dấu gạch chéo ngược, tức là phải lặp lại dấu này hai lần). Ví dụ: [user]$ mkdir \\mot\&hai sẽ tạo thư mục \mot&hai. Còn có thể đặt tên tập tin hoặc thư mục với những ký tự nói trên vào dấu ngặc kép. Ví dụ, để tạo thư mục có tên “mot hai ba” chúng ta cần dùng câu lệnh sau: [user]$ mkdir "mot hai ba" vì câu lệnh [user]$ mkdir mot hai ba sẽ tạo ba thư mục: “mot”, “hai” và “ba”. Làm tương tự như vậy đối với những ký tự khác, tức là có thể thêm chúng vào tên tập tin (thư mục) nếu đưa tên vào trong dấu ngoặc kép hoặc dùng dấu gạch chéo ngược để bỏ đi ý nghĩa đặc biệt của chúng. Tuy nhiên tốt nhất là không sử dụng những ký tự này kể cả dấu cách trong tên tập tin và thư mục, bởi vì có thể gây ra vấn đề cho một số ứng dụng khi cần sử dụng những tập tin như vậy và cả khi di chuyển những tập tin đó lên hệ thống tập tin khác. Đối với dấu chấm thì không phải như vậy. Trong Linux người dùng thường đặt nhiều dấu chấm trong tên của tập tin, ví dụ xvnkb-0.2.9.tar.gz. Khi này khái niệm phần mở rộng tập tin (thường dùng trong DOS) không còn có ý nghĩa gì, mặc dù vẫn dùng phần cuối cùng của tên tập tin sau dấu chấm để làm ký hiệu về các dạng tập tin đặc biệt (.tar.gz dùng để ký hiệu các tập tin nén3). Trên Linux các tập tin chương trình và tập tin bình thường không phân biệt theo phần mở rộng của tên (trong DOS tập tin chương trình có phần mở rộng exe) mà theo các dấu hiệu khác, chúng ta sẽ đề cập đến ở sau. Dấu chấm có ý nghĩa đặc biệt trong tên tập tin. Nếu nó là dấu chấm đầu tiên trong tên, thì tập tin này sẽ là ẩn (thuộc tính hidden) đối với một số câu lệnh, ví dụ, lệnh ls không hiển thị những tập tin như vậy.4 Như đã nói ở chương trước trong Linux có phân biệt các ký tự viết hoa và viết thường. Điều này cũng đúng đối với tên tập tin. Vì thế l4u-0.9.2.tar.gz và L4U-0.9.2.tar.gz có thể nằm trong cùng một thư mục và là tên của các tập tin khác nhau. Điều này lúc đầu có thể gây khó khăn cho người dùng Windows nhưng sau khi quen thì bạn sẽ thấy nó thật sự có ích. Chúng ta đã quen với việc tập tin được xác định hoàn toàn theo tên của nó. Tuy nhiên nếu nhìn từ phía hệ điều hành và hệ thống tập tin thì không phải 3thường gọi theo tiếng lóng là tarball, quả bóng tar 4Nhưng lệnh ls -a sẽ hiển thị. Đọc thêm ls(1) để biết chi tiết. 62 Làm quen với hệ thống tập tin ext3fs như vậy. Chúng ta sẽ nói kỹ về mặt sau của hệ thống tập tin trong một số chương sách sắp tới, nhưng bây giờ cũng cần đề cập đến một chút về chỉ số “inode”. Vấn đề ở chỗ mỗi tập tin trong Linux có một “chỉ số ký hiệu” (index descriptor) tương ứng, hay còn gọi là “inode” (tạm thời chưa có thuật ngữ tiếng Việt chính xác nên xin để nguyên từ tiếng Anh). Chính inode lưu tất cả những thông tin cần thiết cho hệ thống tập tin về tập tin, bao gồm thông tin về vị trí của các phần của tập tin trên đĩa lưu, thông tin về dạng tập tin và nhiều thông tin khác. Các chỉ số inode nằm trong một bảng đặc biệt gọi là inode table. Bảng này được tạo ra trên đĩa lưu cùng lúc với hệ thống tập tin. Mỗi đĩa lưu dù là thật sự hay lôgíc thì đều có một bảng các chỉ số inode của riêng mình. Các inode trong bảng được đánh số theo thứ tự, và chính chỉ số này mới là tên thực sự của tập tin trên hệ thống. Chúng ta sẽ gọi chỉ số này là chỉ số của tập tin. Tuy nhiên đối với người dùng thì những tên như vậy thật sự không thuận tiện. Không phải ai cũng có khả năng nhớ đã ghi gì trong tập tin với số 12081982 (nói chính xác hơn là chỉ có một số rất ít người có khả năng này). Vì thế các tập tin còn được đặt thêm một tên thân thiện với người dùng và hơn thế nữa còn được nhóm vào các thư mục. Tác giả đưa ra những thông tin ở trên chỉ để nói rằng tên của bất kỳ tập tin nào trong Linux không phải gì khác mà chính là liên kết đến chỉ số inode của tập tin. Vì thế mỗi tập tin có thể có bao nhiêu tên tùy thích. Những tên này còn được gọi là liên kết “cứng” (hard link) (chúng ta sẽ làm quen kỹ hơn với khái niệm liên kết và cách tạo những liên kết này trong chương sau). Khi bạn đọc xóa một tập tin có nhiều tên (liên kết cứng) thì trên thực tế chỉ xóa đi một liên kết (mà bạn chỉ ra trên dòng lệnh xóa). Thậm chí cả khi bạn đọc đã xóa đi liên kết cuối cùng thì cũng không có nghĩa là đã xóa nội dung của tập tin: nếu tập tin đang được hệ thống hay một ứng dụng nào đó sử dụng, thì nó được lưu đến lúc hệ thống (ứng dụng) giải phóng nó. Để có thể thêm tên khác cho tập tin hoặc thư mục (tạo liên kết cứng), chúng ta sử dụng câu lệnh ln ở dạng sau: ln tên_đã_có tên_mới Ví dụ: [user]$ ln projects/l4u/l4u-0.9.2.pdf ~/l4u.pdf Ký tự ∼ có ý nghĩa đặc biệt, nó chỉ thư mục cá nhân (home directory) của người dùng, chúng ta sẽ nói kỹ hơn về ký tự này ngay sau đây. Bây giờ có thể dùng ~/l4u.pdf để thay cho đường dẫn dài hơn projects/l4u/l4u-0.9.2.pdf. Chi tiết về câu lệnh ln bạn có thể đọc trong trang man của nó. Có thể tìm ra số lượng liên kết cứng đến tập tin (tức là số lượng tên của tập tin) bằng lệnh ls với tham số -l5. Ngay phía sau quyền truy cập đến tập tin là một số cho biết số lượng những liên kết cứng này: [user]$ ls -l tổng 1280 -rw-r--r-- 1 teppi82 users 81409 2006-09-06 03:43 bash.tex drwxr-xr-x 2 teppi82 users 4096 2006-09-06 02:16 images -rw-r--r-- 2 teppi82 users 82686 2006-09-06 14:32 l4u-0.9.2.pdf -rw-r--r-- 1 teppi82 users 3069 2006-09-06 13:52 l4u.tex 5Nếu bạn dùng SuSE Linux thì có thể nhập vào lệnh ll. 4.2 Thư mục 63 (Danh sách bị cắt bớt vì không cần thiết). 4.2 Thư mục Nếu như cấu trúc tập tin không cho phép sử dụng gì khác ngoài tên tập tin (tức là tất cả các tập tin nằm trên một danh sách chung giống như các hạt cát trên bãi biển) thì thậm chí cả khi không có giới hạn về độ dài của tên, rất khó có thể tìm đến tập tin cần thiết. Hãy tưởng tượng bạn có một danh sách khoảng vài nghìn tập tin! Xin đừng nghi ngờ, một hệ thống Linux hoàn chỉnh sẽ có số lượng tập tin còn lớn hơn thế. Vì thế mà các tập tin được tổ chức vào các thư mục, các thư mục có thể nằm trong các thư mục khác, v.v. . . Kết quả là chúng ta thu được một cấu trúc thư mục có phân bậc bắt đầu từ một thư mục gốc. Mỗi thư mục (con) có thể chứa các tập tin riêng lẻ và các thư mục con của nó. Cấu trúc phân bậc của thư mục thường được minh hoạ bằng “cây thư mục”, trên đó mỗi thư mục đó là một nút của “cây”, còn tập tin – là các “lá”. Trên MS Windows hoặc DOS cấu trúc thư mục như vậy có trên mỗi ổ đĩa (tức là chúng ta có không phải một “cây” mà một “rừng” thư mục) và thư mục gốc của mỗi cấu trúc tập tin được đánh dấu bằng một chữ cái Latinh (và do đó đã có một số hạn chế). Trên Linux và UNIX nói chung chỉ có một cấu trúc thư mục duy nhất cho tất cả các đĩa lưu, và thư mục gốc duy nhất của cấu trúc này được ký hiệu bằng dấu gạch chéo “/”. Có thể đưa vào thư mục gốc này một số lượng không hạn chế các thư mục nằm trên các đĩa lưu khác nhau (thường nói là “gắn hệ thống tập tin” hoặc “gắn đĩa lưu”). Tên của thư mục cũng được đặt theo những quy định như đối với tên tập tin. Và nói chung ngoài cấu trúc bên trong của mình thì thư mục không khác gì so với những tập tin thông thường, ví dụ tập tin văn bản (text file). Tên đầy đủ của tập tin (hoặc còn gọi là “đường dẫn”6 đến tập tin) là danh sách tên của các thư mục bao gồm thư mục chứa tập tin đó và các thư mục mẹ, bắt đầu từ thư mục gốc “/” và kết thúc là bản thân tên của tập tin. Trong đường dẫn này tên của các thư mục con cách nhau bởi dấu gạch chéo “/” dùng để ký hiệu thư mục gốc như đã nói ở trên. Ví dụ /home/teppi82/projects/l4u/ext3fs.tex là tên đầy đủ của tập tin tôi đang nhập vào trên máy của mình. Hệ vỏ shell lưu giá trị của “thư mục hiện thời”, tức là thư mục mà người dùng đang làm việc trong đó. Có một câu lệnh cho biết tên của thư mục hiện thời, đó là lệnh pwd. Ghi chú: nếu nói một cách chính xác, thì thư mục hiện thời luôn đi liền với mỗi tiến trình đã chạy (trong đó có hệ vỏ shell), vì thế đôi khi chạy một chương trình nào đó trong shell có thể dẫn đến việc thay đổi thư mục hiện thời sau khi chương trình đó hoàn thành công việc. Ngoài thư mục hiện thời mỗi người dùng còn có một “thư mục nhà” (home directory, phương án dịch “thư mục cá nhân” được ưu tiên hơn, và chúng ta sẽ dùng thuật ngữ này trong cuốn sách l4u). Đó là thư mục trong đó người dùng có toàn quyền7: có thể tạo và xóa các tập tin, thay đổi quyền truy cập đến chúng, v.v. . . Trong cấu trúc thư mục của Linux những thư mục cá nhân của người dùng thường nằm trong thư mục /home và thường có tên trùng với tên đăng nhập của 6ở đây là đường dẫn tuyệt đối 7Nói chính xác hơn là: có toàn quyền đến khi nào root chưa thay đổi chúng :). 64 Làm quen với hệ thống tập tin ext3fs người dùng đó. Ví dụ: /home/nhimlui. Mỗi người dùng có thể làm việc với thư mục của mình bằng ký hiệu ~, tức là người dùng nhimlui có thể làm việc với thư mục /home/nhimlui/hinhanh bằng ~/hinhanh. Khi người dùng vào hệ thống, thư mục cá nhân sẽ trở thành thư mục hiện thời của người dùng này. Câu lệnh cd dùng để thay đổi thư mục hiện thời. Tham số của lệnh này là đường dẫn đầy đủ hoặc đường dẫn tương đối đến thư mục mà bạn muốn dùng làm hiện thời. Khái niệm đường dẫn đầy đủ (tuyệt đối) đã giải thích ở trên, bây giờ chúng ta sẽ nói rõ hơn về khái niệm đường dẫn tương đối. Đường dẫn tương đối đó là danh sách các thư mục cần phải đi qua trong cây thư mục để có thể chuyển từ thư mục hiện thời đến thư mục khác (chúng ta gọi nó là thư mục đích). Nếu thư mục đích nằm phía dưới trong cấu trúc thư mục, tức là nằm trong một thư mục con, hoặc “cháu”, “chắt” nào đó của thư mục hiện thời, thì đơn giản: chỉ cần chỉ ra thư mục con của thư mục hiện thời, sau đó thư mục con của thư mục con (thư mục “cháu”),. . . cho đến khi nào tới được thư mục đích. Nếu như thư mục đích nằm cao hơn trong cấu trúc thư mục, hoặc nằm hoàn toàn trên một “cành” khác của cây thư mục, thì phức tạp hơn một chút. Tất nhiên trong bất kỳ trường hợp nào cũng có thể sử dụng đường dẫn tuyệt đối, nhưng khi đó cần phải nhập vào một đường dẫn rất dài. Vấn đề này được giải quyết như sau: mỗi thư mục (trừ thư mục gốc) có duy nhất một thư mục mẹ trong cây thư mục. Trong mỗi thư mục có hai bản ghi đặc biệt. Một trong số chúng có ký hiệu là dấu chấm (‘.’) và chỉ đến chính bản thân thư mục này, còn bản ghi thứ hai có ký hiệu là hai dấu chấm đơn (‘..’), nó chỉ đến thư mục mẹ. Chính những dấu hai chấm này được dùng để ghi đường dẫn tương đối. Ví dụ, để dùng thư mục mẹ làm thư mục hiện thời, thì chỉ cần chạy lệnh: [user]$ cd .. Còn để chuyển “leo” lên hai bậc của cây thư mục, rồi từ đó hạ xuống thư mục vnoss/doc thì cần chạy lệnh: [user]$ cd ../../vnoss/doc Câu lệnh ls dùng để đưa ra màn hình danh sách các tập tin và thư mục con của thư mục hiện thời. Cần lưu ý là trên thực tến câu lệnh ls chỉ đưa ra nội dung của tập tin mô tả thư mục này, và không xảy ra bất kỳ nào thao tác làm việc với tập tin của thư mục. Như đã nói ở trên, mỗi thư mục chỉ là một tập tin bình thường, trong đó có liệt kê tất cả những tập tin và thư mục con của thư mục này. Tức là không có các hộp đặc biệt chứa các tập tin, chỉ có các danh sách tập tin thông thường xác định tập tin hiện thời thuộc về một thư mục nào đó. Nếu chạy câu lệnh ls không có tham số thì chúng ta chỉ thấy tên của các tập tin của thư mục hiện thời. Nếu muốn xem nội dung của một thư mục khác, thì cần phải đưa cho câu lệnh ls đường dẫn tuyệt đối hoặc tương đối đến thư mục đó. Ví dụ: [user]$ ls projects BanTin drupal-vn KDE-vi mrtg Xfce bashscripts fluxbox l4u others vim chem-tex gnomevi manvi SuSE vnlinux debian HocTap mc syslinux vnoss 4.3 Công dụng của các thư mục chính 65 Bản ghi về tập tin trong thư mục tương ứng ngoài tên còn có rất nhiều thông tin về tập tin này. Để thấy được những thông tin chi tiết đó, thì cần dùng các tham số mở rộng khác của câu lệnh ls. Nếu chạy câu lệnh ls với tham số -l thì không chỉ có tên tập tin mà sẽ hiển thị cả dữ liệu về quyền truy cập đến tập tin (chúng ta sẽ nói đến ở sau); số lượng liên kết cứng hay số lượng tên (nếu là thư mục thì ngay từ đầu đã có hai liên kết như vậy là . và .., do đó số này bằng số thư mục con công thêm 2); tên chủ sở hữu tập tin, tên nhóm sở hữu tập tin (xin được gọi tắt là “nhóm tập tin” mặc dù tối nghĩa); kích thước tập tin và thời gian sửa đổi cuối cùng. Một ví dụ minh họa khác: [user]$ ls -l tổng 1316 -rw-r--r-- 1 teppi82 users 81629 2006-09-08 22:11 bash.tex -rw-rw-r-- 1 teppi82 users 98135 2006-09-08 13:54 caidat.tex -rw-r--r-- 1 teppi82 users 783 2006-09-08 21:58 ChangeLog -rw-r--r-- 1 teppi82 users 20778 2006-09-09 02:48 ext3fs.tex -rw-r--r-- 1 teppi82 users 2013 2006-09-08 21:34 gioithieu.tex drwxr-xr-x 2 teppi82 users 4096 2006-09-08 14:25 images -rw-r--r-- 1 teppi82 users 3267 2006-09-08 23:13 l4u.tex Nếu đưa thêm tham số -i thì trong cột đầu tiên sẽ hiển thị chỉ số inode của tập tin. Khi dùng tham số -t việc sắp xếp được thực hiện không theo tên mà theo thời gian sửa đổi tập tin. Tham số -u dùng để hiển thị thời gian truy cập cuối cùng thay vào chỗ thời gian sửa đổi. Tham số -r đảo ngược lại trật tự của sắp xếp (cần phải sử dụng cùng với các tham số -l hoặc -t). Cần chú ý rằng có thể liệt kê các tham số một cách riêng rẽ như thế này: [user]$ ls -l -i - r hoặc gộp lại như thế này: [user]$ ls -lir Chúng ta dừng mô tả ngắn gọn về câu lệnh ls ở đây (chi tiết về lệnh này có thể xem trên các trang man hoặc info tương ứng) và chuyển sang xem xét các thư mục chính của cấu trúc tập tin trong Linux. 4.3 Công dụng của các thư mục chính Nếu như bạn đọc đã từng dùng Windows (ví dụ 2000 hay XP), thì biết rằng mặc dù người dùng có toàn quyền tổ chức cấu trúc thư mục, nhưng một số truyền thống vẫn được tuân theo. Ví dụ các tập tin hệ thống thường nằm trong thư mục C:\Windows, các chương trình thường được cài đặt vào C:\Program Files, v.v. . . Trong Linux cũng có một cấu trúc thư mục kiểu như vậy và thậm chí còn nghiêm ngặt hơn. Hơn nữa có một tiêu chuẩn xác định cấu trúc thư mục cho các HĐH dòng UNIX. Tiêu chuẩn này được gọi là Filesystem Hierarchy Standart (FHS). Nếu có mong muốn bạn có thể đọc toàn bộ tiêu chuẩn này tại địa chỉ 66 Làm quen với hệ thống tập tin ext3fs http://www.pathname.com/fhs/. Các bản phân phối Linux lớn đều tuân theo tiêu chuẩn này. Bảng 4.1 dưới đây đưa ra danh sách ngắn gọn những thư mục chính được tạo ra trong cấu trúc tập tin theo tiêu chuẩn nói trên. Ở cột bên trái liệt kê các thư mục con của thư mục gốc, còn cột thứ hai liệt kê một vài (không phải tất cả) thư mục con, còn cột thứ ba cuối cùng đưa ra mô tả ngắn gọn về công dụng của những thư mục này. Mô tả trong bảng này là hết sức ngắn gọn, chi tiết hơn bạn có thể đọc trong tiêu chuẩn FHS có trên http://www.pathname.com/fhs/. Bảng 4.1: Cấu trúc thư mục của Linux Thư mục Công dụng /bin Thư mục này gồm chủ yếu các chương trình, phần lớn trong số chúng cần cho hệ thống trong thời gian khởi động (hoặc trong chế độ một người dùng khi bảo trì hệ thống). Ở đây có lưu rất nhiều những câu lệnh thường dùng của Linux. /boot Gồm các tập tin cố định cần cho khởi động hệ thống, trong đó có nhân (kernel). Tập tin trong thư mục này chỉ cần trong thời gian khởi động8. /dev Thư mục các tập tin đặc biệt hoặc các tập tin thiết bị phần cứng. Chúng ta sẽ nói đến những tập tin này ở ngay sau trong một phần riêng. Bạn đọc có thể xem qua man mknod (mkn ode(1)). /etc Thư mục này và các thư mục con của nó lưu phần lớn những dữ liệu cần cho quá trình khởi động ban đầu của hệ thống và lưu những tập tin cấu hình chính. Ví dụ, trong /etc có tập tin inittab xác định cấu hình khởi động, và tập tin người dùng passwd. Một phần các tập tin cấu hình có thể nằm trong các thư mục con của /usr. Thư mục /etc không được lưu các tập tin chương trình (cần đặt chúng trong /bin hoặc /sbin. Dưới đây chúng ta sẽ xem xét công dụng của một vài(!) thư mục con của thư mục /etc. /etc/rc.d Thư mục này lưu những tập tin sử dụng trong quá trình khởi động hệ thống. Chúng ta sẽ đề cập chi tiết về những tập tin này và quá trình khởi động nói riêng trong một vài chương sắp tới. /etc/skel Khi tạo người dùng mới, thì những tập tin trong thư mục này sẽ được sao chép vào thư mục cá nhân của người dùng đó. /etc/sysconfig Thư mục lưu một vài (không phải tất cả) tập tin cấu hình hệ thống. /etc/X11 Thư mục dành cho các tập tin cấu hình của hệ thống X11 (ví dụ, xorg.conf). /home Thông thường trong thư mục này là các thư mục cá nhân của người dùng (trừ root). 8do đó một số nhà quản trị không tự động gắn phân vùng /boot vào trong quá trình khởi động. 4.3 Công dụng của các thư mục chính 67 Thư mục Công dụng /lib Thư mục này lưu các thư viện chia sẻ của các hàm mà trình biên dịch C và các môđun (các driver thiết bị) cần. Thậm chí nếu trên hệ thống không có trình biên dịch C nào, thì các thư viện chia sẻ vẫn cần thiết, vì chúng được nhiều chương trình sử dụng. Những thư viện này chỉ nạp vào bộ nhớ khi có nhu cầu thực hiện hàm nào đó, như vậy cho phép giảm kích thước mã chương trình nằm trong bộ nhớ. Trong trường hợp ngược lại thì cùng một mã lặp lại nhiều lần trong các chương trình khác nhau. /lost+found Thư mục này sử dụng để phục hồi hệ thống tập tin bằng lệnh fsck. Nếu fsck tìm ra tập tin mà không xác định được thư mục mẹ thì nó sẽ đưa tập tin đó vào thư mục /lost+found. Vì thư mục mẹ bị mất, nên tập tin sẽ nhận được tên trùng với chỉ số inode của nó. /mnt Đây là điểm gắn (mount) những hệ thống tập tin gắn tạm thời. Nếu trên máy tính có đồng thời Linux và Windows (DOS) thì thư mục này thường dùng để gắn các hệ thống tập tin FAT. Nếu bạn thường gắn một vài đĩa lưu động như đĩa mềm, CD, DVD, đĩa cứng ngoài, flash,v.v. . . thì có thể tạo trong thư mục này các thư mục con cho từng đĩa lưu. /tmp Thư mục dành cho các tập tin tạm thời. Ở bất kỳ thời điểm này người dùng root cũng có thể xóa tập tin khỏi thư mục này mà không làm ảnh hưởng lớn đến người dùng khác. Tuy nhiên không nên xóa những tập tin trong thư mục này, trừ khi khi bạn biết rằng tập tin hoặc nhóm tập tin nào đó đang gây ảnh hưởng đến công việc của hệ thống. Hệ thống sẽ tự động dọn dẹp thư mục này theo định kỳ, vì thế không nên lưu ở đây những tập tin mà bạn có thể sẽ cần đến. /root Đây là thư mục cá nhân của người dùng cao cấp root. Hãy chú ý là thư mục này không nằm cùng chỗ với thư mục cá nhân của những người dùng khác (trong /home). /sbin Vì thư mục /bin chủ yếu lưu các tập tin thực thi (chương trình và tiện ích của HĐH) sử dụng trong quá trình khởi động và do nhà quản trị chạy. Trong tiêu chuẩn FHS có nói rằng cần đặc trong thư mục này những tập tin thực thi sẽ sử dụng sau khi gắn thành công hệ thống tập tin /usr. Ít nhất trong thư mục này phải có init, mkswap, swapon, swapoff, halt, reboot, shutdown, fdisk, fsck.*, mkfs.*, arp, ifconfig, route. /proc Đây là điểm gắn hệ thống tập tin proc cung cấp thông tin về các tiến trình đang chạy, về nhân, về các thiết bị tính, v.v. . . Đây là hệ thống tập tin ảo. Chi tiết bạn có thể đọc trong man 5 proc. Các tập tin đặc biệt của thư mục này sử dụng để nhận và gửi dữ liệu đến nhân. 68 Làm quen với hệ thống tập tin ext3fs Thư mục Công dụng /usr Thư mục này rất lớn và cấu trúc của nó nhìn chung lặp lại cấu trúc của thư mục gốc. Trong các thư mục con của /usr là tất cả các ứng dụng chính. Theo tiêu chuẩn FHS thì nên dành cho thư mục này một phân vùng riêng hoặc đặt hoàn toàn trên đĩa sử dụng chung trong mạng. Phân vùng hoặc đĩa đó thường gắn chỉ đọc và trên đĩa (phân vùng) là các tập tin cấu hình cũng như tập tin thực thi dùng chung, các tập tin tài liệu, các tiện ích hệ thống và cả các tập tin thêm vào (tập tin dạng include). /usr/bin Các chương trình (tiện ích và ứng dụng) thường được người dùng bình thường sử dụng. /usr/bin/X11 là nơi thường dùng để lưu các chương trình chạy trên X Window. Và đây cũng thường là liên kết đến /usr/X11R6/bin. /usr/include Thư mục con này lưu mã nguồn của các thư viện tiêu chuẩn của ngôn ngữ C. Người dùng cần có ít nhất là quyền đọc đối với thư mục này. Dù trong trường hợp nào cũng đừng sửa những tập tin trong thư mục này, vì chúng đã được các nhà phát triển hệ thống kiểm duyệt kỹ càng (không lẽ bạn biết về hệ thống tốt hơn các nhà phát triển). /usr/lib Trong thư mục này là các thư viện object của các chương trình con, các thư viện động (dynamic library), một số chương trình không thể gọi trực tiếp. Các hệ thống phức tạp (ví dụ Debian Linux) có thể có các thư mục con của mình trong thư mục này. /usr/lib/X11 – nơi thường dùng để đặt các tập tin có liên quan đến X Window và các tập tin cấu hình của hệ thống X Window. Trên Linux đó thường là liên kết mềm đến thư mục /usr/X11R6/lib/X11. /usr/local Ở đây thường đặt các chương trình và các thư mục con (nội bộ) chỉ dành cho máy tính này, bao gồm: /usr/local/bin. Ở đây thường lưu những chương trình ứng dụng. /usr/local/doc – các tài liệu đi kèm với chương trình ứng dụng. /usr/local/lib – thư viện và tập tin của các chương trình và hệ thống nội bộ. /usr/local/man – các trang trợ giúp man. /usr/local/sbin – các chương trình dành cho nhà quản trị. /usr/local/src – mã nguồn của các chương trình. /usr/sbin Thư mục này gồm các chương trình thực thi dành cho nhà quản trị và không sử dụng trong thời gian khởi động. 4.3 Công dụng của các thư mục chính 69 Thư mục Công dụng /usr/share Thư mục này dùng cho tất cả các tập tin dữ liệu dùng chung và có quyền truy cập là chỉ đọc. Thường dùng để chia sẻ giữa các kiến trúc khác nhau của HĐH, ví dụ i386, Alpha, và PPC có thể dùng chung một thư mục /usr/share nằm trên một phân vùng hoặc đĩa chia sẻ trên mạng. Cần chú ý là thư mục này không dùng để chia sẻ giữa các HĐH khác nhau hoặc giữa các phiên bản khác nhau của cùng một HĐH. Tiêu chuẩn FHS khuyên dùng thư mục con cho mỗi chương trình. Những thư mục sau hoặc liên kết mềm sau phải có trong /usr/share: man (các trang trợ giúp man), misc (những giữ liệu tùy theo kiến trúc khác nhau). Chúng ta xem xét một vài thư mục con của thư mục này: /usr/share/dict – các danh sách từ (word list) của tiếng Anh dùng cho các chương trình kiểm tra chính tả như ispell. /usr/share/man – các trang trợ giúp man. Mỗi phần của man nằm trong một thư mục con riêng trong thư mục này. /usr/share/misc (đã nói ở trên). /usr/src Mã nguồn của các thành phần khác nhau của Linux: nhân, ứng dụng. . . /usr/tmp Một nơi nữa để lưu các tập tin tạm thời. Thông thường đây là liên kết mềm đến /var/tmp. /usr/X11R6 Các tập tin thuộc về hệ thống X Window. /usr/X11R6/bin – các chương trình ứng dụng của hệ thống này. /usr/X11R6/lib – các tập tin và thư viện có liên quan đến X-Window. /var Trong thư mục này là các tập tin lưu các dữ liệu biến đổi (variable). Những dữ liệu này xác định cấu hình của một số chương trình trong lần chạy sau hoặc là những thông tin lưu tạm thời sẽ sử dụng sau. Dung lượng thông tin trong thư mục này có thể thay đổi trong một khoảng lớn, vì thư mục giữ các tập tin như bản ghi (log), spool, khóa locking, các tập tin tạm thời, v.v. . . /var/adm Lưu các thông tin về tài khoản và thông tin chuẩn đoán dành cho nhà quản trị. /var/lock Các tập tin điều khiển hệ thống dùng để dự trữ tài nguyên. /var/log Các tập tin bản ghi (log). 70 Làm quen với hệ thống tập tin ext3fs Thư mục Công dụng /var/run Các tập tin biến đổi trong thời gian thực hiện các chương trình khác nhau. Chúng lưu thông tin về số tiến trình (PID) và ghi thông tin hiện ghời (utmp). Tập tin trong thư mục này thường được dọn sạch trong thời gian khởi động Linux. /var/spool Tập tin được đặt vào hàng đợt của các chương trình khác nhau, ví dụ: /var/spool/at – các công việc mà at đã chạy. /var/spool/cron – tập tin của hệ thống Verb+cron+. /var/spool/lpd — tập tin trong hàng đợi in. /var/spool/mail – tập tin thùng thư của người dùng. /var/spool/uucp – tập tin của hệ thống uucp. /var/tmp Các tập tin tạm thời. 4.4 Dạng tập tin Trong các phần trước chúng ta đã xem xét hai dạng tập tin đó là tập tin thông thường và các thư mục. Những trên Linux còn có một vài dạng tập tin nữa. Chúng ta sẽ làm quen với chúng trong phần này. Như đã nói, đối với hệ điều hành thì tập tin chỉ là một chuỗi các byte liên tục. Nhờ vậy có thể dùng khái niệm tập tin cho các thiết bị và các đối tượng khác. Điều này đơn giản hoá sự tổ chức và trao đổi các dữ liệu, vì có thể thực hiện ghi dữ liệu vào tập tin, chuyển dữ liệu lên các thiết bị và trao đổi dữ liệu giữa các tiến trình bằng cách tương tự như nhau. Trong tất cả các trường hợp này sử dụng cùng một phương pháp dựa trên ý tưởng chuỗi các byte. Do đó ngoài các tập tin thông thường và thư mục, những thành phần sau cũng được Linux coi là tập tin: các tập tin thiết bị các ống (kênh) có tên (named pipe) các socket (tổ với nghĩa như tổ chim) các liên kết mềm (symlinks). 4.4.1 Các tập tin thiết bị Như đã nói, đối với Linux thì tất cả các thiết bị kết nối vào máy tính (ổ cứng, ổ tháo rời, terminal, máy in, máy scan, môđem, bàn phím, chuột, v.v. . . ) đều là các tập tin. Ví dụ, nếu cần đưa ra màn hình terminal thứ nhất thông tin nào đó, thì hệ thống thực hiện thao tác ghi vào tập tin /dev/tty1. Có hai dạng thiết bị: ký tự (hay còn gọi là các thiết bị trao đổi theo byte) và khối (trao đổi theo khối). Sự khác nhau giữa hai dạng này nằm ở cách đọc và ghi 4.4 Dạng tập tin 71 thông tin vào các thiết bị. Các thiết bị ký tự trao đổi thông tin theo từng ký tự (theo từng byte) trong chế độ chuỗi các byte. Ví dụ thiết bị dạng này là terminal. Còn thông tin được đọc và ghi vào các thiết bị khối theo các khối. Ví dụ các ổ cứng. Không thể đọc từ đĩa cứng và ghi lên đó từng byte, trao đổi thông tin với đĩa chỉ có thể theo từng khối. Trao đổi dữ liệu với các thiết bị trên Linux do các driver thiết bị đảm nhiệm. Những driver này hoặc nằm trong nhân hoặc nằm riêng ở dạng môđun và có thể gắn vào nhân sau. Để trao đổi với các phần khác của hệ điều hành mỗi driver tạo ra một giao diện liên lạc có vẻ ngoài giống như tập tin. Phần lớn những tập tin như vậy đã được tạo sẵn từ trước và nằm trong thư mục dev. Nếu nhìn vào thư mục /dev (tức là chuyển vào thư mục đó bằng lệnh cd rồi chạy ls), thì bạn sẽ thấy một lượng khổng lồ những tập tin thiết bị. Bảng 4.2 cho biết những tập tin thường dùng nhất. Bảng 4.2: Những tập tin thiết bị chính Tập tin Ý nghĩa /dev/console Console hệ thống tức là màn hình và bàn phím kết nối tới máy tính. /dev/hd Các ỗ cứng với giao diện IDE. Thiết bị /dev/hda1 tương ứng với phân vùng đầu tiên của đĩa cứng đầu tiên, đĩa /dev/hda, tức là đĩa Primary Master. /dev/sd Ổ cứng với giao diện SCSI. /dev/fd Các tập tin ổ đĩa mềm. Ổ đầu tiên là /dev/fd0, ổ thứ hai là /dev/fd1. /dev/tty Các tập tin hỗ trợ terminal của người dùng. Tên gọi vẫn được lưu kể từ khi kết nối teletype vào các hệ thống UNIX làm terminal. Trên Linux những tập tin này hỗ trợ các terminal ảo (hãy nhớ lại chương trước). /dev/pty Các tập tin hỗ trợ terminal giả. Sử dụng cho các kết nối từ xa qua telnet. /dev/ttS Tập tin hỗ trợ làm việc với các cổng kết tiếp nhau (các cổng COM). /dev/ttS0 tương ứng với COM1 trong DOS, /dev/ttS1 tương ứng với COM2. /dev/cua Các tập tin cho môđem. /dev/null Thiết bị này có thể gọi là “lỗ đen”. Tất cả những gì ghi vào /dev/null sẽ mất vĩnh viễn. Những người viết script thường chuyển những thông báo không cần thiết vào thiết bị này. Nếu sử dụng /dev/null làm thiết bị nhập vào, thì sẽ thu được một chuỗi các số 0, tức là trong trường hợp này tập tin có cỡ bằng 0. Mỗi dạng thiết bị có thể có một vài tập tin thiết bị. Vì thế các tập tin thiết bị thường có hai số: lớn (major) và nhỏ (minor). Số lớn của thiết bị cho nhân biết là tập tin này thuộc về driver nào, còn số nhỏ cho biết cần phải làm việc với thiết bị cụ thể nào của dạng này. Đối với các tập tin thiết bị, câu lệnh ls -l cho biết số lớn và số nhỏ đã nói thay vì kích thước của tập tin. 4.4.2 Các ống có tên (pipes) Còn có một dạng tập tin thiết bị nữa đó là các ống có tên, hay bộ đệm FIFO (First In – First Out). Tập tin dạng này chủ yếu dùng để tổ chức trao đổi dữ liệu giữa