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

Chia sẻ:

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) và 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 đó.

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.

hoang@echip-laptop:~/thumuc1$ ls -l > ketqua.txt
hoang@echip-laptop:~/thumuc1$ ls
file2.txt  file3  ketqua.txt
hoang@echip-laptop:~/thumuc1$ cat ketqua.txt 
total 4
-rw-rw-r-- 1 hoang hoang  0 Th12 31  2016 file2.txt
-rw-rw-r-- 1 hoang hoang 62 Th10 15 16:47 file3
-rw-rw-r-- 1 hoang hoang  0 Th10 17 11:38 ketqua.txt

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.

hoang@echip-laptop:~/thumuc1$ cat baitho.txt
cat: baitho.txt: No such file or directory
hoang@echip-laptop:~/thumuc1$ cat baitho.txt 2>/dev/null
hoang@echip-laptop:~/thumuc1$

Đườ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é.

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.

hoang@echip-laptop:~/thumuc1$ dpkg -l | grep youtube
ii  youtube-dl   1:2016.10.12-1~webupd8~xenial0   all   downloader of videos from YouTube and other sites
hoang@echip-laptop:~/thumuc1$

Nếu muốn nói cho hết về stdinstdoutstderr 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.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *