Случайно выполняемая sudo комната/* на удаленном сервере

Иначе путем вызова интерпретатора и передачи пути к сценарию к нему:

/bin/sh /path/to/script

Точка и источник эквивалентны. (РЕДАКТИРОВАНИЕ: нет, они не: как KeithB указывает в комментарии к другому ответу, "." только работы в связанных с ударом оболочках, где "исходные" работы и в ударе и в csh связали оболочки.) Это выполняет оперативный сценарий (как будто Вы скопировали и вставили сценарий тут же). Это означает, что любые функции и нелокальные переменные в сценарии остаются. Это также означает, делает ли сценарий CD в каталог, Вы все еще будете там когда его сделанный.

Другие способы запустить скрипт выполнят его в его собственной подоболочке. Переменные в сценарии не все еще живы, когда он сделан. Если сценарий изменил каталоги, то он не влияет на среду вызова.

/path/to/script и сценарий/bin/sh немного отличается. Как правило, сценарий имеет "хижину" вначале, которая похожа на это:

#! /bin/bash

Это - путь к интерпретатору сценария. Если это указывает другой интерпретатор, чем Вы делаете при выполнении его то это может вести себя по-другому (или может не работать вообще).

Например, сценарии Perl и сценарии Ruby начинаются (соответственно):

#! /bin/perl

и

#! /bin/ruby

Если Вы выполняете один из тех сценариев путем выполнения /bin/sh script, затем они не будут работать вообще.

Ubuntu на самом деле не использует оболочку удара, но очень похожую, названную тире. Сценарии, которые требуют удара, могут работать немного неправильно при вызове путем выполнения /bin/sh script потому что Вы только что назвали сценарий удара с помощью интерпретатора тире.

Другая небольшая разница между вызовом сценария непосредственно и передачей пути сценария к интерпретатору - то, что сценарий должен быть отмечен исполняемый файл, чтобы выполнить его непосредственно, но не выполнить его путем передачи пути к интерпретатору.

Другое незначительное изменение: можно снабдить префиксом любой из этих способов выполнить сценарий с оценкой, таким образом, Вы можете иметь

eval sh script
eval script
eval . script

и так далее. Это ничего на самом деле не изменяет, но я думал, что буду включать его для тщательности.

11
06.08.2014, 15:54
4 ответа

rm /* должен удалить очень мало. Существует нет -r отметьте там, который рекурсивно удалил бы что-либо, и без него, каталоги не будут удалены (и даже если каталоги были удалены, только пустые могут быть удалены). Этот ответ утвержден при условии, что Вы не работали rm -rf /*.

Единственные файлы в корневой файловой системе последствия могут быть символьными ссылками на ядро и initrd (хотя в одной системе Ubuntu я смотрю на, они не существуют), или a /lib64 символьная ссылка в 64-разрядных системах.

Проблема может просто состоять в том что /lib64 -> /lib символьная ссылка была удалена. Это довольно противно, хотя, поскольку примерно каждая программа будет полагаться на ту символьную ссылку:

$ ldd /bin/bash
...
    /lib64/ld-linux-x86-64.so.2 (0x00007f8946ab7000)

Это ld-linux динамический загрузчик, и если это не доступно, Вы не можете выполнить динамические исполняемые файлы. Это сделает чрезвычайно трудным войти в систему, и Вы не можете вообще.

Один спаситель может быть busybox. Выполните это для проверки:

$ ldd /bin/busybox
    not a dynamic executable

В этом случае busybox должен быть выполнимым, но вопрос состоит в том, как можно выполнить его?

Если у Вас есть доступ к подсказке загрузчика, Вы можете загружаться с init=/bin/static-sh, где статичный-sh символьная ссылка на busybox (проверьте это /bin/static-sh существует - это делает в моей системе, но это не стандартная Ubuntu. Эта ошибка предполагает, что это, доступно.)

После того как у Вас есть корневая оболочка, можно воссоздать /lib64 символьная ссылка. Вы, возможно, должны сначала повторно смонтировать корневую файловую систему как чтение-запись. busybox нужно встроить эти инструменты, которые можно выполнить следующим образом:

# busybox mount -o remount,rw /
# busybox ln -s /lib /lib64
# /bin/bash
bash# 

Если удар работает, проблема должна быть решена.

26
27.01.2020, 19:56

Если необходимо восстановить файлы с текущей установки, попросить, чтобы хост помог Вам. Принятие его является VM, требуется приблизительно пять минут их дня, чтобы отобразить Ваш диск, переустановить Ваш хост с нуля и вывести старый образ диска в Вашей новой файловой системе.

Если Вы ни в чем не нуждаетесь, просто заставляете их переустанавливать. Почти всегда более быстрая опция, когда Вы снимаете с костей вещи трудно.

18
27.01.2020, 19:56
  • 1
    Согласиться. Если они - довольно компетентная услуга хостинга VM, они должны смочь сделать это. Свяжитесь с ними как можно быстрее, чтобы удостовериться, что у них все еще будет резервное копирование перед провалом. –  Shadur 09.08.2011, 14:03

Не имея доступа к физическому серверу нет очень, можно сделать.

1
27.01.2020, 19:56
  • 1
    Так, я должен попросить формат затем или являюсь там способом восстановить те файлы, не хлеща все остальное? –  Ant 09.08.2011, 02:50
  • 2
    Вы забываете, что существует высокая вероятность, что это - виртуальный сервер, в этом случае, "физический сервер" не означает много кроме наличия доступа к высокоуровневым удаленным инструментам. –  Caleb 09.08.2011, 19:36

Если Вы просто удалили/lib64 символьную ссылку на / lib, и у Вас все еще есть открытая консоль, просто сделайте:

/lib/ld-linux-x86-64.so.2 /bin/ln -s /lib /lib64

и необходимо смочь к командам выполнения обычно снова. Скорректируйте путь к своей фактической ld библиотеке. Можно также выполнить любую другую команду, которую Вы хотите, просто снабдив его предисловием с полным ld путем к библиотеке.

2
27.01.2020, 19:56

Теги

Похожие вопросы