/ bin / bash의 내용은 무엇이며 실수로 덮어 쓴 경우 어떻게해야합니까


24

실수로 / bin / bash 파일을 / bin 폴더에 넣을 바보 스크립트로 덮어 썼습니다.

해당 파일의 내용을 다시 가져 오려면 어떻게합니까? 웹에서 컨텐츠를 찾아서 다시 복사 할 수있는 방법이 있습니까? 터미널에 "너무 많은 심볼릭 링크가 있습니다"라는 오류가 있다는 것을 고려할 때 여기에서 내가 선택할 수있는 옵션은 무엇입니까?

나는 아직도 이런 종류의 일에 새로 온 사람이며, 내가 얻을 수있는 모든 도움에 감사한다.

편집 : 나는 Kali 2.2 Rolling에 대해 언급하는 것을 잊었습니다.이 기능은 추가 된 데비안입니다.

편집 2 : 며칠 전까지 실수를 알지 못했기 때문에 컴퓨터를 다시 시작했습니다. 이것은 이것을 조금 더 어렵게 만듭니다.


9
bash를 삭제 했습니까? 그냥 zsh를 사용하십시오 :-) </ troll>
Kevin


물리적 또는 VM?
벤 Aveling

9
다음에 : 시스템 디렉토리에 물건을 넣지 마십시오 . 커스텀 스크립트와 물건을 원한다면 스스로 만들어서 $HOME/.bin추가 PATH하거나 /usr/local/bin시스템 전체에 필요한 경우 사용 하십시오 . 또는 더 나은 방법으로 패키지를 빌드하십시오.
스펙트럼

답변:


33

bash쉘은 아마도 시스템 쉘 일 것이므로 이제 이상한 일이 발생하지만 쉘의 일부는 여전히 메모리에 있습니다. 로그 아웃하거나 재부팅하면 더 큰 문제에 봉착하게됩니다.

따라서 가장 먼저 쉘을 안전한 것으로 바꾸어야합니다. 설치 한 쉘 확인

cat /etc/shells

그런 다음 쉘을 여기에 나열된 다른 쉘 중 하나로 변경하십시오.

chsh -s /bin/dash

이미 재부팅했기 때문에 업데이트 :

오늘날 부팅 프로세스가에 의존하지 않기 bash때문에 운이 좋으므로 시스템이 부팅되면 명령 줄을 얻을 수 없습니다. 하지만 당신은 편집에 편집기를 시작 /etc/passwd하고있는 쉘 변경 root에서 라인 /bin/bash/bin/dash. 로그 아웃했다가 다시 로그인하십시오. 해당 파일을 변경하지 마십시오. 그렇지 않으면 시스템이 완전히 엉망이 될 수 있습니다.

그런 다음 다시 시도 bash와 함께

apt-get --reinstall install bash

모든 것이 성공하면로 chsh돌아갈 수 bash있습니다.

마지막으로, 칼리는 고도로 전문화 된 배포본 일 것입니다. 우연히 껍질을 덮어 쓴 사람들에게는 적합하지 않을 것입니다. 이 문장을 무례하고 가혹하다고 불렀기 때문에 본인의 경험으로 작성했다고 덧붙여 야합니다. 내가 어렸을 때, 아무도 루트로 엉망이되는 것을 피하라고 말하지 않았기 때문에 시스템을 망쳤습니다.


3
@ dr01 : bash 이스케이프 작동 방식을 고려할 때 따옴표가 잘못 배치 될 수 있습니다. command > /bin/bash ...대 생각하십시오 command > (/bin/bash ...).
MSalters

7
그 마지막 문장은 가혹했다 ... :)
제임스 분석 재개 모니카 포크

6
@MSalters 잘못 배치 된 따옴표 는 root로 실행됩니다 . 그것은 두 가지 실수입니다. 두 번째는 물론 권한이없는 사용자가 아닌 복잡한 파이프 라인을 루트로 시도하는 것입니다.
derobert

12
@JamesKPolk 아니, 전혀 가혹하지 않습니다. 단순한 진실입니다. 칼리에 의해 사용할 수 있도록 설계 전문 도구입니다 전문가 . 그들은 심지어 웹 페이지에 많은 것을 진술 합니다. 전문가가 아닌 경우 실제로 Kali를 운영하는 비즈니스가 없습니다.
terdon

3
마지막 문장은 가혹 하지 않습니다 . 그것은 진실입니다.
Andrea Lazzarotto

65

컴퓨터를 종료하지 마십시오.

여전히 셸이 실행 중입니까? 배쉬인가요? 그렇다면 괜찮습니다. (그러나 다시는하지 마십시오.)

운영:

sudo cp /proc/$$/exe /bin/bash

짜잔, 다 괜찮아


의견에 누군가가 이것이 효과가 있다고 의심하기 때문에 :

[vagrant@localhost ~]$ cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
[vagrant@localhost ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[vagrant@localhost ~]$ echo $0
-bash
[vagrant@localhost ~]$ sudo rm /bin/bash
[vagrant@localhost ~]$ bash
-bash: /bin/bash: No such file or directory
[vagrant@localhost ~]$ sudo su -
su: /bin/bash: No such file or directory
[vagrant@localhost ~]$ sudo cp /proc/$$/exe /bin/bash
[vagrant@localhost ~]$ bash
[vagrant@localhost ~]$ exit
[vagrant@localhost ~]$ sudo su -
[root@localhost ~]# logout
[vagrant@localhost ~]$ 

18
어쨌든, 배포 후 bash를 다시 설치하는 것이 좋습니다. 예를 들어 올바른 권한 (일부 루트킷 사냥꾼은 변경 사항에 놀랄 수 있음)과 하드 링크 또는 심볼릭 링크 (예 : /bin/sh또는 rbash) 를 복원하는 것이
좋습니다.

4
@GiacomoCatenazzi는 실제로이 방법은 권한을 유지 root합니다 cp. 그러나 하드 링크는 좋은 지적입니다.
와일드 카드

1
기계가 다시 시작되었습니다. 일반 쉘을 열 수는 없지만 GUI를 통해 내용을 편집 할 수 있습니다. 앞에서 말했듯이 "자식 프로세스 / bin / bash를 실행하지 못했습니다. (너무 많은 수준의 심볼릭 링크)"라는 오류가 발생합니다.
GarrukApex

5

로그인 할 수 있지만 터미널을 열거 나 셸에 액세스 할 수 없지만 GUI를 통해 파일에 액세스 할 수있는 경우,로 이동하여 /bin이름이 끝나는 파일 sh(하지만 아님 .sh)을 찾은 다음 파일 을 두 번 클릭하여 실행하십시오. 또는 마우스 오른쪽 버튼 클릭). 특히 다음을 찾으십시오.

  • sh
  • dash
  • ash
  • ksh (또는 ksh뒤에 숫자가옵니다. 예  ksh93)
  • zsh
  • yash

또는 최후의 수단으로

  • tcsh 또는
  • csh

쉘을 실행할 수 있다면 Philippos 's answer 을 시도하십시오 .

다른 방법은 이 지침에 따라 단일 사용자 모드로 부팅 하지만 init=/bin/sh대신 (또는 다른 쉘 중 하나)를 지정하는 것입니다 init=/bin/bash.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.