sudomakemeasandwich | Technologies

Telegram-канал sudomakemeasandwich - SudoMakeMeASandwich

164

Банальные и не очень знания о CLI. Порционно, с принуждением Bash, zsh и другие шипящие Поддержать: https://goo.gl/vb3s46

Subscribe to a channel

SudoMakeMeASandwich

Ghost in the Shell: Remake

В честь пятницы небольшой прикол, который встретился мне за пару недель уже раз 5-6 в разных источниках.

Чтобы посмотреть консольный ремейк Ghost in the Shell, введите к терминале следующую команду, откиньтесь на спинку кресла и наслаждайтесь.


ssh ghost@theshell.xyz


Исходный код и описание можно посмотреть на GitHub: https://github.com/esin/intheshell

Читать полностью…

SudoMakeMeASandwich

Следуем пути

Раз упомянули про переменные, то давайте коротко о одной из самых важных из них — $PATH, тем более что и статья подходящая попалась на днях. Посмотрите содержимое $PATH.


echo $PATH


В этой переменной находится список путей разделённых двоеточиями, по этим путям ищутся утилиты, которые вы вводите в командах. $PATH можно дополнять, и этим активно пользуются.

В системе может быть установлено несколько версий одной и той же программы. При поиске в $PATH будет выполняться первая найденная. Узнать, какая именно версия выполнится, поможет which, который покажет путь до исполняемого файла. А which -a покажет все установленные версии.

В статье по ссылке всё то же, но на английском, чуть подробнее и в контексте Ruby.
https://robots.thoughtbot.com/following-the-path

Читать полностью…

SudoMakeMeASandwich

Почему bash на MacOS такой старый?

Извините, пост для маководов. Такое будет не часто.

Выполните в консоли команду bash --version. Если ранее вы специально не обновляли версию bash, то обнаружите, что установленная в системе версия празднует свой десятый день рождения в 2017 году.

Причина этого кроется в лицензии GPL. Вот небольшая выдержка из википедии:

The GPL License is incompatible with many application-distribution-systems, like the Mac App Store, and certain other software distribution platforms (on smartphones as well as PCs). The problem lies in the right "To make a copy for your neighbour", as this right is violated by the integrated DRM-Systems made to prevent copying of paid software. Even if the application is free-as-in-beer in the App Store in question, it might result in a violation of that app store's terms.
...
In other cases, such as the Ubuntu App Store, proprietary commercial software applications and GPL-licensed applications are both available via the same system; the reason that the Mac App Store (and similar projects) is incompatible with GPL-licensed apps is not inherent in the concept of an app store, but is rather specifically due to Apple's terms-of-use requirement that all apps in the store utilize Apple DRM-restrictions.

Т.е. всё дело в несовместимости яблочных terms-of-use с GPL.

Исправить дело достаточно просто с помощью Homebrew. Помимо простого brew install bash понадобится ещё несколько простых манипуляций. Вот неплохая инструкция http://clubmate.fi/upgrade-to-bash-4-in-mac-os-x/.

А задумался я над этим, случайно наткнувшись на этот твит:
https://twitter.com/vhgalvao/status/849041797879869440

Читать полностью…

SudoMakeMeASandwich

Wildcards

Вы наверняка знаете о существовании wildcards для команд в консоли: *, ?, []. Применяя их в аргументах к разным командам можно делать многие вещи проще и удобнее. Например:

ls *.html — показать все html файлы в директории
file ??? ???? — показать информацию по файлам из трёх и четырёх символов
rm *.??? — удалить все файлы с трёхбуквенным расширением
file [a-cst]* – показать информацию по всем объектам, начинающимся с букв от a до c, а также с s и t
mv public_html/*.??g public_html/images/ — переместить файлы, заканчивающиеся на g (предположительно jpg и png) в другую директорию

Комбинации с wildcards возникают в примерах работы с консолью регулярно.

Признаюсь, раньше я думал, что это все команды такие умные и принимают аргументы с содержанием специальных символов, самостоятельно обрабатывая их. Это неправда, всю работу выполняет оболочка. Именно она превращает набор символов в список реальных аргументов, отфильтрованных по указанному правилу, и передаёт в команду.

Чтобы посмотреть, во что развернутся аргументы команды, добавьте перед ней echo:
echo ls -la D

И увидите результат:
ls -la Desktop Documents Downloads Dropbox

Особенно полезно для команд в стиле rm *.

Также результат можно посмотреть с помощью TAB.

Кстати, термин wildcard пришёл, конечно, из карточных игр, и ни один его перевод на русский не звучит адекватно.

Читать полностью…

SudoMakeMeASandwich

Стоило показать канал опытному админу, как он прямо и правильно сказал, что мы тут пишем глупости и вообще позорище. Вот несколько грустных фактов-цитат в дополнение к предыдущим заметкам (авторская орфография и пунктуация местами отредактированы):

* половина кнопочек, которая тут описана, могут быть сконфигурированы по-разному
* что будут делать кнопочки в bash как правило зависит от конфига readline, при этом zsh его (ридлайн), вероятно, не использует
* немаководы активнее используют Page Up и Page Down
* делать sudo !! никогда не стоит :)
* про кнопки тоже на самом деле неправда, биндятся последовательности символов, а не кнопки. Какая последовательность символов уйдет по той или иной кнопке может зависеть в основном от терминала (путти там, айтерм, эти вот). Как в общем-то и то что он рисует зависит от его представления о том, как надо обрабатывать те или иные последовательности. Есть как будто бы даже всякие стандарты и часть из них даже в ANSI, их обычно все и поддерживают.
* а шелл еще и от переменной окружения TERM может всякое разное слать, дабы не ломать сильно глупые терминалы. в итоге догадаться что произойдет по той или иной кнопке зачастую малореально :)

Придётся теперь с этим жить.

Но чтобы не унывать, вот вам пятничная шутка про Stories в Norton Commander
https://twitter.com/mrgan/status/847139272842887169

Читать полностью…

SudoMakeMeASandwich

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

Но вернёмся к нашим экранам. Все знают history и даже многие умеют ходить по ней с помощью ↑ и ↓. Особо продвинутые знают, что стрелки лучше работают, если часть команды уже ввести. Вот ещё несколько полезных сочетаний:

ctrl+p и ctrl+n — листание истории вместо ↑ и ↓

ctrl+r — инкрементальный поиск вверх по истории, для листания вариантов нажать ещё раз
ctrl+s — инкрементальный поиск по истории «вниз» (у меня сработало только в zsh)

Помимо выполнения через Enter выйти из инкрементального поиска можно с помощью ctrl+j или ctrl+g. Последнее оставит строку пустой.

alt+p — неинкрементальный поиск вверх по истории

Если помнить все команды по номерам в history, то !n — ваш друг.

!! выполнит ещё раз последнюю команду, но чаще вы будете делать sudo !!.

Почему-то все мануалы очень любят alt+. или !$ — выполнение последнего аргумента последней команды. Но я пока не проникся.

Историю можно посмотреть в файлах ~/.bash_history или ~/.zsh_history. Однажды меня очень спасла эта опция для просмотра истории команд другого пользователя на сервере.

Читать полностью…

SudoMakeMeASandwich

Привет. Мы сделали этот канал, чтобы самим научиться эффективнее работать в командной строке и сойти за умных. Можете тоже так попробовать или просто понаблюдать. Мы знаем, что вам лень изучать man. Подпишитесь на пока несуществующую рассылку, это модно: http://eepurl.com/cIo5_5

Читать полностью…

SudoMakeMeASandwich

Полезные ключи grep

Уже больше одного человека прислало вопрос про то, как делать grep и смотреть не только строку результата поиска, но и соседние. Это ещё раз доказывает, что вам лень читать man. Поэтому вот вам заметка.

С помощью ключей -A, -B и -C можно задавать, сколько строк покажет grep соответственно до, после и вокруг найденной строки. Запомнить очень легко, как АБВ, правда?

Раз начали, вот ещё несколько ключей, а в конце ссылка на статью с примерами.

grep -c searchstring filename — покажет количество найденных строк, аналог пайпа в wc -l
grep -e foo -e bar -e baz file — если нужно поискать несколько разных выражений, а регулярку писать не хочется
grep -E 'where|is|my|mind' nowhere.near — если всё-таки хочется в регулярки, аналог использования egrep

-R — поможет искать рекурсивно по директориям
-i — сделает поиск нечувствительным к регистру
-v — инвертнутый поиск, т.е. исключит из вывода строки с вхождением выражения

Почему-то grep часто используют в сочетании с другими командами с помощью пайпов |. При этом в большинстве кейсов, которые я видел и использовал раньше сам, можно обойтись без этого силами самого grep.

https://habrahabr.ru/post/229501/

Читать полностью…

SudoMakeMeASandwich

Что выведет команда?

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


FOO="h2Q3v$GjVHg772yQMG@5^@4?4v" && echo $FOO


Команда состоит из двух частей связанных через &&. Двойной амперсанд позволяет выполнять команды последовательно друг за другом, причём так, что следующая выполняется только в случае успеха предыдущей (возвращается exit status равный нулю).

В первой части задаётся переменная FOO. Для названия переменных можно использовать символы [a-zA-Z_], по соглашению их обычно задают в верхнем регистре.

Во второй части с помощью команды echo выводится только что заданное значение. Для доступа к переменной нужно добавлять знак $.

Если бы это было всё, то на выводе мы получили бы h2Q3v$GjVHg772yQMG@5^@4?4v, но это не так. Увидим мы h2Q3v@5^@4?4v. Происходит это по нескольким причинам.

Во-первых, значение переменной окружено в двойные кавычки, поэтому дополнительно интерпретируется. Замените двойные кавычки на одинарные и предсказать результат вывода будет проще.

Во-вторых, значение в кавычках содержит знак доллара $, поэтому часть строки $GjVHg772yQMG воспринимается как переменная. Если до этого такую переменную не задавали, то интерпретируется она как пустая строка. Дальше @ имя переменной не проходит, так как это тоже специальный символ, и он не может быть частью имени.

Читать полностью…

SudoMakeMeASandwich

Игры в консоли: OverTheWire Wargames

Изучать новое приятно в игровой форме.

Wargames — это набор игр, построенных по простой схеме: цель каждого уровня — найти пароль к следующему. Задания выполняются преимущественно прямо в консоли. Заходишь по ssh на сервер под указанным юзером и соображаешь, какие реальные команды нужно выполнить, чтобы достать пароль. В описании задания даются подсказки, что почитать и какие именно команды могут понадобиться.

Прохождение затягивает, в один присест прошёл половину игры Bandit. По пути узнал для себя кое-что новое, изучая man команд и информацию по ссылкам.

Вот, например, несколько пригодившихся команд:

cat ./- — посмотреть содержимое файла с названием -. Оказывается, не всегда достаточно только названия файла.
find /home/ -type f -size 542c -exec ls {} \; — найти файлы размером ровно 542 байта
ls -lR — рекурсивный ls
sort data.txt | uniq -u — показать уникальные строки из файла
base64 -d data.txt — декодировать файл из base64
cat data.txt | tr 'N-ZA-Mn-za-m' 'A-Za-z’ — расшифровать файл, закодированный по алгоритму rot13 и состоящий только из латинских букв

Полезного вам вечера.

http://overthewire.org/wargames/

Читать полностью…

SudoMakeMeASandwich

Видео: Learning Vim in a Week

Пока готовится следующая заметка, посмотрите короткое и приятное видео для тех, кто уже умеет выходить из vim и думает, как продвинуться в изучении этого редактора дальше.

Пара цитат из видео:

"It’s hard because it’s different.”
"Sometimes you gotta work a little so you can ball a lot.”

https://www.youtube.com/watch?v=_NUO4JEtkDw

Читать полностью…

SudoMakeMeASandwich

Сегодня о редактировании команд. Про дополнение с помощью TAB известно всем. Помимо этого есть много других полезных сочетаний.

ctrl+d — аналог delete; для пользователей Мака может быть удобнее, чем fn+backspace

alt+t — меняет местами слово до курсора со словом после. Если применить в конце строки, то переставит два последних слова.

alt+u — перевести в верхний регистр от текущей позиции до конца слова
alt+l — перевести в верхний регистр от текущей позиции до конца слова
alt+c — перевести в верхний регистр первый символ (capitalize) слова от текущего курсора, т.е. если находимся в середине слова, то в верхний регистр переведётся текущая буква

ctrl+k — удалить от текущей позиции до конца строки
ctrl+u — удалить от текущей позиции до начала строки

alt+d — удалить от текущей позиции до конца слова
ctrl+w — удалить от текущей позиции до начала слова

Если вы часто делаете опечатки в командах, то есть замечательная утилита с говорящим названием The Fuck, которая старается за вас.
https://github.com/nvbn/thefuck

Читать полностью…

SudoMakeMeASandwich

Начнём с навигации, но не про cd и урбанистику.

Как показал небольшой офисный опрос 50% из трёх разработчиков не знают, как перемещаться по текущему тексту команды в строке кроме как стрелочками. Помимо них есть много замечательных сочетаний клавиш:

ctrl+a — перейти в начало строки
ctrl+e — перейти в конец строки

alt+f — в конец слова
alt+b — в начало слова

Если вы совсем не любите стрелочки, то можете использовать ещё и это:

ctrl+f — →
ctrl+b — ←

Если вы счастливый обладатель Mac и сочетания с alt (option/⌥) у вас не работают, то:
* для Terminal: Settings (⌘+,) → Profiles → Keyboard, поставьте галочку на "Use Option as Meta Key"
* для iTerm: Settings (⌘+,) → Profiles → Keys, в "Left (и/или Right) option ⌥ key act as" выберите "+Esc"

Все сочетания проверены в bash и zsh.

Читать полностью…
Subscribe to a channel