Unix / Linux - Chuyển hướng Input/Output

Xin chào các nhà pháp sư dòng lệnh tương lai! Hôm nay, chúng ta sẽ bắt đầu một chuyến đi đầy thú vị vào thế giới của việc chuyển hướng input/output trong shell Unix/Linux. Đừng lo lắng nếu bạn chưa bao giờ viết một dòng mã trước đây - tôi sẽ hướng dẫn bạn từng bước trong chuyến phiêu lưu này, giống như tôi đã làm cho hàng trăm sinh viên trong những năm dạy học của mình. Vậy, hãy đội mũ bảo hiểm ảo của bạn, và cùng chúng ta nhảy vào!

Unix / Linux - IO Redirections

Hiểu về Cơ Bản

Trước khi chúng ta đi vào chi tiết, hãy bắt đầu với một ví dụ đơn giản. Hãy tưởng tượng shell như một trợ lý hữu ích. Thường thì trợ lý này đọc các lệnh của bạn từ bàn phím (input chuẩn), hiển thị kết quả trên màn hình (output chuẩn) và hiển thị lỗi trên màn hình nữa (lỗi chuẩn). Nhưng nếu chúng ta muốn thay đổi hành vi mặc định này thì sao? Đó là lúc việc chuyển hướng I/O trở nên hữu ích!

Chuyển hướng Output

Phép màu của '>'

Hãy bắt đầu với việc chuyển hướng output. Ký hiệu '>' là pháp thuật đầu tiên của chúng ta. Nó cho phép chúng ta gửi output của một lệnh vào một tệp thay vì màn hình.

echo "Xin chào, Thế giới!" > chào.txt

Nếu bạn chạy lệnh này, nó sẽ không hiển thị gì trên màn hình. Thay vào đó, nó tạo một tệp名叫 'chào.txt' chứa "Xin chào, Thế giới!". Nếu tệp đã tồn tại, nó sẽ bị ghi đè. Hãy cẩn thận với quyền lực này!

Thêm vào với '>>'

Bây giờ, nếu bạn muốn thêm vào một tệp hiện có mà không ghi đè nó thì sao? Đó là lúc '>>' ra vào cuộc giải cứu.

echo "Bạn khỏe không?" >> chào.txt

Lệnh này thêm "Bạn khỏe không?" vào tệp 'chào.txt' của chúng ta. Nếu bạn mở tệp bây giờ, bạn sẽ thấy cả hai dòng.

Chuyển hướng Input

Đọc từ Tệp với '<'

Tương tự như chúng ta có thể chuyển hướng output, chúng ta cũng có thể chuyển hướng input. Ký hiệu '<' cho phép chúng ta sử dụng một tệp làm input cho một lệnh.

sort < tên.txt

Lệnh này đọc nội dung của 'tên.txt' và sắp xếp nó theo bảng chữ cái. Nó giống như nói với lệnh 'sort', "Hey, thay vì chờ tôi gõ tên, hãy đọc chúng từ tệp này!"

Here Document

Phép màu của '<<'

Đôi khi, chúng ta muốn gửi nhiều dòng input cho một lệnh. Đó là lúc 'here document' xuất hiện, sử dụng '<<'.

cat << EOF
Đây là dòng 1
Đây là dòng 2
EOF

Mánh lới này cho phép bạn nhập nhiều dòng cho đến khi shell gặp 'EOF' (mặc định có nghĩa là End Of File, nhưng bạn có thể sử dụng bất kỳ từ nào).

Bỏ qua Output

Yên lặng '/dev/null'

Có những lúc chúng ta chạy một lệnh nhưng không quan tâm đến output của nó. Đó là lúc '/dev/null', hố đen kỹ thuật số của Unix/Linux, xuất hiện.

ls tệp_không_tồn_tại 2> /dev/null

Lệnh này cố gắng liệt kê một tệp không tồn tại, nhưng thay vì hiển thị lỗi, nó im lặng bỏ qua nó. Nó giống như có một nút "tắt tiếng" cho các lệnh của bạn!

Lệnh Chuyển hướng

Hãy tóm tắt các lệnh chuyển hướng chúng ta đã học trong bảng tiện lợi:

Lệnh Mô tả
> Chuyển hướng output đến tệp (ghi đè)
>> Thêm output vào tệp
< Chuyển hướng input từ tệp
<< Here document (multi-line input)
2> Chuyển hướng lỗi output
&> Chuyển hướng cả standard output và lỗi

Ví dụ Thực tế

Bây giờ chúng ta đã bao gồm các nguyên tắc cơ bản, hãy xem một số ví dụ thực tế để củng cố hiểu biết của chúng ta.

Kết hợp Chuyển hướng Input và Output

sort < tên_chưa_sắp_xếp.txt > tên_sắp_xếp.txt

Lệnh này đọc tên từ 'tên_chưa_sắp_xếp.txt', sắp xếp chúng, và viết danh sách đã sắp xếp vào 'tên_sắp_xếp.txt'. Nó giống như có một tổ chức cá nhân cho các tệp của bạn!

Chuyển hướng Cả Output và Lỗi

ls /home /không_tồn_tại 1> output.txt 2> error.txt

Ở đây, chúng ta đang liệt kê hai thư mục. Standard output (liệt kê thành công của /home) được ghi vào 'output.txt', trong khi bất kỳ lỗi nào (như cố gắng liệt kê thư mục không tồn tại) được ghi vào 'error.txt'.

Sử dụng Here Document cho Input của Script

mysql -u username -p << EOF
USE mydatabase;
SELECT * FROM users;
EXIT
EOF

Ví dụ này sử dụng một here document để chạy nhiều lệnh MySQL mà không cần vào chế độ tương tác. Nó giống như đưa danh sách công việc cho cơ sở dữ liệu của bạn!

Kết luận

Chúc mừng! Bạn đã刚刚 bước vào thế giới mạnh mẽ của việc chuyển hướng I/O trong Unix/Linux. Nhớ rằng, như bất kỳ kỹ năng nào, việc thành thạo các khái niệm này đòi hỏi sự luyện tập. Đừng sợ thử nghiệm - đó là cách chúng ta học hỏi!

Trong những năm dạy học của mình, tôi đã thấy sinh viên từ việc struggle với các khái niệm này trở thành các ninja dòng lệnh. Một trong những sinh viên của tôi thậm chí còn开玩笑 rằng sau khi học chuyển hướng I/O, cô ấy cảm thấy như một "người thì thầm với tệp" - có thể làm dữ liệu chảy chính xác đến nơi cô ấy muốn.

Vậy, tiếp tục khám phá, tiếp tục luyện tập, và sớm bạn sẽ chuyển hướng input và output như một chuyên gia. Ai biết được? Có lẽ bạn sẽ là "người thì thầm với tệp" tiếp theo trong hành trình mã hóa của bạn!

Credits: Image by storyset