00. 目录
01. 命令概述
zip 命令是一个应用广泛的跨平台的压缩工具,压缩文件的后缀为 .zip文件
zip程序将一个或多个压缩文件与有关文件的信息(名称、路径、日期、上次修改的时间、保护和检查信息以验证文件完整性)一起放入一个压缩存档中。可以使用一个命令将整个目录结构打包到zip存档中。
对于文本文件来说,压缩比为2:1和3:1是常见的。zip只有一种压缩方法(通缩),并且可以在不压缩的情况下存储文件。(如果添加了bzip 2支持,zip也可以使用bzip 2压缩,但这些条目需要一个合理的现代解压缩来解压缩。当选择bzip 2压缩时,它将通货紧缩替换为默认方法。)zip会自动为每个要压缩的文件选择更好的两个文件(通缩或存储,如果选择bzip2,则选择bzip2或Store)。
02. 命令格式
zip [参数] [文件]
- 1
03. 常用选项
-A:调整可执行的自动解压缩文件;
-b<工作目录>:指定暂时存放文件的目录;
-c:替每个被压缩的文件加上注释;
-d:从压缩文件内删除指定的文件;
-D:压缩文件内不建立目录名称;
-f:此参数的效果和指定“-u”参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中;
-F:尝试修复已损坏的压缩文件;
-g:将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件;
-h:在线帮助;
-i<范本样式>:只压缩符合条件的文件;
-j:只保存文件名称及其内容,而不存放任何目录名称;
-J:删除压缩文件前面不必要的数据;
-k:使用MS-DOS兼容格式的文件名称;
-l:压缩文件时,把LF字符置换成LF+CR字符;
-ll:压缩文件时,把LF+cp字符置换成LF字符;
-L:显示版权信息;
-m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中;
-n<字尾字符串>:不压缩具有特定字尾字符串的文件;
-o:以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同;
-q:不显示指令执行过程;
-r:递归处理,将指定目录下的所有文件和子目录一并处理;
-S:包含系统和隐藏文件;
-t<日期时间>:把压缩文件的日期设成指定的日期;
-T:检查备份文件内的每个文件是否正确无误;
-u:更换较新的文件到压缩文件内;
-v:显示指令执行过程或显示版本信息;
-V:保存VMS操作系统的文件属性;
-w:在文件名称里假如版本编号,本参数仅在VMS操作系统下有效;
-x<范本样式>:压缩时排除符合条件的文件;
-X:不保存额外的文件属性;
-y:直接保存符号连接,而非该链接所指向的文件,本参数仅在UNIX之类的系统下有效;
-z:替压缩文件加上注释;
-$:保存第一个被压缩文件所在磁盘的卷册名称;
-<压缩效率>:压缩效率是一个介于1~9的数值。
- 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
- 28
- 29
- 30
- 31
- 32
- 33
- 34
04. 参考示例
4.1 压缩文件
[deng@localhost test]$ zip passwd.zip passwd
adding: passwd (deflated 61%)
[deng@localhost test]$ ls
etc passwd passwd.zip test
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
4.2 指定压缩率为8
[deng@localhost test]$ zip passwd1.zip -8 passwd
adding: passwd (deflated 61%)
[deng@localhost test]$
- 1
- 2
- 3
4.3 压缩目录
选项 -r 表示递归压缩子目录下所有文件,将目录 test压缩为 test.zip
[deng@localhost test]$ zip -r test.zip test
adding: test/ (stored 0%)
adding: test/a (stored 0%)
adding: test/b (stored 0%)
adding: test/c (stored 0%)
adding: test/d (stored 0%)
adding: test/e (stored 0%)
[deng@localhost test]$ ls
etc passwd passwd1.zip passwd.zip test test.zip
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
4.4 压缩目录和文件
将目录test和文件paswd 压缩成为 test1.zip
[deng@localhost test]$ zip -r test1.zip test passwd
adding: test/ (stored 0%)
adding: test/a (stored 0%)
adding: test/b (stored 0%)
adding: test/c (stored 0%)
adding: test/d (stored 0%)
adding: test/e (stored 0%)
adding: passwd (deflated 61%)
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
4.5 从压缩文件内删除指定文件
[deng@localhost test]$ zip -d test1.zip passwd
deleting: passwd
[deng@localhost test]$
- 1
- 2
- 3
4.6 向压缩文件中添加指定文件
[deng@localhost test]$ zip -m test1.zip passwd
adding: passwd (deflated 61%)
[deng@localhost test]$
- 1
- 2
- 3
4.7 压缩文件时排除某个文件
[deng@localhost test]$ zip -r test2.zip test -x test/a
adding: test/ (stored 0%)
adding: test/b (stored 0%)
adding: test/c (stored 0%)
adding: test/d (stored 0%)
adding: test/e (stored 0%)
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4.8 压缩多个文件
[deng@localhost test]$ zip -v t.zip a b c d e
adding: a (in=0) (out=0) (stored 0%)
adding: b (in=0) (out=0) (stored 0%)
adding: c (in=0) (out=0) (stored 0%)
adding: d (in=0) (out=0) (stored 0%)
adding: e (in=0) (out=0) (stored 0%)
total bytes=0, compressed=0 -> 0% savings
[deng@localhost test]$ ls
a b c d e t.zip
[deng@localhost test]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
4.9 不显示指令执行过程
[deng@localhost test]$ zip -q a.zip a
[deng@localhost test]$ zip b.zip a
adding: a (stored 0%)
[deng@localhost test]$
- 1
- 2
- 3
- 4
05. 附录
基本概念
从系统角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源,各任务的运行相互独立。
OpenHarmony LiteOS-M的任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。任务模块具有如下特性:
-
支持多任务。
-
一个任务表示一个线程。
-
抢占式调度机制,高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度。
-
相同优先级任务支持时间片轮转调度方式。
-
共有32个优先级[0-31],最高优先级为0,最低优先级为31。
任务相关概念
任务状态
任务有多种运行状态。系统初始化完成后,创建的任务就可以在系统中竞争一定的资源,由内核进行调度。
任务状态通常分为以下四种:
-
就绪(Ready):该任务在就绪队列中,只等待CPU。
-
运行(Running):该任务正在执行。
-
阻塞(Blocked):该任务不在就绪队列中。包含任务被挂起(suspend状态)、任务被延时(delay状态)、任务正在等待信号量、读写队列或者等待事件等。
-
退出态(Dead):该任务运行结束,等待系统回收资源。
任务状态迁移
图1 任务状态示意图
系统会同时存在多个任务,因此就绪态和阻塞态的任务分别会加入就绪队列和阻塞队列。队列只是相同状态任务的合集,加入队列的先后与任务状态迁移的顺序无关。运行态任务仅存在一个,不存在运行态队列。
任务状态迁移说明
-
就绪态→运行态 任务创建后进入就绪态,发生任务切换时,就绪队列中最高优先级的任务被执行,从而进入运行态,同时该任务从就绪队列中移出。
-
运行态→阻塞态 正在运行的任务发生阻塞(挂起、延时、读信号量等)时,将该任务插入到对应的阻塞队列中,任务状态由运行态变成阻塞态,然后发生任务切换,运行就绪队列中最高优先级任务。
-
阻塞态→就绪态(阻塞态→运行态的前置条件) 阻塞的任务被恢复后(任务恢复、延时时间超时、读信号量超时或读到信号量等),此时被恢复的任务会被加入就绪队列,从而由阻塞态变成就绪态;此时如果被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换,该任务由就绪态变成运行态。
-
就绪态→阻塞态 任务也有可能在就绪态时被阻塞(挂起),此时任务状态由就绪态变为阻塞态,该任务从就绪队列中移出,不会参与任务调度,直到该任务被恢复。
-
运行态→就绪态 有更高优先级任务创建或者恢复后,会发生任务调度,此刻就绪队列中最高优先级任务变为运行态,那么原先运行的任务由运行态变为就绪态,依然在就绪队列中。
-
运行态→退出态 运行中的任务运行结束,任务状态由运行态变为退出态。退出态包含任务运行结束的正常退出状态以及Invalid状态。例如,任务运行结束但是没有自删除,对外呈现的就是Invalid状态,即退出态。
-
阻塞态→退出态 阻塞的任务调用删除接口,任务状态由阻塞态变为退出态。
任务ID
在任务创建时通过参数返回给用户。系统中任务ID号是唯一的,是任务的重要标识。用户可以通过任务ID对指定任务进行任务挂起、任务恢复、查询任务名等操作。
任务优先级
优先级表示任务执行的优先顺序。任务的优先级决定了在发生任务切换时即将要执行的任务,就绪队列中最高优先级的任务将得到执行。
任务入口函数
新任务得到调度后将执行的函数。该函数由用户实现,在任务创建时,通过任务创建结构体设置。
任务栈
每个任务都拥有一个独立的栈空间,我们称为任务栈。栈空间里保存的信息包含局部变量、寄存器、函数参数、函数返回地址等。
任务上下文
任务在运行过程中使用的一些资源,如寄存器等,称为任务上下文。当这个任务挂起时,其他任务继续执行,可能会修改寄存器等资源中的值。如果任务切换时没有保存任务上下文,可能会导致任务恢复后出现未知错误。因此在任务切换时会将切出任务的任务上下文信息,保存在自身的任务栈中,以便任务恢复后,从栈空间中恢复挂起时的上下文信息,从而继续执行挂起时被打断的代码。
任务控制块(TCB)
每个任务都含有一个任务控制块(TCB)。TCB包含了任务上下文栈指针(stack pointer)、任务状态、任务优先级、任务ID、任务名、任务栈大小等信息。TCB可以反映出每个任务运行情况。
任务切换
任务切换包含获取就绪队列中最高优先级任务、切出任务上下文保存、切入任务上下文恢复等动作。
任务运行机制
用户创建任务时,系统会初始化任务栈,预置上下文。此外,系统还会将“任务入口函数”地址放在相应位置。这样在任务第一次启动进入运行态时,将会执行“任务入口函数”。
接口说明
OpenHarmony LiteOS-M内核的任务管理模块提供下面几种功能,接口详细信息可以查看API参考。
表1 任务管理模块接口
class="table-box">功能分类 | 接口描述 |
---|---|
创建和删除任务 | LOS_TaskCreateOnly:创建任务,并使该任务进入suspend状态。 LOS_TaskCreate:创建任务,并使该任务进入ready状态,如果就绪队列中没有更高优先级的任务,则运行该任务。 LOS_TaskDelete:删除指定的任务。 |
控制任务状态 | LOS_TaskResume:恢复挂起的任务,使该任务进入ready状态。 LOS_TaskSuspend:挂起指定的任务,然后切换任务。 LOS_TaskJoin:挂起当前任务,等待指定任务运行结束并回收其任务控制块资源 LOS_TaskDelay:任务延时等待,释放CPU,等待时间到期后该任务会重新进入ready状态。传入参数为Tick数目。 LOS_Msleep:任务延时等待,释放CPU,等待时间到期后该任务会重新进入ready状态。传入参数为毫秒数。 LOS_TaskYield:当前任务时间片设置为0,释放CPU,触发调度运行就绪任务队列中优先级最高的任务。 |
控制任务调度 | LOS_TaskLock:锁任务调度,但任务仍可被中断打断。 LOS_TaskUnlock:解锁任务调度。 LOS_Schedule:触发任务调度。 |
控制任务优先级 | LOS_CurTaskPriSet:设置当前任务的优先级。 LOS_TaskPriSet:设置指定任务的优先级。 LOS_TaskPriGet:获取指定任务的优先级。 |
获取任务信息 | LOS_CurTaskIDGet:获取当前任务的ID。 LOS_NextTaskIDGet:获取任务就绪队列中优先级最高的任务的ID。 LOS_NewTaskIDGet:等同LOS_NextTaskIDGet。 LOS_CurTaskNameGet:获取当前任务的名称。 LOS_TaskNameGet:获取指定任务的名称。 LOS_TaskStatusGet:获取指定任务的状态。 LOS_TaskInfoGet:获取指定任务的信息,包括任务状态、优先级、任务栈大小、栈顶指针SP、任务入口函数、已使用的任务栈大小等。 LOS_TaskIsRunning:获取任务模块是否已经开始调度运行。 |
任务信息维测 | LOS_TaskSwitchInfoGet:获取任务切换信息,需要开启编译控制宏:LOSCFG_BASE_CORE_EXC_TSK_SWITCH。 |
评论记录:
回复评论: