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ó?
Điều hướng (redirection) — > >> < 2>
Bài viết này là một phần của Khóa học Linux, giúp bạn thành thạo từ đầu những kỹ năng Linux thực tiễn, từ các lệnh cơ bản đến lập trình shell script.
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?