Я решил решить эту проблему путем запуска с нуля.
Я установил Fedora 17, hostapd, dnsmasq, iptables, и общественные драйверы.
dnsmasq
использовался для хостинга dhcp сервера, который присвоит дюйм/с подключенным устройствам.iptables
использовался для включения передачи NAT через мой интерфейс Ethernet.hostapd
использовался для управления подключением Wi-Fi и безопасностью.Следующее является сценарием, который я сделал для запуска рабочей точки доступа:
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
# Clear iptables Rules
iptables -F
iptables -t nat -F
# iptables Rules
iptables -A FORWARD -d 192.168.1.0/24 -o wlan0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i wlan0 -j ACCEPT
iptables -t nat -A POSTROUTING -o p4p1 -j MASQUERADE
# Set wlan0 IP
ip addr add 192.168.1.1/24 broadcast 192.168.1.255 dev wlan0
ip link set wlan0 up
# Set DHCP
dnsmasq -C /dev/null >/dev/null 2>&1 --listen-address=192.168.1.1 --dhcp-range=192.168.1.2,192.168.1.200,12h
# hostapd
hostapd /etc/hostapd/hostapd.conf
Содержание hostapd.conf
следующее:
ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
wpa_passphrase=testomesto
driver=nl80211
interface=wlan0
hw_mode=g
channel=1
ssid=osumi-0
Переносится на все оболочки и любую систему, имеющую seq ( поскольку этот вопрос отмечен тегами)
Если начало равно 1:
$ echo $(seq 10)
1 2 3 4 5 6 7 8 9 10
В противном случае:
$ echo $(seq 5 10)
5 6 7 8 9 10
С bc:
$ echo $(echo "for (i=0;i<=1000;i++) i"| bc)
В bash
echo {1..10}
Это эхо-решение работает, если значение IFS содержит новую строку , что он делает по умолчанию.
По умолчанию для IFS задана последовательность <пробел> <вкладка> <новая строка> . И сбрасывается при каждом чистом запуске оболочки. Но если у вас есть какие-либо опасения, что это могло измениться в крайнем случае, у нас есть несколько решений.
В bash, zsh, ksh просто используйте: IFS = $ '\ t \ n' (пропустите весь остальной ответ).
Однако сброс значения IFS в sh может оказаться сложной задачей Подробную информацию см. Здесь .
$ unset IFS; echo $(seq 5 10) #Always work.
всегда будет работать. При условии, что ниже не будет кода (или дочерних скриптов), требующего установки IFS, например скрипта, который выполняет OldIFS = "$ IFS"
.
sh -c 'IFS="$(printf " \t\nx")"; IFS="${IFS%x}"; printf "$IFS"|xxd' # correct.
seq 10 |xargs
... или ...
seq 10 |paste -s -
Обе приведенные выше команды разделяют целые числа пробелами. xargs
по умолчанию имитирует / bin / echo
, поэтому каждое целое число разделяется одним пробелом. Однако по умолчанию максимальная длина командной строки составляет 128 КБ. Вы можете настроить это ...
seq 100000 | xargs -s2093009 | wc -l
... печатает 1. Значение для -s
здесь не произвольно - я получил его после попытки более высокого значения (которое, по-видимому, все равно работало ) , но позже xargs
напечатал полезное сообщение:
-s value should be <2093010
paste
- одна из двух (насколько мне известно) санкционированных POSIX утилит для обработки строк произвольной длины :
paste
использование спецификационного приложения :Большинство стандартных утилит работают с текстовыми файлами . Утилиту
cut
можно использовать для преобразования файлов с произвольной длиной строки в набор текстовых файлов, содержащих одинаковые данные. Утилитуpaste
можно использовать для создания (или воссоздания) файлов с произвольной длиной строки.Файл, содержащий символы, сгруппированные в ноль или более строк. Строки не содержат символов NUL, и ни одна из них не может превышать
{LINE_MAX}
байтов в длину, включая символ электронной строки\ n
. Хотя POSIX.1-2008 не делает различий между текстовыми файлами и двоичными файлами (см. Стандарт ISO C) , многие утилиты выдают предсказуемый или осмысленный вывод только при работе с текстовыми файлами.Стандартные утилиты с такими ограничениями всегда указывают текстовые файлы в своих разделах STDIN или INPUT FILES .
paste
по умолчанию использует разделитель табуляции, поэтому между каждым целым числом после второй команды будет табуляция. Вы можете ...
seq 10 |paste -sd ' ' -
... использовать переключатель -d
elimiter, чтобы изменить это поведение,
GNU seq
принимает параметр разделителя ( -s
):
$ seq -s ' ' 1 5
1 2 3 4 5
$ var="$(seq -s ' ' 1 5)"
$ echo "$var"
1 2 3 4 5
С bash
, zsh
и ksh93
, вы можете использовать форму раскрытия фигурных скобок {start..end..step} :
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10