Câu trả lời:
Đầu ra có thể được phân tích dễ dàng hơn một chút bằng cách sử dụng -P
tùy chọn sẽ đảm bảo rằng:
- Thông tin về mỗi hệ thống tệp luôn được in trên chính xác một dòng; một thiết bị gắn kết không bao giờ được đặt trên một dòng của chính nó. Điều này có nghĩa là nếu tên thiết bị gắn kết dài hơn 20 ký tự (ví dụ: đối với một số giá treo mạng), các cột bị sai lệch.
Điều này làm cho nó dễ dàng hơn nhiều để có được không gian trống có sẵn:
$ df -Ph . | tail -1 | awk '{print $4}'
( -h
sử dụng megabyte, gigabyte, v.v. Nếu hệ thống của bạn không có nó, chỉ sử dụng -k
cho kilobyte.)
Nếu chúng ta vượt qua df
một đường dẫn, nó sẽ chỉ trả về 2 hàng: một hàng tiêu đề và sau đó là dữ liệu về hệ thống tệp có chứa đường dẫn. Chúng ta có thể sử dụng đuôi để lấy hàng thứ hai. Chúng tôi biết rằng không gian có sẵn là trong cột thứ 4, vì vậy chúng tôi lấy đó với awk
. Tất cả điều này có thể được thực hiện với awk
:
$ df -Ph . | awk 'NR==2 {print $4}'
hoặc nhiều bộ lọc khác .
$PWD
thay vì sử dụng thay thế lệnh và loại bỏ nhu cầu về đuôi: df -Ph $PWD | awk 'NR==2{print $4}'
awk
là tốt hơn. Tôi bao gồm lệnh dài hơn vì tôi muốn có một ví dụ về cách người ta có thể xây dựng một chuỗi các lệnh đơn giản để làm một cái gì đó phức tạp hơn. Tôi đã cập nhật câu trả lời để bao gồm sự cải thiện của bạn.
-P
là tiêu chuẩn ( P
dành cho POSIX). Nhưng -h
là một phần mở rộng GNU (cũng tồn tại trên một số hệ thống khác, nhưng ví dụ như trên OpenBSD, nó không tương thích với -P
).
df -h --output=avail . | tail -1
time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }
) cho thấy không có sự khác biệt có ý nghĩa về tốc độ, điều này không gây ngạc nhiên - việc gọi tail
không tốn kém và awk
sẽ được bỏ qua đến cuối đầu vào ... Có thể có một sự khác biệt về PDP-11 ...
Làm thế nào về làm df -h .
. Điều này sẽ cung cấp cho bạn không gian trống có sẵn của phân vùng mà thư mục làm việc hiện tại của bạn đang ở.
Một ví dụ nhỏ:
/usr/local/nagios/libexec # df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-lvol1
9.9G 6.1G 3.4G 65% /
Theo byte:
df --output=avail -B 1 "$PWD" | tail -n 1
Con người có thể đọc được:
df --output=avail -h "$PWD" | tail -n 1
hoặc là
df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --to="iec"
hoặc là
df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
du -h
sao