/ Dev / null là gì và cách sử dụng nó

What Is Dev Null How Use It



Linux là một hệ điều hành thú vị lưu trữ một số thiết bị ảo cho nhiều mục đích. Liên quan đến các chương trình đang chạy trong hệ thống, các thiết bị ảo này hoạt động như thể chúng là các tệp thực. Các công cụ có thể yêu cầu và cung cấp dữ liệu từ các nguồn này. Dữ liệu được tạo ra bởi hệ điều hành thay vì đọc chúng từ đĩa.

Một ví dụ như vậy là / dev / null. Đây là một tệp đặc biệt có trong mọi hệ thống Linux. Tuy nhiên, không giống như hầu hết các tệp ảo khác, thay vì đọc, nó được sử dụng để ghi. Bất cứ thứ gì bạn ghi vào / dev / null sẽ bị loại bỏ, bị lãng quên vào khoảng trống. Nó được gọi là thiết bị rỗng trong hệ thống UNIX.







Tại sao bạn muốn loại bỏ một thứ gì đó vào khoảng trống? Hãy cùng tìm hiểu xem / dev / null là gì và cách sử dụng của nó.



Điều kiện tiên quyết

Trước khi đi sâu vào cách sử dụng / dev / null, chúng ta phải nắm rõ về stdoutstderr dòng dữ liệu. Kiểm tra cái này hướng dẫn chuyên sâu về stdin , stderr , và stdout .



Hãy làm mới nhanh chóng. Bất cứ khi nào tiện ích dòng lệnh được chạy, nó sẽ tạo ra hai đầu ra. Đầu ra chuyển đến stdout và lỗi (nếu được tạo ra) chuyển đến stderr . Theo mặc định, cả hai luồng dữ liệu này đều được liên kết với thiết bị đầu cuối.





Ví dụ, lệnh sau sẽ in ra chuỗi trong dấu ngoặc kép. Ở đây, đầu ra được lưu trữ trong stdout .

$quăng điChào thế giới



Lệnh tiếp theo sẽ hiển thị cho chúng ta trạng thái thoát của lệnh đã chạy trước đó.

$quăng đi $?

Khi lệnh trước đó chạy thành công, trạng thái thoát là 0. Nếu không, trạng thái thoát sẽ khác. Điều gì xảy ra khi bạn cố gắng chạy một lệnh không hợp lệ?

$ adfadsf
$quăng đi $?

Bây giờ, chúng ta cần biết về bộ mô tả tệp. Trong hệ sinh thái UNIX, đây là các giá trị số nguyên được gán cho một tệp. Cả hai stdout (tập tin mô tả = 1) và stderr (bộ mô tả tệp = 2) có một bộ mô tả tệp cụ thể. Sử dụng trình mô tả tệp (1 và 2 trong trường hợp này), chúng tôi có thể chuyển hướng stdoutstderr sang các tệp khác.

Đối với người mới bắt đầu, ví dụ sau sẽ chuyển hướng stdout của lệnh echo vào một tệp văn bản. Ở đây, chúng tôi không chỉ định trình mô tả tệp. Nếu không được chỉ định, bash sẽ sử dụng stdout theo mặc định.

$quăng điChào thế giới>log.txt

Lệnh sau sẽ chuyển hướng stderr vào một tệp văn bản.

$asdfadsa2>error.txt

Sử dụng / dev / null

Chuyển hướng đầu ra thành / dev / null

Bây giờ, chúng tôi đã sẵn sàng tìm hiểu cách sử dụng / dev / null. Trước tiên, hãy kiểm tra cách lọc đầu ra bình thường và lỗi. Trong lệnh sau, grep sẽ cố gắng tìm kiếm một chuỗi (xin chào, trong trường hợp này là) trong thư mục / sys.

$nắm chặt -NSxin chào/sys/

Tuy nhiên, nó sẽ tạo ra nhiều lỗi như không có đặc quyền root, grep không thể truy cập một số tệp. Trong trường hợp như vậy, sẽ dẫn đến lỗi Quyền bị từ chối. Bây giờ, bằng cách sử dụng chuyển hướng, chúng ta có thể nhận được đầu ra rõ ràng hơn.

$nắm chặt -NSxin chào/sys/ 2> /nhà phát triển/vô giá trị

Đầu ra có vẻ tốt hơn nhiều, phải không? Không! Trong trường hợp này, grep không có quyền truy cập vào nhiều tệp và những tệp có thể truy cập không có chuỗi hello.

Trong ví dụ sau, chúng tôi sẽ ping Google.

$pingGoogle com

Tuy nhiên, chúng tôi không muốn thấy tất cả các kết quả ping thành công đó. Thay vào đó, chúng tôi chỉ muốn tập trung vào các lỗi khi ping không thể kết nối với Google. làm sao chúng ta làm việc đó bây giờ?

$pingGoogle com1> /nhà phát triển/vô giá trị

Đây, nội dung của stdout được kết xuất thành / dev / null, chỉ để lại các lỗi.

Chuyển hướng tất cả đầu ra đến / dev / null

Trong một số tình huống nhất định, đầu ra có thể không hữu ích chút nào. Sử dụng chuyển hướng, chúng ta có thể đổ tất cả đầu ra vào khoảng trống.

$nắm chặt -NSxin chào/sys/ > /nhà phát triển/vô giá trị2> &1

Hãy phá vỡ lệnh này một chút. Đầu tiên, chúng tôi đang bán phá giá tất cả stdout thành / dev / null. Sau đó, trong phần thứ hai, chúng tôi nói với bash rằng hãy gửi stderr đến stdout . Trong ví dụ này, không có gì để xuất. Tuy nhiên, nếu bối rối, bạn luôn có thể kiểm tra xem lệnh đã chạy thành công hay chưa.

$quăng đi $?

Giá trị là 2 vì lệnh tạo ra rất nhiều lỗi.

Nếu bạn có xu hướng quên bộ mô tả tệp của stdoutstderr , lệnh sau sẽ hoạt động tốt. Đó là một định dạng tổng quát hơn của lệnh trước. Cả hai stdoutstderr sẽ được chuyển hướng đến / dev / null.

$nắm chặt -NSxin chào/sys/ &> /nhà phát triển/vô giá trị

Những ví dụ khác

Đây là một trong những điều thú vị. Nhớ công cụ dd? Đây là một công cụ mạnh mẽ để chuyển đổi và sao chép tệp. Tìm hiểu thêm về dd. Sử dụng dd, chúng tôi có thể kiểm tra tốc độ đọc tuần tự của đĩa của bạn. Tất nhiên, đó không phải là một phép đo chính xác. Tuy nhiên, để kiểm tra nhanh, nó khá hữu ích.

$dd nếu như=<big_file> của=/nhà phát triển/vô giá trịtrạng thái= tiến trìnhbs=1Miflag= trực tiếp

Ở đây, tôi đã sử dụng Ubuntu 18.04.4 ISO làm tệp lớn.

Tương tự, bạn cũng có thể kiểm tra tốc độ tải xuống của kết nối Internet.

$wget -HOẶC /nhà phát triển/vô giá trị<big_file_link>

Suy nghĩ cuối cùng

Hy vọng rằng bạn đã hiểu rõ ràng về tệp / dev / null này là gì. Đó là một thiết bị đặc biệt, nếu được ghi vào nó, nó sẽ bị loại bỏ và nếu được đọc từ, sẽ đọc rỗng. Tiềm năng thực sự của tính năng thú vị này nằm trong các tập lệnh bash thú vị.

Bạn có quan tâm đến kịch bản bash không? Thủ tục thanh toán hướng dẫn cho người mới bắt đầu để viết kịch bản bash .

Thưởng thức!