如何解决 "dpkg: error: 1 expected program not found in PATH or not executable"?

分享于 

10分钟阅读

ubuntu

  繁體

问题

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


 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




答案1

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

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


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



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


答案2

可以看出,tar已安装,但缺少可执行文件/bin/tar,你需要手动添加它,因为你的dpkg在没有tar的情况下无法工作。

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


ls -l /etc/rmt


ls -l /usr/lib/mime/packages/tar


ls -l /usr/sbin/rmt-tar


ls -l /usr/sbin/tarcat



你可以从手动下载tar.deb软件包, packages.ubuntu.com

如果解压缩.deb文件,主目录下将有一个bin的目录,你需要将可执行文件tar从提取的bin目录复制到/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 ...




答案3

以下是收到错误时执行的命令:


sudo apt-get dist-upgrade



以下是错误的一部分:


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



我使用以下命令更改为root用户,然后重试:


su root


apt-get dist-upgrade



安装成功,没有错误了。



EXP  EXE  EXEC  路径  可执行  Expect