Cách chỉnh sửa .bashrc mà không cần đăng nhập


17

Đây có lẽ là một câu hỏi trùng lặp, nhưng tôi không đủ quen thuộc với quy trình đăng nhập / khởi động của CentOS (đặc biệt là trên máy ảo) để biết cần tìm gì.

Tôi đang chạy CentOS 7 trong VirtualBox. Tôi vô tình nối vào gnome-terminalcuối ~/.bashrctập tin của tôi . Vì vậy, bây giờ một cửa sổ đầu cuối bật lên khi tôi đăng nhập. Phiên cuối đó thực thi .bashrc, mở ra một cửa sổ khác, v.v., và tôi tràn ngập một tấn gnome-terminalcửa sổ đầu cuối.

Tôi đang cố gắng đăng nhập vào một phiên cuối mà không có thông tin đăng nhập GUI (vì vậy gnome-terminalkhông thành công), nhưng tôi không thể khởi động nó mà không có GUI. Tôi đã thử sử dụng các câu trả lời cho câu hỏi này, nhưng không thành công. Tôi nhận được thông tin đăng nhập GUI mỗi lần: Làm cách nào để khởi động CentOS trong CLI? . Có cách nào khác để chỉnh sửa cấu hình grub khi khởi động hay cách để đến một phiên bản thiết bị đầu cuối mới từ thông tin đăng nhập GUI, như Ctrl + Alt + F1 trong Ubuntu không? (Vâng, tôi đã thử nó. Nó không hoạt động trong CentOS 7 hoặc nó không hoạt động trong VirtualBox VM.) Hoặc có một số cách khác tôi có thể có phiên cuối mà không cần GUI, vì vậy tôi có thể chỉnh sửa .bashrcvà sửa chữa mớ hỗn độn này?


4
sshdtrên VM đó? Nhiều cách. 1) Bắt đầu như đơn chế độ người dùng (ví dụ nhập vào lúc khởi động, chọn hạt nhân, báo chí một, append đơn , nhập ...) 2) nếu trong hệ thống của bạn chạy VM sshd bạn có thể cố gắng sao chép của bạn .bashrcSửa và nó sao chép lại ( scp, sftp rsync ...). 3) bạn có thể đăng nhập như một người dùng khác và thực hiện su -... 4) từ một máy khác (thậm chí là ảo) bạn có thể thực hiện ssh user@host mv .bashrc bashrcToModifysau đó đăng nhập, sửa đổi ... 0) Trước khi tất cả CTRL ALT F1hoạt động từ VM?
Hastur

2
Khi bạn nói "vô tình nối gnome-terminal", điều đó đã xảy ra như thế nào?
mcfedr

@mcfedr Mình đang đợi ai đó hỏi XD. Tôi đã hiểu lầm những gì .bashrcđã được cho. Tôi nghĩ rằng nó đã được chạy một lần khi đăng nhập, nhưng nó chạy mỗi khi bất kỳ phiên shell nào được bắt đầu. Tôi muốn một cửa sổ đầu cuối bật lên mỗi khi tôi đăng nhập, vì vậy tôi đã làm echo 'gnome-terminal' >> ~/.bashrc. Ý kiến ​​tồi. Tôi đoán tôi nên đặt gnome-terminaltrong /etc/init.dhoặc một nơi nào đó? Tôi vẫn đang cố gắng để hiểu quá trình khởi động.
Michael Hoffmann

Câu trả lời:


13

CtrlAltF1có thể bị bắt bởi máy chủ hoặc VirtualBox có thể không truyền đúng. Một vài thử nghiệm nhanh cho tôi biết rằng bạn có thể sử dụng khóa Máy chủ được xác định trong VirtualBox thay vì CtrlAlt(có thể là bên trái Ctrlhoặc bên trái trên máy Mac). Vì vậy, nhấn F1chuyển sang TTY1 trong VirtualBox cho tôi (và tương tự để F7quay lại GUI).


1
Vâng Điều đó đã làm việc. Ctrl + F2 đã lừa tôi. Có vẻ như Ctrl + F1 là phiên GUI trong CentOS, nhưng đó là nguyên tắc tương tự. IMO đây là giải pháp đơn giản nhất - không cần thêm phương tiện hoặc chỉnh sửa cấu hình khởi động. Tôi đánh dấu đây là câu trả lời.
Michael Hoffmann

2
@MichaelHoffmann có, đó sẽ là hiệu ứng của một CentOS mới hơn tôi có. Hành vi GDM đã thay đổi từ 6 đến 7 để sử dụng TTY có sẵn đầu tiên thay vì TTY 7.
muru

2
Nó sẽ thay đổi hơn nữa trong các bản phát hành trong tương lai: Màn hình đăng nhập sẽ ở trên vconsole 1 và mỗi người dùng đồ họa đã đăng nhập sẽ chiếm từng vconsole tiếp theo (khi bạn đăng nhập, phiên của bạn sẽ ở vconsole 2, nếu bạn chuyển đổi người dùng tiếp theo sẽ là trên vconsole 3, v.v.).
Michael Hampton

24

Bạn có thể khởi động với đĩa CD Linux trực tiếp và sau đó gắn hệ thống tệp CentOS và chỉnh sửa tệp .bashrc từ đó.


2
Giải pháp đơn giản nhất. Cũng hoạt động cho các cấu hình sai ngăn chặn đăng nhập hoặc thậm chí khởi động hoàn toàn (miễn là bạn biết cái gì sai và làm thế nào để đảo ngược nó.)
alexis

Điều này cực kỳ đơn giản, đặc biệt là khi người dùng VirtualBox được đảm bảo khá nhiều để có ISO của hệ điều hành khách ngồi xung quanh. Nhưng tôi sợ tôi phải chọn câu trả lời của muru vì nó thậm chí còn đơn giản hơn. Cảm ơn bạn đã đóng góp.
Michael Hoffmann

15

Ban đầu / bin / sh từ cấu hình grub

Bạn có thể chỉnh sửa cấu hình grub của mình để tải lên một vỏ gốc thay vì vào GUI.

  1. Khởi động lại máy ảo của bạn
  2. Khi menu grub xuất hiện, chọn mục nhập đầu tiên và nhấn eđể chỉnh sửa. Nếu nó không xuất hiện, khởi động lại và giữ Shift trong khi khởi động
  3. Tìm dòng bắt đầu bằng linux16hoặc linux. Của tôi trông như thế này. Bạn có thể khác nhau một chút

    linux16 /vmlinuz-3.10.0-327.18.2.el7.x86_64 root=/dev/mapper/centos-root ro crashkernal=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF8
  4. Thay đổi rođể rw( readonly cờ để ReadWrite , do đó bạn có thể ghi các thay đổi) và append init=/bin/shvào dòng. Điều này bảo linux chạy /bin/shthay vì initkhởi động. Ví dụ cho mục nhập của tôi

    linux16 /vmlinuz-3.10.0-327.18.2.el7.x86_64 root=/dev/mapper/centos-root rw crashkernal=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF8 init=/bin/sh
  5. Nhấn Ctrl-X để chạy cấu hình. Nó sẽ không được cứu.

  6. Một vỏ gốc sẽ xuất hiện. Sử dụng nó để chỉnh sửa .bashrcvà loại bỏ các dòng vi phạm.

    Lưu ý rằng bạn không nên tiếp tục sử dụng HĐH ở trạng thái này vì shell sẽ chạy dưới dạng PID 1, thường được dành riêng cho initquá trình. Bạn có thể tiếp tục init bằng tay exec /sbin/initnhưng tôi khuyên bạn chỉ nên khởi động lại

  7. Khởi động lại như bình thường. Những thay đổi trước đây của bạn sẽ bị lãng quên.

Về cơ bản, chúng tôi đang chỉnh sửa các tùy chọn khởi động được chuyển cho Linux từ GRUB, điều này bảo Linux gắn kết hệ thống tập tin gốc đọc và bắt đầu /bin/shcho quá trình init

Điều này hoạt động với tôi bằng cách sử dụng Centos 7 và VirtualBox 4.3.12


Hừm ... nó hoạt động hoàn hảo (và hơi phiền một chút - ai đó có thể làm điều này với máy tính xách tay của tôi để lấy vỏ gốc không có thông tin xác thực không?). Nhưng nó đã gây ra sự hoảng loạn hạt nhân khi tôi thoát khỏi vỏ, vì vậy tôi không biết liệu tôi có thể đánh dấu đây là câu trả lời không ... Bạn có thể giải thích tại sao điều này hoạt động không? làm gì rovà làm rwgì Hoặc tốt hơn, có một manpage cho linux16? Tôi đang làm gì ở đây?
Michael Hoffmann

5
@MichaelHoffmann đây là một cách tiêu chuẩn, nổi tiếng để lấy root - bạn phải mật khẩu bảo vệ bộ nạp khởi động để chặn điều này. Nó gây ra sự hoảng loạn hạt nhân vì init không bao giờ được thoát ra, nhưng sự hoảng loạn là vô hại. Bạn có thể tiếp tục khởi động bằng exec /sbin/inithoặc bất kể thực tế initlà gì. Các tùy chọn rorwgắn kết root chỉ đọc hoặc đọc-ghi. Về cơ bản, bạn đang chỉnh sửa menu GRUB để yêu cầu nó khởi động Linux với các tùy chọn này, điều này bảo Linux gắn kết hệ thống tập tin gốc đọc và ghi sh cho init.
muru

1
@muru Tôi đã thêm một vài bình luận của bạn vào câu trả lời để giúp mọi thứ rõ ràng hơn.
lex

6

scp một bản sao được sửa chữa .bashrcvào vị trí

Nếu bạn có một máy khác để làm việc, hãy lấy một bản sao tệp bị hỏng và khắc phục sự cố, sau đó đặt nó trở lại nơi nó đến. Điều này tránh đăng nhập và gọi bất kỳ lệnh đăng nhập nào.

user@backup ~ $ scp user@homehost:~/.bashrc busted.bashrc
user@backup ~ $ vim busted.bashrc # fix, fix
user@backup ~ $ scp busted.bashrc user@homehost:~/.bashrc
user@backup ~ $ rm busted.bashrc

Phụ lục: Như OP chỉ ra bên dưới, điều này yêu cầu quyền truy cập SSH homehost. Nếu đó không phải là một tùy chọn nhưng thay vào đó FTP / SFTP có sẵn, bất kỳ phương thức truyền tệp nào cũng sẽ làm những gì bạn cần, chỉ đơn giản là cài đặt tệp đăng nhập đã sửa.


1
Điều này hoạt động, nhưng chỉ khi VM sshdchạy trên nó (mà tôi không chắc chắn CentOS làm theo mặc định) và nếu mạng được cấu hình đúng với VirtualBox và trong máy chủ và trong VM.
Michael Hoffmann
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.