
우분투에서는 이 명령의 출력
df --exclude={tmpfs,devtmpfs,squashfs,overlay} | sed -e /^Filesystem/d | awk '{print $6 " " $1 " " $3 " " $4 " " $5}'
이다:
/ /dev/mapper/dockerVG-rootLV 8110496 40591632 17%
/dockerssd /dev/mapper/ssdVG-ssdLV 214133656 274642488 44%
/dockerhdd /dev/mapper/hddVG-hddLV 83278236 1385191240 6%
/var/lib/docker /dev/mapper/hddVG-dockerLV 76046204 412729940 16%
그것이 나에게 필요한 것입니다.
CentOS 6에서는 다음과 같은 결과가 출력됩니다.
/dev/mapper/vg_rproxy-lv_root
51475068 43192316 12% /
/boot /dev/sda1 82688 379364 18%
/dev/mapper/vg_rproxy-lv_home
77349888 73119692 1% /home
엉망이에요.
CentOS 6의 전체 출력:
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_rproxy-lv_root
51475068 5661336 43192292 12% /
tmpfs 957140 0 957140 0% /dev/shm
/dev/sda1 487652 82688 379364 18% /boot
/dev/mapper/vg_rproxy-lv_home
77349888 294352 73119692 1% /home
문제는 무엇입니까? 어떻게 해결할 수 있나요?
답변1
tl;dr
사용 df -P
.
전체 답변
/dev/mapper/vg_rproxy-lv_root
상대적으로 긴 문자열 입니다 /dev/mapper/vg_rproxy-lv_home
. df
CentOS에 나타납니다결정하다항목을 두 줄로 분할하면 출력을 추가로 구문 분석할 때 논리가 중단됩니다.
좁은 터미널에서는 제한된 수평 공간에도 불구하고 사람이 읽을 수 있는 반열 형태의 출력을 생성하는 것이 좋습니다. df
tty가 아닌 항목(귀하의 경우 파이프)에 쓸 때 이런 일이 발생하지 않기를 바랍니다 .
아마도 df
Ubuntu에서는 열의 항목이 Filesystem
길면 유사하게 동작합니다. 어쩌면 당신은 상대적으로 짧기 때문에 이것을 경험하지 않았을 수도 있습니다. 모르겠어요. 이건 중요하지 않아요. 중요한 것은 df
POSIX 도구이며 이를 따라야 한다는 것입니다.사양. 그러나 사양에는 다음과 같이 명시적으로 명시되어 있습니다.
역사적
df
구현은 기본 출력이 상당히 다양합니다. 따라서 알려진 모든 역사적 구현을 수용하고-P
이식 가능한 형식으로 정보를 제공하기 위해 이식 가능한 옵션( )을 추가하기 위해 느슨한 방식으로 기본 출력을 설명해야 했습니다 .
옵션 정보:
-P
STDOUT 섹션에 설명된 형식으로 출력을 생성합니다.
마지막으로 STDOUT 섹션의 관련 부분(강조):
구현에서는 정보가 순서대로 열에 표시되도록 헤더 줄과 개별 데이터 줄의 간격을 조정할 수 있습니다.
남은 출력~와 함께
-P
다음으로 구성된다지정된 각 파일 시스템에 대한 정보 한 줄. 이 줄의 형식은 다음과 같습니다."%s %d %d %d %d%% %s\n", <file system name>, <total space>, <space used>, <space free>, <percentage used>, <file system root>
따라서 df
를 사용하지 않는 한 무엇이든 출력할 수 있습니다 -P
. -P
일부 구현이 없으면 df
예측 가능하고 구문 분석 가능한 출력이 생성될 수 있지만 다른 구현은 그다지 많지 않습니다. 그들의 행동은 충분히 문서화될 수도 있고 그렇지 않을 수도 있습니다. 따라서 일반적으로 의 출력을 구문 분석할 때는 df
항상 -P
.
추가하는 것만으로 -P
도 특정 문제를 해결하기에 충분할 것입니다.
참고는 -P
형식에만 적용됩니다. 전체 POSIX 사양은 POSIX 로캘에만 적용됩니다. 또한 최신 구현에서는 df
기본적으로 1024바이트 블록을 사용하는 경향이 있지만 POSIX에서는 기본값이 512라고 명시합니다. GNU coreutils의 Debian 10에서는 환경에 설정 df
되면 POSIX 기본값으로 대체됩니다 . POSIXLY_CORRECT
.-k
이것은 (거의) 구문 분석 가능한 출력을 생성하는 이식 가능한 명령입니다.
LC_ALL=POSIX df -Pk
열의 항목 에 공백이 포함될 수 있기 때문에 거의 구문 분석이 가능하다고 Filesystem
생각합니다. 제대로 구성된 OS에서는 그렇지 않습니다.
생략 LC_ALL=POSIX
해도 예상되는 결과를 얻을 수 있지만 일반적으로 구문 분석을 위해 있어야 합니다. 예를 들어 내 폴란드어 로케일에서는 sed -e /^Filesystem/d
내 df
. LC_ALL=POSIX
이 문제를 해결합니다. 아직도 내개인의선호하는 것은 헤더의 어떤 것도 의존하지 않는 것입니다. 나는 sed 1d
또는 tail -n +2
; 또는 가 이미 파이프라인에 있으므로 awk
작업 을 에 위임하세요 . awk
이는 다음과 같습니다.
LC_ALL=POSIX df -Pk --exclude={tmpfs,devtmpfs,squashfs,overlay} \
| awk 'NR>1 {print $6 " " $1 " " $3 " " $4 " " $5}'
마지막으로 --exclude=
휴대용 옵션이 아닙니다. 분명히 문제의 두 시스템 모두에서 작동하지만 다른 시스템에서는 작동하지 않을 수도 있습니다.