UNIX означал Сценарий оболочки / Команды

Ну, существует несколько случаев:

  1. Этот диск является частью RAID-массива. Хороший. Просто имейте 'восстановление' md массив как это: echo 'repair' > /sys/block/md0/md/sync_action. Проблема решена без потери данных. (Я предполагаю, что это не имеет место для Вас, но действительно необходимо считать изменение этим.)
  2. Вы не заботитесь о данных по диску (или нет никого). Просто используйте dd для обнуления целого диска.
  3. Сбойные блоки являются частью свободного пространства на диске. Используйте, например, cat /dev/zero > tempfile заполнить свободное пространство нулями. Сделайте это как корень (существует пространство, зарезервированное только для корня), вероятно, в однопользовательском режиме (таким образом, ничто не повреждается от исчерпывания пространства). После этого исчерпывает пространство, удалите файл (rm tempfile).
  4. Сбойные блоки являются частью данных (файлы) или метаданные (структура файловой системы) на диске. Вы потеряли данные. fsck -fc (выполненный с файловой системой размонтированный, или худший случай в только для чтения во время ранней начальной загрузки, если это - корневая файловая система) скажет Вам который файлы. Замените их от резервного копирования.

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

Если Вы хотите написать сценарий его на основе вывода badblocks (который не безопасен, это оставляет Вас с тихим повреждением), это довольно легко. Каждая строка вывода badblocks дает Вам номер блока, на основе Вашего размера блока (512 в Вашем примере). Используйте тот же размер блока для dd's bs. Номер блока - Ваш seek для dd. Ваш count 1 (или выше, если существует несколько сбойных блоков подряд). of раздел (или диск), Вы работали на badblocks. Польза if /dev/zero.

1
16.12.2018, 06:10
3 ответа

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

Очень простой make-файл мог бы быть похожим на это:

myproject: myproject.cpp
    g++ myproject.cpp -o myproject

По умолчанию make выбирает первую цель, если Вы не будете указаны, так как существует только один в этом случае, она сделает то, что Вы видите там. Цель является маркировкой перед двоеточием (myproject); после двоеточия необходимые как условие цели. Если те цели не перечислены, они, как предполагается, являются файлами. В этом случае, если myproject.cpp не изменился, так как вывод цели myproject сделал ("myproject" двоичный файл), делает, ничего не делает. Если это имеет, это перекомпилировало.

Значение использования делает, становится более ясным, поскольку вещи становятся более сложными:

flags = -Wall -g -O2

myproject: myproject.h myproject.cpp somepart.o
    g++ $(flags) somepart.o myproject.cpp -o myproject

somepart.o: somepart.h somepart.cpp
    g++ $(flags) -c somepart.cpp -o somepart.o

.h файлы являются prereqs с тех пор, если Вы изменяетесь один, Вы хотите части, требующие перекомпилированного. Таким образом, теперь можно сделать make somepart.o чтобы просто скомпилировать объект, или можно сделать make который будет использовать первую цель (myproject), который требует актуального "somepart.o", поэтому если это не будет доступно, то она сделает все этим также.

Выполнение этого со сценарием удара не так легко, который является, вероятно, почему make оказался. К сожалению, "приобретение навыка его" может занять немного времени. l0b0 уже связан с этим:

http://www.gnu.org/software/make/manual/make.html

Остерегайтесь сначала, которые делают, пробел, чувствительный особенно относительно использования фактических вкладок и не пробелов.

3
27.01.2020, 23:13

Для этого Вы обычно использовали бы make compile, но можно легко прокрутить собственное путем создания названного сценария MyProject который проверяет $1 для предварительно установленного списка подкоманд:

case "$1" in
    compile)
        my_compile_command(s)
        shift
        ;;
    *)
        echo "$0: Unknown command: $1"
        exit 1
        ;;
esac

Ссылки:

2
27.01.2020, 23:13
  • 1
    Спасибо за это. Есть ли какое-либо определенное учебное руководство, которое может объяснить процесс далее? То, что Вы знаете о –  Phorce 29.01.2013, 16:16

Лучше сохраните стандартные команды. Т.е. make компилирует Ваш проект, и так далее. Легче для сотрудников взять, намного легче настроить, менее случайный материал, чтобы помнить (или настроить на следующей машине/проекте). Большинство проектов Вы продолжите работать, не будет Вашим, и хранение, что оборудование как патч по ним будет большим количеством стычки.

2
27.01.2020, 23:13

Теги

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