В этой статье мы покажем вам, как создавать пользовательские команды в Linux, которые позволят вам создавать команды «быстрого доступа» с использованием простого имени по вашему выбору. Еще лучше, вы можете объединить несколько команд, подобных этому, и запустить их все одним словом. Полезно, правда? По мере того, как вы все больше знакомы с Linux, вы столкнетесь с командами на форумах и учебниках, которые могут быть очень сложными (и странными). Рассмотрим следующий пример, чтобы распечатать список файлов в одном столбце:
ls -l --color | awk '{print $ 9}'
Это дает нам следующий результат:
Все идет нормально. Но что, если вы хотите часто использовать эту команду? Трудно запомнить это письмо для письма, его нелегко напечатать, и он слишком длительный. Теперь добавьте десятки других команд с похожими (или большими) уровнями сложности, и легко увидеть, что нам нужно новое решение.
Шаг 1. Откройте файл в текстовом редакторе с помощью имени files
Предположим, мы хотим назвать нашу новую команду «files». Мы создаем новый файл с именем «files», используя текстовый редактор «vi», указав следующую команду:
vi files
Эта команда откроет базовый редактор, в котором вы можете ввести текст. По умолчанию он будет находиться в режиме «чтения», и вы не сможете добавить новый текст. Измените это, чтобы вставить режим, нажав клавишу «Вставить» на клавиатуре.
Теперь скопируйте и вставьте следующий текст. Вы можете быстро вставить его в терминал, щелкнув его правой кнопкой мыши.
#!/bin/bash # Print list of files in one column ls -l --color | awk '{ print $9 }'
Как вы можете видеть, это вставляется в vi, когда включен режим «INSERT»:
Это называется «скриптом», и он состоит из трех частей:
- Он начинается со слов “#!/bin/bash”
- Строки, начинающиеся с hashtag (#), являются комментариями
- Остальные команды. Заменяют третью строку сложной командой, которую вы хотите упростить
Теперь выйдите из режима «Вставки», нажав клавишу «Esc». Сохраните файл, нажав Shift + Z + Z (Удерживая клавишу shift, нажмите «z» два раза).
Теперь файл сохранится в текущей папке. Вы можете отобразить его содержимое, введя:
cat files
Это дает следующий результат:
Шаг 2: Назначьте правильные разрешения для нашего скрипта
Если мы просто перечислим файлы в каталоге, вы увидите, что наш новый файл является одним из них.
Однако это обычный файл, а не тот, который может быть выполнен. Команда «ls» отображает исполняемые файлы зеленым цветом. Поэтому нам нужно сообщить Linux, что наш новый файл является исполняемым. Мы делаем это, введя следующее:
chmod 755 files
Это изменяет права доступа к файлам и делает их исполняемыми. Теперь «ls» показывает файл как зеленый:
Пришло время запустить нашу команду!
Шаг 3: Указание путей к нашему скрипту
К сожалению, мы не можем просто набрать «files» в текущем каталоге, чтобы запустить наш новый скрипт. Появляется сообщение об ошибке: “command not found”:
Это связано с тем, что Linux ищет регулярные команды в определенном наборе каталогов, на которые ссылается переменная $PATH. И наш текущий каталог отсутствует в этом списке.
Итак, у нас есть три варианта:
- Вручную укажите полное местоположение нашего файла сценария каждый раз
- Добавьте «текущий каталог» в переменную $PATH
- Переместите наш файл сценария в существующую папку, на которую ссылается $PATH
Давайте посмотрим, как сделать все три:
Способ 1. Вручную укажите полное местоположение
Когда мы попытались просто набрать «files» ранее, мы получили сообщение об ошибке. Но мы можем указать текущий каталог для нашего файла сценария следующим образом:
./files
И это работает, как вы можете видеть ниже:
К сожалению, это не сработает, если мы будем в другой папке. Мы должны указать полный путь, который является болью.
Способ 2. Добавить «Текущий каталог» в переменную PATH
Этот метод имеет ту же проблему, что и первая. Мы можем сказать, что Linux всегда ищет «текущий каталог» для скриптов и команд. Таким образом, нам не придется использовать «./». Мы можем временно добавить текущий каталог в $ PATH следующим образом:
PATH="$PATH:."
Теперь просто набрав «файлы», как показано здесь:
Однако этот подход имеет две проблемы:
- Как уже упоминалось, вы не можете получить доступ к сценарию из любого другого каталога, кроме своего собственного
- Изменение в $PATH является временным. Он будет сброшен, когда сеанс пользователя закончен!
Чтобы изменения в $PATH были постоянными, нам необходимо отредактировать этот файл:
~/.bash_profile
Как и раньше, мы можем использовать редактор vi:
vi ~/.bash_profile
Снова нажмите «Вставить», чтобы перейти в режим INSERT, и перейдите к строке с указанием переменной PATH, как показано ниже:
Теперь добавьте следующее в конец строки PATH:
:.
Это двоеточие (:), за которым следует точка (.). Сохраните файл в vi, нажав «Esc» и Shift + z + z, как раньше. Однако изменения не вступят в силу до перезагрузки ~/.bash_profile. Сделайте это, используя следующую команду:
source ~/.bash_profile
Вы можете проверить, произошли ли изменения, вызвав переменную $PATH. Вы должны увидеть дополнение в конце строки следующим образом:
Теперь изменение сохранится даже после завершения сеанса пользователя. Однако вы все равно не можете выполнить команду из любой папки. Для этого нам нужен метод 3.
Способ 3: добавьте файл в существующий пункт назначения $PATH (рекомендуется)
На мой взгляд, это лучший способ добавить вашу пользовательскую команду, чтобы вы могли получить к ней доступ из любого места.
Во-первых, получите список местоположений $PATH с помощью echo $PATH, как показано в методе 2.
Каждое расположение папки разделяется двоеточием (:) Вы можете видеть на скриншоте выше, что папка /usr/local/bin является одним из путей.
Поэтому мы просто переместим нашу пользовательскую команду в это место (или любую другую папку в $PATH) с помощью этой команды:
mv files/usr/local/bin
И теперь мы можем изменить нашу рабочую папку и получить доступ к скрипту из любой точки!
На этом скриншоте я переместил сценарий в /usr/local/bin и переместил одну папку на «cd ..». И команда все еще работает!
Это правильный способ создания пользовательских команд в Linux. Это всего лишь верхушка айсберга, когда дело доходит до сценариев в Linux. Вы можете писать сложные логические контуры и выполнять условные операторы. Вы также можете использовать это для создания псевдонимов для существующих команд или объединить их вместе для автоматического выполнения! Если это ваш первый набег на Linux-скрипты, будьте готовы получить доступ к богатству мощности и функциональности в будущем.
Счастливые скрипты!