스크립트에서 / 파일 시스템의 UUID 가져 오기 이 포함 된 볼륨의 UUID를 어떻게

/파일 시스템 이 포함 된 볼륨의 UUID를 어떻게 얻을 수 있습니까? 내가 찾은 가장 좋은 것은입니다 blkid -o list. 그러나이 출력은 사람이 읽을 수 있고 구문 분석하기 어렵습니다. 더 좋은 방법이 있습니까?

시스템 별 템플릿으로 구성 관리를 매개 변수화해야합니다.

에 대한 참고 blkid: 미래에 내 질문의 결과를 재사용 할 수 있습니다 사람들을 위해 잡았다 blkid에서 이전 실행의 캐시 결과 /etc/blkid.tab. 즉, blkid루트가 아닌 사용자로 처음 실행 하면 데이터가 반환되지 않습니다. 또한 blkid루트 실행 후 루트가 아닌 사용자로 실행하면 오래된 (부정확 한) 데이터가 반환됩니다.



답변

사용 findmnt:

$ findmnt /
TARGET SOURCE       FSTYPE OPTIONS
/      /dev/md127p1 ext4   rw,relatime,stripe=256,data=ordered
$ findmnt / -o UUID
UUID
046a554b-d9f5-4b23-82e6-ffaeb98284aa
$ findmnt / -o UUID -n
046a554b-d9f5-4b23-82e6-ffaeb98284aa

또한 정보 조회 방법 및 정보 표시 방법 (JSON 출력 포함)을 제어하는 ​​여러 옵션이 있습니다. mount패키지 의 일부 이므로 모든 우분투 설치에서 사용할 수 있습니다.


답변

다른 해결책 :

lsblk -nr -o UUID,MOUNTPOINT | grep -Po '.*(?= /$)'
  • -n 헤더를 억제합니다 (실제로 필요하지는 않지만 구문 분석에 더 안전합니다)
  • -r 원시 출력을 만듭니다 (파싱하는 것이 더 안전합니다)
  • -o UUID,MOUNTPOINT 필요한 정보 만 포함

답변

lsblk명령을 사용하여 UUID를 출력 할 수 있지만 파티션의 장치 이름 (예 : / dev / sda2)이 필요합니다. df명령 을 사용 하여 출력을 트리밍 하여이를 얻을 수 있습니다 . 명령 대체를 사용하여 장치 이름을에 지정하십시오 lsblk. lsblk의 일반 출력에는 필요하지 않지만 UUID에 액세스하려면 sudo가 필요합니다.

sudo lsblk -n -o UUID "$(df -P / | tail -n1 | cut -d' ' -f1)"

답변

내가 생각해 낸 가장 좋은 해결책은

blkid -o list | awk '/\/[[:space:]]+/{ print $0 }' | tr -s ' ' | cut -d ' ' -f 4

최적이 아닌 것처럼 느껴지지만 작동합니다.

참고 : [[: space :]]는Space


답변

mountpoint해당 파일 시스템의 현재 마운트 지점에 대한 값을 조정하십시오 .

dev="$(exec awk -v mountpoint='/' '($2 == mountpoint){ print $1; quit; }' /proc/mounts)" &&
sudo blkid -o export -- "$dev" | sed -ne 's/^UUID=//p'

답변

내가 사용하는 것은 다음과 같습니다.

sudo tune2fs -l $(df  / | tail -1 |awk '{print $1}') |grep UUID|awk '{ print $3 }'

tune2fs는 e2fsprogs 패키지에 있으며 기본적으로 설치되어 있는지 기억할 수 없습니다.

sudo apt install e2fsprogs

설치되어 있지 않은 경우.


답변

14.04 및 16.04에서 작동하도록 테스트되었습니다.

항상 루트의 UUID를 생산해야하는 간단한 한 줄이 /있다

export DRIVE = $ ( ” ‘{print $ 1}’의 grep ‘/’| awk -F”); blkid $ DRIVE | 컷 -d ‘ “‘-f2`

우리가 여기서하는 일은 경로 확장 기호로 사용될 /때 일치하지 않도록 루트 기호를 양쪽의 공백과 일치시키기 위해 마운트의 출력을 grepping하는 것입니다. 장치 이름과 THAT를 환경 변수 $ DRIVE에 할당 한 다음 필드 구분 기호로 사용하여 파이프 스루 컷 의 출력을 사용하고 다른 모든 항목을 제거하는 두 번째 필드 만 선택하면 UUID 만 남습니다./awkblkid $DRIVE"

참고 위의 명령에서 GREP은 ‘실제로 이후에 소속 된 것을 space/ space‘가 아닌 ‘/’이 나타나는한다.

이는 필요하지 않은 이점이 있으며 sudo드라이브 장착 방법에 관계없이 적절한 결과를 반환합니다.

변수를 사용하지 않는 경우이 방법을 시도하기 전에 $ DRIVE 환경 변수를 echo $DRIVE사용하지 않는 것이 빈 줄을 반환하는 것이 좋습니다.