Pull to refresh
256
0
Alexander @simpleadmin

User

Send message
Если вы считаете себя знаком Юникса

Я не считаю себя знаком и даже знатоком Юникса. А эту книгу я когда-то купил студентом за свои деньги. Я и сейчас не стесняюсь учиться, иначе будет скучно жить.
Вы знаете… После этой статьи я смотрю на них снисходительнее. Выяснилось, что хабровчане с достаточно высоким рейтингом не знают элементарных основ (U|L)*n+x
Ладно попробуем по шагам:
— 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
А что касается именования 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)

В тегах ещё и *nix, и все вышеперечисленные Unix-подобные, не говоря уж о FreeBSD, которая самый что ни на есть прямой потомок ATT UNIX
А что же по вашему делает Борновский шелл таким привилегированным? :)
пройдёмся по дефолт-шеллам:
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 — это тема для отдельной статьи :)
Я думаю, что большинство примеров будут работать и в Линуксе, ну а уж выяснять в каком шелле требуется закавычивание, а в каком нет, уж извините, не буду )
Да я почти с этого статью начал.
Распишем детальнее:
root@nm3:/ # grep --version | grep grep
grep (GNU grep) 2.5.1-FreeBSD
root@nm3:/ # uname -o
FreeBSD
root@nm3:/ # id
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)
root@nm3:/ # echo $SHELL
/bin/csh
Имелось ввиду, видимо:

# touch -- "-1.txt"
# rm -1.txt
rm: illegal option -- 1
usage: rm [-f | -i] [-dIPRrvW] file ...
       unlink file
# rm -- "-1.txt"
#

Удалёнку, со сменным идиотским графиком и монотонной и скучной работой без фантазии, хоть и с приличной оплатой (для удалёнки).
Да, конечно, я сознательно не усложнял эту регулярку.
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. Одному пришлось отказать, т.к. вряд-ли работодатель смог бы его мотивировать через полгода-год. Из остальных был выбран самый молодой в надежде, что удастся его научить… Но, видимо, учитель я плохой…
# /bin/csh
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 то чётный )
Они, обычно, и не выпендриваются. Я работал у провайдера-миллионника. Такой бездумной траты денег я не видел больше нигде. За год на одной из станций было заменено 4 dslam'а без увеличения емкости, а старые просто шли в утиль.
Периферийные же провайдеры не всегда выходят на самоокупаемость, потому и пытаются из г… на слепить пулю. Бывают, конечно, и перегибы.
Если рассуждать теоретически, то логин-пароль для идентификации абонента не нужен: он и так идентифицирован однозначно номером порта в свитче провайдера или в DSLAMе.

В реалиях местечковых провайдеров это не всегда осуществимо.
А к автору статьи защита от пользователя это роутер который при сбросе в дефолтные настройки будет подключен к сети провайдера без вводов паролей и прочих настроек, но при этом давать доступ к настройке остальных функций устройства

А статья о чём по Вашему?

Information

Rating
Does not participate
Registered
Activity