00. 目录
01. 命令概述
删除 (unlink) 文件。
rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。
02. 命令格式
rm [选项]… 文件…
03. 常用选项
删除 (unlink) 文件。
-f, --force 强制删除。忽略不存在的文件,不提示确认
-i 在删除前需要确认
-I 在删除超过三个文件或者递归删除前要求确认。此选项比-i 提
示内容更少,但同样可以阻止大多数错误发生
--interactive[=WHEN] 根据指定的WHEN 进行确认提示:never,once (-I),
或者always (-i)。如果此参数不加WHEN 则总是提示
--one-file-system 递归删除一个层级时,跳过所有不符合命令行参
数的文件系统上的文件
--no-preserve-roo 不特殊对待"/"
--preserve-root 不允许删除"/"(默认)
-d, --dir 删除空目录
-r, -R, --recursive 递归删除目录及其内容
-v, --verbose 详细显示进行的步骤
--help 显示此帮助信息并退出
--version 显示版本信息并退出
默认时,rm 不会删除目录。使用--recursive(-r 或-R)选项可删除每个给定
的目录,以及其下所有的内容。
要删除第一个字符为"-"的文件 (例如"-foo"),请使用以下方法之一:
rm -- -foo
rm ./-foo
请注意,如果使用rm 来删除文件,通常仍可以将该文件恢复原状。如果想保证
该文件的内容无法还原,请考虑使用shred。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
04. 参考示例
4.1 删除文件,不加任何选项(centos7.5)
[deng@localhost test]$ ls
c d dir dir1 passwd systemd
[deng@localhost test]$ rm c
[deng@localhost test]$ ls
d dir dir1 passwd systemd
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
- 6
4.2 同时删除多个文件 每个文件以空格分隔
[deng@localhost test]$ rm d passwd
[deng@localhost test]$ ls
dir dir1 systemd
[deng@localhost test]$
- 1
- 2
- 3
- 4
4.3 强制删除。忽略不存在的文件,不提示确认
使用 -f
选项会强制进行删除操作。如果目标文件不能打开,可以用 -f
尝试。
[deng@localhost test]$ ls
a dir dir1 systemd
[deng@localhost test]$ rm -f a
[deng@localhost test]$ rm -f a
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
4.4 详细显示进行的步骤
[deng@localhost test]$ ls
a b c d dir dir1 systemd
[deng@localhost test]$ rm -v a b c d
已删除"a"
已删除"b"
已删除"c"
已删除"d"
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4.5 在删除前需要确认
使用 -i
选项,启用交互模式,会询问是否继续删除。如果确认删除,输入 y(yes);如果不想删除,输入 n(no)。
[deng@localhost test]$ ls
a b c d dir dir1 systemd
[deng@localhost test]$ rm -i a
rm:是否删除普通空文件 "a"?y
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
4.6 递归删除目录及其内容
要删除一个目录以及目录下所有的文件,需要添加 -r 或者 -R 选项来递归实现。
[deng@localhost test]$ mkdir -p a1/b/c/d
[deng@localhost test]$ rm a1
rm: 无法删除"a1": 是一个目录
[deng@localhost test]$ rm -r a1
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
4.7 删除链接文件
对于删除链接文件,只是删除链接文件,而不会删除链接文件所指向的文件。
[deng@localhost test]$ ls -l a_link
lrwxrwxrwx 1 deng deng 1 7月 13 23:31 a_link -> b
[deng@localhost test]$ rm a_link
[deng@localhost test]$ ls
b c d dir dir1 systemd
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
- 6
4.8 删除以“-”开头的文件
[deng@localhost test]$ touch -- -file
[deng@localhost test]$ ls
b c d dir dir1 -file systemd
[deng@localhost test]$ rm -- -file
[deng@localhost test]$ ls
b c d dir dir1 systemd
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
或者
[deng@localhost test]$ touch ./-file
[deng@localhost test]$ ls
b c d dir dir1 -file systemd
[deng@localhost test]$ rm -file
rm:无效选项 -- l
Try 'rm ./-file' to remove the file "-file".
Try 'rm --help' for more information.
[deng@localhost test]$ rm ./-file
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
因为一般“-”后面接的是选项。因此,单纯地使用 rm -file
,系统的命令就会误判。所以,只能用避过首字符“-”的方式(加上本目录 ./)。
4.9 自定义回收站功能
myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
- 1
上面的操作过程模拟了回收站的效果,即删除文件的时候只是把文件放到一个临时目录中,这样在需要的时候还可以恢复过来。
05. 附录
移植概述
本文面向希望将OpenHarmony移植到三方芯片平台硬件的开发者,介绍一种借助三方芯片平台自带Linux内核的现有能力,快速移植OpenHarmony到三方芯片平台的方法。
移植到三方芯片平台的整体思路
内核态层和用户态层
为了更好的解释整个内核移植,首先需要介绍一些概念:
我们可以把OpenHarmony简单的分为
OpenHarmony = OpenHarmony内核态层 + OpenHarmony用户态层
其中OpenHarmony内核层就是上图的紫色部分,可以看到,它主要由内核本身(如Linux Kernel,LiteOS),和一些运行在内核态的一些特性组成,比如HDF等。
而OpenHarmony用户态层,在上图,就是紫色之外的部分。可以看到,由下往上看,它主要由系统服务层,框架层,应用层组成。在这儿我们将这三层整体称为“OpenHarmony用户态层”。
为什么这么区分呢?因为我们这篇文章主要是要讨论如何快速的把OpenHarmony移植到三方芯片平台上。而OpenHarmony的用户态层,整体来说和三方芯片平台的耦合度不高,移植较为方便。而内核态层中的内核本身以及HDF驱动框架等,和三方芯片平台的耦合度较高,是移植的重难点。我们先做这个区分,就是为了先把聚光灯打到我们最需要关注的OpenHarmony内核态层上,开始分析和解题。另外说明,本文只包含Linux内核的快速移植,不包含LiteOS的移植。
获得内核态层的两种方法
为了表述方便,我们在下文部分地方用“OH”代替“OpenHarmony”。
将OH内核态层继续分解
OH内核态层 = OH Linux内核 + OH内核态特性(可选特性或者必选特性,如必选特性HDF,今后的可选特性HMDFS等)
而OH Linux内核 = 标准LTS Linux 内核 + 三方SoC芯片平台代码 + OH内核态基础代码(支撑OH用户态层运行的最基础代码)
因此OH内核态层 = 标准LTS Linux 内核 + 三方SoC芯片平台代码 + OH内核态基础代码 + OH内核态特性(如HDF)
而将前两项组合,标准LTS Linux 内核 + 三方SoC芯片平台代码,其实就是一个三方Linux内核的基础组成。从上面的推导可以看出,OpenHarmony 内核态层其实能够由两种方法得到:
方法一:OH 内核态层 = 三方Linux内核 + OH内核态基础代码 + OH内核态特性(如HDF,今后的HMDFS等)
也就是直接借助三方Linux内核,再加上基础OH内核态基础代码、以及HDF等OH内核态特性。
方法二:OH 内核态层 = OH Linux内核 + OH内核态特性(如HDF,今后的HMDFS等)
也就是直接采用OHLinux内核,然后再加入OH的其他内核态特性。
当前方法二中OHLinux内核支持的三方芯片平台还不够丰富。为了能够响应三方开发者快速移植OpenHarmony的要求,下文会着重介绍方法一,即借助三方已有的Linux内核,来快速移植OpenHarmony。
借助已有Linux内核来移植OpenHarmony的流程
整个移植流程可以分为三步:
- 准备整体构建环境,包括将三方芯片平台的现有内核代码拷贝到OpenHarmony的整体编译环境下。
- OpenHarmony内核态基础代码的移植。
- OpenHarmony内核态必选特性(如HDF等)的移植。
详细步骤在接下来的章节中介绍。
移植到三方芯片平台的步骤
下面以树莓派3b (BCM2837) 为例,演示将OpenHarmony移植到树莓派的过程。
准备整体构建环境
- 将三方内核纳入OpenHarmony编译环境。 完整编译过一遍标准Hi3516DV300的内核之后,clone树莓派内核源码并复制到manifest输出目录下:
export PROJ_ROOT=[OpenHarmony manifest]
git clone https://gitee.com/xfan1024/oh-rpi3b-kernel.git
cp -r oh-rpi3b-kernel $PROJ_ROOT/out/KERNEL_OBJ/kernel/src_tmp/linux-rpi3b
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: