Pipes: những điều bạn cần biết để bắt đầu sử dụng chúng trong GNU / Linux

đường ống

một đường ống hoặc đường ốnge thực sự là một đường ống có sẵn cho UNIX / Linux và rất thực tế. Nhưng để hiểu đầy đủ về đường ống là gì, bạn nên biết rằng trong môi trường * nix, nó có 3 luồng dữ liệu tích hợp sẵn. Điều đó, đối với những người không biết, có nghĩa là dữ liệu có thể đi đến hoặc đi từ ba điểm.

Sau đó, bạn sẽ hiểu điều này theo cách tốt hơn, nhưng điều tôi muốn làm rõ với bạn bây giờ là với một đường dẫn, những gì bạn có thể làm là chuyển kênh từ một trong những điểm đó đến những điểm khác. Điều này cho phép lấy đầu ra hoặc kết quả mà một chương trình ném về phía đầu vào của chương trình khác để chương trình đó sử dụng, v.v. Tôi sẽ cố gắng giải thích nó với một số ví dụ thực tế sẽ giúp bạn hiểu nó rất tốt.

Những điểm tôi đã nói về hoặc luồng dữ liệu, Chúng tôi:

  • tiêu chuẩn: tương ứng với 0 và là đầu vào chuẩn. Nói chung, đầu vào dữ liệu tiêu chuẩn trên hệ thống * nix là bàn phím. Đó là, những gì bạn nhập sẽ là thông tin được sử dụng. Cô ấy có một thiết bị đặc biệt được liên kết với nó là / dev / stdin.
  • tiêu chuẩn: được xác định bằng 1, nó là đầu ra tiêu chuẩn. Thông thường nó tương ứng với màn hình hoặc màn hình máy tính của bạn, đó là nơi bạn có thể xem thông tin. Ví dụ, khi bạn chạy một lệnh ls, danh sách nội dung sẽ được hiển thị trên màn hình, phải không? Thiết bị được liên kết là / dev / stdout.
  • tiêu chuẩn: được xác định với 2, nó là đầu ra lỗi tiêu chuẩn, khi một lỗi xảy ra trong một chương trình. Thiết bị được liên kết là / dev / stderr.

Với một đường dẫn, bạn có thể làm cho đầu ra tiêu chuẩn hoặc đầu ra của một lệnh chuyển trực tiếp đến đầu vào tiêu chuẩn của một lệnh khác. Đó là, bạn có thể tạo nguồn cấp dữ liệu chương trình này cho chương trình khác. Thay vì sử dụng các tham số được nhập bằng bàn phím, một đường ống cung cấp thông tin được tạo bởi lệnh trước đó thông qua đường ống này được đại diện bởi dấu |

với Các ví dụ bạn sẽ hiểu nó tốt hơn. Giả sử bạn muốn liệt kê nội dung của một thư mục, nhưng bạn chỉ quan tâm đến việc xem các tên phù hợp với từ doc. Vì vậy, bạn có thể sử dụng một đường ống dẫn đầu ra của ls vào đầu vào của bộ lọc grep để yêu cầu nó chỉ hiển thị những cái phù hợp với mẫu đó:

ls -l | grep doc

Vì vậy, thay vì hiển thị cho bạn tất cả các tên, nó chỉ hiển thị cho bạn những thứ mà bạn thực sự quan tâm. Bạn có thể làm tương tự với nội dung của tệp. Hãy tưởng tượng rằng bạn chỉ muốn xem thông tin của các quy trình có tên firefox chứ không phải tất cả:

ps aux | grep firefox

Thay vì hiển thị tất cả đầu ra của chương trình ps trên màn hình (stdout), những gì nó làm là chuyển nó đến đầu vào của bộ lọc grep và chỉ hiển thị trong đầu ra những gì tương ứng với mẫu firefox trong trường hợp này ...

Nếu bạn muốn, bạn có thể sử dụng các đường ống khác nhau để đưa đầu ra của một lệnh thành đầu vào của lệnh thứ hai khác và đầu ra của lệnh thứ hai đó thành đầu vào của lệnh thứ ba, v.v. Ví dụ:

cat libro | grep love | more

Như bạn thấy, khả năng là rất nhiều, tất cả những gì bạn có thể tưởng tượng và được phép. Thậm chí chỉ hiển thị dòng đầu tiên và dòng cuối cùng của tệp, đếm các dòng nhập wc đến từ danh sách và thậm chí sắp xếp chúng:

cat listado | head
cat listado | tail
cat listado | wc -l
cat listado | sort

Bạn cũng có thể làm việc với lỗi với | & và ví dụ, hãy tìm từ cảnh báo trong đầu ra của một tập lệnh nếu nó không thành công:

./miscript |& grep alerta 

Và cuối cùng, có hai lệnh được liên kết chặt chẽ với các đường ống là tee và xargs và họ có thể mở rộng thêm khả năng của những điều này. Trong trường hợp tee, những gì nó sẽ cho phép là hiển thị kết quả của chương trình trước đó trên đầu ra tiêu chuẩn để bạn có thể xem nó và thêm vào đó, nó có thể chuyển nó sang một tệp khác. Một ví dụ sẽ là nếu bạn liệt kê nội dung của một thư mục và muốn xem kết quả của ls -l vào lúc này và cũng có thể lưu nó trong tệp tin list.txt:

ls -l | tee listado.txt

Nếu bạn không sử dụng tee, bạn sẽ không thể thấy đầu ra trên bảng điều khiển của mình ...

Y xargs nó thậm chí còn thú vị hơn trong một số trường hợp. Trong trường hợp này, nó có thể xây dựng một lệnh từ đầu vào chuẩn mà nó nhận được thông qua đường ống. Nói cách khác, nó có khả năng nắm bắt mọi thứ mà một chương trình trước đó đã khởi chạy thông qua đầu ra của nó và đến xargs thông qua đường ống để chuyển nó lần lượt đến một lệnh khác dưới dạng đối số.

Vẫn không hiểu? Bạn sẽ thấy nó tốt hơn nhiều với một ví dụ. Hãy tưởng tượng bạn muốn xóa tất cả các tệp thumbs.db chết tiệt khỏi một thư mục, đĩa hoặc phân vùng. Nếu có nhiều, có thể không thể thực hiện từng cái một bằng lệnh rm để xóa chúng theo cách thủ công. Nhưng với xargs, bạn có thể tự động hóa mọi thứ. Và bạn có thể làm điều đó bằng cách sử dụng find để xác định vị trí của chúng, gửi đầu ra thông qua đầu vào của xargs và điều này lần lượt sẽ cung cấp cho rm các tên dưới dạng đối số. Do đó, tất cả những cái được định vị sẽ tự động bị xóa:

find ./ -name "thumbs.db" | xargs rm

Ví dụ: giả sử tìm vị trí /home/name/thumbs.db, /media/test/thumbs.db và /tmp/thumbs.db. Vâng, xargs sẽ chuyển chúng đến rm như thể chúng là các đối số. Tức là, như thể chúng ta đã thực thi: rm /home/name/thumbs.db, sau đó rm /media/test/thumbs.db và sau đó rm /tmp/thumbs.db.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: AB Internet Networks 2008 SL
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   Jose dijo

    Tuyệt vời, thông tin này rất quan trọng đối với người dùng linux chúng tôi

  2.   Daniel dijo

    Thật là một bài báo hay, ngay bây giờ tôi đang nghiên cứu chuyển hướng I / O trong cuốn sách Dòng lệnh Linux. Tôi rõ ràng hơn về các đường ống (Pipeline) và ba luồng dữ liệu. Sự đóng góp được đánh giá cao. Lời chào hỏi.

  3.   01101001b dijo

    Ví dụ với xargs phù hợp với tôi như một chiếc găng tay. Chính xác là hôm nay tôi đã giải quyết chi tiết về một lối ra nhiều lần mà tôi phải gửi "từng phần". xargs đi dạo trên một chiếc pinturita.
    Siêu biết ơn!