Học bằng cách đọc theo thứ tự

Redirection — > >> < 2>

Ghi đè tệp bằng >, nối thêm bằng >>, truyền đầu vào chuẩn bằng <, và gửi chỉ lỗi ra tệp riêng bằng 2> — thực hành ngay trên terminal trong trình duyệt.

Gửi đầu ra vào tệp — > và >>

Kết quả của một lệnh thường in thẳng ra màn hình, nhưng redirection chuyển đầu ra đó vào một tệp.

Viết lệnh > tệp và nội dung lẽ ra xuất hiện trên màn hình sẽ được ghi vào tệp thay thế.

> xóa trắng tệp trước khi ghi (ghi đè).

Khi bạn muốn giữ nguyên nội dung hiện có và thêm vào cuối, dùng >> (nối thêm).

Nhầm lẫn giữa hai ký hiệu có thể xóa mất dữ liệu cần thiết, vì vậy hãy nắm rõ sự khác biệt.

> ghi đè, >> nối thêm
echo A > out.txtout.txt contents: Aecho B > out.txtout.txt: B (A bị xóa)echo C >> out.txtout.txt: B / C
> xóa nội dung và ghi đè; >> nối thêm vào cuối tệp.
Ký hiệuÝ nghĩa
>Ghi đầu ra chuẩn vào tệp (xóa trắng trước, ghi đè)
>>Nối thêm đầu ra chuẩn vào cuối tệp
<Truyền nội dung tệp làm đầu vào chuẩn
1>Ghi chỉ đầu ra chuẩn vào tệp (giống >)
2>Ghi chỉ lỗi chuẩn vào một tệp riêng
echo 'line 1' > out.txt    # ghi đè (tạo mới)
echo 'line 2' >> out.txt   # nối thêm
cat out.txt                # line 1 và line 2
echo 'reset' > out.txt     # ghi đè (nội dung cũ bị xóa)
cat out.txt                # chỉ còn reset

① Ghi đầu ra của echo 'first' vào note.txt bằng >.

② Nối thêm dòng second vào cùng note.txt bằng >>, rồi xác nhận có 2 dòng bằng cat note.txt.

③ Cuối cùng ghi reset vào note.txt bằng >, rồi xác nhận bằng cat note.txt rằng nội dung thay đổi thành chỉ còn reset. (Chạy đúng thì phần giải thích sẽ hiện ra.)

Linux console
0 / 4 đã hoàn thành
Loading Linux Terminal...

Điều hướng đầu vào và lỗi — < và 2>

< ngược với đầu ra: nó truyền nội dung tệp làm đầu vào chuẩn của lệnh.

Viết lệnh < tệp và thay vì gõ từ bàn phím, nội dung tệp được đưa vào lệnh.

Khác với wc -l nums.txt, khi dùng < nums.txt tên tệp không xuất hiện trong đầu ra — chỉ có nội dung được truyền vào.

Đầu ra của một lệnh có hai loại: kết quả bình thường (đầu ra chuẩn) và thông báo lỗi (lỗi chuẩn).

Đầu ra chuẩn được đánh số 1 và lỗi chuẩn được đánh số 2; bạn điều hướng đầu ra chuẩn bằng 1> (giống >) và lỗi chuẩn bằng 2>.

Với 2> bạn có thể gửi riêng phần lỗi vào tệp khác, rất tiện khi muốn ghi kết quả và lỗi riêng biệt.

< là đầu vào, 1> và 2> điều hướng đầu ra
wc -l < data.txttruyền data.txtlàm đầu vàols f 1> out.txtđầu ra chuẩn (1)chỉ → out.txtcat miss 2> err.txtlỗi chuẩn (2)chỉ → err.txt
< truyền tệp làm đầu vào; 1> gửi chỉ đầu ra chuẩn và 2> chỉ lỗi chuẩn vào tệp riêng.
printf 'x\ny\nz\n' > nums.txt   # tạo dữ liệu 3 dòng
wc -l < nums.txt                # truyền nums.txt làm đầu vào → 3
cat missing.txt 2> err.txt      # điều hướng lỗi vào err.txt
cat err.txt                     # kiểm tra thông báo lỗi

① Tạo tệp 3 dòng bằng printf 'x\ny\nz\n' > nums.txt.

② Truyền nums.txt làm đầu vào chuẩn cho wc với tùy chọn đếm dòng bằng <, và xác nhận số dòng được hiển thị.

③ Thử mở tệp không tồn tại bằng cat, và điều hướng thông báo lỗi đó vào err.txt bằng 2>.

④ Xác nhận bằng cat err.txt rằng thông báo lỗi đã được lưu vào tệp.

Linux console
0 / 4 đã hoàn thành
Loading Linux Terminal...

> xóa tệp ngay lập tức

> làm trống nội dung tệp trước khi lệnh chạy.

Khi bạn muốn thêm dòng vào nội dung hiện có, luôn dùng >> (nối thêm).

Tương tự, 2> cũng ghi đè tệp đích bằng đầu ra lỗi.

Kết hợp chúng lại — Tạo log và đếm

Trong công việc thực tế, bạn thường bắt đầu ghi chép bằng >, tiếp tục thêm dòng bằng >>, và cuối cùng kiểm tra số lượng bằng wc.

Hãy kết hợp các ký hiệu đã học để thực hành tạo và đếm log đơn giản.

① Bắt đầu ghi chép bằng cách viết một dòng hit vào access.log với đầu ra của echo qua >.

② Nối thêm hit hai lần nữa vào cùng access.log bằng >>, rồi xác nhận có 3 dòng bằng cat access.log.

③ Truyền access.log cho wc với tùy chọn đếm dòng qua <, và hiển thị số lượng bản ghi đã tích lũy.

Linux console
0 / 4 đã hoàn thành
Loading Linux Terminal...

Kết hợp nhiều redirection — > 2> 2>&1

Bạn có thể chỉ định nhiều redirection cùng một lúc trên một lệnh.

Để phân chia đầu ra chuẩn và lỗi vào các tệp riêng biệt, hãy xếp chúng như > đích 2> đích-lỗi.

Để gộp cả hai vào một tệp, dùng 2>&1 để gửi lỗi chuẩn (2) đến cùng đích với đầu ra chuẩn (1).

2>&1 đặt sau khi bạn đã đặt đích bằng >.

Cú phápÝ nghĩa
> out 2> errĐiều hướng đầu ra chuẩn vào out và lỗi vào err riêng biệt
2>&1Gửi lỗi chuẩn (2) đến cùng đích với đầu ra chuẩn (1)
> all 2>&1Ghi cả đầu ra chuẩn và lỗi cùng vào all
touch real.txt                                  # chuẩn bị tệp thực có
ls real.txt missing.txt > out.txt 2> err.txt    # đầu ra và lỗi riêng biệt
cat out.txt                                     # real.txt (đầu ra chuẩn)
cat err.txt                                     # lỗi cho missing.txt
ls real.txt missing.txt > all.txt 2>&1          # cả hai vào một tệp
cat all.txt                                     # cả đầu ra và lỗi

① Chuẩn bị một tệp thực có bằng touch real.txt.

② Chạy ls real.txt missing.txt > out.txt 2> err.txt để điều hướng đầu ra chuẩn vào out.txt và lỗi vào err.txt riêng biệt.

③ Kiểm tra nội dung từng tệp bằng cat out.txtcat err.txt.

④ Tiếp theo chạy ls real.txt missing.txt > all.txt 2>&1 rồi xác nhận bằng cat all.txt rằng đầu ra chuẩn và lỗi được gộp vào cùng một tệp.

Linux console
0 / 6 đã hoàn thành
Loading Linux Terminal...
QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Ký hiệu nào thêm một dòng mới vào cuối trong khi giữ nguyên nội dung tệp hiện có?

Câu 2< làm gì cho một lệnh?

Câu 3Điều gì xảy ra khi bạn chạy cat missing.txt 2> err.txt?