Команды терминала

Команды терминала

Несмотря на повсеместное распространение графических интерфейсов и всяких удобных манипуляторов вроде Magic Mouse и Magic Trackpad, приложение Терминал.app до сих пор является достаточно полезным и слегка «гиковым» инструментом для выполнения некоторых операций, с которым большинство из нас знакомы достаточно поверхностно. На самом деле, в его «укрощении» нет ничего сложного, поэтому для всех читателей МакРадара я подготовил команды для Терминала, которые могут оказаться полезными.

Для начала стоит сказать, что само приложение Терминал.app, как и все полезные служебные утилиты, располагается в каталоге Программы > Служебные программы. Сразу после его запуска вы увидите строку, в которой написано имя компьютера и текущего каталога, а после знака доллара ($) — приветливо мигающий курсор, который приглашает вас ввести свою первую команду…

Список файлов и папок — ls

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

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

  • ls -l отобразит подробные данные о каждом элементе, включая права доступа, размер файлов и т.д. Кроме того, первый символ каждой строки позволит определить тип данных: если это латинская буква «d», то перед нами каталог, а если дефис (-), то обычный файл.
  • ls -a отобразит список всех файлов и каталогов в текущей папке, включая скрытые элементы (имена которых в Mac OS X начинаются с точки).

Хозяйке на заметку: ключи можно запросто комбинировать между собой, поэтому если вы хотите просмотреть подробные данные обо всех элементах каталога, включая скрытые файлы, то ваша команда должна выглядеть так: ls -la

Перемещение между каталогами — cd

Наименование этой команды происходит вовсе не от старых компакт-дисков, которые Apple успешно убила своим цифровым iTunes Store, а от двух английских слов «change directory» — именно этим она и занимается:

  • Напишите cd Music — и Терминал перейдет в папку Music, если, конечно, она существует в вашем текущем каталоге.
  • Для выхода в папку на уровень выше используется команда cd .. (с двумя точками).
  • А выполнив команду cd вы моментально перенесетесь в домашний каталог пользователя.

Полный путь к рабочему каталогу — pwd

Название этой команды тоже происходит от первых букв фразы «print working directory». В каком бы каталоге вы не находились, результатом выполнения данной команды станет полный путь к текущему каталогу.

Создание каталога — mkdir

Данная команда создает директорию с указанным именем. К примеру, mkdir Temp создаст в текущей папке каталог Temp. Если вы забыли, в каком каталоге вы сейчас находитесь, воспользуйтесь pwd:

Удаление файлов и каталогов — rm, rmdir

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

Но вообще команда rm test1.txt удалит файл test1.txt из текущего каталога. А если добавить, скажем, ключ «i» (rm -i test2.txt) пользователю потребуется подтвердить удаление.

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

  • rmdir Test удалит каталог Test только в том случае, если он пустой и не содержит внутри себя подпапок или файлов.
  • rm -r Test2 рекурсивно удаляет все находящиеся файлы и папки внутри Test2, а его удаляет в самом конце.

Перемещение и копирование фалов — mv и cp

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

mv ~/test1.txt ~/Documents/test1.txt

Первым параметром (~/test1.txt) выступает файл, который нам нужно переместить, а вторым — каталог назначения и результирующее имя файла.

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

Во-вторых, чтобы каждый раз не писать путь к домашнему каталогу, достаточно воспользоваться тильдой (~). Например, запись ~/Documents равносильна /Users/имя пользователя/Documents.

Для копирования файлов достаточно заменить mv на cp:

Остальные команды

Естественно, описать все доступные команды (как и их ключи) не представляется возможным, поэтому я остановлюсь еще на нескольких интересных и полезных «экземплярах»:

  • Запустить любое приложение в системе можно с помощью команды open, указав через пробел путь к приложению и его название. Например, open /Applications/Airfoil.app
  • С помощью команды who можно посмотреть список пользователей, которые залогинились в систему. Естественно, это актуально лишь в том случае, если работа на данном компьютере подразумевает вход нескольких пользователей или активный SSH.
  • Команда cat test.txt позволит вам вывести в окно Терминала содержимое файла с именем test.txt, но вы не сможете его отредактировать (для этого потребуется воспользоваться текстовым редактором вроде nano, vim или emacs), только просмотреть.
  • Отменить процесс выполнения любой команды (будь то ping или работа шелл-скрипта) всегда можно с помощью универсальной комбинации клавиш Control+C.
  • Очистить окно Терминала от большого количества текста достаточно просто, выполнив команду clear.
  • Для выполнения некоторых команд вам могут потребоваться привилегии администратора. Быстрее всего это сделать путем добавления в начало строки команды sudo. В этом случае, Терминал попросит ввести пароль от вашей учетной записи.
  • Посмотреть список запущенных процессов можно с помощью команды top, правда, в этом случае данные будут выглядеть менее наглядно, нежели в Мониторинге системы.
  • Для вывода детальной справки по какой-либо команде можно воспользоваться man, указав через пробел имя интересующей команды.
  • Чуть не забыл упомянуть о просто фантастической поисковой утилите grep, с помощью которой можно найти текстовую строку в файле или, скажем, конкретный процесс в списке процессов (например, ps ax|grep smbd).

В мае Nettuts+ выпустил замечательную статью под названием «7 простых и полезных хитростей командной стоки»; это была отличная статья для того, чтобы познакомиться, как работать с терминалом. Но вы можете узнать гораздо больше о том как использовать командный интерпретатор и я помогу вам подняться на следующий уровень в этом туториале!

Начнём

Если вы используете Mac OS X или ваш любимый дистрибутив Linux, вы уже готовы, можно приступать. Просто запустите терминал и следуйте инструкциям в данной статье. В том случае, если вы на Windows, что же, командная строка по умолчанию, совсем не тоже самое, нежели интерпретатор bash. Если вам хочется работать с более мощным инструментом командной строки, взгляните на Microsoft PowerShell; однако, команды, которые мы рассмотрим далее не будут работать. Тем не менее вы можете установить интерпретатор bash на Windows:

  • Поставьте Cygwim, среда похожая на Linux для Windows.
  • Установите msysgit; в зависимости от опций, которые вы выберите при установке, вы получите Git Bash, который сможет обрабатывать данные команды.
  • Попробуйте Windows под-системы для приложений Unix. Хотя сам я это не тестировал, я понимаю, что вы получите интерпретатор Unix в итоге.

Отлично, давайте начнём!

1. Touch

Как разработчику, вам часто приходится создавать файлы. Если вы работаете из командной строки, обычно вы просто указываете имя файла вашему редактору:

$ mate index.html $ mvim default.css

Однако, временами у вас есть потребность создать один или несколько файлов, при этом не редактируя их. В этом случае вам поможет команда touch:

$ touch index.html $ touch one.txt two.txt three.txt

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

2. Cat и Less

Раз уж мы заговорили о файлах, вероятно в какой-то момент вы захотите увидеть содержание файла в терминале. Есть несколько команд призванных вам помочь в этом. Первая называется cat; cat означает «concatenate», команда не только показывает содержимое файла, у неё есть и другие функции; однако, мы разберём лишь этот момент. Принцип работы прост — передайте файл данной команде.

$ cat shoppingList.txt

Обратите внимание, в случае если файл слишком большой, для вас отобразиться лишь нижняя часть контента и вам придётся пролистать вверх, чтобы увидеть остальную часть. Конечно можно проскролить, но это не самый оптимальный вариант. Как насчёт less?

$ less shoppingList.txt

Less гораздо лучше подходит для просмотра больших файлов в командной строке. Вы получите экран полный текста, но не более. Вы можете передвинуть его на строку вверх или вниз с помощью клавиш k и j и переместить окно вверх и вниз с помощью b и f. Можно искать определённое вхождение написав /вхождение. Когда вы закончите нажмите q, чтобы выйти из less.

3. Curl

Так как вам, скорее всего, регулярно приходится работать с набором различных фреймворков, у вас есть необходимость каждый раз скачивать файлы подобных библиотек. Да, я знаю: вы можете скачать файлы из браузера, открыть нужную папку, распаковать и добавить нужное для вашего проекта, не кажется-ли вам, что это слишком много работы? Будет гораздо проще использовать командную строку. Для скачивания файлов, можно применить curl; посмотрите на следующий пример:

$ curl -O http://www.domain.com/path/to/download.tar.gz

Флаг -O сообщает curl, что скачиваемая копия контента должен обладать тем же именем, что и удалённый файл. Если вы не передадите данный параметр, curl вероятнее всего просто отобразит файл в командной строке (предполагая, что это текст).

Curl инструмент с огромным функционалом, вам стоит взглянуть на страницу мануала (посмотрите ниже) в случае если кажется, что будете использовать эту возможность часто. Вот вам полезная хитрость, используем расширение квадратной скобки (bracket expansion) в интерпретаторе shell.

$ curl -0 http://www.domain.com/{one,two,three}.txt

Да, не правда-ли просто скачать несколько файлов из одного места, за раз. (Обратите внимание, что это не функционал curl, это функция относится к самому shell, так что можно использовать подобную нотацию и для других команд; , если хотите узнать больше)

4. Tar и Gzip

Ну что же, теперь вы знаете как скачать необходимое при помощи командной строки; тем не менее, есть большая вероятность, что большинство файлов, которые будут скачены представляют из себя сжатые архивы с расширением .tar.gz (или .tgz). Что же нам с этим делать? Давайте отвлечёмся на секунду и разберём, что же значит «сжатый архив». Скорее всего вы уже знакомы с архивами. Вам довелось видеть .zip файлы; это один из типов архивов. В своей основе, архив — это один файл, который содержит в себе несколько файлов. Обычно архивы сжимают эти файлы, тем самым конечный файл занимает меньше места на диске, чем все файлы вместе взятые. Однако, вы можете ещё дальше уменьшить результат сжав сам архив … и вот здесь то мы и сталкиваемся с gzip. Gzip — одна из форм сжатия.

Вернёмся к скаченным файлам. Они были обработаны tar (заархивированы)? после чего сжаты gzip. Вы можете разжать их (unzip) после чего разархивировать tar, но мы хотим всего лишь несколько раз нажать на клавиши, не правда-ли? Вот что мы сделаем:

$ tar xvzf download.tar.gz

Подождите, что? Разберёмся: была запущена команда tar с флагами xvzf (обычно нужно добавить тире перед ними, но это опционально). Флаги означают:

  • x сообщает tar, что мы распаковываем (extracting), не архивируем
  • v даёт знать tar, что нам потребуется подробный (verbose) вывод (информация об исполняемом действии)
  • z сообщает tar, что файл был сжат gzip (тем самым файл будет разжат).
  • f сообщает tar, что мы будем использовать название оригинального архива.

Если вы хотите создать архив с gzip, вам всего лишь надо заменить флаг x на c (чтобы создать — create архив). Флаги v и z опциональны: вам нужен вывод? что насчёт gzip? Конечно вам следует оставить f; так как понадобится имя файла для нового архива (в противном случае результат будет выведен в командную строку). После этого передайте команде все файлы, которые хотите добавить в архив.

$ tar cvzf archive.tar.gz index.html css js auth.php $ tar cvzf archive.tar.gx *.txt

Ну и напоследок, я упоминал, что вы можете обработать архив gzip (или какие-либо другие файлы) индивидуально; когда вы это делаете, gzip заменяет оригинальный файл gzip версией. Чтобы разжать gzip, добавьте флаг -d (decompress).

$ gzip something.txt $ gzip -d something.txt.gz

5. Chmod

Другие действия, которые часто приходится выполнять веб-разработчикам — это изменения прав доступа к файлу. Есть три типа прав доступа, которые можно задать, и есть три класса, которым можно задать данные права доступа. Права доступа — чтение (read), запись (write) и исполнение (execute); классы — пользователь (user), группа (group) и другие (others). Обычно пользователь является владельцем файла, который он создал. Может существовать группа пользователей и класс group указывает на права доступа для пользователей в этой группе, пользователей, которые могут взаимодействовать с файлом. Соответственно, others класс включает всех остальных. Только пользователь (владелец файла — owner) и супер пользователь могут изменять права доступа к этому файлу. Ах да, и всё что было описано, работает точно также с директориями.

Так как же нам задать эти права доступа? Команда для этого chmod (change mode). Есть два способа сделать это. Для начала, этого можно добиться с помощью восьмеричной нотации; немного не понятно сперва, но как только вы к ней привыкните, заметите, что она быстрее. Выглядит это примерно так, исполнение соответствует 1, запись 2, а чтение 4. Вы можете их сложить для получения нескольких прав доступа: чтение+запись = 6, чтение+запись+исполнение = 7, и так далее. Тем самым для каждого класса существует соответствующее число, выстройте их в ряд и вы получите трёхзначное число для пользователя, группы и всех остальных. К примеру, 764 предоставит пользователю все права доступа, группе возможность чтения и записи и всем остальным — чтение. Чтобы понять лучше советую вам ознакомиться со статьёй на Wikipedia.

В том случае, если вам сложно запомнить восьмеричную нотацию, вероятно символическая нотация покажется проще (хоть она и требует больше нажатий по клавишам). Для этого вы будете использовать ‘u’, ‘g’ и ‘o’ для пользователя, группы и всех остальных (‘a’ для всех классов). В то время как ‘r’, ‘w’ и ‘x’ для чтения, записи и исполнения. Ну и наконец операторы ‘+’, ‘-‘ и ‘=’ чтобы добавить, убрать и установить права доступа в абсолютной форме. Вот как следует использовать символы: класса, оператора и прав доступа. К примеру, u+rwx добавляет все права доступа для класса пользователя; go-x убирает право запускать файл для группы и всех остальных; a=rw всем классом позволена запись и чтение.

Теперь, чтобы использовать всю эту теорию в командной строке, начните с команды (chmod), далее добавьте права доступа, после чего файлы и директории:

$ chmod 760 someScript.sh $ chmod u=rwx g+r o-x dataFolder

6. Diff и Patch

Если вам доводилось работать с системой контроля версий такой как Git или Subversion, вы знаете насколько они могут быть полезными, в случае если вы хотите поделиться проектом с другими разработчиками, или просто отслеживать версии. Но что если у вас есть потребность показать другу обновления в одном файле? Или другой разработчик отправил вам электронное письмо с новой версией файла, который вы редактировали с того момента, как получили последнюю копию? Иногда можно обойтись без полноценной системы контроля версий, но вам всё же нужен какой-то небольшой инструмент. Что же, как обычно поможет командная строка. Понадобиться команда diff. Прежде чем вы сделаете какие-либо изменения в файле, скопируйте файл, чтобы у вас «на руках» был оригинал. После обновлений, запустите diff; если не отправить вывод в файл, вывод будет отображён лишь в командной стоке, так что добавьте >, затем имя файла:

$ cp originalFile newFile $ vim newFile #edit newFile $ diff originalFile newFile 1c1 < This is a sentence. — > This is a short sentence. $ diff originalFile newFile > changes.patch

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

patch originalFile2 changes.patch

Теперь всё обновлено.

7. Sudo

sudo не похожа на остальные команды, но она пригодится по мимо углубления в мир работы с командной строкой. Представьте такой сценарий: есть вещи, которые обычные пользователи не должны делать в командной строке; легко совершить непоправимые ошибки. Единственный пользователь, у которого есть на это права — супер пользователь, или root. В тоже время, небезопасно находится постоянно в системе в качестве супер пользователя, в связи со всеми доступными ему привилегиями. Вместо этого можно воспользоваться командой sudo (super user do), чтобы предоставить права root для одной единственной команды. Вам потребуется ввести пароль от аккаунта супер пользователя, после чего система выполнит команду.

К примеру, установка ruby гема требует прав супер пользователя:

$ gem install heroku ERROR: While executing gem … (Errno::EACCES) Permission denied — /Users/andrew/.gem/ruby/1.9.1/cache/heroku-1.9.13.gem $ sudo gem install heroku Password: Successfully installed heroku-1.9.13

8. Man

Большинство команд, которые обрабатываются интерпретатором bash, довольно гибкие и у них есть множество скрытых возможностей. Если вы предполагаете, что команда может сделать то что вам требуется или хотите ознакомиться с инструкцией по использованию команды, самое время обратиться к мануалу или так называемым man страницам. Просто напишите man, затем команду, которая вас интересует.

$ man ln

Можно заметить, что man страница открываются благодаря less.

9. Shutdown

Когда вы закончили свою работу, можно даже выключить свой компьютер из командной строки. Потребуется команда shutdown, а также sudo для её выполнения. Нужно передать команде один флаг или два; обычно используется -h для передачи сигнала остановки системы (halt), -r для перезагрузки, -s для переход в режим сна. Далее передаётся время, когда это должно произойти: now, +количествоМинут или yymmddhhmm (год, месяц, день, час, минуты). Наконец, вы можете передать сообщение, которое будет показано пользователю, когда действие будет совершено. Если я хочу отправить мой компьютер «спать» через полчаса, я запущу:

$ sudo shutdown -s +30

10. История, !! и !$

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

$ history … 563 chmod 777 one.txt 564 ls -l 565 ls 566 cat one.txt … $ !565

Согласен, это плохой пример, так как мне приходится печатать больше символов для использования истории, нежели повторный запуск самой команды. Но как только вы начнёте комбинировать команды в длинные строки, данный подход будет гораздо быстрее.

Быстро получить доступ к последней команде и последнему используемому аргументу. Для предыдущей, последней команды используйте !!; часто потребуется добавлять sudo перед этим. Для получения последнего аргумента, вам понадобится !$; пожалуй переход в новую директорию, будет хорошим примером. В обоих случаях интерпретатор покажет полную команду, чтобы вы видели, что выполняете.

$ gem install datamapper ERROR: While executing gem … (Errno::EACCES) Permission denied — /Users/andrew/.gem/ruby/1.9.1/cache/datamapper-1.0.0.gem $ sudo !! sudo gem install datamapper Password: Successfully installed datamapper-1.0.0 $ mkdir lib $ cd !$ cd lib

Если вы такой же фанат повышения продуктивности, как и я, идея использования, по полной, командной строки должна вас заинтересовать. То что я показал всего лишь пример встроенных команд … далее, есть много чего, что можно установить (посмотрите на менеджер пакетов homebrew, к примеру) Но возможно вы и так уже являетесь опытным пользователем командной строки, в этом случая поделитесь интересной командой с остальными. Напишите их в комментариях!


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *