Таблицы маршрутизации Linux

Предполагая, что у вас достаточно памяти для приостановки файла, вы можете попробовать

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 является для .

Некоторые идеи:

  • Создайте системное монтирование или автомонтирование (или просто простой сценарий запуска, выполняющий монтирование ).
  • Для запуска монтирования используйте crontab.
  • Наличие сценария запуска в среде рабочего стола.
  • Найдите инструмент в официальных репо или AUR, который сделает это для вас (у меня нет рекомендации).
  • Вставьте злой взлом, где бы вы ни выбрали.

-121--114493-

Это, похоже, вопрос с 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]%}%% "

shell prompt example

(Жесткая часть получает неиспользуемые концевые разделы строк в различных ситуациях правильно.)

0
07.04.2014, 16:58
5 ответов
[1125817] Ты не совсем правильно понял. Первые две строки говорят о том, что нет "шлюза" для достижения сетей 10.0.0.0/24 и 10.1.1.0/24, но они доступны через соответствующие интерфейсы [1126320]eth1[1126321] и [1126322]eth0[1126323], соответственно. Таким образом, если вы хотите отправить пакет на 10.0.0.1, пакет отправляется по [1126324]eth1[1126325], пакет на 10.1.1.47 по [1126326]eth0[1126327].[12126]Чтобы достичь "интернета", адрес назначения не будет в сетях 10. 0.0.0/24 или 10.1.1.0/24, так что последняя строка будет совпадать (0.0.0.0/0), и ядро будет знать, что оно должно послать пакет на заданный шлюз (10.0.0.1). Будет принято зависимое решение о маршрутизации, чтобы решить, как достичь этого шлюза, и, как упоминалось ранее, это станет возможным, если посылать пакет по интерфейсу [1126328]eth1[1126329].[1125820].
1
28.01.2020, 02:52
[1125821]Экономические маршрутизаторы, имеют 2 IP-адреса[12127]LAN, 99% - это 192.168.1.1 и мы можем ([12128]should[12129]) изменить его.[12130]WAN. Он назначается автоматически ISP[12131]The Gateway (Шлюз) - это адрес, которому предназначен пакет, в каждом компьютере он устанавливается с помощью DHCP (в большинстве случаев), если шлюз не установлен, компьютеры в вашей локальной сети могут общаться, но не могут посылать пакеты наружу.[12132]Здесь вы можете найти ответ, который хорошо объяснен: [1126334]https://stackoverflow.com/questions/8599424/understanding-routing-table-entry[12133]
0
28.01.2020, 02:52
[1126620] в вашей таблице маршрутизации, которую ваш компьютер знает о 2 подсетях.[1127076]. 1- 10.0.0.0/24 [1127077] 2- 10.1.1.0/24 [1127078] оставшийся трафик будет отправляться на ваш шлюз (10.0.0.1).

enter image description here

что это значит? если вы посылаете пакет addres из подсети 1, то ваш компьютер попробует послать его через eth1.

enter image description here

Ответ на ваш вопрос в том, что eth1 - ближайший "интернет", потому что каждый запрос в интернет будет идти через 10.0.0.1 (шлюз).[1126625].
0
28.01.2020, 02:52


Итак, мой вопрос в том, какой интерфейс ближе к Интернету?

enter image description here

  • Ни один из них - 10.0.0.0/8 не является глобально маршрутизируемым по состоянию на RFC 1918. Однако, в третьей записи говорится, что 10.0.0.1 является шлюзом по умолчанию (трафик к 0.0.0.0/0 идет туда, за исключением пунктов назначения 10.0.0.0/24 и 10.1.1.0/24), которые могут иметь маршрут (с использованием NAT) в Интернет. В этом случае eth1 является "ближе" к Интернету (в подходящем смысле). [1126691]
0
28.01.2020, 02:52

Когда пакет отправляется в стек IP , драйвер ищет в таблице маршрутизации маршрут, который лучше всего соответствует IP-адресу назначения. Он делает это, выполняя двоичный файл и адрес назначения, определенный в каждом маршруте, и пункт назначения, определенный в пакете. Какой из результатов наиболее точно соответствует назначению, определенному в пакете, является маршрутом, который использует драйвер. Если для этого маршрута определен шлюз по умолчанию, пакет отправляется на этот шлюз.Если для этого маршрута не определен шлюз, предполагается, что пункт назначения находится в локальной сети, и пакет отправляется непосредственно в пункт назначения.

Таким образом, пакет с адресом назначения 10.1.1.67 будет соответствовать маршруту 10.1.1.0/24 и уйдет через порт eth0, как настроено вторым маршрутом. Пакет с адресом назначения 10.0.0.84 уйдет на eth1 в соответствии с настройкой первого маршрута. Любой другой адрес назначения будет соответствовать только третьему маршруту и ​​уйдет через eth1.

0
28.01.2020, 02:52

Теги

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