Nội dung của / bin / bash là gì và tôi phải làm gì nếu vô tình ghi đè lên chúng


24

Tôi vô tình ghi đè tập tin / bin / bash bằng một tập lệnh câm mà tôi dự định đặt vào thư mục / bin.

Làm thế nào để tôi lấy lại nội dung của tập tin đó? Có cách nào tôi có thể tìm thấy nội dung trên web và chỉ cần sao chép lại chúng không? Các tùy chọn của tôi ở đây là gì, vì thiết bị đầu cuối đó có lỗi khi nói về "Quá nhiều liên kết tượng trưng?"

Tôi vẫn là người mới làm điều này và tôi đánh giá cao tất cả sự giúp đỡ tôi có thể nhận được.

Chỉnh sửa: Tôi quên đề cập đến tôi trên Kali 2.2 Cán, một phần khá nhiều debian với một số tính năng được thêm vào.

Chỉnh sửa 2: Tôi cũng khởi động lại máy, vì tôi đã không nhận ra lỗi của mình cho đến vài ngày trước. Điều đó làm cho điều này khá khó khăn hơn một chút.


9
Xóa bash? Chỉ cần sử dụng zsh :-) </ troll>
Kevin

1
serverfault.com/questions/451528/ và một số người khác
skandigraun

vật lý hay VM?
Ben Aveling

9
Lần sau: đừng bỏ đồ vào thư mục hệ thống . Nếu bạn muốn các tập lệnh và công cụ tùy chỉnh, hãy tự tạo $HOME/.binvà thêm nó vào PATHhoặc sử dụng /usr/local/binnếu bạn cần nó ở toàn hệ thống. Hoặc, thậm chí tốt hơn, xây dựng một gói.
quang phổ

Câu trả lời:


33

bashlà một cái vỏ, có lẽ là hệ thống của bạn, vì vậy bây giờ những điều kỳ lạ xảy ra, trong khi các phần của vỏ vẫn còn trong bộ nhớ. Khi bạn đăng xuất hoặc khởi động lại, bạn sẽ gặp rắc rối sâu hơn.

Vì vậy, điều đầu tiên nên thay đổi vỏ của bạn thành một cái gì đó an toàn. Xem những gì bạn đã cài đặt shell

cat /etc/shells

Sau đó thay đổi vỏ của bạn thành một trong các vỏ khác được liệt kê ở đó, ví dụ

chsh -s /bin/dash

Cập nhật, vì bạn đã khởi động lại:

Bạn thật may mắn vì ngày nay quá trình khởi động không phụ thuộc vào bash, vì vậy hệ thống của bạn khởi động, bạn không thể nhận được một dòng lệnh. Nhưng bạn có thể bắt đầu một trình soạn thảo để chỉnh sửa /etc/passwdvà thay đổi trình bao trong rootdòng từ /bin/bashđến /bin/dash. Đăng xuất và đăng nhập lại. Chỉ cần không thực hiện bất kỳ thay đổi nào khác trong tệp đó, hoặc bạn có thể làm hỏng hệ thống của bạn hoàn toàn.

Sau đó thử cài đặt lại bashvới

apt-get --reinstall install bash

Nếu mọi thứ thành công, bạn có thể chshquay lại bash.

Cuối cùng: Tôi nghĩ, kali là một bản phân phối chuyên môn cao, có lẽ không phù hợp với những người vô tình ghi đè lên vỏ của chúng. Vì câu này được gọi là thô lỗ và khắc nghiệt, tôi nên nói thêm rằng tôi đã viết nó ra khỏi kinh nghiệm của bản thân. Khi tôi còn trẻ, tôi đã phá hỏng hệ thống của mình vì không ai bảo tôi tránh làm phiền với quyền root.


3
@ dr01: Đưa ra cách bash thoát hoạt động, nó có thể là một vấn đề của một trích dẫn không đúng chỗ. Nghĩ command > /bin/bash ...so với command > (/bin/bash ...).
MSalters

7
Câu cuối cùng đó thật khắc nghiệt ... :)
James phục hồi Monica Polk

6
@MSalters Một trích dẫn không đúng chỗ chạy như root . Đó là hai sai lầm. Tất nhiên, cái thứ hai, đang thử các đường ống phức tạp của bạn với quyền root chứ không phải là người dùng không có đặc quyền.
derobert

12
@JamesKPolk không, nó không khắc nghiệt chút nào. Đó là sự thật đơn giản. Kali là một công cụ chuyên nghiệp được thiết kế để được sử dụng bởi các chuyên gia . Họ thậm chí nói rất nhiều trên trang web của họ. Nếu bạn không phải là chuyên gia, bạn thực sự không có kinh doanh điều hành Kali.
terdon

3
Câu cuối không gay gắt. Đó là sự thật đơn giản.
Andrea Lazzarotto

65

Đừng tắt máy của bạn.

Bạn vẫn còn một vỏ chạy? Có phải là bash? Nếu vậy, bạn ổn. (Nhưng đừng làm điều này một lần nữa.)

Chạy:

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

Voila, tất cả đều tốt.


Vì ai đó trong các ý kiến ​​nghi ngờ rằng điều này hoạt động:

[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
Trong mọi trường hợp, sau đó, bạn nên cài đặt lại bash từ bản phân phối của mình, ví dụ: để có quyền chính xác (một số thợ săn rootkit có thể ngạc nhiên về các thay đổi ở đó), cũng để khôi phục liên kết cứng hoặc symlink (ví dụ: /bin/shhoặc rbash)
Giacomo Catenazzi

4
@GiacomoCatenazzi, thực ra, phương pháp này bảo tồn các quyền mặc định đó là mặc định khi rootchạy cp. Liên kết cứng là một điểm tốt, mặc dù.
tự đại diện

1
Máy đã được khởi động lại. Tôi không thể mở một vỏ bình thường, nhưng tôi có thể chỉnh sửa nội dung thông qua GUI. Như đã nói, tôi gặp lỗi "Không thể thực thi tiến trình con / bin / bash. (Quá nhiều cấp độ liên kết tượng trưng)."
GarrukApex

5

Nếu bạn có thể đăng nhập, nhưng bạn không thể mở một thiết bị đầu cuối hoặc truy cập shell, nhưng bạn có thể truy cập các tệp thông qua GUI, đi đến /bin, tìm các tệp có tên kết thúc bằng sh(nhưng không .sh) và chạy một (bằng cách nhấp đúp hoặc nhấp chuột phải). Cụ thể, hãy tìm những điều sau đây:

  • sh
  • dash
  • ash
  • ksh (hoặc kshtheo sau là một số; ví dụ  ksh93:)
  • zsh
  • yash

hoặc, như là một phương sách cuối cùng,

  • tcsh hoặc là
  • csh

Nếu bạn có thể chạy vỏ, hãy thử câu trả lời của Philippos .

Một cách tiếp cận khác là khởi động vào chế độ một người dùng theo các hướng dẫn này nhưng chỉ định init=/bin/sh(hoặc một trong các shell khác) thay vì init=/bin/bash.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.