현재 디렉토리의 마운트 정보


20

내가 할 수있는 df .(가) 현재 디렉토리에 있는지 마운트에 정보의 일부를 얻기 위해, 그리고 내가에서 원하는 모든 정보를 얻을 수 mount있지만, 많은 정보를 (다른 마운트에 대한 정보를) 얻을. 나는 그것을 grep 할 수 있지만 더 좋은 방법이 있는지 궁금합니다.

내가 원하는 정보 mountinfomountinfo .제공 하는 명령이 있습니까 (예 df .:하지만 정보를 mount제공하십시오).


데비안 Gnu + Linux를 사용하고 있습니다.


1
stat명령도 사용할 수 있다고 생각 합니다. 그러나 %m마운트 지점을 제공하는 옵션이 시스템 버전에서 지원 되는지 확실하지 않습니다 . 시스템을 체크인했는데 마운트 지점을 반환하지 않는 것 같습니다.
Ramesh

1
@Ramesh, Yes stat "--printf=%m\n" .는 현재 디렉토리가있는 파일 시스템의 마운트 지점을 가져옵니다. 따라서 일부 답변을 단순화 할 수 있습니다. 감사.
ctrl-alt-delor

답변:


18

나는 당신이 이것과 같은 것을 원한다고 생각합니다.

findmnt -T .

옵션을 사용하는 경우

-T,-목표 경로
경로가 마운트 포인트 파일 또는 디렉토리가 아닌 경우, 마운트 포인트 findmnt를 얻기 위해 경로 요소를 역순으로 점검하십시오. 를 통해 특정 필드 만 인쇄 할 수 있습니다 -o, --output [list]. 사용 가능한 필드 목록을
참조하십시오 findmnt --help.


또는 다음을 실행할 수 있습니다.

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

당신이 겪고있는 문제는 모든 경로가 무언가 또는 다른 것에 상대적이기 때문에 나무를 걸어야한다는 것입니다. 매번

findmntutil-linux 패키지의 멤버이며 몇 년 동안 사용되었습니다. 이제 배포판에 관계없이 mount도구 가있는 경우 Linux 시스템에 이미 설치되어 있어야합니다 .

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

findmnt마운트 포인트 인수없이 모든 마운트 정보를 인쇄하고 인수로만 정보를 인쇄합니다. 이 -D는 IS 에뮬레이션의df 옵션을 선택합니다. -D출력이 없으면 의 것과 비슷 mount하지만 훨씬 더 구성 가능합니다. findmnt --help직접 시도해보십시오 .

현재 쉘의 현재 디렉토리가 변경되지 않도록 서브 쉘에 넣습니다.

그래서:

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

산출

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

-D사용 가능한 옵션 이없는 경우 (이전 버전의 util-linux에는 없음) 걱정할 필요가 없습니다. 어쨌든 편의 스위치 일뿐입니다. 각 호출에 대해 생성되는 열 제목을 확인하십시오 -o. utput 스위치를 사용하여 각 호출에 대한 열 제목을 포함하거나 제외 할 수 있습니다 . 다음과 같은 결과를 얻을 수 있습니다 -D.

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

산출

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

에 대한 비트를 제외하고 -D는 그 옵션이 없습니다. (저는 Debian7, util-linux 2.20.1-5.3입니다)
ctrl-alt-delor 10

나는 며칠 안에 당신을하겠습니다. 누군가 더 완벽한 답을 가지고 있는지 알기 위해 시간을 남길 것입니다. 이것은 완벽에 가깝지만 (df처럼 작동하면 루프가 필요하지 않으면 완벽합니다).
ctrl-alt-delor

@richard-좋은 생각입니다-답변이 너무 빨리 받아 들여지면 마음에 들지 않습니다. 루프와 관련하여 df- 루프를 한다고 기꺼이 내립니다. 그렇게하도록 지시 할 필요는 없습니다.
mikeserv

1
@ramesh 덕분에 우리도 할 수 있습니다findmnt $(stat "--printf=%m\n" .)
ctrl-alt-delor

2
내 버전 에는 루프를 우회 할 수 findmnt있는 -T옵션이 있습니다 cd ... 다른 사람에게 유용 할 수 있습니다.
질소

1

Linux / Unix 방식은 작은 유틸리티로 구성된 툴박스를 결합하여 결과를 제공합니다.

모든 경우에 유용하지는 않습니다. 대신 파이프 등으로 결합 된 많은 유용한 유틸리티가 많이 있습니다. 이것의 장점은 사용 가능한 유틸리티가없는 경우 자신 만의 유틸리티를 아주 쉽게 작성할 수 있다는 것입니다.

예를 들어, 정보를 얻으려면 다음을 사용할 수 있습니다.

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

다른 디렉토리에서 위를 재사용하려면 스크립트를 작성하십시오.

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

mountinfo파일을 다른 이름으로 저장하고 실행 가능하게 만드십시오 ( chmod +x mountinfo). 그런 다음 다음과 같이 사용할 수 있습니다.

mountinfo .

서로 상호 운용되지 않는 모든 것을위한 유틸리티가있는 시스템을 원한다면 특정 게이트 게이츠가 당신을 도울 수 있습니다 ;-)


--output최신 버전의 GNU coreutils (≥8.22)에만 존재합니다.
Gilles 'SO- 악마 그만해'

이것은 내가하고있는 거의 일입니다. mount옵션이 없으면 조금 생각이 들지 않습니다. 옵션을 사용하면 마운트 포인트를 만들지 않고 마운트 포인트를 만들지 않으면 더 나은 목록 도구를 원했습니다. 우리가 보듯이 @mikeserv는 우리를 보여 주었다 findmnt.
ctrl-alt-delor

1

마운트 포인트에 공백이 있으면 다소 지저분 할 수 있지만 마운트 포인트에 줄 바꿈이 포함 된 경우를 제외하고는 작동해야합니다.

#!/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 -P파일 시스템에 대해 한 줄을 출력합니다. 해당 옵션이 df없으면 마운트 포인트가 긴 경우 두 줄을 출력 할 수 있습니다. 마운트 지점 이름은 머리글 행의 "Mounted on"레이블과 동일한 열에서 시작합니다.

마운트 지점을 얻은 후의 출력에서 ​​grep을 수행합니다 mount.


1

명령을 모르지만 함수를 만들 수 있습니다. 당신은 아래에 추가 할 수 있습니다 .bashrc:

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

mount명령을 실행하고 출력을에 전달합니다 grep. grep의 출력을 찾아서 df -P "$1" | tail -n 1 | awk '{print $1}'분류합니다.

  • df -P "$1"df함수에 전달 된 인수에서 실행 됩니다.
  • tail -n 1partition정보 를 포함하는 두 번째 줄만 출력합니다 .
  • awk '{print $1}'예를 들어 디스크 / 파티션 번호 인 해당 행의 첫 번째 부분을 인쇄합니다 /dev/sda5. 이것이 grepmount 명령에서 찾아서 출력하는 것입니다.

.bashrc파일을 소싱하여 변경 사항을 적용하거나 로그 아웃 한 후 다시 로그인하십시오.

이제를 실행 mountinfo .하면 원하는 결과를 얻을 수 있습니다.


이것은 내가하고있는 일과 거의 같습니다 (그러나 기능이 없으면 다른 시스템 (예 :이 사이트의 답변)에서 할 때 충분하지 않습니다). mount옵션이 없으면 약간의 나중에 생각 : 옵션을 사용하면 마운트 지점을 만들지 않고 마운트 지점을 만들면 더 나은 목록 도구를 원했습니다. 우리가 보듯이 @mikeserv는 우리를 보여 주었다 findmnt.
ctrl-alt-delor

0

완전히 오래된 버전의 GNU coreutils df를 사용하는 경우 echo $(df . --output=target | tail -n 1)작동합니다. 이와 함께 stat -c '%m' ., 나는주의 있지만 https://linux.die.net/man/1/stat이 의 문서가 부족 %m포맷 옵션을 선택합니다.

이 작업을 수행하는 것은 번거로운 일입니다. 위의 어느 것도 BSD 또는 Cygwin 버전의 stat 또는 df에서 작동하지 않습니다. 마운트 포인트 경로에 공백이 없을 경우에는 df -P . | tail -1 | awk '{ print $NF}'좋지만 USB 플래시 드라이브의 볼륨 이름에 공백이있는 경우가 종종 있습니다.이 이름은 마운트 경로에 나타나고이 경로를 깰 수 있습니다. 이식성을 위해 Perl은 거의 모든 곳에 설치 가능하며 CPAN에는 원하는 기능을 제공하는 Sys :: Filesystem :: MountPoint 모듈이 있습니다.


echo $()명령에 추가 한 내용을 알려주 시겠습니까?
ctrl-alt-delor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.