Bash 如何以编程方式删除过时的dpkg锁文件?

Bash 如何以编程方式删除过时的dpkg锁文件?,bash,Bash,我正在尝试构建一个小的shell脚本,它将检测一个过时的/var/lib/dpkg/lock文件,并在没有运行dpkg进程的情况下将其删除 我该怎么做。。。最好使用一个衬里:) 说明: 1. lsof: list open files 2. | (= pipe to) grep: is /var/lib/dpkg/lock in the list? 3. || (= or) rm: no? rm it! 说明: 1. lsof: list open files 2. | (= pipe to)

我正在尝试构建一个小的shell脚本,它将检测一个过时的
/var/lib/dpkg/lock
文件,并在没有运行dpkg进程的情况下将其删除

我该怎么做。。。最好使用一个衬里:)

说明:

1. lsof: list open files
2. | (= pipe to) grep: is /var/lib/dpkg/lock in the list?
3. || (= or) rm: no? rm it!
说明:

1. lsof: list open files
2. | (= pipe to) grep: is /var/lib/dpkg/lock in the list?
3. || (= or) rm: no? rm it!

有几种方法可以按照您描述的方式删除锁定文件。(但是,更合适的方法是创建lockfile(或原子锁定的lockdir),其中包含正在运行的进程的
PID
)。但是,对于您描述的简单情况,您可以对正在运行的进程的名称使用
pidof
,作为另一种检查类型

(请注意,如果有多个进程以相同的名称运行,则锁定文件将被删除,并且与锁定文件所属的进程没有关联)

使用
pidof
(并受限制)针对您的情况编写的简短脚本可以是:

#!/bin/bash

test -z "$1" && {   ## validate required input/show usage
    printf "error: insufficient input, usage: %s procnm [lockfile].\n" \
           "${0//*\/}" >&2
    exit 1
}

procnm="$1"                         ## process name
victim=${2:-/var/lib/dpkg/lock}     ## lockfile name

if [ ! -n "$(pidof  "$procnm")" ]   ## test pidof name
then                                ## if not running, rm lock
    [ -f "$victim" ] && rm "$victim"
fi
该脚本将进程名称作为第一个参数,以及lockfile位置的可选第二个参数。(假定您已将预期的锁定文件硬编码为默认设置)。e、 g


有几种方法可以按照您描述的方式删除锁定文件。(但是,更合适的方法是创建lockfile(或原子锁定的lockdir),其中包含正在运行的进程的
PID
)。但是,对于您描述的简单情况,您可以对正在运行的进程的名称使用
pidof
,作为另一种检查类型

(请注意,如果有多个进程以相同的名称运行,则锁定文件将被删除,并且与锁定文件所属的进程没有关联)

使用
pidof
(并受限制)针对您的情况编写的简短脚本可以是:

#!/bin/bash

test -z "$1" && {   ## validate required input/show usage
    printf "error: insufficient input, usage: %s procnm [lockfile].\n" \
           "${0//*\/}" >&2
    exit 1
}

procnm="$1"                         ## process name
victim=${2:-/var/lib/dpkg/lock}     ## lockfile name

if [ ! -n "$(pidof  "$procnm")" ]   ## test pidof name
then                                ## if not running, rm lock
    [ -f "$victim" ] && rm "$victim"
fi
该脚本将进程名称作为第一个参数,以及lockfile位置的可选第二个参数。(假定您已将预期的锁定文件硬编码为默认设置)。e、 g


您应该永远不要删除dpkg锁定文件。其存在或不存在表示锁是否到位。dpkg对预先存在的文件使用区域锁定。如果人们不再给出这样的建议,那就好了


有关更多信息,请参阅此常见问题解答条目:

您应该永远不要删除dpkg锁定文件。其存在或不存在表示锁是否到位。dpkg对预先存在的文件使用区域锁定。如果人们不再给出这样的建议,那就好了


有关更多信息,请参阅此常见问题解答条目:

只是猜测,但请尝试删除它。如果某个进程正在使用它,则删除将失败。只是猜测一下,但请尝试删除它。如果某个进程正在使用它,则删除将失败。