Hướng Dẫn Cơ Bản Các Lệnh Linux: Từ Điều Hướng Hệ Thống Đến Quản Trị Tập Tin

Hướng Dẫn Cơ Bản Các Lệnh Linux

Bạn là người mới bắt đầu với GNU/Linux và muốn tìm hiểu sâu hơn ngoài những thao tác kéo cửa sổ, nhấp chuột thông thường? DataOnline sẽ hướng dẫn cho những người hoàn toàn mới bắt đầu, mong muốn học các lệnh cơ bản trên dòng lệnh GNU/Linux. Bài hướng dẫn này sẽ đi qua các lệnh Linux cơ bản liên quan đến điều hướng, quản trị tập tin và thư mục, cài đặt phần mềm và khắc phục sự cố hệ thống cơ bản.

Nếu bạn đang tìm hiểu về các lệnh Linux để quản trị hệ thống, việc sử dụng VPS server sẽ giúp bạn thực hành hiệu quả hơn. Với quyền truy cập root, bạn có thể áp dụng ngay các lệnh trong bài viết này để quản lý và tối ưu hóa máy chủ của mình.

Trong bài hướng dẫn này bạn sẽ học được:

  • Cách sử dụng các lệnh Linux
Yêu cầu Danh mục, quy ước hoặc phiên bản phần mềm được sử dụng
Hệ Thống Bất kỳ hệ thống Linux nào
Phần Mềm Bash shell
Khác Quyền truy cập đặc quyền (privileged access) tới hệ thống Linux của bạn với tư cách root hoặc thông qua lệnh sudo.
Quy Ước # – các lệnh Linux yêu cầu được thực thi với đặc quyền root (trực tiếp dưới quyền root hoặc dùng sudo)
$ – các lệnh Linux được thực thi dưới quyền người dùng bình thường (không có đặc quyền)

GNU/Linux Command Line là gì

Có thể bạn sẽ nghe ai đó nói về hệ điều hành GNU/Linux và cũng nghe họ nói về dòng lệnh hay các lệnh Linux. “Chạy lệnh này và thực thi lệnh kia!” Đúng không?
Nhưng tại sao lại như vậy? Tại sao hệ điều hành GNU/Linux hầu như luôn gắn liền với các lệnh và dòng lệnh? Câu trả lời đơn giản là dòng lệnh là một phần không thể tách rời của hệ thống GNU/Linux và nhờ đó nó mang đến cho người dùng khả năng thực hiện các tác vụ một cách hiệu quả hơn, chính xác hơn và quan trọng nhất là cung cấp thêm thông tin chi tiết về toàn bộ quá trình thực thi.
linux commands 2

Nhiều người mới bắt đầu với GNU/Linux liên hệ dòng lệnh và các lệnh Linux với sự e dè, như thể đó là những “phép thuật cao cấp” hay một gánh nặng không cần thiết.
Thẳng thắn mà nói, dù bạn có lý do gì để ngại hệ thống GNU/Linux và dòng lệnh của nó, nguyên nhân chủ yếu là do thiếu hiểu biết và sự ngại học hỏi.
Vậy nên, đừng trách hệ thống GNU/Linux vì những hạn chế của bản thân! Nó ở đây để giúp bạn – dù bạn là người mới hoàn toàn hay người dùng nâng cao. Mức độ hỗ trợ mà hệ thống mang lại không phụ thuộc vào túi tiền của bạn như các hệ điều hành độc quyền khác! Sự hỗ trợ bạn nhận được hoàn toàn phụ thuộc vào sự ham học hỏi và quyết tâm của bạn.

Ở giai đoạn này, có lẽ bạn tự hỏi: “Tôi có cần phải học dòng lệnh GNU/Linux cùng vô số lệnh của nó để sử dụng hệ điều hành GNU/Linux không?” Câu trả lời ngắn gọn là: không! Bất kỳ hệ điều hành GNU/Linux có giao diện đồ họa (GUI) nào cũng không bắt buộc người dùng phải sử dụng dòng lệnh để thực hiện các tác vụ cơ bản thậm chí nâng cao.
Lý do duy nhất bạn có thể muốn học dòng lệnh GNU/Linux là để tăng hiệu quả làm việc và khai thác tối đa hệ thống – hoặc khi công việc đòi hỏi. Hãy nhớ rằng có rất nhiều người dùng GNU/Linux sống suốt nhiều năm mà thậm chí không biết đến dòng lệnh! Nếu hệ thống đã đáp ứng nhu cầu của bạn, không cần phải học ngay cả những lệnh cơ bản nhất.

Dù bạn đang sử dụng bản GNU/Linux nào, có hay không có giao diện đồ họa, dòng lệnh vẫn luôn tồn tại dưới một hình thức nào đó.

Nhờ đó, nếu bạn đã nắm được những kiến thức cơ bản về dòng lệnh, bạn sẽ cảm thấy “thân thuộc” bất kể hệ thống bạn đang dùng. Dòng lệnh với hàng loạt các lệnh cho phép bạn quản trị hệ thống và thực hiện cả những tác vụ phức tạp nhất trên bất kỳ hệ thống GNU/Linux nào, dù không có GUI hay thậm chí thực hiện từ xa qua khoảng cách xa, như thể bạn đang ngồi ngay trước máy tính.

Tuy nhiên, để làm được điều đó, bạn cần phải có hiểu biết sơ khởi về dòng lệnh GNU/Linux và học cách sử dụng một số lệnh cơ bản mà nó cung cấp. Đừng sợ hãi, vì đây chính là những gì bạn sẽ học trong bài hướng dẫn các lệnh Linux này.

Các lệnh Linux là gì

Các lệnh Linux là tinh hoa của toàn bộ hệ điều hành GNU/Linux, được sử dụng để quản trị toàn bộ hệ thống. Bạn có thể không nhận ra, nhưng hầu hết các ứng dụng bạn chạy trong giao diện đồ họa đều đang thực thi các lệnh Linux ngầm định để hoàn thành nhiệm vụ được giao.

Việc để ứng dụng tự động chạy các lệnh Linux có nhiều lợi ích hiển nhiên. Tuy nhiên, nhược điểm là trong nhiều trường hợp, chúng ta không thể tùy chỉnh quá trình thực thi lệnh theo kết quả mong muốn. Hơn nữa, nếu có lỗi xảy ra, người dùng thường không có manh mối để bắt đầu khắc phục sự cố.

Có thể bạn đang nghĩ: “Được rồi, vậy có bao nhiêu lệnh và tôi có nên học hết tất cả chúng không?” Số lượng lệnh Linux có trên hệ thống GNU/Linux của bạn là không cố định vì mỗi hệ thống khác nhau. Tuy nhiên, nếu bạn thực sự muốn biết con số chính xác, hãy chạy lệnh sau trong terminal:

$ for i in ${PATH//:/ }; do ls $i; done | sort | uniq | wc -l

Trên một cài đặt Ubuntu Desktop Linux của tôi, có đúng 2024 lệnh được cài đặt.

Số lượng lệnh trên hệ thống của bạn có thể khác nhau. Điều cốt lõi là trung bình, hệ điều hành GNU/Linux có chứa vài nghìn lệnh và câu trả lời cho câu hỏi “Người dùng có cần học hết tất cả chúng không?” là: bạn có thể cố gắng, nhưng hành trình đó gần như là không thể hoàn thành.
Vì lý do này, cách tiếp cận tốt nhất là bắt đầu với những lệnh cơ bản – những lệnh bạn bắt buộc phải học để điều hướng hệ thống tập tin của GNU/Linux và thực hiện các tác vụ quản trị cơ bản. Một khi đã thành thạo dòng lệnh Linux, những thứ khác sẽ dần trở nên tự nhiên chỉ bằng việc sử dụng hệ thống.

Đủ lời nói rồi, hãy bắt đầu thôi!

Các lệnh Linux cơ bản về hệ thống tập tin và điều hướng

1. Lệnh, tùy chọn, đối số và tham số trên dòng lệnh

Hiểu được sự khác biệt giữa đối số, tùy chọn và tham số của lệnh Linux là phần quan trọng nhất để bạn hiểu sâu về dòng lệnh GNU/Linux. Vì vậy, đừng bỏ qua chủ đề này mà hãy đảm bảo bạn hiểu rõ nó trước khi chuyển sang phần tiếp theo.

Công cụ tốt nhất để giải thích sự khác biệt này là lệnh ls. Đừng lo nếu bạn chưa biết lệnh ls, vì lệnh này sẽ được trình bày chi tiết trong các phần sau. Mở terminal và chạy lệnh sau (không nhập ký tự $ vì ký tự này chỉ để báo hiệu đây là lệnh của dòng lệnh và được thực thi dưới quyền người dùng bình thường):

$ ls

Sau khi bạn gõ lệnh trên và nhấn ENTER, lệnh sẽ liệt kê tất cả các tập tin và thư mục trong thư mục hiện hành. Tạm thời, hãy bỏ qua kết quả của lệnh và lưu ý rằng lệnh này bao gồm một đối số duy nhất, chính là lệnh ls (đối số 0). Tiếp theo, hãy thử lệnh sau:

$ ls -a

Lệnh trên bao gồm hai đối số. Đối số thứ 0 là lệnh ls và đối số thứ 1 là tùy chọn -a của lệnh ls.
Tùy chọn của lệnh cho phép người dùng sửa đổi kết quả xuất ra. Mỗi lệnh Linux có một tập hợp tùy chọn khác nhau, được tích hợp cứng trong lệnh đó. Như tên gọi, các tùy chọn là tùy chọn và không bắt buộc người dùng phải sử dụng. Trong trường hợp này, tùy chọn -a của lệnh ls chỉ thị cho lệnh liệt kê luôn in ra các tập tin hoặc thư mục ẩn trong thư mục hiện hành.

Trong thư mục home của bạn, chạy lệnh sau:

$ ls -l .bashrc

Nếu bạn theo dõi, bạn đã biết rằng lệnh trên có 3 đối số:

  • Đối số 0: Lệnh ls chính nó.
  • Đối số 1: Tùy chọn -l của lệnh ls – chỉ thị cho ls in ra danh sách chi tiết (long listing) cung cấp thêm thông tin về tập tin.
  • Đối số 2: Tham số cho lệnh ls, chỉ định rằng lệnh chỉ thao tác trên tập tin có tên .bashrc.

Lưu ý: Rằng trong tập tin .bashrc, dấu chấm (.) ở đầu tên tập tin là một phần của tên và chỉ ra rằng tập tin đó ẩn. Mặc định, lệnh ls sẽ không liệt kê tập tin ẩn trừ khi sử dụng tùy chọn -a.

Một tham số là đối số dòng lệnh cung cấp thêm thông tin cho lệnh hoặc cho một hoặc nhiều tùy chọn của lệnh đó. Tùy thuộc vào lệnh bạn đang thực thi, bạn có thể cung cấp một hoặc nhiều tùy chọn hoặc tham số.
Ví dụ:

$ ls -l -h .bashrc .bash_history

Trong trường hợp này, lệnh của chúng ta bao gồm năm đối số. Có lệnh ls, hai tùy chọn, cụ thể là -l-h và cuối cùng là hai tên tệp làm tham số, tệp .bashrc.bash_history.

Thứ tự mà bạn cung cấp tất cả các đối số trên dòng lệnh phụ thuộc vào lệnh Linux bạn đang thực thi. Tuy nhiên, quy tắc phổ biến và được khuyến nghị là cung cấp tất cả các tùy chọn cần thiết sau lệnh, tiếp theo là tất cả các tham số cần thiết. Ví dụ, lệnh dưới đây cũng là một lệnh hợp lệ tạo ra cùng kết quả như lệnh trên, tuy nhiên, nên tránh loại cú pháp lệnh này:

$ ls .bashrc -l .bash_history -h

Cuối cùng, để rút gọn lệnh và làm cho nó dễ đọc hơn, hầu hết các lệnh cho phép người dùng gộp nhiều tùy chọn vào trong một đối số. Nghĩa là bạn có thể kết hợp tùy chọn -l-h thành -lh. Ví dụ:

$ ls -lh .bashrc .bash_history

2. Điều hướng hệ thống tập tin

Phần này đề cập đến một phần quan trọng khác của dòng lệnh Linux, đó là điều hướng hệ thống tập tin. Qua nhiều năm, tôi đã thấy nhiều người dùng gặp khó khăn trong việc hiểu cách điều hướng hệ thống tập tin GNU/Linux vì nó khác biệt hoàn toàn so với các ổ đĩa C: hoặc D: quen thuộc. Trong phần này, bạn cũng sẽ học hai lệnh Linux đầu tiên, đó là lệnh cd và lệnh pwd.

Hãy bắt đầu với câu khẳng định sau: Hãy quên đi các ổ đĩa C: hoặc D: mà bạn đã biết từ các hệ điều hành độc quyền khác. Kiến thức đó không áp dụng ở đây và chỉ gây nhầm lẫn cho bạn.
Hệ thống tập tin GNU/Linux cho phép truy cập vào bất kỳ ổ cứng hoặc phân vùng nào từ bất kỳ thư mục nào trong toàn bộ hệ thống tập tin. Tuy nhiên, ở giai đoạn này, chúng ta không nên quá bận tâm đến điều đó.

Có lẽ ẩn dụ hay nhất để mô tả hệ thống tập tin GNU/Linux chính là ẩn dụ mà tôi đã sử dụng trong Hướng dẫn Lập trình Bash Scripting. Hãy tưởng tượng hệ thống tập tin GNU/Linux như một tòa nhà nhiều tầng. Thư mục gốc (cửa chính của tòa nhà), được chỉ định bởi ký hiệu /, cung cấp lối vào toàn bộ hệ thống tập tin (tòa nhà), từ đó cho phép truy cập vào tất cả các thư mục (các tầng/phòng) và tập tin (người).

Để di chuyển đến phòng 1 ở tầng 3, chúng ta cần phải đi qua cửa chính /, sau đó vào tầng 3 với thư mục level3/ và từ đó vào phòng 1. Do đó, đường dẫn tuyệt đối đến phòng cụ thể này trong tòa nhà là /level3/room1. Từ đây, nếu chúng ta muốn đến phòng 2 cũng ở tầng 3, ta cần phải rời khỏi vị trí hiện tại, tức là phòng 1, bằng cách sử dụng ../ và sau đó thêm tên phòng là room2. Chúng ta đã sử dụng đường dẫn tương đối để đến phòng 2, trong trường hợp này là ../room2. Vì chúng ta đã ở tầng 3 nên không cần phải rời khỏi tòa nhà và dùng đường dẫn tuyệt đối qua cửa chính /level3/room2.
Có chút khó hiểu? Đừng lo, sau vài buổi làm quen với dòng lệnh GNU/Linux, kiến thức này sẽ thấm vào và trở thành bản năng thứ hai của bạn.

Tin hay không, hệ điều hành GNU/Linux cung cấp cho người dùng một “la bàn” giúp điều hướng hệ thống tập tin dưới dạng lệnh pwd (print working directory). Mỗi khi bạn bị lạc, chỉ cần nhập lệnh pwd và nó sẽ hiển thị cho bạn đường dẫn hiện tại. Hãy thử ngay bây giờ. Mở terminal và gõ pwd rồi nhấn ENTER:

$ pwd

Lệnh pwd in ra đường dẫn thư mục làm việc hiện tại.

Theo mặc định, thư mục làm việc khởi đầu của bạn luôn là thư mục cá nhân của bạn. Mỗi người dùng không phải hệ thống đều có thư mục riêng nằm trong thư mục /home. Như minh họa trong hình bên trên, đường dẫn tuyệt đối đến thư mục cá nhân của người dùng DataOnline là /home/DataOnline. Nếu hệ thống của bạn có người dùng “john”, thì đường dẫn tuyệt đối đến thư mục cá nhân của người dùng này là /home/john.

Mẹo nhanh: Việc truy cập vào bất kỳ thư mục cá nhân của người dùng nào chỉ có sẵn cho người dùng sở hữu thư mục đó và cho quản trị viên, trong trường hợp của GNU/Linux là người dùng root.

Ở giai đoạn này, chúng ta đã biết cách nhập các lệnh trên dòng lệnh và cũng biết cách xác định vị trí hiện tại trong hệ thống tập tin. Đã đến lúc bắt đầu di chuyển. Để làm được điều đó, chúng ta sử dụng lệnh cd (change directory). Lệnh cd cho phép người dùng di chuyển đến bất kỳ thư mục nào có trong hệ thống tập tin, với điều kiện người dùng có đủ quyền truy cập.

Hãy thử bằng cách thực hiện các lệnh sau và đừng ngại thử nghiệm. Đừng quên sử dụng “la bàn” cá nhân của bạn, lệnh pwd, để nhanh chóng xác định vị trí hiện tại của bạn. Hãy đảm bảo thay thế tên người dùng DataOnline bên dưới bằng tên người dùng của riêng bạn:

$ cd /home
$ cd DataOnline
$ cd /
$ cd home/DataOnline
$ cd ../DataOnline
$ cd ../../etc
$ cd /home/DataOnline

Ngoại trừ dòng 5 và dòng 6, các lệnh trên khá dễ hiểu. Ở dòng 5, chúng ta đã sử dụng ký hiệu tắt ../ để di chuyển lên thư mục cha của thư mục DataOnline. Ở dòng 6, chúng ta đã di chuyển lên hai thư mục và cuối cùng đến thư mục etc.

Bài tập:

  • Thực hiện lệnh cd mà không có đối số để di chuyển ngay lập tức đến thư mục cá nhân của bạn từ bất kỳ vị trí nào.
  • Thực hiện cd – để chuyển đổi giữa hai vị trí bạn đã truy cập gần đây.
  • Bạn kết thúc ở thư mục nào sau khi thực hiện các lệnh cd ~ và cd .?

Bài tập: Bạn có thể giải thích sự khác biệt giữa đường dẫn tuyệt đối và đường dẫn tương đối không? Nhìn vào hình bên trên, bạn có thể đếm được số lần chúng ta đã sử dụng đường dẫn tuyệt đối so với đường dẫn tương đối khi điều hướng hệ thống tập tin bằng lệnh cd không?
Gợi ý: Đường dẫn tuyệt đối luôn bắt đầu bằng ký tự /.

Việc di chuyển qua hệ thống tập tin GNU/Linux và hiểu sự khác biệt giữa đường dẫn tuyệt đối và tương đối không hề dễ dàng đối với người mới bắt đầu. Trước khi tiếp tục, hãy đảm bảo rằng bạn đã quen với lệnh cd của Linux và việc điều hướng giữa các thư mục, vì kiến thức này sẽ rất hữu ích cho các phần tiếp theo.vvv

3. Liệt kê nội dung thư mục

Tại thời điểm này, bạn nên đã cảm thấy thoải mái với việc điều hướng hệ thống tập tin sử dụng lệnh cd, đồng thời nắm được những kiến thức cơ bản về dòng lệnh GNU/Linux nói chung, bao gồm các đối số, tùy chọn và tham số của lệnh. Cho đến giờ, chúng ta đã học cách di chuyển đến bất kỳ thư mục nào, nhưng chưa học cách liệt kê nội dung của một thư mục. Việc liệt kê nội dung của một thư mục là chủ đề chính của phần này.

Công cụ được sử dụng để liệt kê nội dung của bất kỳ thư mục nào là lệnh ls. Hãy thử ngay bây giờ. Mở terminal và nhập lệnh ls trong thư mục cá nhân của bạn mà không có bất kỳ tùy chọn hay tham số nào:

$ ls

Khi thực thi lệnh ls mà không có bất kỳ tùy chọn hay tham số nào, lệnh sẽ liệt kê nội dung của thư mục làm việc hiện tại. Nhiều terminal hiện đại cung cấp thêm thông tin cho người dùng bằng cách tô màu: các thư mục sẽ hiển thị màu xanh lam, các tập tin thông thường là màu trắng và các tập tin có thể thực thi là màu xanh lá cây. Tuy nhiên, hãy lưu ý rằng không phải terminal nào cũng có tính năng này, và vì lý do đó, chúng ta cần học cách phân biệt các loại mục nội dung trong thư mục một cách thủ công sử dụng lệnh ls.

Mẹo nhanh:
Hầu hết các lệnh đều đi kèm với một trang hướng dẫn (manual page) có thể được sử dụng để tìm hiểu về chức năng cũng như các đối số mà từng lệnh cụ thể chấp nhận. Sử dụng lệnh man để hiển thị trang hướng dẫn của bất kỳ lệnh nào bạn cần. Ví dụ, để hiển thị trang hướng dẫn cho lệnh ls, hãy thực hiện:

man ls

Để thoát khỏi trang hướng dẫn, nhấn phím q.

Như chúng ta đã học trong các phần trước, có thể thay đổi đầu ra của lệnh bằng cách sử dụng các tùy chọn đã được lập trình sẵn. Trong trường hợp này, tùy chọn -l (được gọi là long listing) sẽ thêm nhiều thông tin hơn vào kết quả mặc định của lệnh ls:

$ ls -l

Tùy chọn long listing -l của lệnh ls cung cấp thêm thông tin về từng mục trong thư mục. Phần thông tin về loại tập tin được đánh dấu, trong đó ký hiệu d biểu thị thư mục và – biểu thị tập tin thông thường.

Bằng cách sử dụng tùy chọn -l, lệnh ls cung cấp cho người dùng thông tin bổ sung như quyền truy cập, chủ sở hữu (user hoặc group), kích thước tập tin và thời gian chỉnh sửa.

Một tùy chọn phổ biến khác của lệnh ls là -a, cho phép liệt kê tất cả các tập tin và thư mục, bao gồm cả các tập tin hay thư mục ẩn. Bất kỳ tập tin hoặc thư mục nào có tên bắt đầu bằng dấu chấm (.) đều được coi là ẩn và không được liệt kê trong kết quả mặc định của lệnh ls.

$ ls -a

Nhiều tùy chọn của lệnh ls chỉ có ý nghĩa khi được kết hợp với các tùy chọn khác. Ví dụ, để hiển thị kích thước của một tập tin cụ thể, người dùng có thể cung cấp lệnh ls với tùy chọn -l cùng với tên của tập tin đó như một tham số. Hãy xem ví dụ sau để hiển thị kích thước của tập tin image.jpg:

$ ls -l image.jpg

Mặc định, lệnh ls hiển thị kích thước của tập tin tính bằng byte, trừ khi tùy chọn -h (human readable) được cung cấp. Lưu ý rằng tùy chọn -h chỉ có ý nghĩa khi kết hợp với tùy chọn -l.

Điều quan trọng cần lưu ý là bằng cách sử dụng các tham số, người dùng có thể liệt kê bất kỳ thư mục nào hoặc tìm kiếm thông tin về bất kỳ tập tin nào trên toàn bộ hệ thống tập tin mà không cần phải rời khỏi thư mục cá nhân. Để thực hiện, chỉ cần cung cấp đường dẫn tuyệt đối hoặc tương đối đến tập tin hoặc thư mục mà bạn muốn liệt kê thông tin cho nó. Hãy thử các ví dụ sau:

$ ls /etc/systemd
$ ls -l ../
$ ls -lh /etc/services

Bài tập:
Sử dụng trang hướng dẫn của lệnh ls và xem bạn có thể tìm ra cách để hiển thị nội dung của thư mục /etc theo thứ tự giảm dần dựa trên kích thước tập tin hay không.

4. Tạo thư mục

Mục đích của các thư mục là để giữ cho hệ thống tập tin, bao gồm cả tập tin của chúng ta và hệ thống, được sắp xếp có tổ chức. Trong phần này, bạn sẽ học cách tạo thư mục sử dụng lệnh mkdir trên dòng lệnh GNU/Linux.

Việc tạo một thư mục trên hệ thống GNU/Linux đơn giản như việc thực thi lệnh mkdir kèm theo tên thư mục mong muốn dưới dạng đối số. Hãy thử ngay bây giờ. Mở terminal và tạo một thư mục mới có tên, ví dụ, dir1 trong thư mục cá nhân của bạn:

$ mkdir dir1

Mẹo nhanh:
Tránh tạo các tập tin và thư mục có khoảng trắng trong tên. Trên Linux, có thể tạo thư mục hoặc tập tin có tên chứa khoảng trắng bằng cách bao quanh tên đó bằng dấu ngoặc kép, ví dụ: mkdir "my files", nhưng điều này có thể gây ra các vấn đề sau này nên hãy tránh nó bằng mọi giá! Nếu bạn cần sử dụng khoảng trắng trong tên tập tin hoặc thư mục, hãy sử dụng dấu gạch dưới (_) thay thế.

Tiếp theo, hãy sử dụng lệnh ls để liệt kê nội dung của thư mục làm việc hiện tại, và nếu thư mục được tạo thành công, bạn sẽ thấy nó trong kết quả lệnh.

Tương tự như việc tạo thư mục trong thư mục làm việc hiện tại, bạn cũng có thể tạo một thư mục ở bất cứ đâu trên hệ thống tập tin, với điều kiện bạn có đủ quyền truy cập. Bây giờ, hãy tạo một thư mục mới có tên example trong thư mục /tmp.

Có hai cách để thực hiện nhiệm vụ này. Cách đầu tiên là bạn có thể di chuyển đến thư mục /tmp sử dụng lệnh cd và khi đã ở trong thư mục đó, thực thi lệnh mkdir kèm theo tên thư mục mới.

Giải pháp khác là tạo thư mục bằng cách chỉ cần thêm tiền tố là đường dẫn tuyệt đối hoặc tương đối của thư mục nơi mà thư mục example mới sẽ được tạo. Do đó, không cần phải sử dụng lệnh cd để di chuyển đến thư mục /tmp/ trước khi thực thi lệnh mkdir:

$ mkdir /tmp/example

Không có nhiều điều để học về lệnh mkdir. Miễn là bạn hiểu sự khác biệt giữa đường dẫn tuyệt đối và đường dẫn tương đối như đã giải thích ở phần trước, bạn đã nắm bắt được vấn đề. Chỉ có một tùy chọn phổ biến khác được sử dụng kết hợp với lệnh mkdir, đó là tùy chọn -p.

Giả sử bạn muốn tạo một thư mục mới dir2 trong thư mục dir1 hiện có của bạn cũng như tạo một thư mục dir3 bên trong dir2. Giải pháp đầu tiên sẽ là tạo dir2 trước, sau đó thực thi lệnh mkdir thứ hai để tạo dir3 trong thư mục dir2. Tuy nhiên, sử dụng tùy chọn -p, bạn có thể thực hiện được điều này chỉ với một lệnh mkdir:

$ mkdir -p dir1/dir2/dir3

Bài tập:
Sử dụng tài khoản người dùng của bạn, hãy thử tạo một thư mục có tên my_dir trong thư mục /etc. Liệu điều đó có thực hiện được không? Nếu không, tại sao?

5. Tạo tập tin và đọc nội dung tập tin

Hệ thống GNU/Linux lưu trữ phần lớn các thông tin về cài đặt, cấu hình cũng như dữ liệu như log ở dạng các tập tin văn bản ASCII đơn giản. Vì lý do này, việc hiểu biết cơ bản về thao tác với tập tin văn bản là rất cần thiết đối với mọi người dùng.

Trong phần này, bạn sẽ học cách tạo tập tin, đọc nội dung tập tin và cách chỉnh sửa một tập tin văn bản sử dụng trình soạn thảo văn bản đơn giản dựa trên dòng lệnh.

Hãy bắt đầu bằng việc tạo một tập tin rỗng có tên file1 trong thư mục cá nhân của bạn. Để làm điều này, chúng ta sử dụng lệnh touch. Mở terminal và nhập lệnh sau:

$ touch file1

Vậy là xong! Bạn đã tạo thành công một tập tin mới có tên file1 trong thư mục cá nhân. Hãy chạy lệnh ls ngay bây giờ và bạn sẽ thấy tập tin mới này xuất hiện trong thư mục cá nhân của bạn.

Có thể bạn đã nhận ra rằng chúng ta đã tạo một tập tin mà không có đuôi mở rộng như .txt hay .exe. Lưu ý rằng, trên hệ thống GNU/Linux, phần mở rộng của tập tin hầu như không mang ý nghĩa gì, ngoại trừ việc khi chạy lệnh ls để liệt kê tất cả các tập tin và thư mục, ta có thể dễ dàng nhận biết rằng một tập tin có đuôi .txt có khả năng là một tập tin văn bản ASCII và tập tin có đuôi .png có thể là một tập tin hình ảnh.

Tại thời điểm này, cần lưu ý rằng có rất nhiều cách để tạo một tập tin trên hệ điều hành GNU/Linux. Trên thực tế, hiếm khi bạn cần phải tạo một tập tin rỗng như cách đã làm ở trên. Thực ra, mục đích chính của lệnh touch không phải là tạo tập tin mà là để thao tác với dấu thời gian của tập tin, nhưng đó lại là một câu chuyện khác.

Vì mục đích chính của tập tin là lưu trữ dữ liệu, chúng ta sẽ thực hiện việc đó. Hãy sử dụng một trình soạn thảo văn bản có tên nano để tạo một tập tin mới có tên todo-list.txt chứa một số nội dung văn bản tùy ý. Bắt đầu bằng cách thực hiện lệnh sau:

$ nano todo-list.txt

Khi bạn thực hiện lệnh nano, trình soạn thảo nano sẽ mở ra và cho phép bạn chỉnh sửa nội dung của tập tin todo-list.txt mới. Trong quá trình sử dụng nano, hãy thực hiện các chỉnh sửa cần thiết cho nội dung của tập tin.

Khi đã sẵn sàng, nhấn tổ hợp phím CTRL+o rồi nhấn phím ENTER để lưu tập tin. Lúc này, tập tin todo-list.txt mới đã được tạo. Để thoát khỏi trình soạn thảo nano, nhấn tổ hợp phím CTRL+x như minh họa trong hình bên dưới:

  • Mở trình soạn thảo nano và nhập tên tập tin mong muốn dưới dạng tham số.
  • Chỉnh sửa nội dung tập tin bằng cách nhập văn bản mong muốn. Khi đã xong, nhấn tổ hợp phím CTRL+o để lưu nội dung hiện tại của tập tin.
  • Xác nhận tên tập tin và nhấn phím ENTER.
  • Tiếp tục chỉnh sửa và lặp lại bước trước hoặc thoát khỏi trình soạn thảo nano bằng cách nhấn tổ hợp phím CTRL+x.

Tập tin mới có tên todo-list.txt bây giờ đã được tạo và sẽ xuất hiện khi bạn thực thi lệnh ls.

Bạn có thể tiếp tục chỉnh sửa bất kỳ tập tin văn bản nào đã có bằng cách chỉ định tên tập tin đó như một tham số cho lệnh nano.

Cho đến nay, chúng ta đã học cách tạo một tập tin và cách chỉnh sửa tập tin văn bản mới hoặc đã có sử dụng trình soạn thảo văn bản dựa trên dòng lệnh. Điều mà chúng ta chưa đề cập là cách đọc nội dung của tập tin văn bản. Thật ra, không có gì phức tạp cả! Bạn có thể đọc nội dung của bất kỳ tập tin nào bằng cách sử dụng lệnh cat của GNU/Linux.

Hãy thử ngay bây giờ. Thực thi lệnh cat và cung cấp tên của tập tin mà bạn muốn xem nội dung. Ví dụ:

$ cat todo-list.txt

Sử dụng lệnh cat để hiển thị nội dung của bất kỳ tập tin văn bản nào. Chỉ cần cung cấp tên của tập tin đó như một tham số cho lệnh cat.

Bài tập: Một số tập tin có thể dài tới hàng nghìn dòng. Hãy thử xem nội dung của tập tin /etc/services bằng cách sử dụng lệnh cat. Một số terminal có giới hạn số dòng hiển thị và không có thanh cuộn, do đó bạn có thể không đọc được nội dung của các tập tin văn bản lớn chỉ bằng cách sử dụng lệnh cat. Hãy thử nghiệm với các lệnh như less hoặc more để đọc nội dung của tập tin /etc/services.

Trước khi kết thúc phần này, có một lệnh nữa mà bạn nên làm quen. Lệnh này có tên là file.

Nhớ rằng, như đã nói trước đó, không bắt buộc phải thêm đuôi mở rộng cho tên tập tin. Vậy nếu như vậy, làm thế nào để chúng ta biết được loại tập tin được lưu trữ trong thư mục cá nhân hoặc bất cứ đâu trên hệ thống GNU/Linux? Đây chính là lúc lệnh file phát huy tác dụng. Lệnh file sẽ xuất ra thông tin về loại tập tin của bất kỳ tập tin nào được cung cấp dưới dạng tham số. Hãy thử ngay bây giờ:

$ file todo-list.txt
6. Đổi tên hoặc di chuyển tập tin và thư mục

Một bước hợp lý tiếp theo là học cách đổi tên hoặc di chuyển tập tin và thư mục. Cho đến thời điểm này, chúng ta đã thảo luận cách tạo tập tin hoặc thư mục, nhưng còn việc di chuyển tập tin hoặc thư mục đã có sang vị trí khác thì sao? Bạn sẽ vui mừng khi biết rằng việc di chuyển và đổi tên tập tin hoặc thư mục trên hệ thống GNU/Linux về cơ bản là cùng một thao tác.

Việc đổi tên và di chuyển tập tin trên hệ thống tập tin GNU/Linux là một nhiệm vụ đơn giản. Tất cả những gì cần làm là sử dụng lệnh mv và hiểu biết về đường dẫn tuyệt đối cũng như đường dẫn tương đối như đã trình bày ở phần Điều hướng hệ thống tập tin ở trên.

$ touch file1 
$ mkdir dir1

Với hai lệnh touch và mkdir ở trên, chúng ta đã tạo ra một tập tin có tên file1 và một thư mục có tên dir1. Cách sử dụng của các lệnh touch và mkdir đã được đề cập trước đó, nên không cần giải thích thêm.

Nhiệm vụ ở đây là đổi tên file1 thành file2 và dir1 thành dir2 bằng cách sử dụng lệnh mv. Để làm được điều đó, chúng ta cần cung cấp cho lệnh mv đường dẫn tuyệt đối hoặc tương đối của tập tin hoặc thư mục mà chúng ta muốn đổi tên như là đối số đầu tiên. Đối số thứ hai cần thiết là đường dẫn tuyệt đối hoặc tương đối của tập tin hoặc thư mục mà chúng ta muốn đổi tên sang:

$ mv file1 file2
$ mv dir1 dir2

Điều cần hiểu ở đây là GNU/Linux không có lệnh riêng biệt để đổi tên tập tin. Thay vào đó, lệnh mv (viết tắt của move) được sử dụng để di chuyển tập tin hoặc thư mục từ vị trí này sang vị trí khác trong khi đổi tên chúng trong quá trình đó. Xem ví dụ sau:

$ mv file2 /tmp/file3
$ mv dir2 /tmp/dir2

Lệnh đầu tiên đã di chuyển file2 vào thư mục /tmp/ và đổi tên nó thành file3. Lệnh thứ hai đã di chuyển dir2 vào thư mục /tmp/ và vì chúng ta đã cung cấp tên thư mục đích giống như tên ban đầu nên tên của thư mục không thay đổi.

Như vậy, lệnh thứ hai về cơ bản chỉ di chuyển thư mục dir2 vào thư mục đích /tmp/, do đó đối số thứ hai, tức tên mới của thư mục, không cần thiết và có thể được thực hiện đơn giản như:

$ mv dir2 /tmp/

Điều quan trọng cần hiểu ở lệnh mv trên là lệnh này có khả năng chấp nhận nhiều đối số. Điều này có nghĩa là bạn có thể di chuyển nhiều tập tin và/hoặc thư mục cùng một lúc bằng cách thực thi một lệnh mv duy nhất:

$ mkdir dir4 dir5
$ touch file4 file5
$ mv file4 dir4 file5 dir5 /tmp

Mẹo nhanh: Quy tắc duy nhất cần theo dõi khi sử dụng nhiều đối số với lệnh mv là nếu có nhiều đối số nguồn được cung cấp, đối số cuối cùng phải là một thư mục.
Lệnh mv ở trên đã di chuyển nhiều tập tin và thư mục vào vị trí mới: thư mục /tmp. Điều quan trọng cần lưu ý là bất kể bạn cung cấp bao nhiêu tập tin hoặc thư mục làm đối số cho lệnh mv, đối số cuối cùng luôn được coi là thư mục đích.

Trước khi chuyển sang chủ đề khác, cần lưu ý một điều, có thể gây hại, về lệnh mv.

CẢNH BÁO:
Nếu tập tin đích được cung cấp cho lệnh mv đã tồn tại, nó có thể bị ghi đè mà không có cảnh báo, dẫn đến khả năng xóa dữ liệu của bạn một cách không thể phục hồi. Xem ví dụ sau:

$ cat /tmp/sample.txt 
linuxconfig.org
$ touch sample.txt
$ mv sample.txt /tmp/sample.txt 
$ cat /tmp/sample.txt
$

Nếu không chắc chắn, hãy sử dụng tùy chọn -i để yêu cầu lệnh mv đưa ra cảnh báo trong trường hợp tập tin đích đã tồn tại. Ví dụ:

$ mv -i sample.txt /tmp/sample.txt 
mv: overwrite '/tmp/sample.txt'?
7. Sao chép tập tin và thư mục

Trong phần trước, chúng ta đã thảo luận cách di chuyển tập tin và thư mục từ vị trí này sang vị trí khác bằng cách sử dụng lệnh mv của GNU/Linux. Phần này đề cập đến chủ đề tương tự nhưng về cách tạo bản sao của các tập tin và thư mục bằng cách sử dụng lệnh cp.

Hầu hết những kiến thức đã thu được từ phần trước sẽ giúp chúng ta học lệnh cp của GNU/Linux, vì cú pháp của cả hai lệnh mv và cp rất giống nhau. Sự khác biệt chính là thay vì di chuyển các tập tin hoặc thư mục, lệnh cp tạo ra một bản sao chính xác của tập tin hoặc thư mục nguồn.

Cũng như lệnh mv, lệnh cp yêu cầu phải được cung cấp ít nhất hai đối số. Đối số đầu tiên là tập tin hoặc thư mục nguồn, đối số thứ hai là tập tin hoặc thư mục đích.

Hãy bắt đầu với ví dụ đơn giản về việc tạo bản sao của một tập tin nằm trong thư mục cá nhân. Đầu tiên, chúng ta sử dụng lệnh touch để tạo một tập tin mới có tên file1, sau đó tạo bản sao chính xác của nó có tên file2:

$ touch file1 
$ cp file1 file2

Quy tắc khá hiển nhiên ở đây là đối số nguồn và đích được cung cấp cho lệnh cp không được trùng nhau:

$ cp file1 file1
cp: 'file1' and 'file1' are the same file

Cách duy nhất để cung cấp cùng tên tập tin cho cả đối số nguồn và đích là sao chép tập tin vào một thư mục khác bằng cách sử dụng đường dẫn tuyệt đối hoặc tương đối. Ví dụ, lệnh cp sau đây tạo bản sao của file1 vào thư mục /tmp:

$ cp file1 /tmp/file1

Tuy nhiên, nếu bạn không có ý định thay đổi tên tập tin, bạn không cần cung cấp tên tập tin cho đối số đích. Do đó, lệnh trên có thể được viết tắt thành:

$ cp file1 /tmp/

Bài tập:
Bằng cách thực hiện một lệnh cp duy nhất, hãy tạo bản sao của tập tin /etc/services vào thư mục cá nhân của bạn và đổi tên nó thành port-numbers.txt.

Bạn cũng có thể sử dụng cùng cú pháp của lệnh cp để tạo bản sao của một thư mục. Tuy nhiên, có một điểm khác biệt đáng kể, đó là để sao chép một thư mục, bạn cần sử dụng tùy chọn -r (recursive) của lệnh cp. Xem ví dụ sau:

$ mkdir dir1
$ cp dir1 /tmp/
cp: -r not specified; omitting directory 'dir1'
$ cp -r dir1 /tmp

Cũng như lệnh mv của GNU/Linux, lệnh cp cũng chấp nhận nhiều đối số. Điều này có nghĩa là bạn có thể sao chép nhiều tập tin và thư mục cùng một lúc bằng cách thực thi một lệnh cp duy nhất.

Quy tắc là đối số cuối cùng phải là một thư mục. Hãy xem ví dụ sau, trong đó chúng ta tạo một thư mục mẫu khác và một tập tin. Tiếp theo, chúng ta sao chép thư mục này cùng với hai tập tin khác vào thư mục /tmp/:

$ mkdir dir2
$ touch file1 file2
$ cp -r dir2/ file1 file2 /tmp/

CẢNH BÁO:
Nếu tập tin đích được cung cấp cho lệnh cp đã tồn tại, nó có thể bị ghi đè mà không có cảnh báo, do đó hành động này có khả năng xóa dữ liệu của bạn một cách không thể phục hồi. Trong một số trường hợp, hành vi này cũng áp dụng cho thư mục! Xem ví dụ lệnh cp sau:

$ cat sample.txt 
dataonline.org
$ touch /tmp/sample.txt
$ cp /tmp/sample.txt sample.txt 
$ cat sample.txt 
$

Nếu không chắc chắn, hãy sử dụng tùy chọn -i để yêu cầu lệnh cp đưa ra cảnh báo trong trường hợp tập tin đích đã tồn tại. Ví dụ:

$ cp -i /tmp/sample.txt sample.txt 
cp: overwrite 'sample.txt'?
8. Xóa tập tin và thư mục

Ở giai đoạn này, bạn đã khá tự tin với những kiến thức cơ bản về dòng lệnh Linux. Bạn cũng có thể đã nhận ra một mô hình nhất định trong cách sử dụng các lệnh. Bạn đã biết cách tạo, di chuyển và đổi tên bất kỳ tập tin hoặc thư mục nào. Tuy nhiên, nếu bạn không biết cách xóa các tập tin hoặc thư mục, hệ thống tập tin của bạn sẽ đầy, và khả năng lưu trữ dữ liệu sẽ bị mất dần.

Trong phần này, chúng ta sẽ tìm hiểu hai lệnh. Lệnh đầu tiên là rmdir và lệnh thứ hai là rm. Khi nhìn vào tên của cả hai lệnh rmdir và rm, bạn có thể nhanh chóng kết luận rằng lệnh rmdir được sử dụng để xóa thư mục còn lệnh rm được dùng để xóa tập tin – và về cơ bản, bạn đã đúng. Hãy bắt đầu với lệnh rmdir trước.

Trong các thử nghiệm của chúng ta, ta sẽ sử dụng cấu trúc thư mục như hình dưới đây, chứa nhiều thư mục con và tập tin. Mục tiêu của chúng ta là học cách sử dụng các lệnh rmdir và rm để xóa tất cả các tập tin và thư mục:

Như với bất kỳ lệnh GNU/Linux nào bạn đã học, lệnh rmdir cũng chấp nhận nhiều đối số. Ví dụ, để xóa thư mục dir4, tất cả những gì bạn cần làm là cung cấp cho lệnh rmdir tên của thư mục mà bạn muốn xóa như một tham số:

$ rmdir my_files/dir4/

Rất đơn giản, phải không? Bây giờ, hãy xóa thư mục tiếp theo, ví dụ dir1:

$ rmdir my_files/dir1
rmdir: failed to remove 'my_files/dir1': Directory not empty

Như bạn có thể thấy, lệnh rmdir ở trên đã không thể xóa được thư mục dir1. Nhiệm vụ chính của lệnh rmdir là xóa thư mục, và vì thư mục dir1 chứa các tập tin, lệnh rmdir đã không xóa được thư mục này và đưa ra thông báo lỗi cho biết thư mục không trống.

Logic này hoàn toàn hợp lý! Cách duy nhất để xóa thư mục không rỗng là sử dụng tùy chọn dòng lệnh khá dài của rmdir là --ignore-fail-on-non-empty. Tuy nhiên, vào lúc này, việc sử dụng lệnh rm sẽ dễ dàng hơn nhiều. Lệnh rm với sự kết hợp đúng của các tùy chọn có thể xóa bất kỳ số lượng tập tin và thư mục nào, cho dù thư mục đó có trống hay chứa bất kỳ số lượng tập tin và thư mục con nào.

Đầu tiên, hãy kiểm tra lệnh rm để xóa tập tin có tên my_file.txt:

$ rm my_files/my_file.txt

Để xóa một thư mục bằng lệnh rm, chúng ta cần sử dụng tùy chọn -r. Tùy chọn -r viết tắt của recursive (đệ quy), nghĩa là lệnh sẽ xóa thư mục cũng như toàn bộ nội dung bên trong nó. Lệnh sau sẽ xóa toàn bộ thư mục my_files/dir1 bao gồm tất cả các tập tin và thư mục con:

CẢNH BÁO:
Việc xóa tập tin bằng lệnh rm là hành động không thể hoàn tác. Tùy thuộc vào hệ thống tập tin và cách sử dụng của hệ thống, dữ liệu của bạn có thể không thể khôi phục lại. Hãy cẩn thận khi sử dụng lệnh rm.

$ rm -r my_files/dir1/

Việc sử dụng lệnh rm khá đơn giản. Giống như nhiều lệnh Linux khác, nó chấp nhận nhiều đối số nên có thể dễ dàng xóa một hoặc nhiều tập tin và thư mục cùng một lúc.

9. Tìm kiếm tập tin hoặc thư mục

Ở giai đoạn này, bạn đã khá tự tin với việc điều hướng hệ thống tập tin và quản lý tập tin/thư mục. Trước khi chuyển sang phần tiếp theo, chuyên về các lệnh quản trị hệ thống GNU/Linux cơ bản, chúng ta cần thảo luận về cách tìm kiếm tập tin trong trường hợp cần thiết. Có hai lệnh chính của Linux cho phép người dùng tìm kiếm tập tin, đó là lệnh locate và lệnh find.

Lệnh find là một công cụ mạnh mẽ nên việc sử dụng nó có thể gây choáng ngợp, đặc biệt là đối với người mới bắt đầu. Vì lý do đó, chúng ta chỉ đề cập đến lệnh locate vì nó dễ sử dụng hơn nhiều.

Cách sử dụng cơ bản của lệnh locate khá đơn giản. Chỉ cần gõ locate theo sau là tên tập tin hoặc thư mục dưới dạng đối số. Ví dụ, hãy tìm kiếm một tập tin có tên issue:

$ locate issue

Lệnh trên sẽ trả về một danh sách các tập tin hoặc thư mục trên toàn bộ hệ thống chứa chuỗi issue ở bất kỳ đâu trong tên của tập tin hoặc thư mục. Tùy thuộc vào những gì bạn đang tìm kiếm, danh sách này có thể trở nên rất dài.

Do đó, việc tìm kiếm theo đúng tên tập tin sẽ tạo ra kết quả mà ta dễ dàng xác định hơn. Để làm điều đó, ta cần sử dụng biểu thức chính quy (regular expressions) và tùy chọn dòng lệnh -r của lệnh locate.

Biểu thức chính quy vượt quá phạm vi của hướng dẫn này. Hiện tại, ta chỉ cần biết rằng để tìm kiếm theo đúng tên tập tin hoặc thư mục, ta cần đặt chuỗi cần tìm giữa ký tự / và $. Ví dụ:

$ locate -r /issue$

Sử dụng lệnh locate của GNU/Linux để tìm kiếm tập tin và thư mục.

Trước khi bạn tự cho mình là một chuyên gia về lệnh locate, hãy cùng tìm hiểu ngắn gọn cách hoạt động của lệnh này. Lệnh locate có tốc độ tìm kiếm cực nhanh bởi vì nó chỉ đơn giản là tra cứu cơ sở dữ liệu được xây dựng sẵn, được cập nhật một lần mỗi ngày bằng lệnh updatedb.

Nhược điểm của nó là lệnh locate sẽ không phát hiện ra các tập tin hoặc thư mục được tạo ra sau lần cập nhật updatedb cuối cùng. Tuy nhiên, để bao gồm các tập tin mới, người dùng có tùy chọn chạy lệnh updatedb thủ công như minh họa dưới đây:

$ sudo updatedb
Các lệnh quản trị cơ bản

1. Thực thi lệnh với quyền quản trị

Hầu hết các lệnh Linux mà bạn chạy sẽ được thực thi mà không cần quyền quản trị. Thực tế, chỉ nên thực thi các lệnh với quyền quản trị khi nhiệm vụ cần làm yêu cầu như vậy. Tuân theo quy tắc đơn giản này sẽ góp phần bảo toàn toàn vẹn hệ thống và giúp người dùng tránh được những sai sót tốn kém và không cần thiết khi tương tác với dòng lệnh Linux.

Tuy nhiên, thật khó để hoàn toàn tránh việc thực thi các lệnh Linux với quyền quản trị. Quyền quản trị là cần thiết cho việc cài đặt phần mềm mới, cấu hình các dịch vụ hệ thống cốt lõi và nhiều thứ khác. Đây chính là lúc lệnh sudo trở nên hữu dụng. Việc thêm tiền tố sudo trước bất kỳ lệnh Linux nào sẽ đảm bảo rằng lệnh đó được thực thi với quyền quản trị, hay còn gọi là quyền root. Hãy tự mình thử:

$ sudo whoami
$ whoami

Lệnh whoami luôn trả về tên người dùng của tài khoản thực thi lệnh. Trong trường hợp này, bạn có thể thấy rằng khi thêm tiền tố sudo trước lệnh whoami, lệnh này được thực hiện với tư cách là người dùng root.
Theo mặc định, sau lần xác thực thành công đầu tiên, người dùng sudo có 5 phút để thực thi các lệnh ưu tiên mà không cần nhập lại mật khẩu.

Mẹo nhanh:
Bất cứ khi nào bạn đọc tài liệu liên quan đến Linux và được yêu cầu chạy các lệnh từ terminal, bạn sẽ thấy các lệnh được tiền tố bằng ký hiệu $ hoặc #. Dấu $ biểu thị rằng lệnh đó sẽ được thực thi với tư cách người dùng thường không có quyền quản trị. Ngược lại, dấu # cho biết lệnh đó sẽ được thực thi với quyền root/quyền quản trị, dù trực tiếp với tư cách người dùng root hay thông qua lệnh sudo.

2. Cài đặt phần mềm

Cài đặt mặc định của hệ thống GNU/Linux của bạn có thể, và rất thường xuyên, được tùy chỉnh để bao gồm phần mềm bổ sung phù hợp với nhu cầu của bạn. Nếu có sự khác biệt giữa các bản phân phối GNU/Linux khác nhau, đó là cách cài đặt phần mềm. Phần mềm được cung cấp dưới dạng các gói (packages) có sẵn từ kho lưu trữ gói của bản phân phối tương ứng.

Khi nói đến quản lý gói phần mềm, có hai nhánh chính của các bản phân phối GNU/Linux.

Đó là các hệ thống sử dụng gói DEB và RPM. Nhánh đầu tiên sử dụng lệnh apt còn nhánh thứ hai sử dụng lệnh yum để cài đặt phần mềm. Tất nhiên, có rất nhiều lệnh phụ trợ khác hỗ trợ cài đặt hoặc bảo trì phần mềm, nhưng các điều cơ bản được giải thích dưới đây.

Đầu tiên, chúng ta tìm kiếm tên gói của phần mềm mà chúng ta muốn cài đặt. Giả sử rằng chúng ta cần cài đặt một loại torrent client để có thể tải các tập tin torrent. Trước tiên, hãy tìm kiếm tên gói:

HỆ THỐNG GNU/LINUX DEB:

$ apt search torrent client

HỆ THỐNG GNU/LINUX RPM:

$ yum search torrent client

Các lệnh trên sẽ tạo ra một danh sách tên gói và mô tả tương ứng của chúng. Hãy đọc cột mô tả và chọn một gói từ cột bên trái mà bạn muốn cài đặt. Một khi đã chọn được gói, hãy thực thi lại lệnh quản lý gói thích hợp để cài đặt gói đó.

Giả sử gói mà chúng ta muốn cài đặt có tên là bittorrent. Để bắt đầu quá trình cài đặt, lệnh của chúng ta phải được thực thi với quyền quản trị như đã mô tả ở phần trước. Khi được nhắc, hãy gõ y để tiến hành cài đặt:

HỆ THỐNG GNU/LINUX DEB:

$ sudo apt install bittorrent

HỆ THỐNG GNU/LINUX RPM:

$ sudo yum install bittorrent

Mẹo nhanh:
Việc thực thi lệnh apt search có thể tạo ra một danh sách dài các gói mà có thể không vừa với màn hình terminal của bạn. Để khắc phục sự bất tiện này, hãy sử dụng ống nối (pipe) kết hợp với lệnh more và cuộn xuống danh sách bằng phím cách (space). Ví dụ:

$ apt search YOUR SEARCH KEYWORDS | more

Để thoát và quay lại dòng lệnh, nhấn phím q.

3. Kiểm tra dung lượng đĩa

Trong phần này, bạn sẽ học cách kiểm tra kích thước của thư mục và tập tin cũng như cách lấy thông tin về dung lượng ổ đĩa hiện có của bạn. Lệnh Linux đầu tiên mà chúng ta sẽ tìm hiểu trong phần này là lệnh df. Tên lệnh df là viết tắt của từ disk free (ổ đĩa trống).

Khi thực thi lệnh df mà không có bất kỳ tham số nào, lệnh sẽ trả về thông tin về dung lượng ổ đĩa đã sử dụng và còn trống cho tất cả các phân vùng truy cập được, tính bằng kilobyte. Mặc định, đầu ra của lệnh df in thông tin sử dụng ổ đĩa theo đơn vị kilobyte. Tuy nhiên, hành vi này có thể được thay đổi bằng cách sử dụng tùy chọn -h:

$ df -h

Để kiểm tra dung lượng ổ đĩa trống của bất kỳ thư mục nào, chỉ cần thêm đường dẫn đầy đủ của thư mục đó làm tham số cho lệnh df. Ví dụ:

$ df -h /home

Kiểm tra dung lượng ổ đĩa trống trong thư mục /home.

Lưu ý:
Kiểm tra dung lượng trống của thư mục với lệnh df không cung cấp bất kỳ thông tin nào về kích thước của chính thư mục đó. Lệnh df chỉ xuất ra thông tin về việc sử dụng dung lượng của phân vùng chứa thư mục. Để kiểm tra kích thước thư mục, hãy sử dụng lệnh du của Linux như được giải thích dưới đây.

Bây giờ, khi đã học cách kiểm tra dung lượng trống của ổ đĩa, cũng quan trọng không kém là biết cách lấy thông tin về kích thước của tập tin và thư mục.

Để lấy thông tin về kích thước của tập tin ở dạng dễ đọc (human-readable), chúng ta có thể sử dụng lệnh ls đã đề cập ở trên với sự kết hợp của tùy chọn -l (long listing) và -h (human-readable) cùng với đường dẫn đầy đủ hoặc tương đối tới tập tin cần kiểm tra. Ví dụ, lệnh ls dưới đây sẽ trả về kích thước của tập tin có tên swapfile nằm trong thư mục gốc /:

$ ls -lh /swapfile

Tương tự như kiểm tra kích thước tập tin, chúng ta có thể sử dụng lệnh du để kiểm tra kích thước của thư mục. Mặc định, khi cung cấp tham số là thư mục, lệnh du sẽ hiển thị kích thước của tất cả các thư mục con bên trong:

$ du -h /home/

Để có được tổng kích thước của một thư mục đơn lẻ, hãy sử dụng tùy chọn -s. Một lần nữa, như trong tất cả các ví dụ ở trên trong phần này, chúng ta quan tâm đến đầu ra dễ đọc nên sử dụng tùy chọn -h:

$ du -sh /home/

Bài tập:
Chạy lệnh man ls để có cái nhìn tổng quan nhanh về tất cả các tùy chọn của lệnh ls. Bạn có thể tìm ra cách sử dụng lệnh ls để liệt kê tất cả các tập tin và thư mục được sắp xếp theo kích thước ổ đĩa giảm dần không?

4. Nén và giải nén tập tin/thư mục

Phần này giới thiệu một vài cách nén và giải nén tập tin trên hệ thống GNU/Linux. Các công cụ đầu tiên bạn cần biết là lệnh targzip.
Lệnh tar thường dùng để gom toàn bộ thư mục vào một tập tin duy nhất và có thể nén trong quá trình đó nếu cần.

Ví dụ: Gom thư mục my_dir vào tập tin my_dir.tar:

$ tar cf my_dir.tar my_dir

Để nén tập tin vừa tạo bằng gzip và tạo ra tập tin my_dir.tar.gz:

$ gzip my_dir.tar

Thông thường, bạn có thể kết hợp cả targzip để nén thư mục trong một lệnh:

$ tar czf my_dir.tar.gz my_dir

Các tập tin được tạo ra bằng sự kết hợp của targzip được gọi là gzip tarballs hay đơn giản là tarballs.

Để giải nén tarball, dùng lệnh gunzip để giải nén tập tin nén:

$ gunzip my_dir.tar.gz

Lệnh trên sẽ tạo lại tập tin my_dir.tar. Sau đó, dùng tar để giải nén:

$ tar xf my_dir.tar

5. Tắt máy và khởi động lại

Khi nói đến việc tắt máy và khởi động lại hệ điều hành GNU/Linux, chỉ có một lệnh bạn cần phải học, lệnh này có thể thực hiện cả hai chức năng: khởi động lại và tắt máy. Lệnh đó được đặt tên một cách trực quan là shutdown.

Đúng là, bạn có thể khởi động lại hệ thống của mình bằng các lệnh khác như init 6 hoặc reboot, nhưng việc học cách sử dụng lệnh shutdown sẽ cung cấp cho bạn nhiều quyền lực và tùy chọn hơn. Dưới đây là một vài ví dụ về cách sử dụng lệnh shutdown.

Ví dụ đầu tiên, lệnh shutdown sẽ khởi động lại hệ thống của bạn sau 1 phút:

$ sudo shutdown -r

Để khởi động lại hệ thống GNU/Linux ngay lập tức, hãy thực hiện:

$ sudo shutdown -r now

Việc tắt máy hệ thống bằng lệnh shutdown tuân theo cùng một nguyên tắc như các ví dụ khởi động lại trên. Hai ví dụ sau đây cho thấy cách tắt máy hệ thống sau 1 phút, ngay lập tức và với độ trễ 1,5 giờ (90 phút):

$ sudo shutdown
$ sudo shutdown now
$ sudo shutdown +90

Trong trường hợp bạn đã thực hiện lệnh tắt máy với độ trễ, bạn có thể hủy quá trình tắt máy bằng cách:

$ sudo shutdown -c
Các lệnh Linux nâng cao

1. Khắc phục sự cố kết nối Internet/mạng

Phần này sẽ giới thiệu cho bạn một số kỹ năng mạng cơ bản. Cụ thể, bạn sẽ học cách lấy địa chỉ IP của các dịch vụ cần thiết để thiết lập kết nối Internet đúng cách và cách khắc phục sự cố kết nối mạng cũng như kết nối Internet.

Hãy bắt đầu bằng cách lấy địa chỉ IP cục bộ của bạn bằng cách sử dụng lệnh ip. Lệnh ip có một số tùy chọn, trong đó có tùy chọn a (viết tắt của address) để hiển thị địa chỉ IP được gán cho tất cả các giao diện mạng có sẵn và đang hoạt động:

$ ip a

Lệnh trên hiển thị địa chỉ IP hiện đang được hệ thống sử dụng. Lưu ý rằng tên giao diện mạng của bạn có thể khác. Trong ví dụ tiếp theo, chúng ta lấy địa chỉ IP của gateway. Một lần nữa, chúng ta sử dụng lệnh ip nhưng lần này với tùy chọn r (route):

$ ip r

Mảnh ghép tiếp theo là địa chỉ IP của DNS (Domain Name Server). Để kiểm tra máy chủ DNS mà hệ thống của bạn sử dụng để phân giải tên miền thành địa chỉ IP, chỉ cần kiểm tra nội dung của tập tin /etc/resolv.conf bằng lệnh cat như đã giải thích trước đó:

$ cat /etc/resolv.conf

Bây giờ, khi đã có được thông tin cấu hình mạng cơ bản nhất, chúng ta có thể sử dụng nó để khắc phục nhiều loại sự cố kết nối mạng, chẳng hạn như kết nối Internet. Công cụ tốt nhất cho việc này là lệnh ping.

Sử dụng lệnh ping, chúng ta có thể kiểm tra kết nối tới bất kỳ địa chỉ IP hoặc máy chủ nào. Lệnh ping sẽ gửi một gói tin đến bất kỳ máy chủ hoặc địa chỉ IP nào mà bạn chọn và thông báo cho bạn kết quả. Mặc định, lệnh ping sẽ gửi các gói tin liên tục đến địa chỉ IP hoặc máy chủ đã chọn. Để dừng việc gửi ping liên tục, nhấn tổ hợp phím CTRL+C. Ngoài ra, bạn có thể sử dụng tùy chọn -c kết hợp với số lượng gói tin mà bạn muốn gửi. Ví dụ:

$ ping dataonline.org 
PING dataonline.org (104.24.11.18) 56(84) bytes of data. 
64 bytes from 104.24.11.18 (104.24.11.18): icmp_seq=1 ttl=57 time=9.83 ms 
64 bytes from 104.24.11.18 (104.24.11.18): icmp_seq=2 ttl=57 time=10.0 ms 
64 bytes from 104.24.11.18 (104.24.11.18): icmp_seq=3 ttl=57 time=9.95 ms 
--- dataonline.org ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2002ms 
rtt min/avg/max/mdev = 9.833/9.933/10.008/0.073 ms
$ ping -c 2 8.8.4.4 
PING 8.8.4.4 (8.8.4.4) 56(84) bytes of data. 
64 bytes from 8.8.4.4: icmp_seq=1 ttl=121 time=10.3 ms 
64 bytes from 8.8.4.4: icmp_seq=2 ttl=121 time=10.4 ms 
--- 8.8.4.4 ping statistics --- 
2 packets transmitted, 2 received, 0% packet loss, time 1001ms 
rtt min/avg/max/mdev = 10.340/10.412/10.485/0.125 ms

Trong trường hợp bạn gặp phải bất kỳ sự cố kết nối Internet nào, bạn có thể khắc phục bằng cách kiểm tra kết nối mạng bằng cách ping tất cả các địa chỉ IP ở trên, bắt đầu từ địa chỉ IP cục bộ của bạn hoặc bất kỳ máy chủ công cộng nào. Chiến lược này sẽ giúp bạn thu hẹp phạm vi nguyên nhân gây ra vấn đề kết nối mạng

2. Thay đổi quyền và quyền sở hữu (permissions and ownership)

Mỗi tập tin hoặc thư mục trong hệ thống tập tin GNU/Linux có thể thuộc sở hữu của các người dùng khác nhau cũng như các nhóm người dùng khác nhau. Hơn nữa, mỗi tập tin hoặc thư mục có thể được thiết lập với một hoặc nhiều quyền như đọc, ghi và thực thi. Chủ đề về quyền và sở hữu của tập tin hoặc thư mục có thể dài ra thành cả một cuốn sách. Vì chúng ta chỉ quan tâm đến những kiến thức cơ bản, dưới đây là một số mẹo để bạn bắt đầu.

Hãy bắt đầu bằng cách lấy thông tin hiện tại về quyền của tập tin hoặc thư mục. Để làm điều này, hãy thực thi lệnh ls đã học với tùy chọn -l và kèm theo tên tập tin hoặc thư mục làm tham số. Ví dụ:

$ ls -l dir/

Thông tin chi tiết về tập tin hoặc thư mục được lấy ra bằng lệnh ls với tùy chọn -l (long listing).

Có ba loại quyền: đọc, ghi và thực thi. Bảng sau liệt kê các loại quyền cùng với biểu diễn theo dạng số (octal) và dạng ký hiệu:

Loại Quyền Biểu diễn Octal Biểu diễn Ký hiệu
Đọc 4 r
Ghi 2 w
Thực thi 1 x

Công cụ để thay đổi quyền của tập tin hoặc thư mục trên hệ thống GNU/Linux là lệnh chmod. Có hai cách để thay đổi quyền sử dụng lệnh chmod: theo dạng số (octal) hoặc theo dạng ký hiệu (symbolic). Trong hai cách này, cách nào mà bạn cảm thấy dễ nhớ và sử dụng nhất thì hãy chọn cách đó.

Ví dụ dưới đây cho thấy cách sử dụng lệnh chmod với cả hai dạng, để thay đổi quyền của thư mục dir theo yêu cầu sau:

Mục tiêu Yêu cầu Biểu diễn Octal Biểu diễn Ký hiệu
Người dùng (owner) Đọc, Ghi và Thực thi 7 (vì 4 + 2 + 1) u=rwx
Nhóm Đọc và Ghi 6 (vì 4 + 2) g=rw
Người khác Không có quyền 0 o=

Hai lệnh chmod dưới đây, sử dụng biểu diễn octal và symbolic, có thể thay thế cho nhau và sẽ thay đổi quyền của thư mục dir theo yêu cầu trên:

OCTAL:
$ chmod 760 dir
SYMBOLIC:
$ chmod u=rwx,g=rw,o= dir

Công cụ cuối cùng được đề cập trong phần này là lệnh chown. Lệnh chown cho phép người dùng thay đổi quyền sở hữu của tập tin hoặc thư mục. Mỗi tập tin hoặc thư mục có hai loại sở hữu: sở hữu người dùng và sở hữu nhóm.

Để thay đổi quyền sở hữu bằng lệnh chown là một quá trình khá đơn giản. Quy tắc chung để thay đổi quyền sở hữu của tập tin hoặc thư mục là cung cấp cho lệnh chown hai tham số. Tham số đầu tiên chứa tên người dùng và tên nhóm mà bạn muốn tập tin hoặc thư mục đó thuộc sở hữu, phân cách nhau bởi dấu chấm (.) và tham số thứ hai là tên của tập tin hoặc thư mục cần thay đổi.

Ví dụ, lệnh chown dưới đây sẽ thay đổi tập tin có tên file.txt để thuộc sở hữu của người dùng lubos và thuộc nhóm dataonline (tất cả các người dùng thuộc nhóm dataonline):

$ chown lubos.dataonline file.txt

LƯU Ý:
Để thay đổi quyền sở hữu của tập tin hoặc thư mục thành công bằng lệnh chown, cần tuân theo hai quy tắc: thứ nhất, người dùng và nhóm phải tồn tại; thứ hai, thay đổi quyền sở hữu từ hoặc sang người dùng hoặc nhóm root yêu cầu có quyền quản trị. Xem phần giải thích về lệnh sudo ở trên để biết thêm thông tin.

Bài tập:
Hãy thử nghiệm với các biến thể quyền khác nhau của lệnh chmod. Bạn có thể giải thích sự khác biệt khi áp dụng cùng một bộ quyền cho một tập tin và một thư mục không?
(Hãy xem xét các trường hợp, chẳng hạn như thư mục khi thực thi, có ý nghĩa khác với tập tin hay không.)

3. Kiểm tra phiên bản kernel của hệ thống

Đôi khi bạn cần kiểm tra phiên bản kernel đang chạy của hệ thống GNU/Linux để khắc phục sự cố. Dùng lệnh uname với tùy chọn -a để hiển thị đầy đủ thông tin về phiên bản kernel và kiến trúc:

$ uname -a

Lưu ý: Từ “Linux” chỉ thực sự chỉ kernel của hệ thống, trong khi các lệnh và phần mềm được xây dựng từ GNU free software. Vì vậy, gọi toàn bộ hệ thống là GNU/Linux hay Lignux là chính xác hơn là chỉ gọi là Linux.

Kết luận

Mặc dù bài viết này đã cung cấp một số kỹ thuật dòng lệnh GNU/Linux cơ bản, nhưng đây chỉ là bước khởi đầu. Vẫn còn rất nhiều kiến thức chuyên sâu để bạn khám phá và nâng cao kỹ năng quản trị hệ thống của mình. Nếu bạn có bất kỳ phản hồi nào, đừng ngần ngại để lại bình luận bên dưới để giúp tôi cải thiện nội dung. Nếu bạn cần hỗ trợ thêm, hãy ghé thăm diễn đàn DataOnline để nhận được sự giúp đỡ từ cộng đồng.

Khi đã quen thuộc với các lệnh Linux cơ bản, việc lựa chọn một dịch vụ VPS phù hợp là bước tiếp theo. Tìm hiểu giá thuê VPS hiện nay để chọn được giải pháp phù hợp với nhu cầu và ngân sách của bạn, đồng thời tận dụng tối đa kiến thức đã học.

Vậy bước tiếp theo là gì? Hãy tiếp tục thực hành với các lệnh Linux, mở rộng kiến thức mỗi ngày và thử nghiệm các kỹ thuật mới. Sự kiên trì luyện tập sẽ giúp bạn làm chủ hệ thống Linux một cách chuyên nghiệp! Khi bạn đã quen thuộc với các lệnh Linux cơ bản, hãy xem qua Hướng dẫn Bash Scripting dành cho người mới bắt đầu của DataOnline để khám phá cách tự động hóa các tác vụ bằng cách kết hợp lệnh Linux với shell scripting.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *