С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Как устроена команда — ключи и аргументы

4 мин Ubuntu 24.04 · Bash 5.2

Строка в терминале — это имя команды, ключи (-l, --all) и аргументы; оболочка делит её на слова по пробелам.

Шпаргалка

10 команд Версия для печати
  • ls -l -a /etc команда, два ключа, аргумент
  • ls -la /etc короткие ключи можно склеить
  • ls --all --human-readable длинные ключи
  • head -n 5 app.log ключ со значением
  • head --lines=5 app.log длинный ключ со значением
  • cp "my file.txt" docs/ пробел в имени — в кавычках
  • rm -- -file.txt после -- только аргументы
  • ls --help | less краткая справка по ключам
  • man ls полное руководство
  • mkdir logs && cd logs вторая команда — если первая прошла

Обзор

Оболочка (bash) делит строку на слова по пробелам. Первое слово — имя команды, остальные — аргументы, которые программа получает как есть:

text
student@ubuntu:~$ printf '[%s]\n' one "two three" four
[one]
[two three]
[four]

Кавычки склеили two three в один аргумент. Двойные кавычки ещё подставляют переменные ("$HOME"), одинарные оставляют текст как есть.

Аргументы, которые начинаются с минуса, по договорённости — ключи: они меняют поведение команды. Остальные — то, с чем команда работает: файлы, каталоги, имена.

Запись Что это
-l короткий ключ, одна буква
-la несколько коротких ключей подряд: -l -a
--all длинный ключ, словом
-n 5, --lines=5 ключ со значением
-- конец ключей: дальше только аргументы

Какие ключи есть у команды, знает только она сама: смотри команда --help и man команда (см. man-help). Шаблоны *.log и ~ раскрывает оболочка до запуска, программа получает уже готовые имена — см. globbing.

Рецепты

4

Имя файла с пробелом или спецсимволом

bash
cat "Отчёт за май.txt"      # кавычки
cat Отчёт\ за\ май.txt      # или \ перед каждым пробелом

Проще всего — набрать начало имени и нажать Tab: оболочка сама допишет и экранирует.

Аргумент, который начинается с минуса

bash
rm -- -rf.txt                # -- отделяет ключи от аргументов
grep -e '-v' notes.txt       # искать строку «-v»

Несколько команд в одной строке

bash
date; uptime                         # по очереди, всегда обе
mkdir -p build && cd build           # вторая — только при успехе
ping -c1 10.0.0.1 || echo 'нет связи'   # вторая — только при ошибке

Длинная команда на нескольких строках

bash
sudo useradd -m -s /bin/bash \
  -c 'Alice Smith' -G sudo alice

\ в конце строки переносит команду на следующую. После \ не должно быть пробела.

Неполадки

5

invalid option -- 'z' / unrecognized option '--foo'

У команды нет такого ключа. Проверь написание в команда --help. Учти, что ключи одной и той же команды в Linux, macOS и BusyBox отличаются.

missing operand

Команде не хватило аргумента: mkdir без имени, cp с одним файлом. Допиши, что создать или куда копировать.

No such file or directory для половины имени

Имя с пробелом без кавычек оболочка разделила на два аргумента. Возьми имя в кавычки или допиши его клавишей Tab.

command not found

Первое слово — не команда, которую знает оболочка: опечатка, программа не установлена или её нет в PATH. Проверь type имя — см. env-vars и bash.

Кавычки не закрыты — приглашение сменилось на >

Оболочка ждёт закрывающую кавычку. Допиши её и нажми Enter или прерви ввод Ctrl+C.

Термины

2
аргумент команды command argument
Слово командной строки после имени команды, которое оболочка передаёт программе. Оболочка делит строку на аргументы по пробелам; кавычки объединяют слова с пробелами в один аргумент. Ещё встречается в: Dockerfile, shellcheck, sleep, test, [ ] и [[ ]] и ещё 2
опция команды command option
Аргумент, который меняет поведение программы; обычно начинается с - (короткая форма, -l) или -- (длинная, --all). Аргумент -- обычно означает конец опций. Список опций — в man и --help. Ещё встречается в: which / type / whereis

См. также

  • bash — оболочка, которая разбирает командную строку.
  • man-help — как найти ключи команды: --help, man, apropos.
  • globbing — *, ?, {}: что оболочка подставляет до запуска.
  • env-vars — переменные и PATH, где оболочка ищет команды.
  • alias — короткие имена для длинных команд.
  • redirection — >, | и 2>&1 в той же строке.
Загрузка…