本文命令环境搭建
deb系 | rpm系 | |
---|---|---|
exfat-fuse(提供linux对exfat文件系统格式的支持) | apt install exfat-fuse | yum install exfat-fuse |
ntfs-3g | apt install ntfs-3g | yum install ntfs-3g |
gnome-disks工具 | apt install gnome-disk-utility | yum install gnome-disk-utility |
1、如何理解本文要表达的意思?
windows的文件管理器对卷设备(例如:插入的u盘)提供了重命名
的功能
linux下文件管理器也可以对设备名进行显示,如8.1GB 卷
2、linux系统用户层如何获取到卷设备名?
1) 简短一句:linux底层有内核,udev
等来管理设备
2)c语言用户层:glib2/gio库
提供了获取device名的API,如:
- char* g_volume_get_name(GVolume*)
- char* g_mount_get_name(GMount*)
- char* g_drive_get_name(GDrive*)
- 关于上述API的详细用法,可参考:glib/gio查看系统卷设备信息
3)shell用户层:lsblk命令
/run/media/nk/跨平台
是64G U盘的挂载点
跨平台
是该U盘在win10下格式化为ntfs格式
后并重命名后的中文名
[nk@localhost ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 50G 0 part /
├─sda3 8:3 0 7.9G 0 part [SWAP]
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 50.4G 0 part /home
sdb 8:16 1 57.7G 0 disk
└─sdb1 8:17 1 57.7G 0 part /run/media/nk/跨平台
linux系统能够支持并识别ntfs、exfat、fat32
等Windows下支持的文件系统格式,并且上述的API能够很好的支持utf-8编码
3、linux用户层如何设置卷设备名?
1)使用gnome-disks
工具
2)使用shell命令设置
- 先选择以下一种方式确定要更改的卷设备的
filesystem type(文件系统格式)
1)sudo fdisk -l
2)df -T
3)gnome-disks工具 - 使用具体命令设置卷标(即要显示的设备名)
注:使用前需要使用umount命令
先取消挂载
有些读者可以发现,使用上述命令时不加第三个参数也可以查看卷设备名sudo ntfslabel /dev/sdb1 "你好啊" #使用ntfslabel命令设置ntfs格式设备的名字 sudo exfatlabel /dev/sdb "哈哈哈" #使用exfatlabel命令设置exfat格式设备的名字 sudo fatlabel /dev/sdb "可以的" #使用fatlabel命令设置fat32格式设备的名字
4、关于文件系统格式编码
- windows上格式为fat32格式的U盘,重命名后拿到linux,可以发现:
1)如果是纯中文名,卷设备名在文件管理器中会显示为XXXGB 卷
2)如果是中文+数字+字符的组合,在文件管理器中则会正确显示。 - windows中文系统默认的编码是
GBK编码
,linux对该类型的字符串可能没用较好的支持 - 当插入fat32格式的中文名U盘后,使用
ls -l /dev/disk/by-label
可以看到乱码文字,这个字符串就是gbk格式的U盘名
2)读者可以发现,windwos上重命名后的中文名U盘大部分可以在linux上正确显示。同理,可以验证发现使用ntfslabel exfatlabel
等命令设置完对应格式的中文U盘名后,拿到windows上也可以正确显示