Trang chủ / Linux / Chuyển hướng input/output và pipes trong Linux

Chuyển hướng input/output và pipes trong Linux

std

Bài hôm nay chúng ta sẽ cùng nhau tìm hiểu về chuyển hướng các dòng dữ liệu (stream) trong Linux. Bao gồm input, output, error và đường ống (pipes).

stdin, stdout, và stderr.

Bash shell trong Linux có 3 dòng dữ liệu (stream) cơ bản đó là stdin (0), stdout (1)stderr (2).

  • stdin (0): Thường là những thiết bị nhập input cho Shell ví dụ như bàn phím.
  • stdout (1): Hiển thị kết quả các lệnh lên terminal (hoặc màn hình) cho chúng ta thấy.
  • stderr (2): Hiển thị ra các lỗi trong quá trình thực hiện một lệnh hoặc một công việc nào đó.

screenshot-from-2016-10-17-11-27-59

Chuyển hướng output.

Chúng ta có thể chuyển hướng các kết quả từ việc thực thi lệnh (stdout) bằng dấu lớn hơn “>“.

Ví dụ: Chúng ta muốn kết quả thực thi lệnh ls -l được ghi vào file ketqua.txt thay vì in thẳng ra màn hình.

Ghi chú: Nếu file ketqua.txt đã có nội dung trong đó. Khi chúng ta chuyển hướng stdout bằng dấu “>” thì nội dung trước đó của nó sẽ bị xoá sạch. Để tránh nội dung cũ của file ketqua.txt bị xoá ta nên sử dụng dấu “>>“. Dấu “>>” này được hiển là append, có nghĩa là nó sẽ viết thêm dữ liệu vào cuối file.

Chuyển hướng error.

Chúng ta có thể chuyển hướng stderr (2) bằng dấu “2>“. Phương pháp chuyển hướng các lỗi khi thực hiện lệnh này có tác dụng tránh làm rối mắt hoặc làm phiền người dùng. Chúng ta có thể chuyển hướng các thông báo lỗi tới một file text để sau này đọc dễ hơn. Hoặc là chuyển tới /dev/null tức là chúng ta không quan tâm tới nó nữa.

Ví dụ: Chúng ta muốn đọc một file baitho.txt bằng lệnh cat, nhưng trong thumuc1 không có file baitho.txt. Vì thế lệnh này sẽ thông báo lỗi ra màn hình. Nếu không muốn nhìn thấy thông báo lỗi ta sẽ chuyển hướng lỗi đến /dev/null.

Đường ống dẫn (pipes).

Đường ống dẫn (pipes) trong Linux được ký hiệu là dấu gạch đứng “|“. Đường ống dẫn này cho phép chúng ta lấy kết quả của lệnh phía trước nó làm input cho lệnh phía sau nó. Sau này chúng ta sẽ sử dụng nó rất thường xuyên trong việc lọc dữ liệu đấy. Bài tiếp theo mình sẽ trình bày về lọc dữ liệu nhé.

Để gõ được dấu gạch đứng bạn tìm nó gần phím Enter ấy. Bấm shift + \ để gõ dấu gạch đứng “|“.

Ví dụ: Mình muốn kiểm tra xem trong Laptop mình đã cài chương trình youtube-dl chưa. Vì mình đang sử dụng Ubuntu 16.04 LTS nên mình gõ lệnh dpkg -l. Tuy nhiên lệnh này sẽ liệt kê ra tất cả phần mềm đã cài luôn, nhìn rối vô cùng. Giờ thì đường ống dẫn nó sẽ phát huy tác dụng cùng với lệnh grep để lọc đúng thứ mình cần và xuất ra kết quả gọn nhất.

Nếu muốn nói cho hết về stdin, stdout, stderr thì còn nhiều điều. Tuy nhiên ở mức độ Linux cơ bản chúng ta chỉ cần chú ý bao nhiêu đây thôi. Từ từ sau này trong quá trình sử dụng Linux gặp rồi biết thêm. Bài hôm nay ngắn vậy thôi 🙂

Xem video hướng dẫn.

Giới thiệu chipchip

Chipchip là một chú gà con đam mê công nghệ và ham học hỏi. Thích màu hồng. Câu nói yêu thích "Kiến thức không của riêng ai, kiến thức là để chia sẻ"

Đọc thêm

Kho ứng dụng Flatpak – khi những ứng dụng “bất chấp” nền tảng

Flatpak là một dự án mã nguồn mở xuất phát từ ý tưởng tạo ra …

Gửi phản hồi