gắn thông tin cho thư mục hiện tại


20

Tôi có thể làm df .để có được một số thông tin trên mount mà thư mục hiện tại đang ở và tôi có thể lấy tất cả thông tin tôi muốn mount, nhưng có được nhiều thông tin (thông tin về các mount khác). Tôi có thể grep nó xuống, nhưng tự hỏi nếu có một cách tốt hơn.

Có một số lệnh mountinfonhư vậy mountinfo .cung cấp thông tin tôi muốn (như df ., nhưng với thông tin mountcung cấp.)


Tôi đang sử dụng Debian Gnu + Linux.


1
Tôi tin rằng statlệnh có thể được sử dụng là tốt. Tuy nhiên, tôi không chắc liệu %mtùy chọn cung cấp điểm gắn kết có được hỗ trợ trong phiên bản hệ thống của bạn hay không. Tôi đã kiểm tra trong hệ thống của mình và nó dường như không trả về điểm gắn kết.
Ramesh

1
@Ramesh, Có stat "--printf=%m\n" .được điểm gắn kết của hệ thống tệp mà thư mục hiện tại đang ở. Do đó cho phép chúng tôi đơn giản hóa một số câu trả lời. Cảm ơn.
ctrl-alt-delor

Câu trả lời:


18

Tôi nghĩ rằng bạn muốn một cái gì đó như thế này:

findmnt -T .

Khi sử dụng tùy chọn

-T, - đường dẫn nhắm mục tiêu
nếu đường dẫn không phải là tệp hoặc thư mục mountpoint, hãy findmntkiểm tra các phần tử đường dẫn theo thứ tự ngược lại để lấy mountpoint. Bạn chỉ có thể in một số trường nhất định thông qua -o, --output [list].
Xem findmnt --helpdanh sách các lĩnh vực có sẵn.


Ngoài ra, bạn có thể chạy:

(until findmnt . ; do cd .. ; done)

Vấn đề bạn gặp phải là tất cả các con đường đều liên quan đến thứ này hay thứ khác, vì vậy bạn chỉ cần đi bộ trên cây. Mỗi lần.

findmntlà một thành viên của gói linux-linux và đã được một vài năm nay. Đến bây giờ, bất kể bản phân phối của bạn là gì, nó đã được cài đặt trên máy Linux của bạn nếu bạn cũng có mountcông cụ này.

man mount | grep findmnt -B1 -m1
For  more robust and customizable output use
findmnt(8),  especially  in  your   scripts.

findmntsẽ in ra tất cả thông tin của thú cưỡi mà không có đối số điểm gắn kết và chỉ thông tin đó cho đối số của nó với đối số. Đây -Dlà tùy chọn thi đuadf . Không có -Dđầu ra của nó tương tự như mount- nhưng có thể cấu hình hơn nhiều. Hãy thử findmnt --helpvà xem cho chính mình.

Tôi dán nó trong một lớp con để thư mục hiện tại của shell hiện tại không thay đổi.

Vì thế:

mkdir -p /tmp/1/2/3/4/5/6 && cd $_ 
(until findmnt . ; do cd .. ; done && findmnt -D .) && pwd

ĐẦU RA

TARGET SOURCE FSTYPE OPTIONS
/tmp   tmpfs  tmpfs  rw
SOURCE FSTYPE  SIZE   USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G 839.7M   11G   7% /tmp
/tmp/1/2/3/4/5/6

Nếu bạn không có -Dtùy chọn có sẵn cho mình (Không phải trong các phiên bản cũ hơn của linux-linux) thì bạn không bao giờ phải lo sợ - nó ít hơn một công tắc tiện lợi trong mọi trường hợp. Lưu ý các tiêu đề cột mà nó tạo ra cho mỗi cuộc gọi - bạn có thể bao gồm hoặc loại trừ những tiêu đề cho mỗi lần gọi với công -otắc không thể tin được. Tôi có thể nhận được cùng một đầu ra như -Dcó thể cung cấp như:

 findmnt /tmp -o SOURCE,FSTYPE,SIZE,USED,AVAIL,USE%,TARGET

ĐẦU RA

SOURCE FSTYPE  SIZE  USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G  1.1G 10.6G  10% /tmp

Tôi thích nó, ngoại trừ một chút về -D, tôi không có lựa chọn đó. (Tôi đang sử dụng Debian7, produc-linux 2.20.1-5.3)
ctrl-alt-delor

Tôi sẽ bạn trong một vài ngày, tôi sẽ để lại một thời gian để xem có ai có câu trả lời hoàn hảo hơn không. Mặc dù điều này gần hoàn hảo (nếu nó hoạt động như df: không cần vòng lặp, thì nó sẽ hoàn hảo).
ctrl-alt-delor

@richard - đó là một ý tưởng hay - Tôi không thích nó khi câu trả lời được chấp nhận quá sớm. liên quan đến vòng lặp và df- Tôi sẵn sàng đặt cược vào vòng lặp, bạn không cần phải bảo nó làm như vậy.
mikeerv

1
Nhờ @ramesh chúng tôi cũng có thể làmfindmnt $(stat "--printf=%m\n" .)
ctrl-alt-delor

2
Phiên bản của tôi findmntcó một -Ttùy chọn có thể bỏ qua cd ..vòng lặp. Có thể hữu ích cho người khác.
nitơ

1

Cách Linux / Unix là có một hộp công cụ gồm các tiện ích nhỏ, khi được kết hợp lại sẽ mang lại cho bạn kết quả mà bạn đang theo đuổi.

Họ có xu hướng không có một tiện ích cho mỗi lần xuất hiện. Thay vào đó, bạn có nhiều tiện ích hữu ích nhỏ được kết hợp cùng với đường ống, vv Ưu điểm của việc này là bạn có thể viết tiện ích của riêng mình khá dễ dàng nếu không có sẵn.

Ví dụ: để có được thông tin bạn theo dõi, bạn có thể sử dụng:

mount | grep $(df  --output=source . | tail -1)

Nếu bạn muốn sử dụng lại ở trên với các thư mục khác nhau, hãy tạo một tập lệnh:

#!/bin/bash
mount | grep $(df  --output=source $1 | tail -1)

Lưu nó mountinfovà làm cho nó thực thi ( chmod +x mountinfo). Sau đó, bạn có thể sử dụng nó như:

mountinfo .

Nếu bạn muốn một hệ thống có tiện ích cho mọi thứ mà không có cái nào tương tác với nhau, thì một Gates nào đó có thể giúp bạn ;-)


--outputchỉ tồn tại trong các phiên bản gần đây của GNU coreutils (.228,22).
Gilles 'SO- ngừng trở nên xấu xa'

Đây là khá nhiều những gì tôi đã làm, chỉ là mountkhông có tùy chọn nào có vẻ hơi suy nghĩ: với các tùy chọn bạn tạo điểm gắn kết, mà không liệt kê chúng, tôi hy vọng có một công cụ danh sách tốt hơn. Như chúng ta thấy @mikeerv đã chỉ cho chúng ta findmnt.
ctrl-alt-delor

1

Nó có thể hơi lộn xộn nếu các điểm gắn kết có khoảng trống, nhưng điều này sẽ hoạt động trừ trường hợp các điểm gắn kết có dòng mới:

#!/bin/sh
mountpoint="$(df -P "$1" | awk '{
    if (NR==1)
        i=index($0,"Mounted on");
    else
        print substr($0,i);
    }')"
mount|grep " on ${mountpoint} type "

df -Pxuất một dòng cho hệ thống tập tin; không có tùy chọn đó, dfcó thể xuất hai dòng nếu điểm gắn kết dài. Tên điểm gắn kết bắt đầu trong cùng một cột giống như nhãn "Được gắn trên" trong dòng tiêu đề.

Sau khi chúng tôi nhận được điểm gắn kết, chúng tôi grep cho nó trong đầu ra của mount.


1

Tôi không biết về một lệnh, nhưng bạn có thể tạo một chức năng. Bạn có thể thêm phần dưới đây vào .bashrc:

mountinfo () {
  mount | grep $(df -P "$1" | tail -n 1 | awk '{print $1}')
}

Điều này thực thi mountlệnh và chuyển đầu ra cho grep. grepsẽ tìm đầu ra của df -P "$1" | tail -n 1 | awk '{print $1}'và phá vỡ nó:

  • df -P "$1"sẽ chạy dftrên đối số được truyền cho hàm,
  • tail -n 1sẽ chỉ xuất ra dòng thứ hai, dòng chứa partitionthông tin.
  • awk '{print $1}'sẽ in phần đầu tiên của dòng đó, ví dụ như số đĩa / phân vùng /dev/sda5. Đó là những gì grepsẽ tìm kiếm trong lệnh mount và xuất nó.

Nguồn .bashrctệp của bạn để áp dụng các thay đổi hoặc đăng xuất và đăng nhập lại.

Bây giờ, nếu bạn chạy mountinfo ., bạn sẽ nhận được đầu ra mà bạn muốn.


Đây là khá nhiều những gì tôi đã làm (nhưng không có chức năng, tôi không làm đủ, khi tôi làm nó trên các hệ thống khác, ví dụ như câu trả lời trên trang web này.), Chỉ là mountkhông có tùy chọn nào có vẻ hơi một suy nghĩ sau: với các tùy chọn bạn tạo điểm gắn kết, mà không liệt kê chúng, tôi đã hy vọng có một công cụ danh sách tốt hơn. Như chúng ta thấy @mikeerv đã chỉ cho chúng ta findmnt.
ctrl-alt-delor

0

Nếu bạn sử dụng một phiên bản không hoàn toàn cổ của GNU coreutils df, thì nó echo $(df . --output=target | tail -n 1)hoạt động. Tương tự như vậy với stat -c '%m' ., mặc dù tôi lưu ý rằng https://linux.die.net/man/1/stat thiếu tài liệu về %mtùy chọn định dạng.

Làm điều này có vẻ mệt mỏi: cả hai điều trên sẽ không hoạt động với các phiên bản BSD hoặc Cygwin của stat hoặc df. Nếu không có khả năng có khoảng trắng trong đường dẫn của điểm gắn kết thì df -P . | tail -1 | awk '{ print $NF}'sẽ tốt, nhưng thường thì ổ flash USB có khoảng trắng trong tên âm lượng, có thể sẽ xuất hiện trong đường dẫn gắn kết và phá vỡ điều này. Đối với tính di động, Perl có thể cài đặt thực tế ở mọi nơi và CPAN có mô-đun Sys :: Filesystem :: MountPoint cung cấp chức năng mong muốn.


Bạn có thể cho chúng tôi biết những gì echo $()thêm vào lệnh?
ctrl-alt-delor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.