如何解决“dpkg:错误:在PATH中找不到1个预期程序或不可执行”?

我使用命令sudo apt-get install lamp-server^安装了LAMP服务器。 此后,每当我打开终端时,都会出现以下错误:

  bash: /home/gaja/.bashrccu: No such file or directory bash: /home/gaja/.bashrc: line 4: syntax error near unexpected token (' bash: /home/gaja/.bashrc: line 4: see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)' 

我可以使用这里给出的答案摆脱这个问题。

但是,现在的问题是我无法使用sudo apt-get命令安装任何东西。

我试图成为root然后重新运行sudo apt-get install lamp-server^命令,它会输出以下错误:

 dpkg: warning: 'tar' not found in PATH or not executable dpkg: error: 1 expected program not found in PATH or not executable Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin E: Sub-process /usr/bin/dpkg returned an error code (2) 

以下是运行命令的完整输出:

 gaja@gaja-System-Product-Name:~$ sudo su [sudo] password for gaja: root@gaja-System-Product-Name:/home/gaja# sudo apt-get install lamp-server^ Reading package lists... Done Building dependency tree Reading state information... Done Note, selecting 'libdbi-perl' for task 'lamp-server' Note, selecting 'perl-modules' for task 'lamp-server' Note, selecting 'libaprutil1-dbd-sqlite3' for task 'lamp-server' Note, selecting 'perl' for task 'lamp-server' Note, selecting 'apache2-bin' for task 'lamp-server' Note, selecting 'libapache2-mod-php5' for task 'lamp-server' Note, selecting 'ssl-cert' for task 'lamp-server' Note, selecting 'mysql-server-5.5' for task 'lamp-server' Note, selecting 'mysql-client-core-5.5' for task 'lamp-server' Note, selecting 'libclass-isa-perl' for task 'lamp-server' Note, selecting 'mysql-server' for task 'lamp-server' Note, selecting 'libapr1' for task 'lamp-server' Note, selecting 'php5-readline' for task 'lamp-server' Note, selecting 'libaprutil1' for task 'lamp-server' Note, selecting 'libwrap0' for task 'lamp-server' Note, selecting 'libdbd-mysql-perl' for task 'lamp-server' Note, selecting 'apache2-mpm-prefork' for task 'lamp-server' Note, selecting 'libhtml-template-perl' for task 'lamp-server' Note, selecting 'mysql-client-5.5' for task 'lamp-server' Note, selecting 'libaio1' for task 'lamp-server' Note, selecting 'mysql-common' for task 'lamp-server' Note, selecting 'libmysqlclient18' for task 'lamp-server' Note, selecting 'mysql-server-core-5.5' for task 'lamp-server' Note, selecting 'libterm-readkey-perl' for task 'lamp-server' Note, selecting 'php5-mysql' for task 'lamp-server' Note, selecting 'apache2-data' for task 'lamp-server' Note, selecting 'apache2' for task 'lamp-server' Note, selecting 'php5-common' for task 'lamp-server' Note, selecting 'php5-cli' for task 'lamp-server' Note, selecting 'libswitch-perl' for task 'lamp-server' Note, selecting 'libaprutil1-ldap' for task 'lamp-server' Note, selecting 'tcpd' for task 'lamp-server' libaio1 is already the newest version. libapr1 is already the newest version. libaprutil1 is already the newest version. libaprutil1-dbd-sqlite3 is already the newest version. libaprutil1-ldap is already the newest version. libclass-isa-perl is already the newest version. libdbd-mysql-perl is already the newest version. libdbi-perl is already the newest version. libhtml-template-perl is already the newest version. libswitch-perl is already the newest version. libterm-readkey-perl is already the newest version. libwrap0 is already the newest version. perl is already the newest version. perl-modules is already the newest version. ssl-cert is already the newest version. tcpd is already the newest version. apache2 is already the newest version. apache2-bin is already the newest version. apache2-data is already the newest version. apache2-mpm-prefork is already the newest version. libapache2-mod-php5 is already the newest version. libmysqlclient18 is already the newest version. mysql-client-5.5 is already the newest version. mysql-client-core-5.5 is already the newest version. mysql-common is already the newest version. mysql-server is already the newest version. mysql-server-5.5 is already the newest version. mysql-server-core-5.5 is already the newest version. php5-cli is already the newest version. php5-common is already the newest version. php5-mysql is already the newest version. php5-readline is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 230 not upgraded. 2 not fully installed or removed. After this operation, 0 B of additional disk space will be used. Do you want to continue [Y/n]? y dpkg: warning: 'tar' not found in PATH or not executable dpkg: error: 1 expected program not found in PATH or not executable Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin E: Sub-process /usr/bin/dpkg returned an error code (2) root@gaja-System-Product-Name:/home/gaja# sudo apt-get install apache2 Reading package lists... Done Building dependency tree Reading state information... Done apache2 is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 230 not upgraded. 2 not fully installed or removed. After this operation, 0 B of additional disk space will be used. Do you want to continue [Y/n]? y dpkg: warning: 'tar' not found in PATH or not executable dpkg: error: 1 expected program not found in PATH or not executable Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin E: Sub-process /usr/bin/dpkg returned an error code (2) root@gaja-System-Product-Name:/home/gaja# 

我对其他成员的建议采取的一些故障排除步骤:

 $ ls -l /bin/tar ls: cannot access /bin/tar: No such file or directory $ apt-cache policy tar tar: Installed: 1.26+dfsg-8 Candidate: 1.26+dfsg-8 Version table: *** 1.26+dfsg-8 0 500 in.archive.ubuntu.com/ubuntu saucy/main i386 Packages 100 /var/lib/dpkg/status 

我也尝试在切换到root后运行以下命令,但这也无济于事:

 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

root的$PATH环境变量未正确设置,因此dpkg无法找到tar来提取包。

在切换到root后尝试以下操作:

 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

然后再次运行apt-get命令。

从您的问题和以下注释中可以清楚地看到tar已安装,但缺少可执行文件/bin/tar 。 您需要手动添加它,因为如果没有tar dpkg将无法运行。

首先检查以下文件是否已存在,

 ls -l /etc/rmt ls -l /usr/lib/mime/packages/tar ls -l /usr/sbin/rmt-tar ls -l /usr/sbin/tarcat 

我没有列出doc和man文件。 可在此处找到完整列表。

您可以从packages.ubuntu.com手动下载tar.deb包。 下载适用于您的体系结构的确切包。

接下来,在存档管理器可用的系统中解压缩.deb文件。 如果解压缩.deb文件,主目录下将有一个名为bin的目录。 您需要将提取的bin目录中的可执行tar复制到/bin/

您可以先将可执行文件tar放到主目录中。 接下来在终端中使用以下内容将其复制到/bin

 sudo cp tar /bin/ sudo chmod 755 /bin/tar 

只需检查/bin/tar的所有者是否为root。 它必须拥有所有人的执行权限。 ls -l /bin/tar的输出应该是这样的,

 -rwxr-xr-x 1 root root ... 

这应该工作。 如果尚未安装,您可能需要安装建议的软件包 。

我尝试从Debian Squeeze到Wheezy进行分发升级时遇到了类似的错误(我知道这是一个Ubuntu Stack Exchange,但我的解决方案可能适合你)。 这是我收到错误时执行的命令:

 sudo apt-get dist-upgrade 

以下是错误的一部分:

 dpkg: 3 expected programs not found in PATH or not executable. 

我使用以下命令更改为root用户并再次尝试:

 su root apt-get dist-upgrade 

安装成功没有错误。