首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >apt-如何使用/var/cache/apt/cache/lock?

apt-如何使用/var/cache/apt/cache/lock?
EN

Ask Ubuntu用户
提问于 2018-09-21 11:24:30
回答 2查看 803关注 0票数 4

我很好奇/var/cache/apt/archives/lock是如何在apt-get中使用的。我发现它是一个常规文件,我认为每次flock需要对/var/cache/apt/archives做一些更改时,都会调用D4

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2018-09-21 12:59:49

简单地说,apt正在使用fcntl来控制锁文件。

取决于您正在做什么,不同的锁将由apt创建,让我们考虑一下apt-pkg/update.cc负责的sudo apt update,并在实际更新源代码列表之前运行此条件:

代码语言:javascript
复制
if (Fetcher.GetLock(_config->FindDir("Dir::State::Lists")) == false)

注意,_config->FindDir("Dir::State::Lists")将返回:/lists,您可以通过运行:

代码语言:javascript
复制
$ apt-config dump | grep lists
Dir::State::lists "lists/";

因此,GetLock()将在/var/lib/apt/lists/中创建一个锁文件,如果我运行另一个sudo apt update进程,我将得到:

代码语言:javascript
复制
Reading package lists... Done
E: Could not get lock /var/lib/apt/lists/lock ...
E: Unable to lock directory /var/lib/apt/lists/

GetLock()本身就住在apt-pkg/contrib/fileutl.cc中:

让我们看看它的评论:

代码语言:javascript
复制
// GetLock - Gets a lock file                       /*{{{*/
// ---------------------------------------------------------------------
/* This will create an empty file of the given name and lock it. Once this
   is done all other calls to GetLock in any other process will fail with
   -1. The return result is the fd of the file, the call should call
   close at some time. */

因此,下次我运行apt update时,这个函数将返回-1,而不是创建锁文件,我们的条件会失败,我们会收到一个错误。

如果我们查看GetLock的代码,我们可以看到它正在使用fcntl来提供它的功能。

基本上,fileutl.cc是一个包含两个主要函数的文件实用程序,它将GetLock定义为"dpkg兼容的锁文件操作“方法。

fcntl本身提供了一系列系统调用来操作文件描述符。fcntl提供的功能之一是"POSIX记录锁,也称为进程关联锁.":

代码语言:javascript
复制
man 2 fcntl

我相信你已经知道使用锁文件背后的想法了,但为了确保在座的每一个人都知道这一点:

锁定文件的目的是什么?

票数 2
EN

Ask Ubuntu用户

发布于 2018-09-21 12:38:04

Apt和dpkg使用锁文件(在/var/lib/中,而不是在/var/cache中)来确保包管理操作和包数据库正确同步。

这意味着,如果安装或删除包(如hello包),包数据库将是准确的,包管理器将正确显示包的正确状态。

有几种可能的解决方案可以确保包管理操作和包数据库是同步的。Lockfiles是apt开发人员拥有chosen...mostly的解决方案,因为它是一个简单、易于排除故障和易于理解的解决方案。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1077215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档