我的目标是从 lsblk 获取大于 100G 的磁盘。
我有它的工作,但它很尴尬。我很确定它可以缩短。要么使用与 lsblk 完全不同的东西,要么我可以直接用 awk 过滤人类可读的数字。
这是我整理的:
lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'
Run Code Online (Sandbox Code Playgroud)
它只输出大于 100G 的磁盘的 sdx 和 nvmexxx 部分。正是我需要的。
我对此很满意,但渴望向您学习更多
在运行该dd命令之前,该命令lsblk返回以下输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931.5G 0 disk
Run Code Online (Sandbox Code Playgroud)
dd if=/dev/urandom of=/dev/sda conv=fsync status=progress运行命令。然而,设备断电并关闭。恢复供电后,该命令lsblk将返回以下输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931.5G 0 disk
sda2 8:2 0 487.5G 0 disk
Run Code Online (Sandbox Code Playgroud) 有没有办法知道您实际从哪个分区启动?
\nfdisk -l显示了我的 NVME 上绝对没有的“启动”列。这只是遗留信息吗?
Device Boot Start End Sectors Size Id Type\n/dev/sda1 * 2048 1126399 1124352 549M b W95 FAT32\n/dev/sda2 1126400 975688107 974561708 464.7G 7 HPFS/NTFS/exFAT\n/dev/sda3 975689728 976769023 1079296 527M 27 Hidden NTFS WinRE\n\n...\n\nDevice Start End Sectors Size Type\n/dev/nvme0n1p1 616448 2458216447 2457600000 1.1T Linux filesystem\n/dev/nvme0n1p2 2458216448 3907024031 1448807584 690.8G Linux filesystem\n/dev/nvme0n1p3 2048 616447 614400 300M EFI System\n\nPartition table entries are not in disk order.\nRun Code Online (Sandbox Code Playgroud)\n考虑lsblk到 /boot/efi 已安装,我 90% 确定它正在使用我的 nvme 驱动器,我只是想确认这是真的,即使没有任何boot指示 …
我想捕获所有没有文件系统的磁盘(所有mkfs不在其上运行的磁盘)
我尝试了以下操作,但仍然提供操作系统( sda )。
使用lsblk或其他命令捕获所有没有文件系统的磁盘的最佳方法是什么?
lsblk -f | egrep -v "xfs|ext3|ext4"
NAME FSTYPE LABEL UUID
MOUNTPOINT
fd0
sda
??sda2 LVM2_member v0593a-KiKU-9emb-STbx-ByMz-S95k-jChr0m
??vg00-lv_swap swap 1beb675f-0b4c-4225-8455-e876cafc5756
[SWAP]
sdg
sdh
sdi
sdj
sdk
sr0
Run Code Online (Sandbox Code Playgroud) 我一直在四处寻找,但找不到明确的答案,或者当我的系统向我显示其他情况时,我发现答案是“否”。
\n我正在运行 Arch Linux,在将新 HDD 连接到 ZFS 池时,我注意到我的主 SSD 系统驱动器有一个LABEL属性/属性(不确定术语是什么)。
注意:我说的是驱动器,而不是该驱动器内的分区。
\n我真的很想让我的其他磁盘有一个LABEL这样的功能,但不知道如何完成。
有人知道如何实现这一目标吗?
\n下面是一个清理后的输出,lsblk以说明我正在寻找的内容。\n在我的系统中,<#LABEL1#>设置如输出中所示,我想设置/更改<#WANTTHIS#>。
NAME SIZE TYPE LABEL PTTYPE PTUUID MODEL SUBSYSTEMS\nloop0 ###.#M loop block\nloop1 ###.#M loop block\nloop2 ###.#M loop block\nloop3 ###.#M loop block\nsda ###.#G disk <#LABEL1#> gpt aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa SomeModelString1 block:scsi:pci\n\xe2\x94\x9c\xe2\x94\x80sda1 ###.#M part <#LABEL1#> gpt aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa block:scsi:pci\n\xe2\x94\x9c\xe2\x94\x80sda2 ###.#M part <#LABEL1#> gpt aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa block:scsi:pci\n\xe2\x94\x9c\xe2\x94\x80sda3 ###.#M part <#LABEL1#> gpt aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa block:scsi:pci\n\xe2\x94\x9c\xe2\x94\x80sda4 ###.#G part …Run Code Online (Sandbox Code Playgroud) 如果我放入一个 USB 驱动器,它会自动挂载。我可以看到它lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 1 7,5G 0 disk
??sdb1 8:17 1 7,5G 0 part /media/user/usb-drive
Run Code Online (Sandbox Code Playgroud)
如果我用 umount 卸载它
umount /media/user/sdb1
Run Code Online (Sandbox Code Playgroud)
它仍然可以使用lsblk,但不再安装:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 1 7,5G 0 disk
??sdb1 8:17 1 7,5G 0 part
Run Code Online (Sandbox Code Playgroud)
但是如果我通过单击 Thunar(xfce 文件管理器)中的弹出图标来弹出它,它将从lsblk. 为什么呢?
我有一个 Inteno dg200 路由器,运行一些 Iopsys linux 版本(我相信内核 3.14 左右)
我在使用 USB 端口和外部硬盘运行文件共享时遇到了一些问题。系统支持。但无论我放入什么,它都不会自动挂载。因此,今天我决定以 root 身份 ssh 进入系统,而不是使用基于 Web 的控制面板。
令我惊讶的是,该系统不支持在已连接的未安装驱动器上查找信息的常用方法。请允许我详细说明一下:
# fdisk -l
-ash: fdisk: not found
Run Code Online (Sandbox Code Playgroud)
很好,那么让我们尝试其他方法:
# lsblk
-ash: lsblk: not found
Run Code Online (Sandbox Code Playgroud)
于是我开始遇到麻烦。根据我在网上了解到的情况,当人们遇到这个问题时,通常是因为fdisk位于/sbin中,而这不在他们的路径中,因为他们不是 root。好吧,我是这里的 root,但为了确定我检查了/sbin和/usr/sbin,但无济于事。两个目录都不包含任何名为fdisk或 的内容lsblk,该find命令也找不到任何名为 的内容fdisk。
有没有其他方法可以从 CLI 找出到底要安装什么,或者我可以安装fdisk在路由器上吗?
我有一个脚本,我想在其中使用命令列出 USB 设备lsblk。
命令:
$ lsblk -o NAME,TRAN,VENDOR,MODEL | grep usb
Run Code Online (Sandbox Code Playgroud)
这导致
sdb usb Kingston DataTraveler 2.0
sdc usb Kingston DT 101 G2
Run Code Online (Sandbox Code Playgroud)
我想将结果保存在一个变量中以便以后工作,所以我写
$ usbs=$(lsblk -o NAME,TRAN,VENDOR,MODEL | grep usb)
Run Code Online (Sandbox Code Playgroud)
我期待的是变量usbs将结果存储在两整行中,如上所示。但如果我跑:
for i in ${usbs[@]}; do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
我把结果分成几个词:
sdb
usb
Kingston
DataTraveler
2.0
sdc
usb
Kingston
DT
101
G2
Run Code Online (Sandbox Code Playgroud)
问题:
有没有办法,使用grep命令,我可以将命令的结果存储为两整行?
我更愿意知道是否有一个简单的解决方案,而不是将结果转储到文件中然后读取它。
在 Linux 上,该命令lsblk -o partlabel将显示partlabel块设备。
我曾经gdisk改变过一个partlabel.
更改后,lsblk仍报告 的旧值partlabel。
(旁白:路径/dev/disk/by-partlabel/*也仍在使用旧partlabel值。)
有没有办法刷新缓存以便lsblk报告 的新值partlabel?
我不确定缓存到底在哪里。它可能是 udev、sysfs 或其他地方。
相比之下,blkid正确报告新的partlabel. 但是,我希望我可以避免切换到blkid(出于各种原因)。
(旁白:重新启动可能会更新这些partlabel值。但如果可能的话,我宁愿避免重新启动。)
我可以使用以下命令捕获 Linux 机器的磁盘设备:
\nlsblk -lnb | numfmt --to=iec --field=4 | grep disk | awk '{print $1}'\nsda\nsdb\nsdc\nsdd\nRun Code Online (Sandbox Code Playgroud)\n在我的 bash 脚本中,我使用下面的行来测试脚本的参数是否与我的计算机上的磁盘之一匹配:
\nif [[ ` lsblk -lnb | numfmt --to=iec --field=4 | grep disk | awk '{print $1}' | grep -c $arg ` != 0 ]] \nthen\necho \xe2\x80\x9cargument is a disk\xe2\x80\x9d\n.\n.\n.\n\nfi\nRun Code Online (Sandbox Code Playgroud)\n我运行脚本为
\nbash /tmp/verify_disks <some arg>\nRun Code Online (Sandbox Code Playgroud)\n但如果 case$arg被误认为arg=\xe2\x80\x9d\xe2\x80\x94help\xe2\x80\x9d,或者 case$arg为 null,我会得到以下异常:
Usage: grep [OPTION]... PATTERN [FILE]...\nTry 'grep --help' for more information.\n …Run Code Online (Sandbox Code Playgroud)