운영체제(Linux)에 속한 디스크 장치를 캡처하고 싶습니다.
모든 Linux 시스템에는 운영 체제에 속한 디스크 목록이 있으므로 운영 체제에 속한 디스크를 캡처하려고 합니다.
fdisk를 통해 부팅이 sda1에 있음을 알 수 있습니다.
# sfdisk -l | grep Linux
/dev/sda1 * 0+ 63- 64- 512000 83 Linux
/dev/sda2 63+ 19581- 19518- 156773376 8e Linux LVM
따라서 운영 체제(Linux)에 속한 디스크를 캡처하기 위해 다음 명령을 만들었습니다.
# OS_DISK=` sfdisk -l | grep Linux | awk '$2 == "*" {print $1}' | sed s'/\// /g' | awk '{print $2}' | sed 's/[0-9]*//g' `
# echo $OS_DISK
sda
명령이 작업을 수행하는 것 같습니다.
하지만 내 생각엔 이 CLI가 너무 길고 조금 어색한 것 같아
답변1
명령을 실행 fdisk
하고 sfdisk
패키지에 포함되어 있습니다 util-linux
. 동일한 패키지에는 findmnt
다음과 같이 사용할 수 있는 명령도 있습니다.
findmnt / -no SOURCE
/dev/sda6
답변2
- OS 디스크를 식별하기 위해 찾은 가장 간단한 명령은 입니다
df /
. 불행하게도 이 명령은 많은 출력(헤더 라인과 많은 필드를 의미함)을 생성하므로 장치 이름만 얻으려면 여전히 일부 필터링을 수행해야 합니다. 당신 말이 맞습니다. 명령이 너무 길고 약간 투박합니다.
awk
매우 강력한 프로그램입니다.grep
및/또는 와 함께 사용할 필요가 거의sed
없으며awk
동일한 파이프라인에서 여러 명령을 사용할 필요가 거의 없습니다. 귀하의 파이프라인은 다음으로 대체될 수 있습니다.sfdisk -l | sfdisk -l | awk '/Linux/ && $2 == "*" { gsub("[0-9]", "", $1); print [ 삼]; }'
다행스럽게도 십여 명밖에 안 되어서수치더 짧지만 5개가 아닌 1개의 명령입니다.PS는
sed 's/[0-9]*//g'
약간 위험한 명령입니다. 왜냐면g
그것을 가지고 있어도 소용이 없기 때문입니다*
. 무슨 뜻인지 보려면sed 's/[0-9]*/X/g'
다양한 입력을 사용해 보고 및s/[0-9]/X/g
와 비교해 보세요s/[0-9]\+/X/g
.OS_DISK=` command `
로 변경될 수 있으며 두 번째 형식(괄호 포함)이 선호됩니다.OS_DISK=$(command)