Stderr là gì?

Stderr, còn được gọi là lỗi tiêu chuẩn, là bộ mô tả tệp mặc định nơi một quy trình có thể viết thông báo lỗi.

Trong các hệ điều hành giống Unix, như Linux, macOS X và BSD, stderr được xác định theo tiêu chuẩn POSIX. Số mô tả tập tin mặc định của nó là 2 .

Trong thiết bị đầu cuối, lỗi tiêu chuẩn mặc định cho màn hình của người dùng.

Stderr trên dòng lệnh Linux

Trong bash, lỗi tiêu chuẩn có thể được chuyển hướng trên dòng lệnh. Chuyển hướng stderr có thể hữu ích nếu bạn cần ghi lại bất kỳ thông báo lỗi nào vào một tệp nhật ký riêng biệt hoặc ẩn hoàn toàn các thông báo lỗi.

Ví dụ, hãy xem xét lệnh find sau đây:

 tìm / -iname '* cái gì đó *' 
 / usr / share / doc / Something / usr / share / doc / Something / example / Something_random find: `/ run / udisks2 ': Quyền bị từ chối find:` / run / wpa_supplicant': Quyền bị từ chối / usr / share / Something / usr / trò chơi / cái gì đó 

Chúng tôi đang gặp lỗi vì find đang cố gắng tìm kiếm một vài thư mục hệ thống mà chúng tôi không có quyền đọc. Các dòng có nội dung "Quyền bị từ chối" là các thông báo lỗi và được viết cho thiết bị lỗi chuẩn . Các dòng khác được viết vào thiết bị xuất chuẩn (đầu ra tiêu chuẩn). Theo mặc định, cả hai đều hiển thị trên thiết bị đầu cuối.

Để ẩn stderr, chúng ta có thể chuyển hướng chúng bằng cách tham chiếu số mô tả tệp lỗi tiêu chuẩn, 2 và toán tử "đầu ra chuyển hướng", > .

 tìm / -iname '* cái gì đó *' 2> / dev / null 
 / usr / share / doc / Something / usr / share / doc / Something / example / Something_random / usr / share / Something / usr / games / Something 

Các lỗi không còn được hiển thị nữa, bởi vì tất cả đầu ra cho thiết bị lỗi chuẩn được chuyển hướng đến / dev / null, thiết bị đặc biệt trong Linux "không đi đến đâu".

Chúng tôi cũng có thể chuyển hướng tất cả các lỗi sang một tệp:

 tìm / -iname '* cái gì đó *' 2> output.txt 
 / usr / share / doc / Something / usr / share / doc / Something / example / Something_random / usr / share / Something / usr / games / Something 

Bây giờ, nếu bạn gửi nội dung của output.txt, bạn sẽ thấy các thông báo lỗi được lưu ở đó:

 cat output.txt 
 find: `/ run / udisks2 ': Quyền bị từ chối find:` / run / wpa_supplicant': Quyền bị từ chối 

Để biết thông tin chi tiết về cách chuyển hướng luồng dữ liệu, hãy xem chuyển hướng trong bash.

Thông báo lỗi, điều khoản hệ điều hành