[Nhập môn Linux] – Một số câu lệnh cơ bản trong Bash

Như đã đề cập ở bài viết trước, hôm nay chúng ta sẽ cùng nhau tìm hiểu về các câu lệnh cơ bản được thường xuyên sử dụng trong Bash.

I. Phần mà hướng dẫn lập trình nào cũng phải có: Hello World!

Trước khi bắt đầu tìm hiểu về các câu lệnh trong Bash, các bạn cần phải khởi động ứng dụng Terminal lên. Ở đa số các bản phân phối của Linux thì phím tắt khởi động Terminal là tổ hợp phím Ctrl + Alt + T. Sau khi khởi động được Terminal, các bạn sẽ bắt đầu làm việc với giao diện như bên dưới:

Hình 0

Đùa thôi :). Khởi động Terminal lên và các bạn sẽ được chào đón bằng chiếc giao diện tối om lạnh lẽo như vậy nè…

Hình 1

Tuy nhiên không có gì phải hụt hẫng hay thất vọng cả, mặc dù giao diện Terminal nhìn không ảo diệu như trong điện ảnh Hollywood nhưng mình dám cá rằng sau khi học xong các kỹ năng xuyên suốt chuỗi bài viết này, lúc thao tác trên Terminal các bạn cũng sẽ trông ngầu lòi không kém mấy anh hacker trong phim đâu ;).

Được rồi bây giờ chúng ta hãy cùng bắt đầu tìm hiểu về các câu lệnh cơ bản thông dụng. Khi bắt đầu học lập trình lúc nào cũng phải thực hiện đúng quy trình chứ nhỉ? Hãy bắt đầu với một ví dụ thân thuộc: xuất “Hello World!” ra màn hình. Để xuất một dòng chữ bất kỳ ra màn hình, bạn đọc hãy gõ theo cú pháp: echo <nội_dung>.

Hình 2

Ô kê! Xuất thành công dòng chữ Hello World đồng nghĩa với việc bạn đã đi được một nửa chặng đường chinh phục bộ môn Linux này rồi đấy. Cố lên nào!

II. Tương tác với thư mục làm việc

1. Xác định thư mục làm việc hiện tại

Để xác định thư mục làm việc hiện tại của Terminal, các bạn có thể sử dụng lệnh pwd:

Hình 3

Sau khi thực thi lệnh, hệ thống sẽ xuất ra màn hình /home/mmlab tức là thư mục đang ở hiện tại của bạn. Việc xác định được thư mục làm việc là rất quan trọng vì khi làm việc trên giao diện dòng lệnh sẽ rất dễ bị “lạc trôi” sang những thư mục khác hoặc quên mất bản thân đang làm việc ở vị trí nào trong hệ thống, đôi khi sẽ dẫn đến lỗi khi thực thi các lệnh không đúng theo thư mục yêu cầu.

2. Liệt kê nội dung bên trong thư mục hiện tại

Kế tiếp, lệnh ls có tác dụng liệt kê các tệp tin trong thư mục làm việc hiện tại:

Hình 4

Lệnh ls sẽ hiển thị danh sách tất cả các tệp tin và thư mục con trong thư mục làm việc hiện tại. Như ví dụ ở trên, hệ thống liệt kê cho chúng ta thấy trong thư mục /home/mmlab có:

  • Một tệp tin hình ảnh: cute_cat.png
  • Một tệp tin hình ảnh khác: funny_meme.jpg
  • Một thư mục con: thongtin_sv
  • Và một tệp tin văn bản: top_secret.txt

Lưu ý: Đối với các thư mục làm việc rỗng (thường là ở những hệ điều hành vừa mới cài đặt), khi gõ lệnh ls thì hệ thống không xuất ra gì cả. Bạn đọc không cần phải quá lo lắng, đó không phải là lỗi hệ thống đâu mà là do thư mục rỗng nên chưa có gì để liệt kê.

Trước khi thao tác với thư mục bất kỳ, các bạn nên rèn cho mình thói quen gọi lệnh ls để chắc chắn rằng nội dung bên trong thư mục hiện hành đúng với kỳ vọng, và cũng sẵn để kiểm tra lại xem đó có đúng là thư mục mà bạn đang muốn thao tác và chỉnh sửa hay không. Ngoài ra, lệnh ls còn hỗ trợ thêm nhiều tùy biến khác tùy theo mục đích sử dụng:

Cú pháp: ls [DANH SÁCH TÙY BIẾN]...

Các tùy biến được hỗ trợ bao gồm:
    -1: Liệt kê mỗi tệp tin trên từng dòng.
    -A: Liệt kê tất cả, bao gồm cả những tệp tin và thư mục bị ẩn (hidden).
    -s: Liệt kê thêm kích thước của mỗi tệp tin.
    -l: Liệt kê chi tiết những thông tin khác của mỗi tệp tin như người tạo, ngày tạo, kích thước, ...
    -h: Khi liệt kê kích thước, tự động chuyển đơn vị từ byte sang KB hoặc MB để dễ đọc hơn.
    -R: Liệt kê luôn nội dung của các thư mục con, và thư mục con của các thư mục con, v.v
    -t: Sắp xếp các tệp tin theo ngày gần nhất được chỉnh sửa.
    -S: Sắp xếp các tệp tin theo kích thước giảm dần.
    -X: Sắp xếp các tệp tin theo phần đuôi mở rộng (extension).
    -U: Không cần sắp xếp khi liệt kê các tệp tin.

Ngoài các tùy biến trên, còn có nhiều tùy biến khác được hỗ trợ, các bạn có thể tham khảo thêm bằng cách gõ:
    ls --help

Ví dụ, để liệt kê tất cả tệp tin trong thư mục hiện hành và trong những thư mục con, mỗi tệp tin xuất trên một dòng, chúng ta có thể sử dụng lệnh ls -R -1 (hoặc ls -1 -R):

Hình 5

III. Tương tác với các tệp tin

1. Tạo, chỉnh sửa và xem nội dung tệp tin

Lệnh touch sẽ tạo một tệp tin rỗng để người dùng có thể thêm nội dung vào đó sau. Cú pháp:

touch <tên_tệp_tin>

Sau khi thực hiện lệnh touch, hệ thống sẽ tạo một tệp tin rỗng ngay trong thư mục hiện hành. Các bạn có thể thêm nội dung vào tệp vừa tạo bằng lệnh sau:

nano <tên_tệp_tin>

Một giao diện soạn thảo văn bản sẽ hiện ra, cho phép bạn tùy ý chỉnh sửa nội dung của tệp tin tương tự với ứng dụng Notepad có sẵn trong các máy tính chạy Windows. Khi đã hoàn tất việc chỉnh sửa, nhấn tổ hợp phím (Ctrl + X) → Y → Enter để lưu lại các thay đổi vừa thực hiện.

Sau khi quá trình lưu văn bản hoàn tất, để kiểm tra lại nội dung của tệp tin vừa chỉnh sửa, gõ lệnh:

cat <tên_tệp_tin>

Lệnh cat có tác dụng giống như lệnh echo được giới thiệu ở đầu bài viết, tuy nhiên thay vì xuất ra màn hình một nội dung nào đó thì lệnh cat sẽ hiển thị toàn bộ nội dung của một tệp tin bất kỳ.

Sau khi thực hiện tuần tự ba dòng lệnh như trên, các bạn nên kỳ vọng nhận được kết quả như sau:

Hình 6

2. Đường dẫn tương đối, đường dẫn tuyệt đối

Hầu hết các lệnh liên quan đến tương tác tệp tin trong Linux như ls, touch, cat, nano, cp, mv, … đều có thể sử dụng đường dẫn đến tệp tin nằm trong một thư mục khác thay vì chỉ tương tác với các tệp tin trong thư mục làm việc hiện tại.

Đường dẫn trong Linux được chia thành hai loại:

  • Đường dẫn tuyệt đối: là các đường dẫn bắt đầu từ thư mục gốc (root) của hệ thống và luôn bắt đầu bằng ký tự /. Ví dụ: /home/mmlab là một đường dẫn tuyệt đối.
  • Đường dẫn tương đối: là các đường dẫn bắt đầu từ thư mục làm việc hiện tại, và vị trí của tệp tin luôn được xác định một cách tương đối. Ví dụ: thongtin_sv/sinhvien1.txt là một đường dẫn tương đối, dẫn đến tệp tin sinhvien1.txt nằm trong thư mục con thongtin_sv, và thư mục con này đang nằm trong thư mục hiện hành. Vậy vị trí của tệp tin sinhvien1.txt có thể xác định một cách tương đối so với vị trí của thư mục hiện hành.
    Trong tất cả các thư mục đều có hai “thư mục ảo” đóng vai trò đặc biệt, được đặt tên ./ biểu diễn thư mục hiện tại, và ../ biểu diễn cho thư mục cha của thư mục hiện tại. Ví dụ: ../ds_lop/KHTN2019.txt là một đường dẫn tương đối, dẫn đến tệp tin KHTN2019.txt nằm trong thư mục ds_lop, và thư mục ds_lop này đang nằm trong thư mục cha của thư mục hiện hành. Lưu ý rằng thông qua đường dẫn này, chúng ta vẫn xác định được vị trí tương đối của tệp tin KHTN2019.txt so với thư mục hiện hành.

Một số ví dụ đơn giản về việc sử dụng đường dẫn trong các lệnh:

  • ls thongtin_sv: liệt kê tất cả tệp tin trong thư mục con thongtin_sv của thư mục làm việc hiện tại.
  • touch /home/mmlab/ds_lop/KHTN2019.txt: tạo tệp tin KHTN2019.txt trong thư mục /home/mmlab/ds_lop.

3. Sao chép, di chuyển và xóa tệp tin

Để tạo bản sao của một tệp tin nào đó trong hệ thống, các bạn sử dụng lệnh theo cú pháp sau:

cp <tệp_tin_cần_sao_chép> <đích_đến>

Sau khi thực thi lệnh cp, toàn bộ nội dung và các thuộc tính như người sở hữu và quyền chia sẻ của tệp tin gốc đều được sao chép qua tệp đích. Trong trường hợp bạn chỉ có nhu cầu di chuyển tệp tin từ nơi này sang nơi khác mà không muốn phải tạo thêm một bản sao, có thể sử dụng lệnh mv:

mv <tệp_tin_cần_di_chuyển> <đích_đến>

Ngoài ra, lệnh mv còn có một tác dụng nữa là đổi tên một tệp tin bất kỳ:

mv <tệp_tin_cần_đổi_tên> <tệp_tin_sau_khi_đổi>

Khi không cần sử dụng đến một tệp tin nào đó nữa, bạn có thể xóa nó đi một cách an toàn thông qua lệnh rm:

rm <tệp_tin_cần_xóa>

4. Tương tác với các thư mục

Muốn tạo một thư mục mới trong hệ thống, các bạn sử dụng lệnh theo cú pháp:

mkdir <tên_thư_mục>

Ngoài thao tác tạo thư mục ra, các thao tác khác như sao chép, di chuyển hay xóa thư mục đều giống với các câu lệnh tương ứng khi thao tác với các tệp tin. Tuy nhiên bạn đọc cần lưu ý thêm tùy biến -r sau mỗi câu lệnh cprm:

cp -r <thư_mục_cần_sao_chép> <đích_đến>

mv <thư_mục_cần_di_chuyển> <đích_đến>

rm -r <thư_mục_cần_xóa>

IV. Các câu lệnh thông dụng khác

1. Liệt kê nội dung của những tệp tin lớn

Đôi lúc các bạn sẽ bắt gặp bản thân mình rơi vào trường hợp phải xử lý những tệp tin cực kỳ lớn, nội dung có thể lên đến hàng ngàn, thậm chí hàng triệu dòng! Khi bắt buộc phải làm việc với những tệp tin lớn như vậy thì lệnh cat không thể nào hiển thị được hết toàn bộ nội dung của tệp tin lên màn hình Terminal được. Vậy lúc đó chúng ta nên làm như thế nào? May mắn thay, Linux có hỗ trợ thêm các lệnh để thay thế cat trong một số trường hợp.

Nếu các bạn chỉ cần liệt kê 10 dòng đầu tiên trong tệp tin, lệnh head sẽ dễ dàng giải quyết được. Giả sử mình có một tệp tin counting.txt với 10000 dòng chứa các số tự nhiên tăng dần. Khi gõ lệnh head counting.txt sẽ nhận được kết quả như sau:

Hình 7

Trường hợp cần liệt kê nhiều hơn 10 dòng thì sao? Đừng lo lắng, các bạn chỉ cần gõ lệnh theo cú pháp:

head -n <số_dòng> <tên_tệp_tin>

Hình 8

“Vậy nếu như tôi cần liệt kê những dòng cuối cùng của tệp tin thay vì những dòng đầu thì sao?” Cũng đừng quá lo lắng! Linux có hỗ trợ luôn một lệnh tương ứng với headtail với chức năng tương tự:

tail -n <số_dòng> <tên_tệp_tin>

Hình 9

Và đó là hai câu lệnh tuy chức năng đơn giản, dễ sử dụng mà lại vô cùng hữu ích khi làm việc với các tệp tin kích thước lớn. Ngoài ra, trong Linux còn có lệnh less với chức năng hiển thị nội dung tệp tin theo từng trang giúp bạn có thể xem tuần tự các dòng trong tệp và dễ dàng nhảy tới trang hoặc dòng mà mình muốn xem.

Sau khi gõ theo cú pháp less <tên_tệp_tin>, một giao diện giống giao diện soạn thảo văn bản sẽ hiện ra. Nội dung của tệp tin sẽ được hiển thị vừa đúng bằng kích thước màn hình Terminal. Để có thể nhảy đến dòng tiếp theo, bạn đọc có thể nhấn nút J trên bàn phím, ngược lại, để lùi lại một dòng thì có thể nhấn nút K. Để nhảy một lần nhiều dòng cùng lúc, nhập số dòng vào bàn phím rồi nhấn phím J hoặc K. Ví dụ: 30J sẽ nhảy tới trước 30 lần.
Khi đã xem xong nội dung mình muốn, nhấn nút Q để thoát khỏi giao diện của less.

Hình 10

Suỵt! Nói nhỏ cái này nha, ngoài các lệnh trên để thay thế lệnh cat, các bạn có biết rằng cat cũng có một người anh em cùng cha khác ông nội không? Xin giới thiệu lệnh tac: hiển thị toàn bộ nội dung của tệp tin, nhưng thay vì hiển thị từ đầu đến cuối tệp tin, lệnh này sẽ hiển thị theo thứ tự ngược lại!

Và đó là những lệnh cơ bản để bắt đầu thao tác với tệp tin lớn. Các kỹ thuật như tìm kiếm và xử lý cho tệp tin kích thước lớn sẽ được mình giới thiệu thêm ở Chương 4: Các lệnh tìm kiếm nâng cao, mời các bạn cùng đón đọc.

2. Một số lệnh thú vị khác trong hệ thống

Bên cạnh các lệnh được đề cập phía trên, Linux còn có các lệnh khác tuy không được sử dụng nhiều bằng nhưng có các chức năng vô cùng thú vị:

Sắp xếp nội dung của tệp tin theo nội dung của từng dòng và xuất kết quả ra màn hình.
CÚ PHÁP: sort <tên_tệp_tin>

Lệnh có hỗ trợ thêm các tùy biến sau:
    -b: bỏ qua các khoảng trắng đầu dòng.
    -d: chỉ quan tâm đến ký tự, chữ số và khoảng trắng khi thực hiện sắp xếp.
    -f: không phân biệt hoa thường khi thực hiện sắp xếp.
    -M: sắp xếp theo tháng ('JAN' < 'FEB' < ... < 'DEC').
    -n: sắp xếp theo giá trị của số ('523' < '1234').
    -R: xáo trộn ngẫu nhiên nội dung tệp tin thay vì sắp xếp.
    -r: sắp xếp theo thứ tự ngược lại.
    -o=FILE: ghi kết quả sắp xếp vào tệp tin FILE thay vì xuất ra màn hình.
Đếm xem một tệp tin có bao nhiêu dòng, bao nhiêu từ và bao nhiêu kí tự (byte).
CÚ PHÁP: wc <tên_tệp_tin>

Lệnh có hỗ trợ thêm các tùy biến sau:
    -c: in ra số lượng byte trong tệp tin.
    -m: in ra số lượng kí tự trong tệp tin.
    -l: in ra số lượng dòng trong tệp tin.
    -w: in ra số lượng từ trong tệp tin.
Hiển thị kích thước của một tệp tin hoặc của toàn bộ tệp tin trong một thư mục.
CÚ PHÁP: du <tên_tệp_tin>

Lệnh có hỗ trợ thêm các tùy biến sau:
    -a: hiển thị luôn kích thước của các tệp tin thay vì chỉ hiện cho các thư mục.
    -h: tự động chuyển đổi đơn vị sang KB hoặc MB để hiển thị dễ đọc hơn.
    -s: khi gọi lệnh này cho thư mục thì chỉ hiển thị kích thước của chính nó chứ không hiện cho các thư mục con.
Hiển thị dung lượng còn lại của các ổ đĩa trong hệ thống.
CÚ PHÁP: df

Lệnh có hỗ trợ thêm các tùy biến sau:
    -h: tự động chuyển đổi đơn vị sang KB hoặc MB để hiển thị dễ đọc hơn.
    -H: giống -h nhưng chuyển đổi theo hệ 1000 thay vì 1024
    -l: chỉ hiển thị các ổ đĩa cục bộ (không có các ổ đĩa được mount qua mạng).
Hiển thị lịch sử các lệnh đã gõ trước đó.
CÚ PHÁP: history

Lệnh có hỗ trợ thêm các tùy biến sau:
    -c: xóa lịch sử.
Xóa nội dung trên màn hình Terminal.
CÚ PHÁP: clear
Hiển thị ngày giờ trong hệ thống.
CÚ PHÁP: date
Hiển thị lịch biểu thị cho tháng hiện tại trong năm.
CÚ PHÁP: cal hoặc ncal

V. Bài tập cuối chương

Ở cuối mỗi bài viết mình sẽ chuẩn bị trước ba câu hỏi trắc nghiệm để bạn đọc có thể ôn lại những kiến thức đã học trong cả chương. Các bạn có thể truy cập vào bài trắc nghiệm tại đây. Hẹn gặp lại các bạn ở các bài viết tiếp theo!

2 thoughts on “[Nhập môn Linux] – Một số câu lệnh cơ bản trong Bash

Leave a Reply

Your email address will not be published. Required fields are marked *