3 мая 2010 г.

Немного о практическом использовании alias'ов

В замечательной книге Алексея Федорчука "Доступный UNIX", которая мне очень помогла на стадии базового освоения Linux и продолжает помогать до сих пор, есть отдельный параграф, посвящённый назначению псевдонимов для команд. Вряд ли я смогу сказать об этой возможности что-то новое. С помощью команды alias можно назначить псевдоним или переопределение для любой команды с любыми параметрами. Команда alias имеет следующий синтаксис:

# alias [имя_псевдонима[=значение_псевдонима] ...]

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

# alias
alias grep='grep --colour=auto'
alias ls='ls --color=auto'

Если, в качестве аргумента, дать название псевдонима/переопределения, то команда выведет его значение:

# alias grep
alias grep='grep --colour=auto'

Чтобы удалить псевдоним/переопределение, достаточно дать команду

# unalias grep

"Алиасы", будучи прописанными в конфигурационных файлах оболочки (shell), сохраняются и после перезагрузки, в противном случае - будут действовать только в пределах текущей сессии. Например, глобальные alias'ы оболочки bash хранятся в /etc/bash/bashrc. Кроме этого, для каждого пользователя существует отдельный конфигурационный файл для командной оболочки, хранящийся в домашней директории и считывающийся после глобального конфигурационного файла.

Для примера, создадим переопределение для команды удаления rm

# alias rm='rm -i'

Это может спасти пользователя от случайного удаления нужных файлов. Как это работает? Всё очень просто. Командой выше мы создали переопределение для команды удаления rm с флагом -i. Имя псевдонима совпадает с именем оригинальной команды, но псевдоним обладает как бы более высоким "приоритетом" выполнения, и, если мы сейчас дадим команду

# rm file1.txt

она будет равносильна

# rm -i file1.txt

Флаг -i или --interactive, как понятно из его имени, запускает команду в интерактивном режиме. Команда, запущенная с данным флагом, запросит подтверждение у пользователя - действительно ли он хочет удалить файл file1.txt? Этот флаг применим ко многим комадам/утилитам, выполнение которых может привести к нежелательным/неприятным последствиям, таким, как упомянутое выше случайное удаление важных файлов.
Теперь сохраним созданный alias в конфигурационном файле пользователя:

# echo alias rm='rm -i' >> ~/.bashrc

Всё, теперь переопределение команды rm сохранится и после перезагрузки.

Псевдонимы работают похожим образом, но их имена не совпадают с именами доступных команд/утилит. Например,

# alias ll='ls -l'

позволит выводить список директории в расширенном формате, дав команду ll.

Я сейчас мало использую alias'ы, так как они не способствуют запоминанию важных флагов команд. Более того, к ним привыкаешь, и в системе, где привычные alias'ы не определены, можно запросто ввести что-то вроде rm -r ~/*, после чего все файлы в домашней директории будут удалены без предупреждения. Конечно, этот глупый пример, зато наглядный. На мой взгляд, alias'ы не отменяют требование внимательности со стороны пользователя при выполнении команд, особенно, если он работает от имени суперпользователя (root'a).

А вот свежий пример использования команды alias.
Несколько дней назад установил консольный тренажёр "слепого" набора на клавиатуре gtypist:

# emerge -av gtypist

При попытке запустить тренажёр, получаю сообщение:

# gtypist
(null): i18n problem: invalid value for msgid "Y/N": Д/Н

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

# LANG="en" gtypist

А ещё лучше, чтобы каждый раз не указывать локаль, создать переопределение:

# alias gtypist='LANG="en" gtypist'
# echo alias gtypist='LANG="en" gtypist' >> ~/.bashrc
# gtypist
Happy Typing!


Теперь приложение работает без проблем.

Комментариев нет:

Отправить комментарий