lsblk -o NAME,SERIAL,MOUNTPOINT
출력에 다음이 포함된 경우
sdb X55MM4827123
└─sdb1
└─luks-4d0dc651-9aa6-452d-9442-7b33d95f8427 /run/media/main/mydrive
X55MM4827123
마운트 지점(이 경우)을 제공할 때 일련 번호(이 경우)를 얻기 위해 사용할 수 있는 간단한 콘솔/CLI 명령은 무엇입니까 /run/media/main/mydrive
?
답변을 사용할 필요는 없지만 lsblk
간결해야 하며 간단한 bash 스크립트를 사용하는 것이 좋습니다.
답변1
다음 옵션은 헤더 없이 디스크 일련 번호를 인쇄합니다.lsblk -n -o SERIAL /dev/sda
옵션 설명은 맨페이지에서 찾을 수 있습니다.
-n, --noheadings
Do not print a header line.
Serial:
이 옵션은 명령 출력에서 헤더를 제거합니다.
-o, --output list
Specify which output columns to print. Use --help to get a list of all supported columns.
디스크에 대해 인쇄할 정보를 선택하세요.
시리즈를 제공하기에 충분합니다. 불행히도 lsblk
일련 번호는 파티션이 아닌 디스크의 속성이므로 마운트 지점에서는 작동하지 않습니다. 구경하다 synopsis
:
Synopsis
lsblk [options]
lsblk [options] device...
마운트 지점에서 파티션을 추출하고 디스크 정보를 정리한 다음 이를 인수로 제공하려면 많은 노력을 기울여야 합니다 lsblk
. 이렇게 하면 성공할 수 있습니다.
mount| grep /run/media/main/mydrive | awk 'NR==1{print $1}'|sed 's/[0-9]*//g'
mount
모든 마운트 지점이 나열되고, grep
마운트 지점에 대한 행이 페치되고, awk
파티션 열이 페치되고, sed
파티션을 나타내는 숫자가 제거됩니다. 요약하자면 다음과 같습니다.
lsblk -n -o SERIAL `mount| grep /run/media/main/mydrive | awk 'NR==1{print $1}'|sed 's/[0-9]*//g'`
답변2
내가 이해한 바에 따르면, 목표는 마운트 지점으로 명령을 입력하고 일련 번호를 출력하는 것입니다. 글쎄요, 약간의 awk
마법과 패키지를 사용하는 작은 스크립트로 가능합니다 smartmontools
.
데모 2 :
$ ./mount2serial.sh /
[sudo] password for xieerqi:
Serial Number: 4G7AA3Q1HSZ4HH4YN
$ ./mount2serial.sh /mnt/HDD
[sudo] password for xieerqi:
Serial Number: 4O75CEXFLML9M
스크립트 자체는 다음과 같습니다.
#!/usr/bin/env bash
if [ "$1" = "/" ]
then
dev=$(awk -v mount="$1" '$2 == mount{print $1}' /proc/self/mounts)
else
dev=$(awk -v mount="$1" '$0 ~ mount{print $1}' /proc/self/mounts)
fi
sudo smartctl -i "$dev" | grep 'Serial Number:'
에서 일련 번호를 얻을 수 있고 lsblk
GNU 버전 1은 JSON 데이터를 출력 할 수 있으므로 다음과lsblk
같이 작동하는 Python 스크립트를 구성했습니다 .
$ ./mount2serial.py '/mnt/ubuntu'
4O75CEXFLML9M
xie@xie-PC:~$ ./mount2serial.py '/'
B4VOM8OEIZIHF
#!/usr/bin/env python3
import json
import subprocess
import sys
lsblk = subprocess.run(['lsblk','-J','-o','NAME,SERIAL,MOUNTPOINT'],stdout=subprocess.PIPE)
for dev in json.loads(lsblk.stdout.decode())['blockdevices']:
serial = ''
# find serial number of current block device
for key,value in dev.items():
if key == 'serial':
serial = value
break
# we don't need to iterate through everything in dev.items()
for child in dev['children']:
if child['mountpoint'] == sys.argv[1]:
print(serial)
sys.exit(0)
# if nothing is found we end up here with exit status 1 and nothing printed
sys.exit(1)
1. GNU가 아닌 버전이 있는지는 모르겠지만 lsblk
, 있다면 댓글을 남겨주세요.
/dev/urandom
2. 표시된 일련번호는 데모 목적으로 생성된 임의의 문자열입니다.