Покоряй и Властвуй: Советы по работе в терминале. Часть 1 Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
fullcircle:25:советы [2010/05/06 17:26]
создано
fullcircle:25:советы [2010/10/31 00:48] (текущий)
Строка 1: Строка 1:
 +====== Покоряй и Властвуй:​ Советы по работе в терминале. Часть 1======
 +
 +<style right>
 +//​Автор - Лукас Вестерман (Lucas Westermann)//​
 +</​style>​
 +
 +  - [[..:​25:​советы|Советы по работе в терминале - Часть 1]]
 +  - [[..:​26:​советы2|Советы по работе в терминале - Часть 2]]
 +  - [[..:​27:​советы_ч_2|Советы по работе в терминале - Часть 3]]
 +  - [[..:​28:​советы_ч_4|Советы по работе в терминале - Часть 4]]
 +  - [[..:​29:​советы_ч_5|Советы по работе в терминале - Часть 5]]
 +  - [[..:​30:​советы_ч_6|Советы по работе в терминале - Часть 6]]
 +  - [[..:​31:​советы_ч_7|Советы по работе в терминале - Часть 7]]
 +  - [[..:​32:​советы_ч_8|Советы по работе в терминале - Часть 8]]
 +  - [[..:​33:​советы_ч_9|Советы по работе в терминале - Часть 9]]
 +  - [[..:​34:​советы_ч_10|Советы по работе в терминале - Часть 10]]
 +  - [[..:​35:​советы_ч_11|Советы по работе в терминале - Часть 11]]
 +  - [[..:​36:​советы_ч_12|Советы по работе в терминале - Часть 12]]
 +
 +Случалось ли вам спрашивать себя, есть ли более простой способ найти команду в истории команд,​ чем перебирать их одну за другой?​ Такой способ есть. Более того, есть ещё немало полезных трюков,​ упрощающих работу с терминалом и оболочкой. Заметьте,​ что я использую термины «терминал» и «оболочка». Я знаю, что многие считают,​ что это одно и то же. Позвольте объяснить различие.
 +
 +Терминал — это та программа,​ которая показывает приглашение оболочки,​ но саму оболочку можно легко сменить. Любые настройки приглашения производятся именно для оболочки,​ а не для терминала. Две наиболее распространённые оболочки — это Bash (Bourne Again Shell), которая часто установлена оболочкой по умолчанию,​ и Zsh (с творческим названием «Z Shell»). Чтобы попробовать новую оболочку,​ просто установите её и запустите из работающей оболочки bash, например:​
 +<​code>​
 +zsh
 +</​code>​
 +Если новая оболочка вам понравится,​ то её можно сделать основной:​
 +<​code>​
 +sudo chsh <​имя_пользователя>​
 +</​code>​
 +Здесь <​имя_пользователя>​ — это, очевидно,​ имя пользователя. На экране появится следующее:​
 +
 +Изменение командной оболочки для <​имя_пользователя>​
 +Введите новое значение или нажмите ВВОД для выбора значения по умолчанию
 +Командная оболочка [/bin/zsh]:
 +
 +Здесь нужно указать путь к файлу оболочки (обычно это /bin/). Запись в квадратных скобках — это ваша текущая регистрационная оболочка (как видите,​ я использую оболочку Z shell).
 +
 +Вернёмся к нашей теме. История команд порой бывает очень длинной и запутанной (в моей истории сейчас около 1000 команд,​ а ведь я не так давно очищал её). Я частенько запускаю команды по несколько раз, иногда с большим количеством аргументов,​ иногда с меньшим. Для длинных команд я обычно произвожу поиск в списке истории команд. Например:​
 +<​code>​
 +history|grep cd
 +</​code>​
 +возвращает:​
 +<​code>​
 +996 cd Dropbox/​Scripts/​C
 +</​code>​
 +То есть эта команда отображает полный список команд «cd», которые я запускал. Обратите внимание на номер слева, в моём случае это 996. Если мы хотим ещё раз выполнить какую-то команду,​ то у нас есть несколько способов. Можно скопировать и вставить строчку (честно говоря,​ это не очень эффективно,​ ведь придётся оторваться от клавиатуры),​ а можно сделать так:
 +<​code>​
 +!996
 +</​code>​
 +таким образом автоматически будет выполнена команда из списка истории команд под номером 996. Ага, я вновь в каталоге с моими сценариями на Си, как просто! Понадобилось всего четыре символа,​ чтобы запустить эту команду. Я ленив, и такой способ мне очень нравится. И это гораздо быстрее,​ чем перелистывать команды в истории клавишами «Вверх» и «Вниз» в поисках нужной. Надеюсь,​ вам понравился этот способ. Отмечу также, что можно запустить:​
 +<​code>​
 +!cd
 +</​code>​
 +чтобы выполнить последнюю команду cd.
 +
 +Ещё одна очень полезная функция,​ с которой я познакомился,​ — это возможность добавлять собственные команды в оболочку Bash (в Z shell это тоже работает). Откройте свой файл .bashrc (в gedit, vim, nano или любом другом текстовом редакторе). Я буду использовать vim.
 +<​code>​
 +vim .bashrc
 +</​code>​
 +Откроется довольно длинный (и скорее всего не очень понятный) файл. Обычно я добавляю свои записи в самый конец этого файла, чтобы отделить их от остального содержимого,​ и добавляю к ним комментарии,​ но вы можете поступить так, как удобнее лично вам. Если вы всего лишь хотите сделать запуск какой-то команды проще, например,​ запускать:​
 +<​code>​
 +update
 +</​code>​
 +чтобы выполнить:​
 +<​code>​
 +sudo apt-get upgrade
 +</​code>​
 +то я рекомендовал бы использовать алиасы,​ так как это просто способ набирать меньше текста. Лично для меня количество нажатий клавиш критично. Итак, чтобы создать алиас, в файл .bashrc нужно добавить следующую строку (я добавил ещё и комментарий,​ чтобы было понятнее).
 +<​code>​
 +#Алиас для обновления системы
 +alias update="​sudo apt-get upgrade"​
 +</​code>​
 +Ещё один алиас, который я часто использую:​
 +<​code>​
 +#Алиас для более подробного вывода команды ls
 +alias ls="ls -la --color=always --classify"​
 +</​code>​
 +Как вы, должно быть, заметили,​ я заменил команду ls на вариант с более подробным выводом. Вы спросите:​ «А что если я захочу использовать просто команду ls без аргументов?​» Ответ прост:
 +<​code>​
 +\ls
 +</​code>​
 +Обратный слэш аннулирует алиасы,​ привязанные к этому имени, и просто запускает команду ls.
 +
 +Теперь рассмотрим функции. Функции — это сценарии,​ добавленные непосредственно в конфигурационный файл оболочки,​ что бывает весьма удобно. Пример,​ который я буду использовать,​ находится на странице 7. Не волнуйтесь,​ я приведу объяснение.
 +
 +Время от времени я пользуюсь этим сценарием,​ чтобы конвертировать аудио из формата .m4a в формат .mp3. Мне страшно представить,​ что я мог бы вручную запускать эти команды (неважно,​ как редко). В первой строке мы определяем m4a как функцию,​ а после первой фигурной скобки следует сам сценарий. Сначала мы проверяем,​ что сценарий запущен с двумя аргументами,​ и если это не так, то будет выдано сообщение об ошибке (самый конец сценария,​ вторая строка снизу). Если же аргументы указаны,​ мы проверяем,​ существует ли первый файл, а затем создаём файл_на_выходе (в данном случае файл .mp3). Если файл не существует,​ печатаем «файл <​имя_файла>​ не существует!». После этого мы проверяем,​ существует ли файл mp3, чтобы удостовериться,​ что первая часть сценария прошла успешно. Если он не существует,​ то мы не предпринимаем попыток его переместить. Далее мы перемещаем файл .m4a в каталог Music, при этом используем указанное имя mp3-файла (чтобы знать, какой m4a какому mp3 соответствует) с заменой расширения с mp3 на m4a. Выдаём сообщение о том, что файл перемещён,​ и перемещаем файл mp3. Предварительно мы проверяем,​ существует ли каталог Music/m4a (оператор if перед комментарием). Если не существует,​ то мы его создаём. Надеюсь,​ мой сценарий кому-нибудь пригодится. У меня самого осталось несколько m4a-файлов из коллекции iTunes, и я конвертирую их, когда нахожу. Должен заметить,​ что эта функция требует указывать имена файлов в кавычках,​ иначе имена с пробелами и подобными символами не будут работать. Функцию нужно запускать так:
 +<​code>​
 +m4a "2-10 You're the Inspiration.m4a"​ "​You'​re the Inspiration.mp3"​
 +</​code>​
 +В результате файлы будут помещены в каталог Music (и подкаталог m4a). Однако в mp3-файлах будут отсутствовать id3-теги.
 +
 +Исправление этого недостатка я оставляю как задачку для моих читателей. Существуют инструменты командной строки для работы с тегами. Дам подсказку:​ пакет perl-mp4-info для archlinux (в репозитории Arch User Repository на сайте) — это инструмент,​ позволяющий читать теги из файлов m4a. Этот пакет должен быть доступен и для Ubuntu. Если вы дополните сценарий возможностью автоматического копирования тегов из m4a в mp3 и захотите поделиться со мной решением,​ пришлите мне код по почте, и я добавлю его в следующую статью (конечно,​ упомянув имя автора). Сам я такой сценарий ещё не написал (и мне не на чем его протестировать — похоже,​ что все свои m4a-файлы я уже переконвертировал),​ но у меня есть чёткое представление о том, как это можно сделать. Ваш код я сравню со своим алгоритмом и в следующей статье расскажу,​ соответствовал ли он моим представлениям,​ или же я даже не думал о таком способе. Насколько мне известно,​ ffmpeg не копирует такую информацию.
 +
 +Надеюсь,​ эти советы помогут вам и хотя бы немного пригодятся. Благодаря им мне приходится вводить значительно меньше текста,​ а работа в командной строке стала гораздо более эффективной (я даже использую Awesome [ред.: динамический оконный менеджер,​ есть в репозитории] на своей системе,​ поэтому к мыши я теперь притрагиваюсь крайне редко). С нетерпением жду писем от тех, кто возьмётся за решение задачки по улучшению функции. ​
 +
 --------------------------------------- ---------------------------------------
  
Строка 7: Строка 102:
 </​style>​ </​style>​
  
-{{tag>​Система Администрирование Full_Circle BASH Скрипт ​Резервирование}}+{{tag>​Система Администрирование Full_Circle BASH Скрипты}}