Добавление ярлыков команд в / bin

8

Есть ли способ добавить пользовательские команды /bin?

Например, я docker container lsмного использую и хотел бы превратить это в команду быстрого доступа, например dcls.

Если добавить файл с именем , dclsчтобы /binи внутри файла, указать точную команду docker container ls, я предполагаю , что это не будет работать.

Как правильно, если есть, сделать что-то подобное?

alex067
источник
6
Не добавляйте в /bin, вы можете добавить в ~/bin(корзину в своем собственном каталоге) или в /usr/local/bin(чтобы поделиться со всеми пользователями вашей системы, но не мешать работе менеджера пакетов). Или лучше в этом случае использовать псевдоним.
Ctrl-Alt-Delor

Ответы:

25

Простой способ ярлыка - определить alias

alias dcls='docker container ls'

Это будет выполнено docker container lsпри вводе, dclsи команда aliasперечислит ваши определенные псевдонимы. Чтобы удалить этот псевдоним, используйте unalias dcls.

Если вы используете bash, вы можете сохранить псевдоним в вашем ~/.bashrcили ~/.bash_aliases.

Если ваша ~/.bash_aliasesне читается при запуске, вы можете добавить эту строку в ваш ~/.bashrc:

[ -f ~/.bash_aliases ] && . ~/.bash_aliases
Фредди
источник
Спасибо, Фредди! Нужно ли создавать этот псевдоним каждый раз, когда сервер перезагружается? Или это связано с моим профилем пользователя?
alex067
2
Вы должны сохранить его в файле запуска оболочки вашего пользователя ~/.bashrcили ~/.profileили ... Если вы не сохраните псевдоним, он будет потерян при выходе из системы или закрытии терминала.
Фредди
Еще раз спасибо. Что если в нашей папке ~ нет .bashrc или .profile?
alex067
1
В самом деле? Какой странный сервер! Если вы используете bash, вы можете создать его с помощью echo "alias dcls='docker container ls'" >> ~/.bashrc, затем получить исходный код . ~/.bashrcили выйти из системы и войти снова.
Фредди
Приветствия за вашу помощь, получил это работает!
alex067
15

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

  1. Вы можете просто положить docker container lsв файл с именем /bin/dcls. Но поведение этого может быть немного сложным. Чуть более надежно начинать файл со строки, называемой «шебанг», поэтому файл будет выглядеть так:
    #! / Bin / ш
    док-контейнер ls
    который указывает, что файл является сценарием оболочки.
  2. Прежде чем вы сможете запустить команду, вы должны сделать файл исполняемым с помощью команды, подобной
    chmod + x / bin / dcls
    Вы, вероятно, должны быть пользователем root, чтобы сделать это (то есть запустить его sudo).
  3. Выполните два вышеуказанных шага, и вы сможете печатать, dcls и это будет делать docker container ls. Но, если вы напечатаете dcls -l foo, это все равно будет docker container ls. Если вы хотите, чтобы это сделать docker container ls -l foo, вы должны изменить сценарий, чтобы сказать

    #! / Bin / ш
    Док-контейнер ls "$ @"
    который указывает, что любые аргументы, которые вы вводите в dclsкомандной строке, должны передаваться docker container lsкоманде.

    Естественно, есть более сложные вещи, которые вы можете сделать с аргументами командной строки.

Для отображения одной простой команды → одной простой команды, которую не нужно передавать другим пользователям, проще определить псевдоним ( как предложил Фредди ) или функцию оболочки. Более сложные функции часто пишутся в виде скриптов; т.е. текстовые файлы, которые содержат команды. Но, если вам не нужно делиться им с другими пользователями, чаще используйте личный binкаталог.

$ cd                                     # (в ваш домашний каталог) 
$ mkdir bin
Затем скопируйте dclsв $HOME/bin, и добавить
export PATH = "$ HOME / bin: $ PATH"
к вашему ~/.bashrc.

Кроме того, принято ставить личные сценарии /usr/local/binи оставлять их /binдля программ, поставляемых с системой.

G-Man говорит: «Восстанови Монику»
источник
Отличный ответ. Если я добавлю его в корзину, как я уже говорил, это повлияет на правильность всех пользователей?
alex067
Да; все пользователи смотрят в /bin,  /usr/binи обычно совместно каталоги , как /usr/local/bin и иногда /opt, так что программы в этих каталогах доступны всем пользователям.
G-Man говорит: «Восстановите Монику»
1
Если вы хотите поделиться с другими пользователями вашей системы, /usr/local/binчтобы она не мешала работе диспетчера пакетов.
Ctrl-Alt-Delor
5
+1 за рекомендацию $HOME/bin. Вы должны действительно использовать это. Это не только правильная область, но и помогает, когда вы переустанавливаете свою систему (и сохраняете ее HOME), чтобы не потерять свою пользовательскую команду.
Алло
1
FWIW я использую ~/.local/bin вместо этого .
Sparhawk
0

Если только для вас, псевдоним подойдет, но в соответствии со Стандартом иерархии файловой системы Linux используются локальные общесистемные сценарии /usr/local/bin/, а не /bin.

  1. Хотя это, безусловно, сработает /bin, лучше придерживаться стандартов, особенно если ваше программное обеспечение будет развернуто на сайтах клиентов.
  2. Если ваш скрипт будет необязательным, он должен войти в /opt
  3. Сам скрипт будет:

    #!/bin/bash
    #
    # Version 1.0 DD 2019-05-04
    # dcls = docker container ls
    docker container ls "@0"
    if [[ $? -eq 0 ]]; then
      echo -e "Errors encountered..."
      exit 1
    fi
    
Fabby
источник