Я не считаю себя знаком и даже знатоком Юникса. А эту книгу я когда-то купил студентом за свои деньги. Я и сейчас не стесняюсь учиться, иначе будет скучно жить.
Вы знаете… После этой статьи я смотрю на них снисходительнее. Выяснилось, что хабровчане с достаточно высоким рейтингом не знают элементарных основ (U|L)*n+x
Ладно попробуем по шагам:
— sh — это командный интерпретатор. Ему можно передавать команды на исполнение.
— Они могут передаваться как из интерфейса командной строки так и из скриптов.
— Сейчас говорим только об интерфейсе командной строки (попутно вопрос — Откуда там могут взяться комментарии?)
— По пути /bin/sh может оказаться совсем не тот интерпретатор, который Вы ожидаете увидеть, то что он зовётся sh, совсем не значит, что там живёт sh
Совсем не понимаете?
Это значит что по пути /bin/sh может быть хардлинк или симлинк на какой угодно шелл.
Как вы и просили выше пример линукса с дефолтным ash
А что касается именования sh, то посмотрите куда он линкуется, под ним может скрываться несколько совершенно разных shell'ов.
Как пример:
root@DD-WRT:~# echo $SHELL
/bin/sh
root@DD-WRT:~# $SHELL --version
BusyBox v1.22.1 (2014-06-23 09:50:00 CEST) built-in shell (ash)
А что же по вашему делает Борновский шелл таким привилегированным? :)
пройдёмся по дефолт-шеллам:
BusyBox ash
GoboLinux zsh
OpenBSD ksh
FreeBSD tcsh
Mac OS X tcsh / bash
Minix ash
AIX вроде ksh
Согласен, что может стоит указывать shell в котором делаются тесты, но уж никак не по причине того что это не sh
Да, и я в большинстве случаев за разделение. Но иногда мы этим разделением доходим до абсурда и в ущерб производительности и удобству. К слову я как-то тестировал grep content -c file и grep content file | wc -l и grep выиграл почти на порядок. И на тот момент для меня это было принципиально.
Ну а вообще принцип KISS — это тема для отдельной статьи :)
Я думаю, что большинство примеров будут работать и в Линуксе, ну а уж выяснять в каком шелле требуется закавычивание, а в каком нет, уж извините, не буду )
Да, конечно, я сознательно не усложнял эту регулярку.
grep -E '\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b' /etc/resolv.conf
была бы совсем нечитабельна.
К сожалению, эта история имела продолжение. Поиски проводились ещё дважды. Суммарно ещё человек 10. Одному пришлось отказать, т.к. вряд-ли работодатель смог бы его мотивировать через полгода-год. Из остальных был выбран самый молодой в надежде, что удастся его научить… Но, видимо, учитель я плохой…
Да, пример изначально алогичный. И само использование символьного класса для одного символа кажется бессмысленным.
По шагам как происходит обработка этого момента:
— grep "[t]tyv" помещается в список процессов;
— происходит преобразование символьного класса [t] в t;
— grep начинает работу;
Т.е. grep ищет ttyv, в то время как в список процессов попало [t]tyv.
Надеюсь смог объяснить.
Они, обычно, и не выпендриваются. Я работал у провайдера-миллионника. Такой бездумной траты денег я не видел больше нигде. За год на одной из станций было заменено 4 dslam'а без увеличения емкости, а старые просто шли в утиль.
Периферийные же провайдеры не всегда выходят на самоокупаемость, потому и пытаются из г… на слепить пулю. Бывают, конечно, и перегибы.
Если рассуждать теоретически, то логин-пароль для идентификации абонента не нужен: он и так идентифицирован однозначно номером порта в свитче провайдера или в DSLAMе.
В реалиях местечковых провайдеров это не всегда осуществимо.
А к автору статьи защита от пользователя это роутер который при сбросе в дефолтные настройки будет подключен к сети провайдера без вводов паролей и прочих настроек, но при этом давать доступ к настройке остальных функций устройства
Я не считаю себя знаком и даже знатоком Юникса. А эту книгу я когда-то купил студентом за свои деньги. Я и сейчас не стесняюсь учиться, иначе будет скучно жить.
— sh — это командный интерпретатор. Ему можно передавать команды на исполнение.
— Они могут передаваться как из интерфейса командной строки так и из скриптов.
— Сейчас говорим только об интерфейсе командной строки (попутно вопрос — Откуда там могут взяться комментарии?)
— По пути /bin/sh может оказаться совсем не тот интерпретатор, который Вы ожидаете увидеть, то что он зовётся sh, совсем не значит, что там живёт sh
бузибокс:
/bin/sh --version
BusyBox v1.22.1 (2014-06-23 09:50:00 CEST) built-in shell (ash)
дебиан
ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 1 2012 /bin/sh -> dash
центос
# /bin/sh --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Надеюсь вы понимаете что между ash, dash и bash таки есть хоть какая-то разница.
Я понятнее не смогу объяснить.
Это значит что по пути /bin/sh может быть хардлинк или симлинк на какой угодно шелл.
Как вы и просили выше пример линукса с дефолтным ash
Как пример:
root@DD-WRT:~# echo $SHELL
/bin/sh
root@DD-WRT:~# $SHELL --version
BusyBox v1.22.1 (2014-06-23 09:50:00 CEST) built-in shell (ash)
пройдёмся по дефолт-шеллам:
BusyBox ash
GoboLinux zsh
OpenBSD ksh
FreeBSD tcsh
Mac OS X tcsh / bash
Minix ash
AIX вроде ksh
Согласен, что может стоит указывать shell в котором делаются тесты, но уж никак не по причине того что это не sh
Ну а вообще принцип KISS — это тема для отдельной статьи :)
Распишем детальнее:
grep -E '\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b' /etc/resolv.conf
была бы совсем нечитабельна.
root@nm3:/ # grep -v # /etc/resolv.conf
nameserver 8.8.8.8
root@nm3:/ # /bin/tcsh
root@nm3:/ # grep -v # /etc/resolv.conf
nameserver 8.8.8.8
root@nm3:/ # /bin/sh
# grep -v # /etc/resolv.conf
Usage: grep [OPTION]… PATTERN [FILE]…
Try `grep --help' for more information.
# grep -v "#" /etc/resolv.conf
nameserver 8.8.8.8
пояснения нужны?
По шагам как происходит обработка этого момента:
— grep "[t]tyv" помещается в список процессов;
— происходит преобразование символьного класса [t] в t;
— grep начинает работу;
Т.е. grep ищет ttyv, в то время как в список процессов попало [t]tyv.
Надеюсь смог объяснить.
Ну если делится без остатка на 2 то чётный )
Периферийные же провайдеры не всегда выходят на самоокупаемость, потому и пытаются из г… на слепить пулю. Бывают, конечно, и перегибы.
В реалиях местечковых провайдеров это не всегда осуществимо.
А статья о чём по Вашему?