1、Linux如何快速删除大量文件?
在 Linux 中对于删除大量小文件或删除大文件,我们一般会通过rm命令直接删除,这时你就很有可能会遇到以下问题:
- rm 删除过程耗时很长,效率低下;
- rm 删除完毕后,文件不存在但是磁盘空间仍未释放;
其实以上问题都和 rm 命令有关,因为 rm 删除内容时,是将目录的每一个条目逐个删除(unlink),而且需要循环重复遍历很多次;虽然 unlink 解除,但是进程仍可以读取已删除的问题件,导致磁盘不释放。
在此我们可以使用rsync
命令来代替 rm。rsync 删除内容时,通过建立好新的空目录替换掉老目录,不需要进行大量的遍历操作,因此效率会高很多。
rsync 提供了一些跟删除相关的参数如下:
快速删除目录
快速删除文件
注意:当SRC和DEST文件性质不一致时将会报错;当SRC和DEST性质都为文件【f】时,意思是清空文件内容而不是删除文件;当SRC和DEST性质都为目录【d】时,意思是删除该目录下的所有文件,使其变为空目录;
2、Vsphere 如何在不重启的情况下识别新添加的iscsi硬盘?
Vsphere虚拟机新添加硬盘进行LVM扩容,此时需要重启刷新文件系统,否则无法识别新添加的硬盘。重启服务器这对于生产环境来说是不允许的,那么有什么方法能够实现在线刷新文件系统呢?
在此有两种方法:
第一种方法
如果新添加的硬盘为“Direct-Access”类型,因此我们需要执行命令,将Id+1后将是新磁盘的Id号:
echo 'scsi add-single-device 2 0 1 0' > /proc/scsi/scsi
其中:
- HOST,主机适配器标识,第一个适配器为0,在此新增加硬盘的适配器为2;
- Channel,主机适配器上的SCSI通道,第一个通道为00,新增加磁盘的SCSI通道仍为00;
- ID,设备的SCSI标识 ,即硬盘标识从00开始,新增加磁盘的标识为01;
第二种方法:
# 刷新SCSI,需要根据hosts数量确认刷新次数。
# 如果系统有3个scsi host,则需要刷新3次
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
以上两种方式都可以实现在不重启服务器的情况下识别到新添加的硬盘,请根据实际情况进行选择。
3、Linux中rm命令如何做到防误删?
Linux系统中冒号:
在bash中是一个内建命令,而不单纯是一个分隔符,它的主要作用是空命令、参数扩展、重定向、注释等。我们可以使用其参数扩展特性实现rm的防误删功能。
4、不同Linux服务器之间如何实现快速挂载?
不同Linux服务器之间的共享,我们一般通过NFS来实现。但是有一次同事在进行迁移ELK时,使用了sshfs命令快速基于ssh协议快速实现了数据的共享。
SSHFS(Secure SHell FileSystem)是一个客户端,可以让我们通过 SSH 文件传输协议(SFTP)挂载远程的文件系统并且在本地机器上和远程的目录和文件进行交互。
具体使用如下:
正如你所看到的,通过sshfs命令我们快速实现了挂载,相对于NFS非常方便。
5.Linux中如何将用户快速添加到附属组?
对于 Linux 操作系统,我们一般使用 usermod 命令来调整用户分组,但是在使用过程中是有痛点的。
通过以上命令,我们可以看到以下痛点:
- 每次 usermod 附加组调整,会覆盖原来的分组
- usermod 调整多个分组时,必须将所有分组一并添加,否则会覆盖原来分组
那么是否有命令可以让我们在不必提前知道原来的分组信息的情况下而直接更新分组呢?gpasswd 就可以解决我们的痛点问题,它是Linux下工作组文件/etc/group和/etc/gshadow管理工具,用于将一个用户添加到组或者从组中删除。