00. 目录
01. 命令概述
英文全称:“remove directory”, rmdir命令作用是删除空的目录。
注意:rmdir命令只能删除空目录。当要删除非空目录时,就要使用带有“-R”选项的rm命令。
rmdir命令的“-p”参数可以递归删除指定的多级目录,但是要求每个目录也必须是空目录。
02. 命令格式
rmdir [选项]… 目录…
03. 常用选项
--ignore-fail-on-non-empty
忽略仅由目录非空产生的所有错误
-p, --parents 删除指定目录及其上级文件夹,例如"rmdir -p a/b/c'"
与"rmdir a/b/c a/b a'" 基本相同
-v, --verbose 输出处理的目录详情
--help 显示此帮助信息并退出
--version 显示版本信息并退出
- 1
- 2
- 3
- 4
- 5
- 6
- 7
04. 参考示例
4.1 删除空目录
[deng@localhost test]$ mkdir test
[deng@localhost test]$ rmdir test
[deng@localhost test]$
- 1
- 2
- 3
4.2 删除指定目录及其上级目录
[deng@localhost test]$ mkdir -p a/b/c
[deng@localhost test]$ tree a
a
└── b
└── c
2 directories, 0 files
[deng@localhost test]$ rmdir -p a/b/c
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4.3 删除多个空目录
[deng@localhost test]$ mkdir a b c d
[deng@localhost test]$ ls
a b c d
[deng@localhost test]$ rmdir a b c d
- 1
- 2
- 3
- 4
4.4 删除非空目录报错
[deng@localhost test]$ mkdir -p a/b/c
[deng@localhost test]$ rmdir a
rmdir: 删除 "a" 失败: 目录非空
[deng@localhost test]$
- 1
- 2
- 3
- 4
4.5 删除过程中显示详细信息
[deng@localhost test]$ mkdir -p a/b/c
[deng@localhost test]$ rmdir -v -p a/b/c
rmdir: 正在删除目录 "a/b/c"
rmdir: 正在删除目录 "a/b"
rmdir: 正在删除目录 "a"
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
- 6
4.6 查看帮助手册
[deng@localhost test]$ mkdir --help
用法:mkdir [选项]... 目录...
Create the DIRECTORY(ies), if they do not already exist.
- 1
- 2
- 3
4.7 查看版本信息
[deng@localhost test]$ mkdir --version
mkdir (GNU coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
许可证:GPLv3+:GNU 通用公共许可证第3 版或更新版本<http://gnu.org/licenses/gpl.html>。
本软件是自由软件:您可以自由修改和重新发布它。
在法律范围内没有其他保证。
由David MacKenzie 编写。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
05. 附录
概述
OpenHarmony的DFX子系统提供了为应用框架以及系统底座核心模块的性能打点能力,每一处打点即是一个Trace,其上附带了记录执行时间、运行时格式化数据、进程或线程信息等。开发者可以使用SmartPerf-Host调试工具对Trace进行解析,在其绘制的泳道图中,对应用运行过程中的性能热点进行分析,得出优化方案。本文旨在介绍OpenHarmony中常用的Trace,解释它们的含义和用途,并阐述如何通过这些Trace来识别潜在的性能问题。同时,我们还将详细介绍Trace的工作原理,帮助读者更好地理解这些Trace及如何实现性能数据的采集和分析。通过本文的阅读,读者将对OpenHarmony中的Trace有一个深入的了解,为应用程序性能优化提供有力支持。
常用Trace及含义
下面将从渲染流程入手,配合常用场景介绍常用Trace。
渲染流程
与其他操作系统相同,OpenHarmony也是由Vsync信号控制每一帧绘制操作的时机。Vsync信号是一个垂直同步信号,它指示显示器在垂直空白期之后开始下一帧的刷新。设备的屏幕以固定的频率发送Vsync信号,以刷新率60Hz举例,则屏幕每隔16.6ms发送一次Vsync信号。在收到Vsync信号后,UI后端引擎开始准备屏幕的下一帧绘制,然后应用程序提交渲染命令,用于描述图形绘制、纹理设置、着色器使用等。一旦应用程序提交了渲染命令,UI后端引擎会将其添加到渲染队列中,并在合适的时机执行这些渲染命令,通常会在后台线程执行,以确保主线程不被长时间阻塞。当这些渲染命令被UI后端引擎执行时,它们会被传递给图形系统Render Service进行处理,图形系统会根据命令进行相应的图形计算和渲染操作,如顶点变换、光照、纹理贴图等。在图形系统完成渲染后,渲染结果将被写入帧缓冲区。帧缓冲区是一个内存区域,存储用于显示器输出的图像数据。一旦帧缓冲区更新完成,UI后端引擎会等待直到下一个Vsync信号到来,这个过程是为了确保渲染结果在显示器垂直消隐之前准备好。当下一个Vsync信号到来时,UI后端引擎将已经准备好的帧缓冲区的内容发送给显示器,显示器根据这些数据刷新自己的像素,至此完成一整个渲染周期。如图1所示。
图1 渲染流程图
从Trace角度来看,一帧的渲染流程如下:
(1)Vsync信号到达;
(2)UI后端引擎进行第一帧绘制;
(3)向Render Service通信,传输绘制命令并请求一帧;
(4)Render Service对多个图层进行合并,计算刷新区域,然后进行渲染和绘制本帧;
(5)完成一帧绘制后交给屏幕。
一帧的渲染流程中的UI后端引擎的常用Trace的含义如图2所示。
图2 UI后端引擎渲染Trace泳道图
序号 | Trace | 参数说明 | 描述 |
---|---|---|---|
1 | OnVsyncEvent now:%" PRIu64 " | 当前时间戳–纳秒级 | 收到Vsync信号,渲染流程开始 |
2 | FlushVsync | 刷新视图同步事件,包括记录帧信息、刷新任务、绘制渲染上下文、处理用户输入 | |
3 | UITaskScheduler::FlushTask | 刷新UI界面,包括布局、渲染和动画等 | |
4 | FlushMessages | 发送消息通知图形侧进行渲染 | |
5 | FlushLayoutTask | 执行布局任务 | |
6 | FlushRenderTask %zu | 当前页面上的需要渲染的节点的数量 | 总渲染任务执行 |
7 | Layout | 节点布局 | |
8 | FrameNode::RenderTask | 单个渲染任务执行 | |
9 | ListLayoutAlgorithm::MeasureListItem:%d | 当前列表项索引 | 计算列表项的布局尺寸 |
评论记录:
回复评论: