Я думаю, что вам нужен сценарий, который найдет i) наименьший размер файла в каталоге и его подкаталогах и ii) перечислит все файлы этого наименьшего размера. Если это так, вы можете сделать:
#!/usr/bin/env bash
du -ab "$@" |
awk -F"\t" '($1<=s || NR==1){
s=$1;
a[s]=a[s]"\n\t"$2;
a[-1]=1
}
END{
if(a[-1]){
printf "Smallest file size:%d%s\n",s,a[s]}
}'
Или просто запустить его как однострочное:
du -ab | awk -F"\t" '($1<=s || NR==1){s=$1;a[s]=a[s]"\n\t"$2;a[-1]=1}END{if(a[-1]){printf "Smallest file size:%d%s\n",s,a[s]}}'
Пример вывода:
$ a.sh .
Smallest file size:42
./foo/file2
./file13
./file with spaces
du -ab
: Нет смысла использовать оба -b
и -h
, они перекрывают друг друга. Это напечатает размеры всех файлов и каталогов. awk -F "\ t"
: запустить awk
, установив в качестве разделителя поля ввода табуляцию. Таким образом, имена файлов с пробелами будут обрабатываться правильно. ($ 1 <= s || NR == 1) {...}
: если размер этого файла меньше наименьшего размера или если это первый найденный файл.
a [s] = a [s] "\ n" $ 2;
: ассоциативный массив a
имеет размер каждого файла в качестве ключа и список файлов ( разделенные новой строкой) в качестве значения. Если этот файл меньше или меньше самого маленького, добавьте его в массив. s = $ 1;
: установить s
на новый наименьший размер; a [-1] = 1
: это просто используется для того, чтобы сценарий не печатал вывод если файлы не найдены. Мы устанавливаем его на 1
, если был найден хотя бы один файл. END {}
: выполняется после того, как все входные данные были прочитаны. На этом этапе s
будет наименьшим найденным размером файла.
if (a [-1]) {...}
: если был найден хотя бы один файл или каталог; printf «Минимальный размер файла:% d% s \ n», s, a [s]
: распечатайте его / их. tail
). Resuelto no está destinado ni diseñado para su caso de uso -, sino para proporcionar servicios en el loopback local, por lo que la dirección de escucha está codificada.
Вы не можете. Как упомянул выше cristian -rodríguez, он был строго разработан для предоставления услуг только для обратной связи.
Даже альтернативное решение с использованием net.ipv4.conf.all.route_localnet=1
+ iptables NAT (, такое как https://serverfault.com/questions/211536/iptables-port-redirect-not-working-for-localhost),https://superuser.com/questions/594163/how-do-i-route-a-port-range-in-a-linux-host-to-a-guest-vm)и https://stackoverflow.com/questions/18580637/iptables-redirect-from-external-interface-to-loopbacks-port), не будет работать, так как systemd -resolve явно проверяет, находится ли пункт назначения за пределами петли. сеть. См. приведенный ниже код дляstatic void dns_stub_process_query(Manager *m, DnsStream *s, DnsPacket *p)
if (in_addr_is_localhost(p->family, &p->sender) <= 0 ||
in_addr_is_localhost(p->family, &p->destination) <= 0) {
log_error("Got packet on unexpected IP range, refusing.");
dns_stub_send_failure(m, s, p, DNS_RCODE_SERVFAIL, false);
goto fail;
}
Обходной путь — использовать socat
для прослушивания вашего интерфейса докера и перенаправить его в systemd -. Строка ниже делает свое дело. При необходимости измените его для прослушивания TCP :
socat UDP-LISTEN:53,fork,reuseaddr,bind=172.17.0.1 UDP:127.0.0.53:53