Skip to content

Терминал без магии

Эта страница — минимальный маршрут перед ПР01. Здесь не требуется помнить все команды: важно научиться понимать, где выполняется команда, какой процесс она запускает и по какому наблюдению решать, что всё сработало.

Терминал, оболочка, команда и процесс

ПонятиеЧто этоПример
Терминалокно, которое показывает ввод и выводGNOME Terminal, встроенный терминал VS Code
Оболочкапрограмма, разбирающая введённую строкуBash, fish
Командаимя программы и её аргументыros2 node list
Процессуже запущенный экземпляр программыработающая ROS-нода

Приглашение вида student@robot:~/robotics_ws$ печатает оболочка. Символ $ показывает место ввода; его не нужно копировать из документации.

text
student@robot:~/robotics_ws$ ros2 node list
│       │     │             └─ аргументы команды
│       │     └─ текущий каталог
│       └─ имя компьютера
└─ пользователь

Сначала ответьте на три вопроса

bash
whoami       # от имени какого пользователя работаем?
pwd          # в каком каталоге находимся?
printf '%s\n' "$SHELL"  # какая оболочка назначена пользователю?

pwd особенно важна перед colcon build, git status, удалением или перемещением файлов. Одна и та же команда в разных каталогах может сделать разное.

Пути: абсолютные и относительные

text
/
└── home
    └── student
        └── robotics_ws       ← ~/robotics_ws
            ├── src           ← ./src, если мы в robotics_ws
            ├── build
            ├── install
            └── log
  • /home/student/robotics_ws — абсолютный путь от корня /;
  • src/my_package — относительный путь от текущего каталога;
  • . — текущий каталог, .. — родительский;
  • ~ — домашний каталог текущего пользователя;
  • имена чувствительны к регистру: Robot и robot различаются.
bash
cd ~/robotics_ws
ls
ls -la src
cd src
cd ..

Нажимайте Tab для дополнения пути. Если в имени есть пробелы, заключайте путь в кавычки: cd "каталог с пробелами".

Читать и искать, не изменяя

bash
ls -la
find src -maxdepth 2 -type f
file src/my_package/package.xml
sed -n '1,80p' src/my_package/package.xml
grep -Rni --include='*.py' 'create_publisher' src

Перед неизвестной командой откройте краткую или полную справку:

bash
ros2 topic --help
man find

Для выхода из man нажмите q. Стрелка вверх возвращает предыдущую команду; Ctrl+R ищет её в истории.

Поток данных: stdin, stdout, stderr

У процесса обычно есть стандартный ввод, обычный вывод и поток ошибок. Конвейер | передаёт обычный вывод одной программы на вход следующей.

bash
ros2 topic list -t | grep sensor_msgs
ros2 doctor --report > doctor.txt
ros2 doctor --report 2> doctor-errors.txt

> перезаписывает файл, >> дописывает в конец. Перед перенаправлением проверьте путь через pwd и существование файла через ls.

Код завершения — первый автоматический тест

bash
ros2 pkg prefix turtlesim
printf 'exit=%s\n' "$?"

Код 0 обычно означает успешное завершение, ненулевой код — ошибку или отрицательный результат проверки. Текст «похож на успех» не заменяет проверку кода завершения.

Для связанных шагов используйте &&: следующая команда запустится только после успешной предыдущей.

bash
colcon build --symlink-install && source install/setup.bash

Процессы и остановка

bash
ps -ef | grep '[t]urtlesim'
jobs
  • Ctrl+C просит текущий процесс завершиться;
  • Ctrl+Z приостанавливает его, но не завершает;
  • jobs, fg и bg управляют задачами текущей оболочки;
  • перед kill -9 сначала выясните PID и попробуйте обычное завершение.

Для первой ROS-демонстрации удобнее открыть три терминала: один процесс в каждом и третий терминал для наблюдения графа.

Права: не лечите всё через sudo

sudo запускает команду с повышенными правами. Оно нужно для установки системных пакетов, но не для colcon build, запуска ROS-нод и редактирования файлов в ~/robotics_ws.

bash
ls -ld ~/robotics_ws
id

Если обычная сборка требует sudo, сначала проверьте владельца файлов. Не используйте рекурсивные chmod 777 и chown без точного понимания цели.

Bash — общий язык курса, fish — удобный интерфейс

Все команды в практиках и CI проверяются в Bash. Это делает скрипты одинаковыми на машине студента и в контейнере. Fish можно запускать как интерактивную оболочку ради подсветки, автодополнения и подсказок, но его синтаксис отличается от Bash.

Файл ROS setup.bash нельзя напрямую исполнять в fish. Для учебной работы откройте Bash и только затем подключите окружение:

bash
bash
source /opt/ros/lyrical/setup.bash

Не меняйте login-shell в первую неделю: сначала убедитесь, что Bash-маршрут полностью работает. Настройка fish приведена на странице «Рабочее место разработчика».

Пятиминутная самопроверка

  1. Создайте ~/terminal-lab, перейдите в него и докажите это через pwd.
  2. Создайте подкаталог evidence командой mkdir -p.
  3. Сохраните первые строки /etc/os-release в evidence/os.txt.
  4. Найдите слово Ubuntu через конвейер с grep.
  5. Покажите код завершения успешного и неуспешного поиска.
  6. Объясните, какие команды только читали данные, а какие изменили файловую систему.

После этого переходите к установке ROS 2 и ПР01.

Источники

Учебные материалы: CC BY 4.0 · Код: Apache-2.0