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

Эта статья не обучит тебя, как пользоваться консолью, как объединять команды в пайпы и перенаправлять ввод-вывод. Она не о том, как писать скрипты или функции. Из нее ты не узнаешь, чем отличается bash от tcsh. Ее задача - показать тебе, как использовать консоль на всю катушку, добавить +50 к скорости ввода команд и +100 к эффективности. Поэтому новичкам стоит начать с базовых руководств или хотя бы изучить linux cheat sheet .

А мы, недолго думая, перейдем к делу.

Мигрируем на ZSH

Первое, что стоит сделать перед началом прокачки скиллов, - это избавиться от bash. Не потому, что он плохой или устаревший, а потому, что существует ZSH. Он неиллюзорно повысит твою продуктивность.

ZSH - очень сложный и комплексный командный интерпретатор. Полное руководство ZSH насчитывает около 800 страниц, а абсолютно все его функции, наверное, не знает никто. Но этого ни от кого и не требуют. На свете уже несколько лет существует проект oh-my-zsh , где пользователи создают набор скриптов, с помощью которых можно твикать и настраивать ZSH быстро и легко.

Чтобы получить стандартный набор твиков и настроек, включая мощный механизм автодополнения, информативное приглашение к вводу команды, настройки, повышающие удобство работы с ZSH, достаточно просто установить oh-my-zsh. Далее его можно обвешать плагинами для большего удобства работы с разными приложениями и поменять тему приглашения на любую из десятков, созданных пользователями.

Итак, для начала устанавливаем ZSH:

$ sudo apt-get install zsh

А затем скачиваем и устанавливаем oh-my-zsh:

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Скрипт установки клонирует git-репозиторий в каталог /home/username/.oh-my-zsh , добавит необходимые правки для вызова нужных скриптов в конфиг /home/username/.zshrc и запустит ZSH.


Теперь необходимо сделать ZSH шеллом по умолчанию:

$ sudo usermod -s /usr/bin/zsh имя_юзера

И перелогиниться, чтобы эмулятор терминала использовал ZSH в качестве дефолтового шелла. В качестве опционального шага ты можешь изменить тему. В комплект oh-my-zsh входит огромное количество тем, ознакомиться с которыми можно на wiki-странице . Чтобы выбрать новую тему, исправь значение переменной ZSH_THEME в файле ~/.zshrc. Выберем, например, тему agnoster:

ZSH_THEME="agnoster"

Перемещаемся по каталогам быстро

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

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

$ cd ~/do

$ cd ~/Downloads

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


В-третьих, автодополнение работает не только для начала имени каталога/файла, но и для любой его части. Чтобы перейти в каталог ~/Downloads, ты можешь набрать load и нажать Tab.

Наконец, в-четвертых, ZSH умеет дополнять имена каталогов по всему пути, а не только в последней его части. Это значит, что ты можешь напечатать нечто вроде этого:

$ cd /u/s/zs

Затем нажать Tab и получить это:

$ cd /usr/share/zsh

Более того, тебе совсем не обязательно печатать даже первые буквы имен каталогов. ZSH и bash умеют находить нужные каталоги самостоятельно, если они перечислены в переменной CDPATH. Добавь, например, следующую строку в ~/.zshrc:

Export CDPATH=/var/www:/home/имя_юзера/Dropbox

Теперь, чтобы открыть каталог ~/Dropbox/Books, можно использовать такую команду:

$ cd Books

ZSH проверит, есть ли каталог Books в /var/www или /home/имя_юзера/Dropbox, и переместит тебя в него, если он существует.

Fasd

Есть и гораздо более мощное средство для перемещения между каталогами. Это утилита fasd (произносится как fast - быстрый). Она запоминает все каталоги (и просто пути к файлам), которые ты использовал, и позволяет перемещаться между ними, указав лишь часть пути (даже несколько букв).

Работает это так. Допустим, ранее ты переходил в каталог ~/src/projects/apps/myCoolApp и теперь, спустя часы или даже дни, хочешь в него вернуться. Все, что тебе необходимо сделать, - это выполнить такую команду:

$ z myCoolApp

Можно проще:

$ z CoolApp

И еще проще:

$ z Cool

Требование одно: указанный тобой набор символов должен быть уникальным среди всех путей, которые запомнил fasd. Кроме z, fasd поддерживает и другие шорткаты: a - показывает все сохраненные пути, zz - позволяет перейти в каталог, используя интерактивное меню (если введенный набор символов встречается в нескольких путях), v - открывает файл в редакторе Vim.

Утилита fasd доступна для Debian/Ubuntu, Arch Linux через AUR и для macOS через brew. Установить в Ubuntu можно так:

$ sudo add-apt-repository ppa:aacebedo/fasd $ sudo apt-get update $ sudo apt-get install fasd

Plugins=(git fasd)

Peco

Peco - еще один инструмент, способный сильно облегчить навигацию, а также поиск. Это небольшая утилита, которая принимает на вход список строк и выводит на экран псевдографическое меню, с помощью которого можно выбрать или найти нужную строку. Далее peco отдает эту строку на выход и завершает свою работу (по сути, это консольный аналог dmenu).

Peco можно использовать для навигации и поиска в любых текстовых строках, включая пути. Например, если ты запустишь следующую команду и выберешь каталог, peco напечатает его имя в терминале:

$ ls | peco

Не слишком удобно и полезно. Однако, немного усложнив пример, ты получишь интерактивный cd:

$ cd `ls | peco`

Польза появилась, удобство пострадало. Поэтому создадим для этой команды короткий и простой псевдоним. Для этого добавим следующую строку в ~/.zshrc:

Alias cdi="cd `ls | peco`"

Теперь команда cdi будет запускать наш интерактивный cd.

Кстати, о самом cd. Запомни два простых правила:

  • команда cd без аргументов отправит тебя в домашний каталог;
  • команда cd - вернет в предыдущий каталог.

Peco

Используем автодополнение на полную катушку

Система автодополнения ZSH интересна не только своими интеллектуальными функциями, но и тем, что она работает не с одними именами каталогов и файлов. ZSH умеет дополнять флаги и опции многих утилит и выводить удобную справку по ним, умеет дополнять названия пакетов apt-get, yum, pacman и других пакетных менеджеров, дополняет имена хостов при подключении по SSH. Если набрать kill и нажать кнопку Tab, ZSH выведет список процессов. После второго нажатия Tab список станет интерактивным, и ты сможешь выбрать процесс, который следует умертвить.

Кроме встроенных правил автодополнения, on-my-zsh имеет множество плагинов с правилами автодополнения для многих утилит и приложений.


Работаем с историей команд

Любой современный командный интерпретатор, будь то ZSH или bash, сохраняет историю введенных команд. ZSH хранит историю в файле /home/username/.zsh_history . При необходимости его можно погрепать (grep ls ~/.zsh_history), чтобы найти нужную команду. Но делать это совсем не обязательно, ведь командный интерпретатор уже имеет в своем арсенале набор средств для работы с историей.

Например, следующая команда вставит в строку ввода предыдущую команду:

$ !!

Ее особенно удобно использовать, если забыл указать sudo перед командой, требующей права root:

$ pacman -Syu error: you cannot perform this operation unless you are root. $ sudo !! sudo pacman -Syu

Можно взять из истории только аргумент команды. Например:

$ cd /home/user/foo cd: /home/user/foo: No such file or directory $ mkdir !* mkdir /home/user/foo

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

$ !qwerty

Если же нужно найти команду с указанными символами где-то в середине или в конце, можно сделать так:

$ !?qwerty?

Ты можешь даже исправлять описки в последней введенной команде:

$ ^dc^cd

С помощью комбинации Ctrl + R команды можно искать в интерактивном режиме. Просто начни вбивать символы, присутствующие в команде, и ZSH вставит в строку ввода нужную команду. Это очень удобная функция, но ее можно сделать еще удобнее, если использовать возможности уже знакомого нам peco.

В Сети можно найти сторонний плагин для oh-my-zsh под названием zsh-peco-history . Просто скачай его в каталог сторонних плагинов ZSH:

$ git clone https://github.com/jimeh/zsh-peco-history.git $ZSH_CUSTOM/plugins/zsh-peco-history

И активируй в ~/.zshrc:

Plugins=(git fasd zsh-peco-history)

Теперь комбинация Ctrl + R будет запускать полноэкранное меню peco вместо однострочной поисковой строки.

Копируем, удаляем, переименовываем

Казалось бы, что может быть проще, чем скопировать или переименовать файл? Просто вбиваешь команду cp или mv, а затем старое и новое имена:

$ cp httpd.conf httpd.conf.bak

Но зачем утруждать себя, нажимая лишние кнопки, если можно сделать так:

$ cp httpd.conf{,.bak}

$ rename "s/регулярка/на_что_заменить/" *.txt

Такая команда заменит все подстроки, подпадающие под регулярное выражение, в именах всех файлов с расширением.txt. Недурно, не правда ли?

Также стоит изучить команду basename. При обычном использовании она просто выводит последний элемент пути:

$ basename /usr/bin/zsh zsh

Но также ее можно использовать для отрезания частей строки, например:

$ basename file.txt .txt file

Ты можешь спросить, что это дает? А вот что:

$ for file in *.png; do convert "$file" "`basename "$file" .png`.jpg#26759185" ; done;

Это перекодировщик всех файлов PNG в JPG. Команда крайне проста: мы создаем цикл, который проходится по всем файлам PNG в текущем каталоге, затем запускает команду convert для перекодировки их в JPG. Basename здесь нужен для того, чтобы дать новым файлам корректное имя. Хинт: обратные кавычки запускают заключенную в себя команду в так называемом субшелле. Они нужны для запуска одной команды из другой.

Чтобы понять их мощь, обрати внимание на следующую команду:

$ rm -f `tar ztf /path/to/file.tar.gz`

Уверен, эта команда не раз спасет тебя, когда ты распакуешь архив tar.gz не в тот каталог. Она удаляет все ранее распакованные файлы.

Ищем правильно

Ты уже должен знать, что в любой UNIX-системе есть команда find, предназначенная для поиска файлов. Использовать ее предельно просто:

$ find . -name *.c -type f

Эта команда найдет все файлы с расширением.c в текущем каталоге и во всех его подкаталогах. Но что делать, если в каждом из этих файлов необходимо найти строку open? А вот это:

$ find -name *.c -type f | xargs grep open


Можно и несколько по-другому:

$ find . -name *.c -exec grep -H open {} ;

Этот пример немного сложнее и, как ни странно, медленнее. Почему? Потому, что xargs распараллелит поиск, запустив отдельный процесс grep на каждую строку.

При желании от find можно вообще избавиться:

$ grep -R open --include="*.c".

По сути, это эквивалент предыдущей команды.

Работаем с буфером обмена

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

Однако в случае с терминалом у тебя есть один очень мощный инструмент. Он называется xclip и позволяет копировать и вставлять в буфер обмена. Для начала добавь в ~/.zshrc следующие строки и перезапусти терминал (или ZSH):

Alias -g xcopy="xclip -selection clipboard" alias -g xpaste="xclip -selection clipboard -o"

Теперь, чтобы что-то скопировать в буфер обмена, просто перенаправь вывод в xcopy. Например:

$ uname -a | xcopy

В буфере обмена окажется вывод команды uname -a. Вставить можно таким же образом:

$ xpaste

Вывод также можно перенаправить. Или заключить xpaste в обратные кавычки, чтобы его содержимое было выполнено шеллом.

Выводы

Командная строка не просто мощный инструмент. Это настолько мощный инструмент, что мне даже трудно придумать, какой тип интерфейса ОС может быть эффективнее. То, о чем я написал, - такая крошечная часть верхушки айсберга, что для описания всех трюков командной строки потребовалась бы серия книг, сродни «Большой советской энциклопедии». Ну а напоследок то, чего все так долго ждали, - dd с показом прогресса:

$ pv -tpreb /dev/sdb | dd of=~/sdb.img bs=1M

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

- Нурия, зачем нужно прокачивать команду перед началом проекта?

Если вы менеджер проекта и работаете с профессиональной, слаженной командой - считайте, что вам крупно повезло. Если же вам досталась разношерстная команда, средней или низкой квалификации - конечно, ее можно разогнать и заменить на профессионалов, но надо понимать, что зарплата последних обычно гораздо выше. Другой вариант - постараться натаскать команду своими силами. Самое важное для быстрой прокачки команды - это мотивация. У клиентов память гораздо лучше, чем у самих компаний. Чем лучше вы научитесь ставить себя на их место и сопереживать всему их потребительскому опыту, тем успешнее вы будете.

Клиент, который в чрезвычайном возбуждении простоял несколько часов в очереди за новым iPhone - это тот же самый человек, который твитит и пишет в блог, когда телефон сломается. Эти два момента связаны, и вам нужно уловить эту связь.

- Что каждый начальник хочет увидеть от команды, помимо эффективности?

Команда не должна стоять на месте. Есть области, в которых она сильна, а в других чувствуется недостаток знаний. Поэтому стоит выбрать свои слабые места и прокачать их. Люди любят говорить с людьми, а не с роботами. Когда-то, когда мы создавали компанию, мы пытались сочинять красивые имейлы, идеально написанные, без опечаток. Они не работали. Тогда мы решили немного это поменять. Мы вписывали более личные и уникальные первые строки, мы добавляли опечатки. И тогда оказалось, что люди чаще отвечают. Как только наши клиенты увидели, что все эти письма сочиняет человек, а не робот, они с большей готовностью отвечали нам и взаимодействовали с нами.

Это жизненно важно, когда у людей на рынке есть выбор. Многие компании не добиваются успеха именно потому, что забывают быть человечными. Любой начальник хочет видеть в глазах своей команды понимание того, что сейчас - самое время сосредоточиться на аутентичных, реальных отношениях с клиентами. Для многих компаний работа над лояльностью означает вознаграждение повторяющегося поведения. Вы покупаете сэндвич и получаете пятый бесплатно - но люди возвращаются к вам, потому что любят ваши сэндвичи и общение с вашими сотрудниками, или они просто приходят за бесплатной едой? У клиентов вполне материальные отношения с вашим продуктом и брендом, и задача вашей компании - сделать эти отношения осмысленными, искренними. Голос клиента сейчас слышен громко как никогда.

Возьмем тот случай, когда компания не готова особо много платить исполнителям, и их квалификация невысока. Принято решение ввести бонусы на проекте, в надежде повысить мотивацию и навыки команды - то есть сделать ее эффективной. К примеру, вы взяли часть денег, выделенную на бонусы, и раздали на свое усмотрение. Люди забрали какие-то суммы, но так и не поняли, за что именно они получили деньги. Ну, мол, молодцы. Послужили ли бонусы мотивацией? А вдруг Оля сделала в два раза больше работы, чем Петя (постоянно бегающий в курилку), при этом получила меньшую сумму? Будет ли Оля и дальше так стараться, зная, что сумма бонусов взята наугад? Будет ли Петя стараться сильнее, понимая это? Из этого примера понятно - цель не достигнута.

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

Но после нескольких попыток вы внедрили различные показатели KPI, оценку 360 и всё подобное и живете мотивированно и счастливо. Всегда поощряйте своих сотрудников действовать по-человечески. Давайте им свободу и пространство быть такими, какие они есть - позвольте им решать проблемы креативно, подходить к ним со своей точки зрения. Вы что-то напортачили с заказом? Пошлите обиженным пиццу со словами «Простите нас», выложенными из пепперони. Ваш клиент оценит это гораздо больше, чем стандартное письмо с извинениями.


- Какие способы лучше всего работали из вашей практики?

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

Если друг оказался вдруг и не друг, и не враг, а — так,
Если сразу не разберёшь, плох он или хорош,
Парня в горы тяни — рискни! Не бросай одного его,
Пусть он в связке в одной с тобой — там поймёшь, кто такой.
Владимир Высоцкий, «Песня о друге»

Методология управления проектами прошла огромный путь развития, и в современном мире интерес экспертов в управлении проектами и программами склоняется от процессов и техник к управлению людьми. Если человек находится на своём месте, то ему биологически легко и естественно выполнять свои обязанности, и это приводит к тому что вся команда отыгрывает свои роли в проекте на 200%. Не нужно подгонять, переделывать работу, «мотивировать» и терять время на деструктивные конфликты.

Если у вас намечается сложный и важный проект, то вам критически необходимо сформировать такую правильную команду и организовать командную работу. И, наверно, было бы здорово взглянуть на поведение команды проекта прежде чем доверить ей проект?

Такую возможность вам представляет тренинг «Прокачай команду проекта» .

Что в основе?

Согласно «Модели Такмана», существует пять психологических стадий развития команды проекта:

  • Forming . Команда собирается вместе, узнает о проекте, о своих формальных ролях и ответственностях. Члены команды на данной фазе, как правило, независимы друг от друга и не особенно открыты.
  • Storming . Команда начинает изучать работы по проекту, технические решения и подход к управлению проектом. Если члены команды не настроены на сотрудничество и не открыты различным идеям и перспективам, обстановка может стать деструктивной.
  • Norming . Члены команды начинают работать вместе и подстраивают свои рабочие привычки и модели поведения так, чтобы содействовать командной работе. Члены команды начинают доверять друг другу.
  • Performing . Команда функционирует как хорошо организованное подразделение. Члены команды спокойно и эффективно выполняют свои задачи и решают проблемы.
  • Adjourning . Команда завершает работу и распускается или переходит к следующему проекту.

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

Понятно, что самым эффективным образом команда работает на стадии performing , а наименее эффективно на стадии storming . Чтобы не рисковать на реальном проекте, можно провести тест-драйв команды, понять кто на что способен в реальных «боевых» условиях, кто к каким функциям и процессам управления проектом тяготеет, а также даже добавить кого-нибудь или убрать из команды.

Зачем участвовать?

Эта статья также доступна на следующих языках: Тайский

  • Next

    Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

    • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

      • Next

        В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ. Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо. Желаю вам удачи и берегите себя в азиатских краях.

  • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
    https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png