Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Ассорти советов для любителей командной строки

Оригинал: Assorted Fun Linux Command Line Hacks
Автор: Carla Schroder
Дата публикации: 2 октября 2014
Перевод: Н.Ромоданов
Дата перевода: октябрь 2014 г.

Сегодняшний букет советов, связанных с командной строкой, был подобран по мотивам публикаций в Command Line Magic, в котором в Twitter-е собраны любопытные советы на все случаи жизни, касающиеся использования командной строки Linux. Сегодня мы расскажем о том, как в командной оболочке нарисовать радугу, как узнать о наличии угроз в сети, как следить за звездными войнами и как в консоли создавать страшные звуки.

Радуга в командной оболочке

Следующая маленькая жемчужина кода создает при прокрутке красочное изображение, а команда Ctrl+c его останавливает:

$ grep -o --binary-files=text '[[:alpha:]]' /dev/urandom |tr -d '[a-zA-Z]' |xargs -n $(($COLUMNS/2)) |tr -d ' '| lolcat -f | pv -L80k

Рис.1: Язык пришельцев

lolcat создает цвет, pv управляет скорость прокрутки, а с помощью значения COLUMNS осуществляется управление шириной столбцов. Давайте добавим figlet для того, чтобы создавать слова (рис.1):

$ grep -o --binary-files=text '[[:alpha:]]' /dev/urandom |tr -d '[a-zA-Z]' |xargs -n $(($COLUMNS/2)) |tr -d ' '| figlet | lolcat -f | pv -L80k

Это могут быть иностранные слова. Происходит прокрутка цветных полос (рис.2):

$ yes "$(seq 231 -1 16)" | while read i; do printf "\x1b[48;5;${i}m\n"; sleep .02; done

Рис.2: Цветные полосы ASCII

Для того, чтобы получить другие результаты, измените числовые значения seq и printf.

Информация о сетевых угрозах

Вы можете получить ответ на этот вопрос, посетив сайт Is The Internet on Fire.com. Или вы можете сделать быстрый запрос из командной строки:

$ host -t txt istheinternetonfire.com
istheinternetonfire.com descriptive text "Yep. 
https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2014-6271 
https://www.mozilla.org/security/announce/2014/mfsa2014-73.html
http://blog.jquery.com/2014/09/24/update-on-jquery-com-compromises/"

Все, что здесь делается, это с помощью команды host выполняется запрос записи типа TXT DNS для istheinternetonfire.com. Вы можете сделать это для любого сайта, хотя для большинства из них получите скучные записи SPF и все они будут непонятны. Чтобы получить более подробный результат, попробуйте команду dig:

$ dig -t txt istheinternetonfire.com
; <<>> DiG 9.9.5-3-Ubuntu <<>> -t txt istheinternetonfire.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54734
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;istheinternetonfire.com.       IN      TXT
;; ANSWER SECTION:
istheinternetonfire.com. 9385   IN      TXT     "Yep. 
https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2014-6271 
https://www.mozilla.org/security/announce/2014/mfsa2014-73.html
http://blog.jquery.com/2014/09/24/update-on-jquery-com-compromises/"
;; AUTHORITY SECTION:
istheinternetonfire.com. 84967  IN      NS      a.ns.joker.com.
istheinternetonfire.com. 84967  IN      NS      b.ns.joker.com.
istheinternetonfire.com. 84967  IN      NS      c.ns.joker.com.
;; Query time: 34 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Tue Sep 30 20:13:48 PDT 2014
;; MSG SIZE  rcvd: 316

Попробуйте параметр short для того, чтобы получить те же результаты, что и с помощью команды host, хотя, когда вы это сделаете, вы в разделе AUTHORITY пропустите любопытные имена nameservers:

$ dig +short -t txt istheinternetonfire.com
"Yep. https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2014-6271 
https://www.mozilla.org/security/announce/2014/mfsa2014-73.html
http://blog.jquery.com/2014/09/24/update-on-jquery-com-compromises/"

Итак, как вы можете создавать интересные записи TXT? Все зависит от того, каким сервером DNS вы пользуетесь. Если вы пользуетесь сервисом, предоставляющим хостинг, или регистратором доменных имен, то они предложат вам веб-форму. Если вы запускаете команду BIND или Dnsmasq, это строка в конфигурационном файле, например, как в dnsmasq.conf:

txt-record="Hellos! This is my amazing TXT record. You are l33t to find and read it."

Кавычки относятся к обычной пунктуации; они не требуются, поскольку запись TXT может содержать любой текст произвольного вида.

Следим за звездными войнами

Это уже старая, но все еще гениально интересная штука, созданная Райаном Вербером, когда ему стало скучно. У Вербера было неиспользуемое адресное пространство /24, которым он воспользовался в маршрутизаторах Cisco и PowerDNS + MySQL для создания поддельных доменных имен, например, the.DEATH.STAR и destroy.an.entire.planet. Сначала попробуйте простую трассировку без параметров:

$ traceroute  216.81.59.173
[...]
24  the.DEATH.STAR (206.214.251.46)  148.961 ms  144.843 ms  146.098 ms
25  an.armored.space.station (206.214.251.49)  146.510 ms with.enough.power.to (206.214.251.54)  144.928 ms an.armored.space.station (206.214.251.49)  148.835 ms
26  destroy.an.entire.planet (206.214.251.57)  147.232 ms with.enough.power.to (206.214.251.54)  145.949 ms  142.546 ms
27  destroy.an.entire.planet (206.214.251.57)  147.386 ms  146.206 ms  148.834 ms
28  Pursued.by.the.Empires (206.214.251.62)
[...]

Первый запуск у меня был немного искажен, но в конце было выдано сообщение: Please.Try.Again.Tracerote.to.obiwan.scrye.net (Пожалуйста, попробуйте Tracerote снова для того, чтобы найти obiwan.scrye.net). Давайте, конечно, попробуем то, что написано:

$ traceroute obiwan.scrye.net

Это будет выглядеть несколько лучше. Но трассировка будет прервана до ее завершения, т.к. traceroute по умолчанию проверяет до 30 переходов hop. Поэтому давайте попробуем значение 100:

$ traceroute -m 100 obiwan.scrye.net

Полный результат вы можете увидеть на Pastebin. Насколько далеко можно зайти? Достаточно далеко, чтобы получить Rickrolled (прим.пер.: о рикроллинге, варианте троллинга, смотрите здесь). Большое спасибо, Райан Вербер!

Но результат у нрас еще не окончательный, поскольку лучше воспользоваться командами seq, xargs и dig с тем, чтобы все выглядело красиво:

$ ( seq 1 8 200 ; seq 6 8 200 ) | sort -n | xargs -I{} -n 1 dig +short -x 206.214.251.{}

Рис.3: Новый hop

Вы также можете насладиться звездными войнами в режиме ASCII:

$ telnet towel.blinkenlights.nl

Звуки из командной строки

Еще давно мы мечтали о том, как бы было потрясающе интересно запустить команду cat /proc/kcore > /dev/dsp, которая перенаправит действия ядра через конвейер в аудиоустройство и создаст странные звуки. Нам было скучно, а этим можно было бы гордиться. Теперь все по-другому и нет устройства /dev/dsp, так что попробуйте следующее:

$ sudo cat /proc/kcore | aplay
Playing raw data 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono

В команду aplay можно передать все, что угодно, например, tcpdump:

$ sudo tcpdump -i eth1 | aplay

Или выдать список всех файлов и каталогов, имеющихся в вашей системе:

$ ls -R / | aplay

Perl переводит английскую фразу в ... В результате я не уверен:

$ perl -e '@w = split / /, "First it rubs the lotion in, then it eats the crispy skin. Sometimes it rhymes, sometimes it doesnt."; print "$_\n"x1000 foreach @w;' | aplay

Вы можете использовать любой текст, который захотите (за исключением одинарных или двойных кавычек), и чем длиннее текст, тем дольше он воспроизводится. Для того, чтобы управлять скоростью, измените в команде print значение 1000; чем значение меньше, тем воспроизведение медленнее, и чем оно больще, тем воспроизведение быстрее.

Все будет продолжаться до тех пор, пока вы не остановите процесс с помощью команды Ctrl+c:

$ perl -e 'use bytes; for($t=0;;$t++){ print chr($t*(($t>>11|$t>>23)&83&$t>>3)); }' |play -t raw -b8 -r8k -e un -

Это звучит, как гипнотический марш робота. Чтобы получить различные эффекты, поэкспериментируйте с числовыми значениями в ($t>>11|$t>>23)&83&$t>>3).

Следующая маленькая жемчужина будет каждый раз, когда открывается новый терминал, воспроизводить крутое звучание космоса:

$ echo '(play -q -n synth sine F2 sine C3 remix - fade 0 4 .1 norm -4 bend 0.5,2399,2 fade 0 4.0 0.5 &)' >> ~/.bashrc

Эксперименты с такими командами, как эти, являются интересным способом узнать о дополнительных параметрах и о том, как можно объединять команды друг с другом. Пожалуйста, поделитесь собственными достижениями здесь в комментариях или в Твитере в Command Line Magic.