/Dev/Null là gì?

Tác giả sysadmin, T.Sáu 05, 2023, 02:12:23 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

/Dev/Null là gì?


/dev/null là một trong những thiết bị ảo đặc biệt được sử dụng phổ biến nhất trên Linux. Trong hướng dẫn này, chúng tôi sẽ thảo luận về nó và giới thiệu các cách khác nhau để sử dụng nó.


1. /dev/Null trong Linux là gì?

Linux coi mọi thứ là một tệp, có thể là trình điều khiển hoặc thiết bị. Thư mục /dev được sử dụng để lưu trữ tất cả các thiết bị vật lý và ảo. Nếu bạn đã từng làm việc với phân vùng ổ đĩa, bạn có thể đã thấy thư mục /dev được sử dụng. Ví dụ: /dev/sda, /dev/sdb1, v.v.

Mỗi thiết bị ảo đặc biệt đều có các thuộc tính độc đáo. Ví dụ: đọc từ /dev/zero trả về các ký tự ASCII NUL. Một số thiết bị ảo phổ biến bao gồm:

  • /dev/null
  • /dev/zero
  • /dev/random
  • /dev/urandom

/dev/null là một thiết bị null loại bỏ mọi dữ liệu được ghi vào nó. Tuy nhiên, nó báo cáo lại rằng thao tác ghi thành công. Trong thuật ngữ UNIX, thiết bị rỗng này còn được gọi là thùng bit hoặc lỗ đen.

2. Sử dụng /dev/null trong Linux

2.1. Các thuộc tính của /Dev/Null

Khi cố gắng đọc từ /dev/null, nó trả về một ký tự EOF:

Mã nguồn [Chọn]
$ cat /dev/null

Mặc dù có các tính năng độc đáo, /dev/null là một tệp hợp lệ. Chúng ta có thể xác minh nó bằng lệnh sau:

Mã nguồn [Chọn]
$ stat /dev/null

2.2. Cách sử dụng cơ bản

Mọi thứ được ghi vào /dev/null sẽ biến mất vĩnh viễn. Ví dụ sau minh họa thuộc tính này:

Mã nguồn [Chọn]
$ echo "hello world" > /dev/null
Mã nguồn [Chọn]
$ cat /dev/null

Ở đây, chúng tôi chuyển hướng STDOUT của lệnh echo tới /dev/null. Sử dụng lệnh cat, chúng ta đọc nội dung của /dev/null.

Vì /dev/null không lưu trữ bất kỳ dữ liệu nào nên không có gì trong đầu ra của lệnh cat.

3. Chuyển hướng đầu ra lệnh thành /Dev/Null

Cần chạy một lệnh mà không xử lý đầu ra của nó? Chúng tôi có thể chuyển hướng dữ liệu đến /dev/null để loại bỏ một cách an toàn. Để thực hiện kỹ thuật này, nó yêu cầu kiến thức trước về các bộ mô tả tệp: STDIN, STDOUT và STDERR.

Ví dụ 1: Kiểm tra ví dụ đầu tiên.

Mã nguồn [Chọn]
$ echo "hello world" > /dev/null

Ở đây, chúng tôi chuyển hướng STDOUT của lệnh echo tới /dev/null. Đó là lý do tại sao nó sẽ không tạo ra bất kỳ đầu ra nào trong màn hình bảng điều khiển.

Ví dụ 2: Xem ví dụ tiếp theo.

Mã nguồn [Chọn]
$ asdfghjkl > /dev/null

Ở đây, lệnh asdfghjkl không tồn tại. Vì vậy, Bash tạo ra lỗi. Tuy nhiên, thông báo lỗi không chuyển thành /dev/null. Đó là do thông báo lỗi được lưu trữ trong STDERR. Vì vậy, chúng ta cũng cần chỉ định chuyển hướng STDERR (2). Đây là lệnh cập nhật:

Mã nguồn [Chọn]
$ asdfghjkl 2 > /dev/null

Ví dụ 3: Nếu chúng ta muốn chuyển hướng cả STDOUT và STDERR sang /dev/null thì sao? Cấu trúc lệnh sẽ như thế này.

Mã nguồn [Chọn]
$ <command> > /dev/null 2 > /dev/null

Mặc dù cấu trúc này hoàn toàn hợp lệ, nhưng nó dài dòng và dư thừa. Có một cách để rút ngắn cấu trúc một cách đáng kể: chuyển hướng STDERR sang STDOUT trước, sau đó chuyển hướng STDOUT sang /dev/null.

Kiểm tra lệnh cập nhật:

Mã nguồn [Chọn]
$ <command> > /dev/null 2>&1

Ở đây, STDOUT được chuyển hướng đến/dev/null. Sau đó, chúng tôi chuyển hướng STDERR (2) sang STDOUT (1). "&1" mô tả cho trình bao rằng đích là một bộ mô tả tệp, không phải tên tệp.

Bây giờ, lệnh hiệu quả hơn để thực hiện.

Chúng ta đã học về /dev/null, thiết bị null trong Linux. Chúng tôi cũng đã chứng minh cách nó hoạt động bằng các ví dụ khác nhau. Những kỹ thuật này được sử dụng rộng rãi trong shell scripting.

Quan tâm đến việc tìm hiểu thêm? Kiểm tra danh mục con lập trình Bash có chứa nhiều hướng dẫn về các khái niệm khác nhau về tập lệnh Bash. Chúc bạn tính toán vui vẻ!