이 주제에 대한 의견을 주시면 감사하겠습니다. macOS에 대한 출력이 있습니다(하이 시에라(High Sierra) 파일 시스템: APFS) 주문하다- diskutil apfs list
. 샘플 출력은 다음과 같습니다.
+-- Container disk5 1B5FE22B-6F4F-4EB9-8AA3-D326E4E940DF
| ====================================================
| APFS Container Reference: disk5
| Size (Capacity Ceiling): 250140434432 B (250.1 GB)
| Minimum Size: 192333017088 B (192.3 GB)
| Capacity In Use By Volumes: 186220453888 B (186.2 GB) (74.4% used)
| Capacity Not Allocated: 63919980544 B (63.9 GB) (25.6% free)
| |
| +-< Physical Store disk4s2 E6FF882B-995C-4C60-B164-76923667F8A1
| | -----------------------------------------------------------
| | APFS Physical Store Disk: disk4s2
| | Size: 250140434432 B (250.1 GB)
| |
| +-> Volume disk5s1 7BB363F8-A658-4B6C-A4B4-778AC782785E
| | ---------------------------------------------------
| | APFS Volume Disk (Role): disk5s1 (No specific role)
| | Name: Macintosh HD (Case-insensitive)
| | Mount Point: Not Mounted
| | Capacity Consumed: 181760897024 B (181.8 GB)
| | FileVault: Yes (Locked)
| |
| +-> Volume disk5s2 48A79DA5-1228-4F5A-8851-5178B91D2310
| | ---------------------------------------------------
| | APFS Volume Disk (Role): disk5s2 (Preboot)
| | Name: Preboot (Case-insensitive)
| | Mount Point: Not Mounted
| | Capacity Consumed: 66613248 B (66.6 MB)
| | FileVault: No
| |
| +-> Volume disk5s3 D46C3FA0-5B9D-4E13-9327-EEFB483F692E
| | ---------------------------------------------------
| | APFS Volume Disk (Role): disk5s3 (Recovery)
| | Name: Recovery (Case-insensitive)
| | Mount Point: Not Mounted
| | Capacity Consumed: 1033371648 B (1.0 GB)
| | FileVault: No
| |
| +-> Volume disk5s4 3E852266-E0C3-48AB-ACAD-D73CEE0134F1
| ---------------------------------------------------
| APFS Volume Disk (Role): disk5s4 (VM)
| Name: VM (Case-insensitive)
| Mount Point: Not Mounted
| Capacity Consumed: 3221250048 B (3.2 GB)
| FileVault: No
내 목표는 다음과 같습니다
- 디스크 컨테이너의 GUID 및 fileVault 상태 "예(잠김)"를 출력합니다.
- fileVault 상태 "예(잠김)"의 GUID를 변수에 저장합니다.
나는 다음을 생각해 냈습니다.
diskutil apfs list|awk '/[A-Z0-9]{8}-([A-Z0-9]{4}-){3}[A-Z0-9]{12}$|.l/{print}'
산출:
+-- Container disk5 1B5FE22B-6F4F-4EB9-8AA3-D326E4E940DF
| Size (Capacity Ceiling): 250140434432 B (250.1 GB)
| Capacity In Use By Volumes: 186220453888 B (186.2 GB) (74.4% used)
| Capacity Not Allocated: 63919980544 B (63.9 GB) (25.6% free)
| +-< Physical Store disk4s2 E6FF882B-995C-4C60-B164-76923667F8A1
| | APFS Physical Store Disk: disk4s2
| +-> Volume disk5s1 7BB363F8-A658-4B6C-A4B4-778AC782785E
| | APFS Volume Disk (Role): disk5s1 (No specific role)
| | FileVault: Yes (Locked)
| +-> Volume disk5s2 48A79DA5-1228-4F5A-8851-5178B91D2310
| | APFS Volume Disk (Role): disk5s2 (Preboot)
| | FileVault: No
| +-> Volume disk5s3 D46C3FA0-5B9D-4E13-9327-EEFB483F692E
| | APFS Volume Disk (Role): disk5s3 (Recovery)
| | FileVault: No
| +-> Volume disk5s4 3E852266-E0C3-48AB-ACAD-D73CEE0134F1
| APFS Volume Disk (Role): disk5s4 (VM)
| FileVault: No
코드를 수정/수정하기 위한 모든 입력을 환영합니다 :). 미리 감사드립니다
답변1
함께 가다마크 플롯닉의 조언구조화된 XML 출력 변환
diskutil apfs list -plist
JSON으로 변환하고 jq
이 jq
유틸리티는 macOS의 Homebrew에서 사용할 수 있습니다.
plutil
일반 파일을 읽어야 하므로 이 작업은 두 단계로 수행해야 합니다.
diskutil apfs list -plist >list.xml
plutil -convert json -o list.json list.xml
생성된 JSON 파일에서 다음을 사용하여 FileVault가 활성화되고 잠겨 있는 모든 볼륨의 APFS 볼륨 UUID를 추출할 수 있습니다.
jq -r '.Containers[].Volumes[] | select(.FileVault == true and .Locked == true) | .APFSVolumeUUID' list.json
"단일" 명령으로 변수에 할당합니다.
locked_uuids=$(
diskutil apfs list -plist >list.xml
plutil -convert json -o list.json list.xml
jq -r '.Containers[].Volumes[] | select(.FileVault == true and .Locked == true) | .APFSVolumeUUID' list.json
rm -f list.xml list.json
)
위의 명령은 현재 디렉토리의 list.xml
두 파일을 모두 덮어쓰고 삭제한다는 점에 유의하십시오. 다음 명령을 사용하여 임시 파일을 생성 list.json
할 수 있습니다 .mktemp
locked_uuids=$(
tmpxml=$(mktemp)
tmpjson=$(mktemp)
diskutil apfs list -plist >"$tmpxml"
plutil -convert json -o "$tmpjson" "$tmpxml"
jq -r '.Containers[].Volumes[] | select(.FileVault == true and .Locked == true) | .APFSVolumeUUID' "$tmpjson"
rm -f "$tmpxml" "$tmpjson"
)
그리고 편의상 이러한 명령을 셸 함수에 넣고 호출할 수도 있습니다( bash
여기서 사용됨).
list_locked_vaults () {
local tmpxml=$(mktemp)
local tmpjson=$(mktemp)
diskutil apfs list -plist >"$tmpxml"
plutil -convert json -o "$tmpjson" "$tmpxml"
jq -r '.Containers[].Volumes[] | select(.FileVault == true and .Locked == true) | .APFSVolumeUUID' "$tmpjson"
rm -f "$tmpxml" "$tmpjson"
}
locked_uuids=$( list_locked_vaults )