👌

ロボット屋さんのためのUbuntuターミナル超入門

に公開

ROS Japan UG #59 研究教育におけるROSの活用にて、「ROSの初学者向けのコマンドのチートシートはありませんか?」→「思いつきません。作りましょう!」という質疑応答を見て、作ってみました。
ChatGPT(無料版)に下地を出していただいて、私なりに足したり引いたりしたものになります。あまり時間をかけず作ったものですので、「これはいるでしょ!」「これはいらないのでは?」みたいなご意見があればZennのコメントやXなどでいただけますと大変助かります。

Ubuntu ターミナル チートシート

🖥️ ターミナルの基本

コマンド 説明
Ctrl + Alt + T ターミナルを開く
exit / Ctrl + D ターミナルを終了
↑ / ↓ コマンド履歴の操作
Tab 自動補完
Ctrl + C 実行中のプログラムを止める
Ctrl + Shift + C 選択範囲をコピー
Ctrl + Shift + V 貼り付け
Ctrl + L 表示のクリア
Ctrl + R 履歴検索

📂 ファイル・ディレクトリ操作

コマンド 説明
ls / ls -l / ls -a 一覧 / 詳細 / 隠しファイルも表示(補足
cd <dir> ディレクトリに移動(補足
mkdir <dir> 新しいディレクトリを作成(補足
cp <src> <dst> <src>(ファイルやディレクトリ)を<dst>にコピー
mv <src> <dst> <src>を<dst>に移動/名前変更
rm <file> ファイルを削除(補足
rm -r <dir> ディレクトリを削除
chmod +x <file> ファイルに実行権限を付与

📄 テキストファイル操作

コマンド 説明
cat <file> ファイル全体を表示
less <file> ページ送りで表示 (q で終了)
tail -f <file> ファイルの追記を監視
nano <file> 初学者向けのシンプルなテキストエディター

📦 ソフトウェア管理

コマンド 説明
sudo apt update パッケージ情報を更新
sudo apt upgrade ソフトウェアを更新
sudo apt install <pkg> <pkg>をインストール
git clone <URL> GitHubなどからソースコードを取得(ビルドなどは別途ご自身で)

⚙️ bashターミナルの操作

コマンド 説明
source <file> シェルスクリプトの読み込み
./<file> スクリプトの実行
export VAR=value 環境変数を設定
echo $VAR 環境変数を確認

🌐 ネットワーク・通信コマンド

コマンド 説明
ping <IP> ネットワーク接続確認(Ctrl + Cで終了)
ip a ネットワークインターフェイスの情報表示(自分のIP確認など)
ssh <user>@<IP> リモートPCにログイン(例: ssh ubuntu@192.168.0.10補足
scp <file> <dst> リモートPCへ(から)ファイルをコピー(リモートファイルは<user>@<IP>:<path>と指定)
scp -r <dir> <dst> リモートPCへ(から)ディレクトリをコピー

Ubuntu環境の構築

Ubuntuのネイティブ環境を用意していただくのが一番ですが、Windowsを使っている方が多いと思われるためWSLの導入について紹介します。WSL(Windows Subsystem for Linux)とは、Windows上でLinuxをほぼそのまま使える仕組みです。

まずWSLをインストールは、PowerShellを管理者権限で実行して以下のコマンドを入力すれば完了です。

PowerShellの管理者実行

wsl --install

その後PCを一度再起動して、再度PowerShellを開き、以下のコマンドを入力することでWSLにUbuntuをインストールできます。

wsl --install -d Ubuntu

ユーザ名とパスワードを設定してログインできます。

もし上記コマンドでうまくインストールできない場合には、GUIでインストールすることもできます。Windows標準でインストールされているMicrosoft Storeというソフトを開き、Ubuntuを検索してインストールしてください。

Microsoft Store

StoreでUbuntuと検索

ターミナルですが、PowerShellでは、コピペがCtrl + Shift + CCtrl + Shift + Vに設定されていないため、Windows Terminalもインストールすることもオススメします。

コマンドの補足

lsコマンド

ここでlsコマンドなどの後ろに半角スペースが1つ空いて付いている-l-aは、コマンドのオプションと呼ばれます。
-lはlong format、-aはallの意味で、これらをつけることで、出力結果などの動作を変化させることができます。
ちなみに、Ubuntuのbashではls -lllで、ls -alaで実行できます。

cdコマンド

cdコマンドはディレクトリ文字列以外にも以下のような指定もできます。

コマンド 説明
cd .. 1階層上のディレクトリに移動
cd ../.. 2階層上のディレクトリに移動
cd ~ ホームディレクトリ(/home/<user>/)に移動
cd - 移動する前のディレクトリに戻る

mkdirコマンド

mkdirコマンドは単体では1つのディレクトリを作成します。複数ディレクトリを同時に作ることも可能ですが、複数階層のディレクトリを一気に作る場合は-pオプションを付けます。

mkdir -p ~/ros2_ws/src

rmコマンド

-rはrecursive(再帰的に)という意味です。消してよいかの確認をスキップするためには-fオプションも追加してください。rm -rf <dir>のように複数のオプションはつなげて書けます。だたしこれを使うときには、間違えたファイルを消さないように細心の注意を払うようにしてください。対象のファイルやディレクトリのある場所までcdで移動して、相対パス指定で実行することを推奨します。

sshコマンド

ロボットに搭載している小型PCにディスプレイやキーボードを繋がずに、ネットワーク経由でリモート操作したいことがあるかと思います。そのようなときにはSSH接続が便利です。
しかしながらsshコマンドで毎回<user><IP>およびそのパスワードを入力することは面倒です。そこでSSHキーとSSH configファイルを作成しましょう。

以下のコマンドで、鍵の種類はed25519として、~/.ssh/というディレクトリに、id_ed25519id_ed25519.pubが生成されます。-Cオプションはコメントであるため不要ですが、将来的にGitHubなどでも使用予定の場合には、メールアドレスで設定することが一般的です。

ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519

実行するとパスフレーズの設定を求められます。セキュリティを高く保ちたい場合には設定すべきですが、何も入力せずEnterとしても構いません。

次に、以下のコマンドで公開鍵をリモートPCにコピーします。

ssh-copy-id <user>@<IP>

実行時にリモートPCの<user>のパスワードが聞かれますので入力してください。以降はssh <user>@<IP>としたときに、自動で鍵認証をされるため、パスワードを聞かれることはなくなります。
注意として、ここで作成した鍵は絶対に他人に渡したり見せたりしなようようにしてください。1台のロボットをチームで共同開発したいときの運用としては、それぞれのユーザー(PC)が各々で鍵を作成して登録するとよいでしょう。

つぎに、<user>@<IP>の省略化を行います。
~/.ssh/configというファイルをテキストエディターを用いて以下のように作成してください。

Host robot
    HostName <IP>
    User <user>
    IdentityFile ~/.ssh/id_ed25519

そうするとssh robotでログインできるようになります。ここでrobotの文字も適当な名前に変えていただいてもかいません。
ちなみに、scpもこの設定を読むため、scp <file> <user>@<IP>:<path>とコマンドするところをscp <file> robot:<path>と省略できます。さらに<path>を指定するときにTab補完も効くようになります。

テキストエディター

チートシートではnanoを記載しました。慣れている方は(初学者で慣れている方がいるかは非常に怪しいですが)viを使用していただいてもよいですし、GUIで操作している場合にはVS Codeなどを使用してもよいでしょう。VS Codeのプラグインを入れてSSH先のファイルを編集することも可能ですが、ちょこっと追記するくらいでしたらターミナル上でやってしまった方が早いです。

nanoよいところは下にショートカットキーの表示があるところです。
nanoのショートカットキー
ここで^Ctrlキーとの同時押しを意味します。つまり、検索をしたければCtrl + Wで、保存して終了はCtrl + OとしたあとCtrl + Xです。

練習問題

ROS 2を使うための練習問題を作成しました。
動作はROS 2 Jazzyで行ったものであり、バージョンに合わせて読み替えてください。

ROS 2のインストール

ROS 2のインストールは公式ページに従ってインストールします。ここに記載されているコマンドを順番に入力してもよいのですが、非公式インストールスクリプトを用意して頂いている方がおられます。

https://github.com/Tiryoh/ros2_setup_scripts_ubuntu

これを用いてROS 2のインストールを行いましょう。

回答
# Gitのインストール(すでにされていれば不要ですが、実行しても問題ありません)
sudo apt install git
# ソースコードを取得
git clone https://github.com/Tiryoh/ros2_setup_scripts_ubuntu.git
# ソースコードのディレクトリに移動
cd ros2_setup_scripts_ubuntu/
# スクリプトを実行
./run.sh
# 1つ上の階層に移動
cd ..
# インストールスクリプトの削除
rm -rf ros2_setup_scripts_ubuntu/

ROS 2ワークスペースを作る

ROS 2のワークスペースを作成しましょう。そこにパッケージサンプルをダウンロード、ビルドして、実行してみましょう。公式のチュートリアルに従うとできます。

回答
# ROS 2のコマンドが使えるように読み込み
source /opt/ros/jazzy/setup.bash
# ワークスペースディレクトリとソースディレクトリを同時作成
mkdir -p ~/ros2_ws/src
# ソースコードのディレクトリに移動
cd ~/ros2_ws/src
# Gitのインストール(すでにされていれば不要ですが、実行しても問題ありません)
sudo apt install git
# ソースコードを取得
git clone https://github.com/ros/ros_tutorials.git -b jazzy
# 1階層上のワークスペースディレクトリに移動
cd ..
# ソースコードの依存関係を解決
rosdep install -i --from-path src --rosdistro jazzy -y
# ソースコードをビルド
colcon build
# build  install  logディレクトリができていることを確認
ls
# ビルドしたファイルを実行できるように読み込み
source install/local_setup.bash
# 実行
ros2 run turtlesim turtlesim_node

おわりに

突貫工事です。時間があるときにまた整備します。要望などあれば気軽にいただけますと幸いです。

GitHubで編集を提案

Discussion