% !TeX root = ../tlmgr-intro-zh-cn.tex
\section{操作 (ACTIONS)}

\subsection{\mdseries\ac{info}}

\paragraph{使用方法:}

% \begin{lstlisting}
%         tlmgr info [collections|schemes|+\textit{pkgs}+]
% \end{lstlisting}

\begin{quote}
    \tlmgr{} \ac{info} \oarg{\upshape collections|schemes|\textit{pkgs}}.
\end{quote}

如果不带参数, 将会列出所有软件包仓库中的软件包, 把哪些已经被安装的软件包加上前缀 \texttt{i}.

如果带参数 \texttt{collections} 或 \texttt{schemes}, 将会列出全部的集合或安装方案, 而不列出软件包, 同样地, 把已经安装的集合或安装方案加上前缀 \texttt{i}. 

如果带了任意其他的参数, 将会依次列出 \marg{pkgs} 中的每一个软件包的信息: 名称 (name), 分类 (category), 简短和详细的介绍 (short and long description), 软件包大小 (size), 安装状态 (status), 以及 \tl 中的版本号. 如果这个软件包没有在本地安装, 那么 \tlmgr 将会在远端仓库去查找它. 

对于普通的软件包 (除了集合与安装方案), 软件包大小是分 4 个部分显示的 (run/src/doc/bin). 对于集合, 显示的是所有直接\textbf{从属} (dependent) 于它的软件包的大小总和, 但是不包括从属的集合. 对于安装方案, 显示的是所有直接从属于它的集合与软件包的大小总和. 

如果在本地与线上都没有完整的匹配结果, 那么 \tlmgr 将会使用 \ac{search} 操作寻找名称与它相关的软件包, 见 \nameref{subsec:search} 小节. 

\ac{info} 操作也会显示从 \TeX\,Catalogue 获取的信息: 软件包版本 (package revision), 日期 (date), 以及许可证 (license). 不过这些信息, 尤其是软件包版本, 获得的信息只能用做参考, 这是由于不同部分的更新有时间差. 

旧操作 \ac{show} 与 \ac{list} 已经被合并到了 \ac{info} 操作中, 但是为了兼容性这两个操作仍然可用. 

\paragraph{{\mdseries\ac{info}} 的特有选项:}
\begin{description}
    \item \op{-list}\par
    如果 \op{-list} 与一个软件包一起指定, 那么将会同时列出这个软件包包含的文件, 包括那些特定平台上的从属包. 如果与 \texttt{collections} 或者 \texttt{schemes} 一起指定, 那么 \op{-list} 将会以一个相似的方式输出依赖关系. 
    \item \op{-only-installed}\par
    如果指定这个选项, 那么将不会使用安装源的信息, 只会显示本地已经安装的软件包, 集合或安装方案.
    \item \op{-only-remote}\par
    只列出远端仓库中的软件包, 下面是一条测试哪些软件包在某远端仓库中可用的命令:
    \begin{quote}
        \tlmgr{} \op{-repo} \marg{url} \op{-only-remote} \ac{info}
    \end{quote}
    注意 \op{-only-installed} 与 \op{-only-remote} 不能同时使用. 
\end{description}

\clearpage

\subsection{\mdseries\ac{search}}\label{subsec:search}

\paragraph{使用方法:}
\begin{quote}
    \tlmgr{} \ac{search} \marg{what}.
\end{quote}

默认状态下, \tlmgr{} 会在所有本地安装的软件包中搜索名字, 短描述与长描述中是否含有参数 \marg{what}, 其中 \marg{what} 被解释为一个 (Perl) 正则表达式. 

\paragraph{{\mdseries\ac{search}} 的特有选项:}
\begin{description}
    \item \op{-file}\par
    列出含有 \marg{what} 的文件名 (含路径), 比如使用
    \begin{quote}
        \tlmgr{} \ac{search} \op{-file} \texttt{amsmath}
    \end{quote} 
    那么包含在文件夹 \texttt{amsmath} 下的文件也会被显示, 无论它们的文件名是否含有 \texttt{amsmath}. 
    \item \op{-global}\par
    在安装介质 (installation medium) 的 \tl{} Database 中搜索, 而不是本地安装. 
    \item \op{-word}\par
    严格匹配软件包的名字与描述 (并不是文件名). 比如使用
    \begin{quote}
        \tlmgr{} \ac{search} \op{-word} \texttt{table}
    \end{quote}
    就不会匹配到含有 \texttt{tables} 的软件包, 除非它同时含有一个 \texttt{table}.
    \item \op{-all}\par
    匹配所有的项目: 软件包名, 长短描述与文件名 (含路径). 
\end{description}

\clearpage

\subsection{\mdseries\ac{install}}
\paragraph{使用方法:}
\begin{quote}
    \tlmgr{} \ac{install} \marg{pkgs}.
\end{quote}

安装 \marg{pkgs} 中的每一个软件包, 除非某软件包已经被安装过了. 默认状态下所有指定的的软件包的从属文件也会被同时安装. \ac{install} 操作不会更改已经安装的软件包, 如果想使用最新版本的软件包, 可以使用 \nameref{subsec:update} 小节介绍的 \ac{update} 操作. 

\paragraph{{\mdseries\ac{install}} 的特有选项:}
\begin{description}
    \item \op{-dry-run}\par
    在终端显示将要执行的操作, 而不进行安装. 
    \item \op{-reinstall}\par
    重新安装一个软件包 (包括对集合的依赖), 即使它看起来已经安装了, 比如它已经存在于 TLPDB (\tl{} Package Database) 中. 这个选项对于恢复在层级中不小心删除的软件包很有用. 

    重新安装时，只遵循对普通包的依赖 (不遵循类别Scheme或Collection的依赖)%
    \footnote{When re-installing, only dependencies on normal packages are followed (i.e., not those of category Scheme or Collection).}. 
    \item \op{-with-doc}, \op{-with-src}\par
    \texttt{install-tl} 给了一个 ``不安装文档/源文件'' 的选项, 但是我们不推荐使用这个选项. (默认状态下会安装所有的文件). 如果用了这个选项, 那么当用户想获得软件包的文档或者源文件的时候, 可以使用这两个选项与 \op{--reinstall}, 用 \texttt{fontspec} 宏包为例: 
    \begin{quote}
        \tlmgr{} \ac{install} \op{-reinstall} \op{-with-doc} \op{-with-src} \texttt{fontspec}
    \end{quote}
    \item \op{-no-depends}\par
    不安装软件包的从属. (默认状态下, 安装一个软件包会保证它包含它所有的从属. )
\end{description}

    \textbf{注意}: \ac{install} 操作并不会自动向系统目录中添加新的\textbf{符号链接} (symlinks), 需要自行运行
    \begin{quote}
        \tlmgr{} \ac{path} \key{add}
    \end{quote}
    如果您想使用这个功能并且想添加新的符号链接, 可以阅读 \href{https://www.tug.org/texlive/doc/tlmgr.html#path}{path} 操作. 

\subsection{\mdseries{\ac{update}}}\label{subsec:update}

\paragraph{使用方法:}
\begin{quote}
    \tlmgr{} \ac{update} \marg{\textup{-all|}pkgs}
\end{quote}

把参数 \marg{pkgs} 中的宏包升级到安装源中最新的可用版本, 必须指定 \marg{\textup{-all}} 或至少一个软件包. 

\paragraph{{\mdseries\ac{update}} 的特有选项:}
\begin{description}
    \item \op{-all}\par
    升级全部的软件包 (除了 \tlmgr{} 本身). 如果把 \tlmgr 也列出安装范围将会报错, 除非同时指定了 \op{-force} 与 \op{-self} 选项. (见下)
    
    除了对已安装的软件包进行升级之外, 对本地安装的集合的升级 (默认是) 将它与服务器上的集合进行同步, 无论是新增还是移除. 

    类似地, 如果服务器上的一个本地已经安装的集合新增了一个软件包, 那么它将会被加入本地安装, 这被称作 ``auto-install'', 同时会在使用选项 \op{-list} 的时候被显示. 

    在集合从属软件包的检查中, 如果有一些被用户强制删除 (forcibly removed), 也就是用户使用对它们使用了 \tlmgr{} \ac{remove} \op{-force} 命令 (见 \nameref{subsec:remove} 小节). 如果想重新安装任何一个被强制删除的软件包, 要使用 \hyperlink{op:-reinstall-forcibly-removed}{\op{-reinstall-forcibly-removed}} 选项. 

    重申一遍: 自动新增与移除是完全通过集合之间的比较完成的. 因此, 如果用户手动安装了一个稍后将被服务器移除的软件包, \tlmgr{} 不会注意到它, 也不会在本地移除它. (尽量不要主动进行架构重组，因为 TLPDB 不记录软件包的来源仓库\footnote{It has to be this way, without major rearchitecture work, because the tlpdb does not record the repository from which packages come from.})

    如果用户想在最近的更新中忽略某些软件包, 可以使用下面的 \hyperlink{op:exclude}{\op{-exclude}} 选项. 
    \item \op{-self}\par
    如果有更新的 \tlmgr 版本存在, 那么升级 \tlmgr{} 本身, 即 \tlmgr 的基础架构. 在 Windows 设备上这个选项也会升级 \tl 自带的 Perl 解释器. 

    如果这个选项与 \op{-all} 一起被指定, 那么 \tlmgr 将会先升级自身, 如果成功了, \tlmgr 将会自动重启并执行接下来的升级. 

    表 \ref{tab:update} 展示了 \ac{update} 中 \op{-self} 与 \op{-all} 的关系. 
    \begin{table}
        \caption{\ac{update}的几种关系}\label{tab:update}
        \begin{center}
            \begin{tabularx}{35em}{>{\raggedright}p{14em}@{\texttt{\#}\ }>{\raggedright\arraybackslash\ttfamily}X}\toprule
                \tlmgr{} \ac{update} \op{-self} & 仅升级 \tlmgr 本身\\
                \tlmgr{} \ac{update} \op{-self} \op{-all} & 升级 \tlmgr 本身和全部可升级软件包\\
                \tlmgr{} \ac{upadte} \op{-force} \op{-all} & 升级全部软件包但是\textbf{不}升级 \tlmgr\\
                & 最后一个有风险, 不建议使用!\\\bottomrule
            \end{tabularx}
        \end{center}
    \end{table}
    \item \op{-dry-run}\par
    在终端显示将要执行的操作, 而不进行安装. 这个选项有比 \op{-list} 更详细的显示内容. 
    \item \op{-list} \oarg{pkgs}\par
    简略地列出即将被更新, 新增或移除的软件包, 但不做实质的更改. 如果同时指定了 \op{-all}, 那么将列出所有可用的更新. 如果同时指定了 \op{-self} 但是不指定 \op{-all}, 那么只会列出可更新的核心软件包 (\tlmgr, \tl 的核心架构, Windows 上的 Perl 等等). 

    如果不指定 \op{-all} 或 \op{-self}, 但是给出了具体的软件包 \oarg{pkgs}, 那么将检查 \oarg{pkgs} 中的可更新软件包并列出. 

    如果不指定 \op{-all} 或 \op{-self}, 同时也没有给出 \oarg{pkg}, 那么 \tlmgr 就会假定使用了 \op{-all}, 也就是说 \tlmgr{} \ac{update} \op{-\op{list}} 与 \tlmgr{} \ac{update} \op{-list} \op{-all} 是一样的. 
    \item \hypertarget{op:exclude}{\op{-exclude} \marg{pkg}} \par
    在更新程序中排除软件包 \marg{pkg} 本身以及所有平台特定的软件包, 比如
    \begin{quote}
        \tlmgr{} \ac{update} \op{-all} \op{-exclude} \texttt{a2ping} 
    \end{quote}
    将不会升级 \texttt{a2ping}, \texttt{a2ping.i386-linux}, 以及任何其它的 \texttt{a2ping.xxx} 软件包. 

    如果这个选项指定了一个宏包, 程序将会在以下情况报错并退出: \marg{pkg} 将被自动安装, \marg{pkg} 将被自动移除, 或者 \marg{pkg} 是被手动删除并需要被重新安装\footnote{reinstallation of a forcibly removed package.}的时候. \op{-exclude} 选项不支持这些情况. 
    \item \op{-no-dependent}\par
    如果用户升级一个软件包, 正常情况下所有依赖的软件包在必要的情况下都会被升级. 这个选项会抑致这个行为. 
    \item \hypertarget{op:-reinstall-forcibly-removed}{\op{-reinstall-forcibly-removed}}\par
    在通常情况下 \tlmgr 不会自动安装那些被用户强制删除的软件包, 比如被 \ac{remove} \op{-force} 删除, 在之前的升级中被选项 \op{-no-auto-install} 禁止安装, 或者在升级操作中意外终止时正在升级的软件包. 
    \item \op{-no-auto-remove} \oarg{pkgs}\par
    默认状态下, \tlmgr 将会尝试删除存在于集合中但是在服务器中已经被删除的软件包. 这个选项会阻止这些删除操作, 如果同时指定 \op{-all} 则范围为全部软件包, 如果指定 \oarg{pkgs}, 则范围为给定的软件包. 这可能导致 \TeX 安装的不一致, 因为软件包的作者可能重命名软件包或者改变软件包的位置, 所以这个选项不推荐使用\footnote{This can lead to an inconsistent TeX installation, since packages are not infrequently renamed or replaced by their authors. Therefore this is not recommended.}.
    \item \op{-no-auto-install} \oarg{pkgs}\par
    默认状态下, \tlmgr 会自动安装服务器上的新软件包, 与指定选项 \op{-all} 的效果相同. 这个选项阻止了所有的自动安装, 如果同时指定 \op{-all} 则范围为全部软件包, 如果指定 \oarg{pkgs}, 则范围为给定的软件包.

    此外, 在 \op{-no-auto-install} 选项下完成升级之后, 那些应该被自动安装的软件包会被认为成\textbf{被用户强制删除的}. 所以, 如果 \texttt{foobar} 是唯一一个服务器上新增的软件包, 那么
    \begin{quote}
        \tlmgr{} \ac{update} \op{-all} \op{-no-auto-install}
    \end{quote}
    等价于
    \begin{quote}
        \tlmgr{} \ac{upadte} \op{-all}\\
        \tlmgr{} \ac{remove} \op{-force} \texttt{foobar}
    \end{quote}
    同样地, 因为软件包的作者可能重命名软件包或者改变软件包的位置, 所以这个选项不推荐使用. 
    \item \hypertarget{op:backup}{\op{-backup}, \op{-backupdir} \marg{dir}}\par
    这两个选项会在\textbf{升级之前}创建软件包的备份, 也就是说会备份升级之前最新的软件包, 如果不指定这两个选项, 那么将不会创建备份. 如果指定了 \op{-backupdir} 同时 \marg{dir} 是一个可写且有足够空间的路径, 那么 \tlmgr 将会在这个路径下创建备份文件. 如果仅指定了 \op{-backup}, 那么备份将会被创建在 \nameref{subsec:option} 小节中设置的位置, 默认在 \tl 根目录下的 \texttt{texlive/<year>/tlpkg/backups} 中.  

    \textbf{注}: \href{https://www.tug.org/texlive/doc/tlmgr.html#update-option...-pkg}{tlmgr 文档} 原文为: If neither option is given, no backup will made. 但是 \tlmgr 在 \tl{}2010 以后将自动备份关键词 \key{autobackup} 默认设置为 1, 也就是说, 即使不使用 \op{-backup} 选项, 也会自动将软件包备份在默认位置, 方便用户使用 \nameref{subsec:restore} 操作回滚. 更新日志见 \href{https://www.tug.org/texlive/doc/texlive-en/texlive-en.html#x1-780009.1.7}{texlive-en}

    \item \op{-force}\par
    强制升级所有软件包, 不包括 \tlmgr 本身, 除非同时指定了 \op{-self} 选项. 不推荐. 

    同样地, \ac{update} \op{-list} 将会无视这个选项按它本身该有的样子显示. 
\end{description}

\textbf{注意}: 如果本地安装的软件包的版本高于服务器端的时候 (比如设置的镜像站过时了), \tlmgr 会忽略这个软件包而不进行降级. 

\clearpage

\subsection{\mdseries{\ac{restore}}}\label{subsec:restore}

\paragraph{使用方法:}

\begin{quote}
    \ac{restore} \oarg{pkg} \oarg{revision} \\
    \ac{restore} \marg{\upshape -all}
\end{quote}

这个操作将从之前的备份中回滚软件包版本. 

如果指定了 \marg{\upshape -all}, 那么将会从可找到的备份中回滚所有的软件包版本. 

如果不指定 \oarg{pkg} 与 \oarg{revision}, 那么将列出所有软件包的可用备份的版本. 

如果指定了 \oarg{pkg} 但是没有指定 \oarg{revision}, 那么就列出软件包 \oarg{pkg} 的所有可用的备份版本, 比如使用 \tlmgr{} \ac{restore} \texttt{fancyhdr}, 那么将会得到如下形式的输出
\begin{verbatim}
    Available backups for fancyhdr: xxxxx (yyyy-MM-dd HH:mm)
\end{verbatim}
其中 \texttt{xxxxx} 为 \texttt{fancyhdr} 可用备份的版本号.

当且仅当同时指定 \oarg{pkg} 与一个可用的版本号 \oarg{revision} 时, \tlmgr 会从备份中将 \oarg{pkg} 回滚到版本 \oarg{revision}.

\paragraph{\textmd{\ac{restore}}的特有选项:}
\begin{description}
    \item \op{-all}\par
    尝试从从可找到的备份中回滚所有的软件包版本. 其他的非选项 (non-option) 的参数, 如 \oarg{pkg} 将不可用.
    \item \op{-backupdir} \marg{dir}\par
    指定一个供 \tlmgr 获取备份的路径, 如果不使用这个选项, 那么 \tlmgr 就会使用从 TLPDB 的配置文件. 
    \item \op{-dry-run}\par
    在终端显示将要执行的操作, 而不进行回滚.
    \item \op{-force}\par
    强制进行回滚\footnote{原文为: Don't ask questions.}.
    \item \op{-json}\par
    将输出打印为 JSON 样式. 
\end{description}

\clearpage

\subsection{\mdseries{\ac{remove}}}\label{subsec:remove}

\paragraph{使用方法:}

\begin{quote}
    \tlmgr{} \ac{remove} \marg{pkgs}
\end{quote}

移除 \marg{pkgs} 中给出的软件包. 如果要移除一个集合, 那么将移除这个集合下的所有软件包. 除非指定了 \op{-no-depends}, 入市不移除这个集合下的任何集合. 然而, 当移除一个软件包的时候, 它的从属永远不会被移除. 

\paragraph{\textmd{\ac{remove}}的特有选项:}
\begin{description}
    \item \op{-dry-run}\par
    在终端显示将要执行的操作, 而不进行实质的删除.
    \item \op{-no-depends}\par
    不移除从属软件包.
    \item \op{-all}\par
    卸载整个 \tl, 会询问用户是否删除, 除非指定了 \op{-force} 选项. 该命令可以在 Linux 下正常工作. 在 Windows 下, \tlmgr{} \ac{remove} \op{-all} 会返回
    \begin{quote}
        \ttfamily Please use "Add/Remove Programs" from the Control Panel to removing TeX Live!
    \end{quote}
    如果在 Windows 下卸载 \tl. 可以在命令行中运行
    \begin{quote}
        \texttt kpsewhich -var-value TEXMFROOT
    \end{quote}
    查看 \verb|$TEXMFROOT| 的路径, 然后运行 \verb|$TEXMFROOT\tlpkg\installer\uninst.bat| 来进行卸载. 
    \item \op{-force}\par
    默认状态下, 移除一个软件包或者一个集合的从属集合是不允许的. 使用这个选项可以无条件地轶软件包, 要谨慎使用. 

    如果使用 \tlmgr{} \ac{remove} \op{-force} 移除了一个软件包, 那它在 \tlmgr{} \ac{update} \op{-list} 中被认为是 \texttt{forcibly removed}. 
\end{description}

\clearpage

\subsection{\mdseries{\ac{option}}}\label{subsec:option}
\paragraph{使用方法:}

\begin{quote}
    \tlmgr{} \ac{option} \\
    \tlmgr{} \ac{option} \texttt{help} \\
    \tlmgr{} \ac{option} \marg{key} \\
    \tlmgr{} \ac{option} \marg{key} \oarg{value}
\end{quote}

\begin{enumerate}[(1)]
    \item 第一种形式列出当前的全局 \tl 设置, 带有一个简短的介绍, 每一种设置里括号中的词就是修改这个设置需要的 \key{key}, 比如要修改备份文件的路径 可以使用 \tlmgr{} \ac{option} \key{backupdir} \oarg{dir}. 
    \begin{quote}
        \ttfamily Directory for backups (\textbf{backupdir}): tlpkg/backups
    \end{quote}
    \item 第二种形式与第一种很像, 它会在 \tlmgr{} \ac{option} 的基础上列出可以被设置但是当前没有值的选项,
    \item 第三种形式是列出 \marg{key} 对应的值,
    \item 第四种形式将 \marg{key} 的值设置为 \oarg{value}
\end{enumerate}

表 \ref{tab:option} 中是一些可用的 \marg{key} 值. 使用 \tlmgr{} \ac{option} \key{help} 来获得更详细的列表 

\begin{table}[!hpb]
    \caption{\tlmgr{} \ac{option} 的部分可用选项}\label{tab:option}
    \begin{center}
        \begin{small}
        \begin{tabular}{>{\ttfamily}ll}
            autobackup & 升级操作是否备份,\\
            backupdir & 备份文件的位置,\\
            repository & 默认的软件包仓库,\\
            docfiles & 安装文档文件,\\
            srcfiles & 安装源文件,\\
            sys\_bin &  通过 \texttt{path} 操作链接到的可执行文件的目录\\
            sys\_man &  通过 \texttt{path} 操作链接到的手册文件的目录\\
            sys\_info&  通过 \texttt{path} 动作链接到的信息文件的目录\\
            desktop\_integration & 仅 Windows: 创建开始菜单的快捷方式\\
            fileassocs&  仅 Windows: 改变文件关联\\
            multiuser & 仅 Windows: 为所有用户安装\\
        \end{tabular}
        \end{small}
    \end{center}
\end{table}


一个常见 \ac{option} 的用法是它可以在从 DVD 安装以后, 永久地改变安装的设置来通过互联网获得更新. 比如, 用户可以使用
\begin{quote}
    \tlmgr{} \ac{option} \key{repository} \val{ctan}
\end{quote}
来从一个附近的 CTAN 镜像来获得更新. 

但是中国大陆用户可能无法获取到实际``附近''的镜像站, 很多时候需要用户手动指定大陆地区的源. 详细信息见 \nameref{app:mirror} 一节. 

\key{docfiles} 与 \key{srcfiles} 分别控制着每个软件包的文件组 (文档, 源文件)\footnote{The \texttt{\scriptsize docfiles} and \texttt{\scriptsize srcfiles} keys control the installation of their respective file groups documentation, sources; grouping is approximate) per package.} 这两个 \marg{key} 的默认值都是 \texttt{1}, 如果用户的硬盘空间不足, 或者只是想做一个最小的安装测试, 那么每一个都可以被修改成 \texttt{0}, 这样就不会再下载这些相关的文件了. 

\key{sys\_bin}, \key{sys\_man}, \key{sys\_info} 选项是在 Unix 系统上使用的, 控制着对于可执行文件, 信息文件, 手册页面链接的生成. 详细信息见 \href{https://www.tug.org/texlive/doc/tlmgr.html#path}{path} 操作

其余的选项控制着 Windows 安装的表现. 
\begin{itemize}
    \item 如果设置了 \key{desktop\_integration}, 那么一些软件包将会把文件安装在开始菜单的 \tlmgr{} \ac{gui} 中, 比如文档等等. 
    \item 如果设置了 \key{fileassocs}, 将会建立 Windows 下的文件关联. 见 \href{https://www.tug.org/texlive/doc/tlmgr.html#postaction}{\ac{postaction}} 操作. 
    \item 如果设置了 \key{multiuser}, 那么对注册表和菜单的调整将针对系统上的所有用户, 而不仅仅是当前用户. 
\end{itemize}
这三个选项默认都是开启的. 

\clearpage

\subsection{\mdseries{\ac{backup}}}\label{subsec:backup}
\paragraph{使用方法:}

\begin{quote}
    \tlmgr{} \ac{backup} \marg{pkgs\textup{|-all}}
\end{quote}

如果没有指定 \op{-clean} 选项, 那么这个操作会在默认位置, 为 \marg{pkgs} 中的每一个软件包创建一个备份文件, 如果使用了 \texttt{-all} 选项, 那么将创建全部软件包的备份. 

备份文件的位置由 \op{-backupdir} \marg{dir} 指定, 前提是 \marg{dir} 存在且可写. 如果没有指定 \op{-backupdir}, 那么就会使用 TLPDB 设置中的 \key{backupdir} 路径. 如果二者皆空, 那么就不会创建备份. 关于 \op{backupdir} 的信息可以参考 \ac{update} 操作的 \hyperlink{op:backup}{\op{-backupdir}} 选项. 

如果指定了 \op{-clean} 选项, 那么将会删除备份文件, 而不是创建备份. 这个选项有一个可选的整数值 \texttt{N} 来指定清理时保留的备份数量. 如果没有指定 \texttt{N}, 那么将会使用 \key{autobackup} 的值, 它在 TLPDB 中的默认值为 \texttt{1}, 如果二者皆空, 那么将会报错. 

\paragraph{\textmd{\ac{backup}}的特有选项:}
\begin{description}
    \item \op{-backupdir} \marg{dir}\par
    临时盖 TLPDB 中 \key{backupdir} 的值, 参数 \marg{dir} 必须指定, 这是备份文件存放的路径, 它必须要存在且可写. 
    \item \op{-all}\par
    如果没有指定 \op{-clean} 选项, 那么创建一个 \tl 安装过的所有软件包的备份, 这会消耗大量的存储空间与时间, 如果指定了 \op{-clean} 选项, 所有的备份将被删除. 
    \item \op{-clean[=N]}\par
    删除备份目录 \key{backupdir} 中的旧备份, 而不创建备份. 可选整数参数 \texttt{N} 会临时覆盖 TLPDB 中的 \key{autobackup} 的值, 如果使用这个选项, 那么必须要指定 \op{-all} 或者一列软件包. 
    \item \op{-dry-run}\par
    在终端显示将要执行的操作, 而不进行备份. 
\end{description} 

