/bin/sh를 덮어썼는데 어떻게 복원하나요?

/bin/sh를 덮어썼는데 어떻게 복원하나요?

저는 Linux를 처음 접했고 /bin/sh그것이 폴더라고 생각했습니다.

내가 해냈어mv path/to/file /bin/sh이제 더 이상 터미널과 Ubuntu 소프트웨어를 열 수 없습니다. 아직 발견하지 못한 손상된 프로그램이 더 있을 수 있습니다.

오류가 발생합니다.

/bin/sh너무 많은 심볼릭 링크 레이어가 있는 하위 프로세스를 생성할 수 없습니다.

어떤 제안이 있으십니까?

우분투 20.04를 실행 중입니다.

답변1

/bin/sh심볼릭 링크이므로 덮어써도 실제로 아무것도 삭제되지 않고 링크가 무효화될 뿐입니다.

/bin/shShebang 헤더에는 모든 유형의 스크립트가 사용되기 때문에 문제가 됩니다 . 이것이 아마도 모든 종류의 무작위적인 것들이 실패하는 이유일 것입니다.

루트이거나 sudo: 1을 통해 로그인해야 합니다.

cd /bin 
rm sh 
ln -s dash sh 

발견한 메커니즘에 따라 절대 경로를 사용하여 이 작업을 수행하는 것이 더 쉬울 수 있으므로 의미가 충분히 명확하기를 바랍니다. (원래 링크에서는 절대 경로를 사용하지 않았을 수도 있지만 이는 중요하지 않습니다.) 익숙하지 않은 경우(기호) 파일 링크바라보다 man ln.

이렇게 하면 터미널을 다시 정상적으로 사용할 수 있습니다. 작동하는 경우 이전에 실패한 스크립트로 인해 지속적인 결과가 발생할 경우 다시 시작해야 할 수도 있습니다.

  1. 이는 Debian/Ubuntu 및 해당 제품군에만 해당됩니다. 다른 배포판에는 dash셸이 포함되어 있지 않을 수 있지만 그렇지 bash않은 dash경우 ./binbash

답변2

이러한 유형의 문제에 대한 한 가지 (일반적인) 해결책은 손상된 파일이 속한 패키지를 찾은 다음 해당 패키지를 다시 설치하는 것입니다. 이를 수행하는 방법은 배포판의 패키지 관리자에 따라 다릅니다. RPM 기반 시스템에서는 다음과 같습니다.

rpm -qf /bin/sh         # Package is bash-5.1.0-2.fc34.x86_64 here
yum -y reinstall bash

관련 정보