Я не мог придумать существующий инструмент.
grep -F --binary --byte-offset --only-matching
кажется, достаточно близок - но Вы не можете выйти из новых строк с -F
. И cmp
только позволяет пропускать символы. diff
также, кажется, не помогает.
Но это - некоторые лайнер на языке программирования с достойной библиотекой. Например, как программа C++ с помощью Повышения:
#include
#include
#include
#include
using namespace boost;
using namespace boost::algorithm;
using namespace boost::iostreams;
using namespace std;
int main(int argc, char **argv)
{
if (argc != 3) {
cerr << "Call: " << argv[0] << " PATTERN_FILE SRC_FILE\n";
return 3;
}
mapped_file_source pattern(argv[1]);
mapped_file_source src(argv[2]);
iterator_range p_range(pattern.data(),
pattern.data() + pattern.size());
iterator_range s_range(src.data(), src.data() + src.size());
iterator_range result = find_first(s_range, p_range);
if (result) {
size_t pos = result.begin()-s_range.begin();
cout << pos << '\n';
return 0;
}
return 1;
}
Можно скомпилировать его как это (когда источник программы сохраняется как find.cc
):
$ make CXXFLAGS="-Wall -g" LDLIBS="-lboost_iostreams" searchb
Протестировать его:
$ dd if=WTF_-_EPISODE_277_RACHAEL_HARRIS.mp3 of=t skip=232323 bs=1 count=4K
$ ls -l t
-rw-r--r-- 1 juser users 4096 2012-05-31 15:24 t
$ ./searchb t WTF_-_EPISODE_277_RACHAEL_HARRIS.mp3
232323
Вывод является положением соответствия в исходном файле.
Если файл не содержится, статус выхода 1
.
Обновление: Тем временем я реализовал этот простой инструмент на нескольких языках (C/C ++/Python/Rust/Go) и включал те реализации в мой служебный репозиторий. Искать searchb*
. Реализация Python является самой короткой и не требует никаких внешних зависимостей.
Верить. :(. Я предполагаю, что мы рассматриваем однопользовательскую систему здесь, таким образом, SaK (уничтожают Ваш весь вход в систему) действительно не помогает.
Знайте свои индикаторы действия жесткого диска. Знайте, как удалить что-то быстро. Иногда это могло бы сохранить Вас, иногда это не будет.
Подкачка раньше работала терпимо. Теперь RAM быстрее, и более крупные, жесткие диски являются более крупными, но относительная скорость (и особенно произвольный доступ) ужасна. Windows поместил изрядный объем работы в установке верхней границы на чудовищности. Linux не имеет и просто позволяет Вам застрелиться.
Если Вы имеете достаточную RAM и не нуждаетесь в спящем режиме, можно рассмотреть подкачку отключения. При необходимости в спящем режиме... Вам нужна область подкачки тот же размер как Ваш поршень :(. Это, конечно, возможно к сценарию. Официальной поддержке, вероятно, недостает, хотя по крайней мере пополудни-utils имеет хорошую архитектуру для установки Ваших собственных рычагов. (Добавьте пользовательское устройство свопинга, прежде чем приостановят и удалят его после резюме; Вы, возможно, также должны добавить резюме = параметр загрузки).
Тем не менее ctrl+alt+f1 будет работать лучше, если у Вас будет переключение привилегированного режима. (Иначе X-сервер должен сделать некоторую работу, и это - процесс пространства пользователя. Все ядро всегда находится в RAM, в отличие от Windows, где некоторые части могут быть выгружены). Двоичные драйверы как Nvidia не являются Вашим другом здесь.
Во-первых, жаль о длине этого сообщения
Рискуя тем, чтобы походить на клише FOSS, в ответ на сравнение сделал с диспетчером задач Windows:
Одна вещь, которая поможет понять, почему некоторая вещь на GNU/Linux разработана путем, они, должен просто напомнить себе, что Windows не является контрольной точкой для дизайна большинства дистрибутивов Linux (кроме, возможно, Ubuntu). Например, Red Hat является корпорацией за миллиард долларов, но они добрались там путем представления себя на рынке корпоративным пользователям, как являющимся доступной более легкой к использованию альтернативой традиционным (собственным) поставщикам Unix и конкуренции против ОС как HP-UX Соляриса, AIX, и т.д. Большая часть развертывания Unix находится в дата-центрах высокого класса, таким образом, Unix был разработан с самого начала с идеей, что любой делающий обслуживание на нем будет иметь определенный уровень технического ноу-хау и оценит вещи как системная инертность, ясно определенный преобразовывают процессы и высокие уровни детализированного управления.
Это (рациональное) мышление находится в прямой оппозиции дизайну Окна: поместите все на направляющие, поместив Вас к единственному основному решению, которое можно затем выпустить под брендом собственным, внести несколько основных изменений в конфигурацию, и возможно, если Вы - опытный пользователь, входите и изменяете некоторый "низкоуровневый" материал (Концепция Администраторов Unix "низкого уровня", и Windows Admins значительно отличаются в результате этого различия в дизайне). Администраторам Windows, проверяющим/изменяющим HMAC на Kerberos AD, сервер рассматривают, будучи l33t (По крайней мере, я надеюсь, что средний AD администратор просто не знает об использовании AD хешей MD4), тогда как на Unix HMAC, издевательство пароля, и т.д. является просто частью установки сервера, просто будучи некоторыми из тех вещи, о которых Вы, как предполагается, думаете при разработке решения компании.
Это не должно говорить, что помещение вещей на направляющих для сокращения количества времени, использованного развертыванием, обязательно плохо, иногда Вам просто нужно решение, и значение, внесенное через административное управление, не делает тот уровень из явности стоящим. Поэтому Red Hat все еще разрабатывает вещи как FreeIPA (наведите и кликните по управлению Идентификационными данными), и ktune (основная производительность, настраивающаяся путем выбора "профиля", что лучшие соответствия надлежащее использование системы). Но с точки зрения Unix, большинство продуктов MS считается программным обеспечением, которое поощряет плохую этику административной работы (путем дезинформации Вас, какого вида из рабочего процесса является самым эффективным), особенно, если это используется для буквально каждой проблемы, которая сталкивается с Вашим столом. Это делает Ваше задание легче, но Вы отнимаете у своего работодателя для эффективности.
Я мог отчасти лупить точку (слишком поздно, правильно?) и начинают говорить о некоторых вещах, которые Windows делает, которые не имеют никакого технического смысла, но были реализованы так или иначе, но Вы получаете идею.
Существует большое избиение грудной клетки и положение от администраторов Unix/Linux в отношении дизайна Окна (и часть его является просто "ненавистниками, собирающимися ненависть" или перечеркивание эго со стороны динамика), но если Вы будете рыть в аргумент достаточно долго, то Вы будете видеть, что существует фундаментальное идеологическое деление о том, как ОС должна вести себя и каков Ваш стиль управления должен быть.
Ответить на проблему, хотя:
Это не дефицит дизайна, что Linux позволяет системе увязнуть как этот, это - проектное решение. Можно спорить о значениях по умолчанию, но Unix разработан с идеей, что администратор должен понять точно, что делает система. В рабочей среде маленького круглого щита, "это, как Unix делает это", не приемлемый ответ. Ваш босс собирается хотеть быть уверенным, что Вы знали точно, что произошло, когда проблема подошла и что Вам побеждали проблему на фундаментальном уровне так, чтобы это не возвращалось снова.
С ожиданием, что администратор оценит явность и системную инертность по непрозрачным автоматизированным процессам платформы, это оставляют до администратора определить, какое решение они хотят реализовать (как делает поставщика программного обеспечения, Вы никогда не взаимодействуете с непосредственно, знаете то, в чем нуждается Ваша компания, и обеспечьте ее из поля?). Unix/Linux предоставляет основные механизмы Вам, чтобы сделать Вашу работу с (надо надеяться, которые препятствуют тому, чтобы Вы были избыточны, "DRY" и все это), но они не попытаются разработать конечное решение для Вас.
То, чем Вы могли бы интересоваться, изучает механизмы ядра как уничтожитель OOM, который уничтожит процессы беглеца или в масштабе всей системы или на основе для каждого процесса (см. предыдущий переход для того, как сделать это). Cgroups в настоящее время являются предпочтительным механизмом для управления использованием ресурсов, но limits.conf существовал долгое время и может установить пределы на основе имени пользователя или состава группы (но это находится на основе на сессию).
Если конкретный пользователь или группа являются срыванием система, предположение дизайна на стороне поставщика - то, что Вы не должны хотеть помещать пределы на процесс (возможно, для корректного размещения временных скачков, или сжимать больше производительности из системы путем предотвращения строгих ограничений на приложении, которые могли бы вызвать нежелательную производительность приложения / поведение) и так позволит процессам подойти к OOM уничтожающие пределы.
Если это не так необходимо сделать что-то с cgroups или limits.conf так, чтобы независимо от того, что программное обеспечение вызвало эту проблему, содержится и не снижает систему. Это в отличие от Вашего ожидаемого поведения Windows, где (в этом случае) они действительно не дают Вам подписывание или уклонение, они просто отчасти просто делают это один путь, и если это не идеально для того, как Вы думаете, или для бизнес-процессов затем Вы просто испытываете необходимость, чтобы учиться иметь дело с ним. Большой дизайн Windows скрывает намеренные проектные решения позади достойных администраторов, говорящих нетехническим людям (добросовестно), что "это просто не, как система работает" или "это не то, как компьютеры работают", который является в основном набором уничтожения мысли логики, которую они поощряют администраторов брать.
В конечном счете Вы должны быть обеспокоены решением проблемы, а также содержащий его и egressing от нее. Для дизайна платформы я видел аргумент в пользу добавления Xorg и его потомков к своего рода значению по умолчанию cgroup, что Вы могли затем быть нацелены, но необходимо будет поднять это с Каноническим (я предполагаю, что это находится на Ubuntu из других комментариев). Существует некоторая базовая причина, эта проблема происходит, и она должна быть разрешена через один из них: 1) дополнительная аппаратная мощность, 2) ограничивающая/выделяющая доступ к приложению упомянутой способностью, 3) разрешая ошибки прикладного уровня как утечки памяти или программные ошибки.
Идея Hauke о вырезании конкретного tty для системного восстановления является на самом деле довольно хорошей, данной, что Вы говорите, что предпочитаете. Я добавил приложение на нем для получения его еще ближе к метке. Это - конкретное решение, которое можно разработать для себя, существует почти бесконечное множество перестановок, которые Вы могли выяснить для себя, все же.
Проблема может быть уменьшена при предоставлении ЦП и приоритета реального времени ввода-вывода к одному из gettys. Можно также создать другого пользователя с UID 0 и сделать его оболочку путем к электронному диску со статически связанной оболочкой. И продолжайте читать /etc/passwd
каждые несколько секунд так, чтобы это осталось в кэше.
Лучший подход может быть должен иметь выполнение процесса, которое останавливает процессы, которые используют к большому количеству RAM.
Редактирование 1:
Другая идея: Вы могли запустить вершину как корень в экране (оба с оперативным приоритетом) на одной виртуальной консоли и заблокировать экран автоматически. Таким образом Вам был бы нужен пароль root для использования вершины, но преимущество будет состоять в том, что процесс (процессы), в котором Вы нуждаетесь, уже работал бы. И поскольку они активно делали что-то, что они не выгрузить, но использовать и мало ЦП и мало памяти.
Поскольку Вы отметили, что SysRq все еще отвечает, Вы могли скорректировать приоритет процессов оскорбления OOM. Корректировка сделана путем записи в /proc/XYZ/oom_score_adj
, где XYZ является идентификатором процесса. Если процессы выходят из-под контроля, уничтожают одного из них с AltGr+SysRq+F при необходимости.
Вот мой сценарий, который делает это:
#!/bin/bash
# match any process containing "thunderb" or "chrome" - that's specific enough for me
for i in `ps ax | grep -E 'thunderb|chrome' | cut -f1 "--delimiter= "` ; do
fname=/proc/$i/oom_score_adj
if [ -f "$fname" ] ; then
# the higher the score, the more likely the process is
# to be chosen by the OOM killer
echo '900' > $fname
fi
done
Обратите внимание, что необходимо запустить этот скрипт как корень, и он уже будет только влиять на существующие процессы.
dmesg
видеть, загрузился ли прямой материал рендеринга при начальной загрузке и начал работать. Вот пример от моего поля Fedora. – Bratchley 27.05.2013, 19:09