Chuyển hướng stdout và stderr tới File

Redirect Stdout Stderr File



Khi bạn chuyển hướng bất kỳ đầu ra lệnh nào đến một tệp, bạn sẽ nhận thấy rằng các thông báo lỗi được in trên cửa sổ đầu cuối. Bất kỳ lệnh nào được thực thi trong bất kỳ trình bao Linux nào, chẳng hạn như bash, sử dụng ba luồng I / O thông thường. Bộ mô tả tệp số được sử dụng để đại diện cho mỗi luồng.

  • Luồng đầu vào tiêu chuẩn (stdin): 0
  • Luồng đầu ra tiêu chuẩn (stdout): 1
  • Dòng lỗi tiêu chuẩn (stderr): 2

Trong bài đăng này, chúng tôi sẽ nắm bắt thông tin đi kèm trong việc chuyển hướng stdout và stderr đến tệp.







Đầu ra tiêu chuẩn (stdout):

Mỗi hệ điều hành dựa trên Linux đều có niềm tin về một vị trí mặc định cho lệnh được thực thi. Mọi người đều gọi khái niệm này là đầu ra chuẩn hoặc đầu ra chuẩn để làm cho âm thanh dễ dàng hơn. Bash hoặc Zsh shell của bạn liên tục tìm kiếm vị trí đầu ra mặc định. Khi trình bao phát hiện đầu ra mới, nó sẽ hiển thị nó trên màn hình đầu cuối để bạn xem. Nếu không, nó sẽ gửi đầu ra đến vị trí mặc định của nó.



Lỗi tiêu chuẩn (stderr):

Lỗi chuẩn hoặc trình viết thư tương tự như đầu vào và đầu ra tiêu chuẩn, nhưng nó được sử dụng để lưu trữ các thông báo lỗi. Lỗi tiêu chuẩn có thể được chuyển hướng đến dòng lệnh hoặc tệp sử dụng thiết bị đầu cuối. Nếu bạn muốn ghi lại hoặc lưu trữ thông báo trong một tệp nhật ký riêng biệt hoặc ẩn thông báo lỗi, chuyển hướng stderr sẽ giúp bạn. Bây giờ chúng ta hãy hướng tới khía cạnh thực tế của chuyển hướng stdout và stderr.



Chuyển hướng stdout và stderr thành một tệp:

Vì chuyển hướng là một phương pháp thu nhận đầu ra của chương trình và gửi nó dưới dạng đầu vào cho một lệnh hoặc tệp khác. Các luồng I / O có thể được chuyển hướng bằng cách sử dụng toán tử n>, trong đó n là số bộ mô tả tệp. Để chuyển hướng stdout, chúng tôi sử dụng 1> và đối với stderr, 2> được thêm vào làm toán tử.





Chúng tôi đã tạo một tệp có tên là sample.txt để lưu trữ đầu ra được chuyển hướng trong thư mục hiện tại của chúng tôi.



(Command> file) được coi là toán tử chuyển hướng cổ điển chỉ chuyển hướng đầu ra tiêu chuẩn với lỗi tiêu chuẩn được hiển thị trong thiết bị đầu cuối. Chúng tôi cũng sẽ trình bày các tùy chọn khác nhau để chuyển hướng stderr.

Chuyển hướng stderr và stdout thành các tệp riêng biệt:

Dưới đây là cú pháp lệnh để chuyển hướng stdout và stderr đến các tệp riêng biệt.

chỉ huy >ngoài2>lỗi

Lệnh dưới đây sẽ chuyển hướng đầu ra đến tệp out và thông báo lỗi đến tệp lỗi.

$con mèosample.txt>ngoài2>lỗi

Chuyển hướng stderr sang stdout:

Một thực tế phổ biến là chuyển hướng stderr với đầu ra tiêu chuẩn của một chương trình để lưu trữ mọi thứ trong một tệp duy nhất. Đây là cú pháp lệnh để chuyển hướng stderr sang stdout:

chỉ huy >ngoài2> &1$ls >samplefile.txt2> &1

$con mèosamplefile.txt

> out redirects chuyển hướng stdout đến samplefile.txt và 2> & 1 sẽ chuyển hướng stderr đến vị trí hiện tại của stdout.

Nếu stderr được chuyển hướng đến stdout trước, hãy sử dụng lệnh dưới đây để chuyển hướng stdout đến một tệp.

chỉ huy 2> &1 > tập tin$ls -đến 2> &1 >samplefile.txt

$con mèosamplefile.txt

&> cũng được sử dụng cho cùng một chức năng mà2> & 1 thực hiện.

chỉ huy &> tập tin$ls &>samplefile.txt

$con mèosamplefile.txt

Chuyển hướng stdout và stderr thành một tệp duy nhất:

Tất cả các shell không hỗ trợ chuyển hướng biểu mẫu này, nhưng bash và Zsh hỗ trợ nó. Stdout và stderr có thể được chuyển hướng bằng cách sử dụng cú pháp sau.

chỉ huy &>ngoài$con mèosample.txt&>ngoài

Trong phần sắp tới của bài viết, chúng ta sẽ kiểm tra ví dụ riêng biệt về chuyển hướng stdout và stderr.

Chuyển hướng stdout thành một tệp:

Đầu ra tiêu chuẩn được biểu thị bằng số 1 trong danh sách số bộ mô tả tệp. Đối với lệnh chuyển hướng không có bất kỳ số mô tả tệp nào, thiết bị đầu cuối đặt giá trị của nó thành 1. Cú pháp chuyển hướng stdout thành tệp được đưa ra như sau:

chỉ huy > tập tin

Chúng tôi đang sử dụng sample.file để lưu trữ đầu ra tiêu chuẩn của lệnh ls -al

$ls -đến >sample.txt

$con mèosample.txt

chỉ huy 1> tập tin$ls 1>sample.txt

$con mèosample.txt

Chuyển hướng stderr đến một tệp:

Sử dụng toán tử 2> để chuyển hướng stderr đến một tệp.

chỉ huy 2> tập tin $ls -đến 2>sample.txt

Chúng ta có thể kết hợp việc thực thi cho stderr và stdout trong một lệnh chuyển hướng duy nhất.

chỉ huy 2>error.txt1>output.txt

Trong ví dụ dưới đây, các thông báo lỗi sẽ được lưu trữ trong error.txt, trong đó output.txt sẽ có đầu ra chuẩn của lệnh ls.

$ls 2>error.txt1>output.txt

$con mèooutput.txt

Phần kết luận:

Có khái niệm chuyển hướng và bộ mô tả tệp cho các luồng I / O là rất có giá trị khi làm việc trong một thiết bị đầu cuối Linux. Trong bài đăng này, chúng ta đã nói về các luồng I / O thông thường, bao gồm cả stdout và stderr. Phần đầu tiên của bài đăng này cung cấp cho bạn thông tin chi tiết về chuyển hướng, luồng I / O và bộ mô tả tệp số. Tiếp theo, bạn đã xem ví dụ thực tế cho các dạng chuyển hướng stdout và stderr khác nhau.