В чем разница между & ldquo; Redirection & rdquo; и & nbsp; Труба & rdquo ;?

Мой ноутбук оснащен чипсетом Broadcom 4313, который использует тот же самый драйвер, что и ваш. Одна вещь, которую я наблюдал, заключается в том, что при устойчивом и относительно высоком сетевом трафике связь будет снижаться примерно на 10 секунд каждые 2 минуты. Это связано с тем, что драйвер сканирует точки доступа каждые 2 минуты, но не может это сделать, если ссылка поднята;

Я не уверен, почему это происходит, но обходной путь, который я нашел, это

Найти аппаратный адрес для вашего доступа точка. Один из способов сделать это - использовать команду iwconfig и посмотреть, где она говорит «Точка доступа:». У него будет адрес, похожий на AA: BB: CC: DD: EE: FF. Откройте индикатор «Сети», затем перейдите в «Редактировать подключения». Выберите свое беспроводное соединение, нажмите «Редактировать» и в поле BSSID (НЕ SSID), поместите аппаратный адрес с вашей точки доступа. Затем сохраните соединение.

Я думаю, что происходит, если настроен BSSID, драйвер знает MAC-адрес маршрутизатора и не должен пытаться найти его каждые 2 минуты. Если он не настроен, все, что он знает, это SSID, и ему необходимо проверить MAC-адрес и по какой-то причине хочет сделать это постоянно.

1
задан 1 April 2015 в 12:38

5 ответов

Если значение foo > bar будет зависеть от того, есть ли команда с именем bar, которая сделает использование перенаправления намного сложнее и подвержено большей ошибке: каждый раз, когда я хочу перенаправить файл, мне сначала нужно было проверить, есть команда, названная как мой файл назначения.

17
ответ дан 25 May 2018 в 07:49

Существует существенное различие между двумя операторами:

ls > log.txt -> Эта команда отправляет вывод в файл log.txt. ls | grep file.txt -> Эта команда отправляет вывод команды ls в grep через использование pipe (|), а команда grep ищет файл.txt во входном файле, предоставленном ему предыдущей командой.

Если вам нужно было выполнить одну и ту же задачу с использованием первого сценария, это будет:

ls > log.txt; grep 'file.txt' log.txt

Таким образом, канал (с |) используется для отправки вывода для другой команды, тогда как перенаправление (с >) используется для перенаправления вывода в некоторый файл.

10
ответ дан 25 May 2018 в 07:49

Из Руководства по системному администрированию Unix и Linux:

Перенаправление Оболочка интерпретирует символы & lt;,> и >> как инструкции для перенаправления ввода или вывода команды в файл или из него. Трубы Для подключения STDOUT одной команды к STDIN другого используйте | символ, обычно известный как труба.

Итак, моя интерпретация: если это команда для команды, используйте трубу. Если вы выходите в файл или из него, используйте перенаправление.

8
ответ дан 25 May 2018 в 07:49

Существует сильная синтаксическая разница между двумя:

Переадресация - это аргумент для программы. A pipe разделяет две команды

. Вы можете думать о таких переадресациях: cat [<infile] [>outfile] , Это означает, что порядок не имеет значения: cat <infile >outfile совпадает с cat >outfile <infile. Вы даже можете смешивать перенаправления с другими аргументами: cat >outfile <infile -b и cat <infile -b >outfile оба прекрасно подходят. Также вы можете объединять более одного входа или выхода (входы будут считываться последовательно, и все выходные данные будут записываться в каждый выходной файл): cat >outfile1 >outfile2 <infile1 <infile2. Целью или источником перенаправления может быть либо имя файла, либо имя потока (например, 1, по крайней мере, в bash).

Но трубы полностью разделяют одну команду из другой команды, t смешивать их с аргументами:

[command1] | [command2]

Труба берет все, что записано на стандартный вывод из команды1, и отправляет его на стандартный ввод команды2.

Вы также можете комбинировать трубопроводы и перенаправление. Например:

cat <infile >outfile | cat <infile2 >outfile2

Первый cat будет читать строки из infile, затем одновременно записывать каждую строку в outfile и отправлять ее ко второму cat.

В второй cat, стандартный ввод сначала считывается из трубы (содержимое infile), затем считывается из infile2, записывая каждую строку в outfile2. После выполнения этого outfile будет копией infile, а outfile2 будет содержать infile, за которым следует infile2.

Наконец, вы действительно делаете что-то действительно похожее на ваш пример, используя перенаправление «здесь строки» (только для семейства bash) и backticks:

grep blah <<<`ls`

даст тот же результат, что и

ls | grep blah

Но я думаю, что версия перенаправления сначала будет считывать весь вывод ls в буфер (в памяти ), а затем подайте этот буфер на grep по одной строке за раз, тогда как версия с каналами будет принимать каждую строку от ls по мере ее появления и передать эту строку grep.

1
ответ дан 25 May 2018 в 07:49
  • 1
    Nitpick: порядок имеет значение при перенаправлении, если вы перенаправляете один fd на другой: echo yes 1>&2 2>/tmp/blah; wc -l /tmp/blah; echo yes 2>/tmp/blah 1>&2; wc -l /tmp/blah Кроме того, перенаправление в файл будет использовать только последнее перенаправление. echo yes >/tmp/blah >/tmp/blah2 будет записываться только в /tmp/blah2. – muru 24 August 2014 в 03:49
  • 2
    Перенаправление не является фактически аргументом для программы. Программа не знает и не заботится о том, куда идет ее выход (или поступает ввод). Это просто способ сообщить bash, как организовать вещи перед запуском программы. – Alois Mahdal 23 April 2015 в 21:33

Сегодня я столкнулся с проблемой в C. По сути, у Трубы есть и другая семантика для перенаправления, даже если она отправлена ​​на stdin. На самом деле, я думаю, что учитывая различия, трубы должны идти куда-то, кроме stdin, так что stdin и позволяет называть его stdpipe (чтобы сделать произвольный дифференциал) можно обрабатывать по-разному.

Учти это. При передаче одной программы на другой fstat, кажется, возвращается ноль в качестве st_size, несмотря на ls -lha /proc/{PID}/fd, показывающий, что есть файл. При перенаправлении файла это не так (по крайней мере на debian wheezy, stretch и jessie vanilla и ubuntu 14.04, 16.04 vanilla.

Если вы cat /proc/{PID}/fd/0 с перенаправление, которое вы сможете повторить, чтобы читать столько раз, сколько захотите. Если вы сделаете это с помощью трубы, вы заметите, что во второй раз, когда вы выполняете задачу последовательно, вы не получите тот же результат.

1
ответ дан 25 May 2018 в 07:49

Другие вопросы по тегам:

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