一. 引言

在 Ubuntu 等 Linux 系统中,使用命令行工具进行文件管理是一项基本且重要的技能。相比图形界面,命令行提供了更高的灵活性和自动化能力,尤其在处理大量文件或需要进行批处理操作时尤为显著。本文将以将文件转移到 U 盘为例,详细讲解相关命令的使用及其背后的原理,帮助读者建立扎实的命令行操作基础。


二. 步骤详解

2.1 插入 U 盘并查看挂载点

在将文件转移到 U 盘之前,首先需要确认 U 盘是否已正确识别并挂载。以下步骤将指导你如何使用 lsblkdf 命令来确认 U 盘的挂载状态。

使用 lsblk 查看块设备

lsblk(List Block Devices)命令用于列出系统中所有的块设备(如硬盘、U 盘、光驱等),包括它们的分区和挂载点。执行以下命令:

1
lsblk

示例输出:

1
2
3
4
5
6
7
8
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   500G  0 disk
├─sda1   8:1    0   100M  0 part /boot/efi
├─sda2   8:2    0    50G  0 part /
└─sda3   8:3    0  450G  0 part /home
sdb      8:16   1   16G   0 disk
└─sdb1   8:17   1   16G   0 part /media/username/USB
sr0     11:0    1  1024M  0 rom

在上述输出中:

  • sda 是主硬盘,包含三个分区 sda1sda2sda3
  • sdb 通常表示插入的 U 盘,sdb1 是其分区,挂载在 /media/username/USB
  • sr0 表示只读存储设备,如光驱。

使用 df -h 查看挂载点

df(Disk Free)命令显示文件系统的磁盘空间使用情况。使用 -h 选项以人类可读的格式显示。

1
df -h

示例输出:

1
2
3
4
5
Filesystem                      Size  Used Avail Use% Mounted on
/dev/sda2                       50G   20G   28G  42% /
/dev/sda1                      100M   15M   85M  15% /boot/efi
/dev/sda3                      450G  200G  225G  45% /home
/dev/sdb1                       16G   5G   11G  32% /media/username/USB

通过 df -h,可以清晰地看到 U 盘的挂载路径 /media/username/USB 及其使用情况。

2.2 转移文件到 U 盘

确认 U 盘已挂载后,即可使用 cp 命令将文件或目录复制到 U 盘。

复制单个文件

假设 U 盘挂载在 /media/username/usb-drive,要复制 myfile.txt

1
cp /path/to/myfile.txt /media/username/usb-drive/

复制整个文件夹

使用 -r 选项递归复制目录及其内容:

1
cp -r /path/to/folder /media/username/usb-drive/

注意事项:

  • 确保你有足够的权限访问源文件和目标目录。

  • 可以使用 -v(verbose)选项查看复制过程:

    1
    
    cp -rv /path/to/folder /media/username/usb-drive/
    

使用 rsync 进行高效复制

对于大规模文件传输或需要保持源和目标同步的情况,rsync 是一个更为高效的选择。

1
rsync -avh --progress /path/to/source /media/username/usb-drive/
  • -a:归档模式,保持文件属性。
  • -v:详细输出。
  • -h:人类可读的输出。
  • --progress:显示传输进度。

2.3 安全卸载 U 盘

完成文件传输后,务必安全卸载 U 盘以防数据损坏或丢失。

1
sudo umount /media/username/usb-drive

提示:

  • 确保没有任何程序正在使用 U 盘中的文件。

  • 使用 lsblkdf -h 确认设备不再被挂载。

  • 有时可能需要使用 sync 命令确保所有缓存的数据写入磁盘:

    1
    2
    
    sync
    sudo umount /media/username/usb-drive
    

三. lsblk 命令深入解析

lsblk 是 Linux 系统中强大的块设备查看工具,广泛用于系统管理和故障排除。本文将详细解析 lsblk 的输出及其常用选项,帮助你全面掌握该命令的使用。

3.1 lsblk 输出字段详解

以下是 lsblk 命令的典型输出及其字段解释:

1
2
3
4
5
6
7
8
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   500G  0 disk
├─sda1   8:1    0   100M  0 part /boot/efi
├─sda2   8:2    0    50G  0 part /
└─sda3   8:3    0  450G  0 part /home
sdb      8:16   1   16G   0 disk
└─sdb1   8:17   1   16G   0 part /media/username/USB
sr0     11:0    1  1024M  0 rom

字段解释

  1. NAME:

    • 设备的名称,如 sdasdb 表示不同的磁盘设备。
    • 分区以数字后缀表示,如 sda1sda2
  2. MAJ:MIN:

    • 设备的主次设备号,用于系统内部识别设备。
    • 主设备号(MAJ)标识设备类型,次设备号(MIN)标识具体设备。
  3. RM:

    • 是否为可移除设备(Removable)。
    • 1 表示可移除(如 U 盘),0 表示不可移除(如内置硬盘)。
  4. SIZE:

    • 设备或分区的大小,如 500G 表示 500 GB。
  5. RO:

    • 只读状态(Read-Only)。
    • 1 表示只读,0 表示可读写。
  6. TYPE:

    • 设备类型:
      • disk:整个磁盘设备。
      • part:磁盘分区。
      • rom:只读存储设备,如光驱。
  7. MOUNTPOINT:

    • 设备的挂载点,即设备在文件系统中的位置。
    • 如果设备未挂载,则为空。

层级结构

lsblk 使用树状结构展示设备与其分区的关系。例如,sda 是主磁盘,sda1sda2sda3 是其分区,缩进和连接线表示从属关系。

3.2 lsblk 常用选项及示例

lsblk 提供了多种选项,允许用户自定义输出信息。以下是一些常用选项及其示例:

  1. 显示文件系统类型及 UUID
1
lsblk -f

示例输出:

1
2
3
4
5
6
7
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda1 vfat         ABCD-1234                            /boot/efi
├─sda2 ext4         5678-efgh                            /
└─sda3 ext4         90ab-cdef                            /home
sdb
└─sdb1 ntfs         WXYZ-5678                            /media/username/USB
  1. 自定义显示列
1
lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT

示例输出:

1
2
3
4
5
6
7
8
NAME   FSTYPE SIZE MOUNTPOINT
sda          500G 
├─sda1 vfat 100M /boot/efi
├─sda2 ext4  50G  /
└─sda3 ext4  450G /home
sdb
└─sdb1 ntfs 16G  /media/username/USB
sr0
  1. 显示所有块设备,包括未使用的设备
1
lsblk -a
  1. 列出设备的路径
1
lsblk -p

示例输出:

1
2
3
4
5
6
7
/dev/sda
├─/dev/sda1
├─/dev/sda2
└─/dev/sda3
/dev/sdb
└─/dev/sdb1
/dev/sr0
  1. 显示设备的详细信息
1
lsblk -d -o NAME,MODEL,SIZE,ROTA
  • -d:仅显示磁盘,不显示分区。
  • MODEL:设备型号。
  • ROTA:是否为旋转设备(1 表示机械硬盘,0 表示 SSD 或其他非旋转存储)。

示例输出:

1
2
3
4
NAME   MODEL            SIZE ROTA
sda    Samsung SSD 860 500G    0
sdb    USB Flash Drive  16G    1
sr0    CD/DVD Drive    1024M    0

四. 高级技巧

掌握基本命令后,我们可以进一步提升效率和安全性。以下是一些高级技巧和最佳实践,帮助你在使用命令行管理文件和设备时更加得心应手。

4.1 自动挂载与 Fstab 配置

在某些情况下,你可能希望系统在启动时自动挂载特定的设备。可以通过编辑 /etc/fstab 文件实现。

步骤:

  1. 获取设备的 UUID
1
blkid /dev/sdb1

示例输出:

1
/dev/sdb1: UUID="WXYZ-5678" TYPE="ntfs" PARTUUID="0001a2b3-01"
  1. 编辑 /etc/fstab

使用文本编辑器(如 nano)打开 /etc/fstab

1
sudo nano /etc/fstab
  1. 添加挂载条目

在文件末尾添加以下内容:

1
UUID=WXYZ-5678  /mnt/usb-drive  ntfs  defaults  0  0
  • /mnt/usb-drive 是挂载点,需提前创建:

    1
    
    sudo mkdir -p /mnt/usb-drive
    
  1. 测试挂载
1
sudo mount -a

注意事项:

  • 确保挂载点目录存在。
  • 根据文件系统类型(如 ntfsvfatext4)调整挂载选项。

4.2 权限管理与数据安全

在复制文件到 U 盘时,权限和数据安全至关重要。以下是一些建议:

  1. 检查目标目录权限

确保当前用户对 U 盘的挂载点有写入权限。可以使用 ls -ld 查看权限:

1
ls -ld /media/username/usb-drive
  1. 更改挂载点权限

如果需要,可以更改挂载点的所有权或权限:

1
2
sudo chown username:username /media/username/usb-drive
sudo chmod 755 /media/username/usb-drive
  1. 加密敏感数据

对于敏感数据,可以使用加密工具(如 gpg)进行加密后再复制到 U 盘:

1
2
gpg -c /path/to/sensitivefile.txt
cp /path/to/sensitivefile.txt.gpg /media/username/usb-drive/
  1. 使用 umask 设置默认权限

在挂载 U 盘时,可以通过 umask 选项设置默认文件权限:

1
2
sudo umount /media/username/usb-drive
sudo mount -o umask=022 /dev/sdb1 /media/username/usb-drive

4.3 使用 rsync 进行高效文件同步

rsync 是一个功能强大的文件同步工具,适用于备份和镜像。相比 cprsync 提供了更多的选项和更高的效率。

基本用法:

1
rsync -avh --progress /path/to/source/ /media/username/usb-drive/

高级选项:

  • 仅复制变化的文件

    1
    
    rsync -avh --progress --update /path/to/source/ /media/username/usb-drive/
    
  • 删除目标中源不存在的文件

    1
    
    rsync -avh --progress --delete /path/to/source/ /media/username/usb-drive/
    
  • 压缩传输数据

    1
    
    rsync -avhz --progress /path/to/source/ /media/username/usb-drive/
    

示例:

/home/username/projects/ 同步到 U 盘:

1
rsync -avh --progress /home/username/projects/ /media/username/usb-drive/projects/