Большинство дистрибутивов Linux включает параметры конфигурации, используемые для компиляции ядра в /boot/config-<kernel-version>
.
Так
grep -x 'CONFIG_PACKET=[ym]' "/boot/config-$(uname -r)"
Должен сказать Вам если AF_PACKET
поддержка сокета включена (m
поскольку как модуль).
Иначе можно просто попытаться создать сокет (использование socket(2)
, посмотрите packet(7)
поскольку, как сделать это) в семействе AF_PACKET и проверке, если отчеты ошибка.
С помощью zsh
на терминалах, поддерживающих 16 или более цветов ля xterm
:
preexec() printf '\e[90m' # set foreground color to grey before running
# the command
precmd() printf '\e[m' # reset the foreground color before issuing the
# next prompt.
Обратите внимание, что команды могут сами изменять цвет переднего плана терминала.
STDOUT и STDERR не имеют цветов. То, что имеет цвет, является вашим терминалом (эмулятором); он имеет один передний план (и один цвет фона) одновременно.
Также следует отметить, что STDOUT и STDERR не являются единичными - это для каждого процесса выходных потоков. Нет глобального STDOUT, который применялся бы ко всем программам. Эти потоки направляются на ваш терминал, но они специфичны для каждого процесса.
Эмуляторы терминала обычно имеют возможность задать палитру через меню, так что по умолчанию передний план (применяется к данным, полученным через и через потоки STDOUT и STDERR) может быть любым. Вы также можете применить коды цвета ANSI в своем запросе и , если вы не сбросите цвет с помощью \[\033[0m\]
в конце, он будет продолжать применяться. Обратите внимание, что некоторые приложения используют их и сбрасывают, так что это не очень идеальный метод, так как сбрасывание вернется к терминалу по умолчанию.
Если настройка терминала на переднем плане - не то, что вы хотите, вы можете отфильтровать STDOUT/STDERR на основе каждого процесса; смотрите предложения здесь.
.Предполагая, что у вас достаточно памяти для приостановки файла, вы можете попробовать
perl -e 'use List::Util 'shuffle'; @k=shuffle(<>); print @k[0..999]' file.bed
Поскольку вы хотите сделать это 10000 раз, я бы рекомендовал интегрировать повторение в сценарий и перетасовать индексы , а не сам массив для ускорения:
$ time perl -e 'use List::Util 'shuffle';
@l=<>; for $i (1..10000){
open(my $fh, ">","file.$i.bed");
@r=shuffle(0..$#l);
print $fh @l[@r[0..999]]
}' file.bed
real 1m12.444s
user 1m8.536s
sys 0m3.244s
Выше создано 10000 файлов по 1000 строк каждый из файла, который содержал 37000 строк (пример файла повторяется 1000 раз). Как видите, на мою систему ушло чуть больше трех минут.
используйте List:: Util 'shuffle';
: импортирует модуль Perl, предоставляющий функцию shuffle ()
, которая рандомизирует массив. @ l = < >;
: загрузите входной файл ( < >
) в массив @ l
. для $ i (1.. 10000) {}
: запустите этот 10000 раз. @ r = shuffle (0.. $ # l);
: $ # l
- количество элементов в @ l
, поэтому @ r
теперь является рандомизированным списком индексных номеров массива @ l
(строки входного файла). открыть (мои $ fh, «>», «файл. $ i.bed»);
: открыть файл с именем файл. $ i.bed
для записи. $ i
будет принимать значения от 1 до 10000. print $ fh @ l [@ r [0.. 999]]]
: возьмите первые индексы 1000 в перетасованном массиве и напечатайте соответствующие строки (элементы @ l
). Другой подход заключается в использовании shuf
( thanks @ frostschutz ):
$ time for i in {1..10000}; do shuf -n 1000 file.bed > file.$i.abed; done
real 1m9.743s
user 0m23.732s
sys 0m31.764s
-121--36529- Есть много способов сделать это, конечно, но почему вы хотите? Это то, что файл fstab
является для .
Некоторые идеи:
монтирование
). Это, похоже, вопрос с XY-проблемой - она не просит нужного решения:
Предположим, что выход окрашен, а пустая часть экрана имеет другой цвет или заполнена символом.
Подумайте о том, как вы ожидаете, что выход будет искать эти случаи:
Пустая строка ? Строки, заполненные только пробелами? Строки только с одним космосом ? С одной вкладкой? С одним космосом и одной вкладкой? С одной вкладкой и одним космосом? Да, они все выглядят по-разному !
Или вы хотите, чтобы пустая строка выглядела как - просто пустая строка ?
Если это так, вы не хотите окрашивать выходные потоки, на самом деле, и этот ответ применим .
Я приведу аналогичный подход к решению @ StéphaneChazelas, но «обратный»:
Вы можете , технически, цвет STDOUT и STDERR, строка за строкой , с добавлением правильных кодов побега к началу и концу строки в обоих потоках.
Необходимо сбросить цвет хотя бы для каждой строки, поскольку в противном случае любая программа, использующая цвет, например ls
, испортит работу терминала .
Вы просто имеете мало контроля над цветом вывода - так что это трудно получить правильно в лучшем случае.
Но: Вы контролируете все остальные цвета, верно?
И вам нужен только один цвет? Отлично!
Установите цвет клемм по умолчанию на STDOUT/STDERR, а остальные - как вы предпочитаете.
Можно раскрасить подсказку оболочки и использовать код подсказки для раскрашивания других деталей.
Конечно, несколько сложно раскрасить командную строку , где вы редактируете свою команду, но это вполне возможно.
Но не пытайтесь это с bash
, если вы можете использовать zsh
, так как код обработки подсказки это гораздо более гибко там - это то, что вам понадобится.
Теперь установите для клемм цвет переднего плана по умолчанию серый и, возможно, фоновый - но постарайтесь оставить его прозрачным/неопределенным.
Чтобы задать цвет фона командной строки, просмотрите этот пример из Изменить цвет фона командной строки в zsh при изменении темы приглашения :
PROMPT="%{$bg[cyan]%}%{$fg[red]%}%n%{$reset_color%}%{$bg[cyan]%}@%{$fg[red]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%{$bg[cyan]%}%% "
(Жесткая часть получает неиспользуемые концевые разделы строк в различных ситуациях правильно.)