배쉬가 덮여 있습니다. Dash를 사용하면 apt-get --reinstall install bash가 오류를 반환합니다.

배쉬가 덮여 있습니다. Dash를 사용하면 apt-get --reinstall install bash가 오류를 반환합니다.

그래서 /bin/bash실수로 멍청한 bash 스크립트로 덮어썼습니다. 이전 질문은 아래에서 확인할 수 있습니다. 발생한 문제를 처리하기 위해 새로운 것을 만들라는 조언을 받았습니다. 요약하자면, GUI를 사용하여 기본 터미널을 대시로 변경하여 명령을 실행할 수 있었습니다. 이제 기본 터미널을 다시 변경할 수 있도록 bash를 다시 설치하려고 합니다. 언급한 대로 bash를 실행 중이므로 apt-get --reinstall install다시 설치해야 합니다. 그러나 오류가 반환됩니다.

    reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  bash-completion
Suggested packages:
  bash-doc
The following packages will be upgraded:
  bash bash-completion
2 upgraded, 0 newly installed, 0 to remove and 2128 not upgraded.
2 not fully installed or removed.
Need to get 0 B/1,605 kB of archives.
After this operation, 673 kB of additional disk space will be used.
Do you want to continue? [Y/n] (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 307792 files and directories currently installed.)
Preparing to unpack .../archives/bash_4.4-5_amd64.deb ...
dpkg (subprocess): unable to execute old pre-removal script (/var/lib/dpkg/info/bash.prerm): No such file or directory
dpkg: warning: subprocess old pre-removal script returned error exit status 2
dpkg: trying script from the new package instead ...
dpkg (subprocess): unable to execute new pre-removal script (/var/lib/dpkg/tmp.ci/prerm): No such file or directory
dpkg: error processing archive /var/cache/apt/archives/bash_4.4-5_amd64.deb (--unpack):
 subprocess new pre-removal script returned error exit status 2
dpkg (subprocess): unable to execute installed post-installation script (/var/lib/dpkg/info/bash.postinst): No such file or directory
dpkg: error while cleaning up:
 subprocess installed post-installation script returned error exit status 2
Errors were encountered while processing:
 /var/cache/apt/archives/bash_4.4-5_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

또한 dpkg --configure bash패키지를 처리하는 동안 오류가 발생했으며 bash는 "매우 나쁜 불일치 상태입니다. 구성을 시도하기 전에 다시 설치해야 합니다."라고 나와 있습니다.

제가 실행 중인 배포판은 Kali 2.2입니다. 저는 이미 열정적으로 싫어할 배포판입니다. 왜냐하면 bash를 덮어쓰는 것은 실수이기 때문입니다.

@Philippos가 추천한 새 게시물입니다. 예전 포스팅 링크는여기

답변1

문제는 bash prerm 스크립트가 bash를 사용하므로 실행되지 않아 전체 재설치가 실패한다는 것입니다.

이 문제를 해결하는 방법에는 여러 가지가 있습니다.

1) 내 시스템(Debian 불안정 및 Debian 안정)의 bash prerm 스크립트는 매우 간단하며 실행하는 데 bash가 필요하지 않습니다. 따라서 /var/lib/dpkg/info/bash.prerm첫 번째 줄을 편집하고 에서 로 변경 #! /bin/bash하세요 #! /bin/sh. 또한 ( )를 /bin/sh가리키지 않도록 주의하세요 . 그렇다면 이미 설치되어 있을 가능성이 높으므로 prerm 파일을 편집하여 사용해 보세요.bashls -l /bin/sh/bin/dash

2) prerm 파일을 삭제하고 다시 설치하세요. prerm 파일은 Debian 4.4-5 버전에서는 중요한 역할을 하지 않으므로 prerm 파일을 삭제하고 다시 설치해 보시면 됩니다.

3) 다운로드한 아카이브 /bin/bash에서 압축을 풀 수 있습니다. .deb출력에서 경로를 볼 수 있습니다: /var/cache/apt/archives/bash_4.4-5_amd64.deb. 이는 ar(1)세 개의 파일이 포함된 아카이브입니다.

  • debian-binary
  • control-tar.gz
  • data.tar.xz

파일 은 압축 data.tar되지 않을 수 있습니다 xz. gzip, bzip 등 다른 형식이 있습니다. 파일이라고 가정하겠습니다 xz. 그렇지 않은 경우 접미사 및 zcat 프로그램을 적절하게 교체할 수 있습니다.

.deb다음 명령을 실행하여 파일의 내용을 볼 수 있습니다.

$ ar t /var/cache/apt/archives/bash_4.4-5_amd64.deb
debian-binary
control.tar.gz
data.tar.xz

data.tar.xz다음 명령을 실행하여 파일의 내용을 볼 수 있습니다.

$ ar p /var/cache/apt/archives/bash_4.4-5_amd64.deb data.tar.xz | xzcat | tar tvf -
...
./bin/bash
...

/bin/bash다음에서 추출 할 수 있습니다 .

$ cd /tmp
$ ar p /var/cache/apt/archives/bash_4.4-5_amd64.deb data.tar.xz | xzcat | tar xvf - ./bin/bash

. 로 시작했으므로 /tmp이제 파일을 /tmp/bin/bash다시 복사하고 bash를 다시 덮어쓸 수 있지만 /bin이번에는 좋은 내용이 포함됩니다.

dpkg 도구를 사용하여 파일을 조작할 수 있지만 단순한 아카이브이므로 .debdpkg 특정 옵션보다 사용 방법을 기억하기가 더 쉽습니다.ar(1)tar(1)

관련 정보