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ó?
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.
> 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
Đ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.
< 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
> 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.
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>&1 | Gửi lỗi chuẩn (2) đến cùng đích với đầu ra chuẩn (1) |
> all 2>&1 | Ghi 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
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
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?