基本的なBashの使い方
****************************************************************************
はじめに
============================================================================
ここでは基本的なbashコマンドとbash関連の設定等を解説します。
大抵の場合 ``コマンド名 linux`` で検索すると出てきます。
ここに書いていないコマンドがあった場合は調べながら試してみるとよいでしょう。
Linuxコマンドに関しては調べながら試してみるのが一番だと思います。
基本的なコマンド
============================================================================
ls
----------------------------------------------------------------------------
ファイルやディレクトリの内容を表示する。
.. code-block:: bash
# カレントディレクトリの内容を表示する
ls
# 指定したディレクトリの内容を表示する
ls dir_name
# 対象のディレクトリのすべてのフォルダ、ファイル(隠しフォルダ等を含む)を表示する
ls -a
# 対象のディレクトリの内容をより詳細に表示する
ls -l
# オプションは同時に指定することもできる
ls -la
cd
----------------------------------------------------------------------------
カレントディレクトリを変更する。
.. code-block:: bash
# ディレクトリを移動
cd dir_name
# ホームディレクトリに移動
cd
mkdir
----------------------------------------------------------------------------
ディレクトリを作成する。
.. code-block:: bash
# ディレクトリを作成する
mkdir dir_name
# 指定したディレクトリをサブディレクトリまで作成する
mkdir -p parent_dir/dir_name
echo
----------------------------------------------------------------------------
メッセージを表示する。
.. code-block:: bash
# helloという文字列を表示する
echo hello
# $HOME環境変数を表示する
echo $HOME
rm
----------------------------------------------------------------------------
ファイル、ディレクトリを削除する。
.. code-block:: bash
# ファイルを削除する
rm file_name
# 複数ファイルを削除する
rm file1 file2
# ディレクトリを中身ごと削除する
rm -r dir_name
# 警告メッセージを表示しない
rm -f file_name
cp
----------------------------------------------------------------------------
ファイル・ディレクトリをコピーする。
.. code-block:: bash
# ファイルをコピーする
cp src_file_name dest_file_name
# ディレクトリを中身ごとコピーする
cp -r src_dir_name dest_dir_name
mv
----------------------------------------------------------------------------
ファイル・ディレクトリを移動・改名する
.. code-block:: bash
# ファイルを改名する
mv src_file_name dest_file_name
# dest_dir_nameが存在する場合はdest_dir_name以下に移動する
# 存在しない場合はディレクトリを改名する
mv src_dir_name dest_dir_name
# ファイルをディレクトリ内に移動する
mv src_file_name dest_dir_name
# 複数ファイルを移動する
mv file1 file2 dest_dir_name
ssh
----------------------------------------------------------------------------
リモートマシンに接続する。
.. code-block:: bash
# 現在のユーザー名で指定したIPアドレスのマシンに接続する
ssh xxx.xxx.xxx.xxx
# ユーザー名user_nameで指定したIPアドレスのマシンに接続する
ssh user_name@xxx.xxx.xxx.xxx
scp
----------------------------------------------------------------------------
リモートマシンとファイルをやり取りする。
.. code-block:: bash
# ローカルマシンのfile_nameファイルを指定したIPアドレスのマシンの
# user_nameユーザーの指定したディレクトリ以下にコピーする
scp file_name user_name@xxx.xxx.xxx.xxx:dir_name
# 指定したIPアドレスのマシンのuser_nameユーザーのマシンのfile_nameファイルを
# ローカルマシンのホームディレクトリに保存する
scp user_name@xxx.xxx.xxx.xxx:file_name ~/file_name
# ファイルを再帰的にコピーする
scp -r user_name@xxx.xxx.xxx.xxx:dir_name ~/dir_name
wget
----------------------------------------------------------------------------
ファイルをダウンロードする。
.. code-block:: bash
# URLにあるファイルをダウンロードする
wget URL
source
----------------------------------------------------------------------------
指定したファイルに書いてあるコマンドを実行する。
.. code-block:: bash
# ファイルに書いてあるコマンドを実行する
source file_name
export
----------------------------------------------------------------------------
環境変数やシェル変数を変更する。
.. code-block:: bash
# 環境変数ENV_VARにvalueを設定する
export ENV_VAR=value
# 環境変数ENV_VARにvalueを追加する
# 環境変数は:(コロン)で区切られている
export ENV_VAR=$ENV_VAR:value
cat
----------------------------------------------------------------------------
複数のファイルの内容を連結したり表示したりする。
.. code-block:: bash
# ファイルの内容を表示する
cat file_name
# ファイルの内容を連結する
cat file1 file2 > newfile
less
----------------------------------------------------------------------------
テキストファイルの内容を1画面ずつ表示する。
スペースキーで画面を進め、qキーで終了できる。
.. code-block:: bash
# ファイルの内容を表示する
less file_name
alias
----------------------------------------------------------------------------
コマンドの別名(エイリアス)を定義する。
.. code-block:: bash
# エイリアスを定義する
alias command=another_command
# スペースを含むエイリアスを定義する
alias command_opt="command -option"
.. alias emacs=vim
リダイレクト
============================================================================
Linuxでは、リダイレクトを使ってコマンドの出力先や入力先をターミナルからファイルへ変更したりできます。
.. code-block:: bash
# カレントディレクトリのファイル一覧をファイルに書き出す(上書き)
ls > file_name
# カレントディレクトリのファイル一覧をファイルに書き出す(末尾に追加)
# 存在しない場合は新たに作られる
ls >> file_name
# コマンドの実行結果とエラー内容をファイルに書き出す
ls not_existing_dir >& file_name
# コマンドのエラー内容だけをファイルに書き出す
ls not_existing_dir 2> file_name
# ファイルの内容を表示する
cat < file_name
``>`` はファイルを上書きするので使用する際は注意すること。
- `リダイレクトの使い方 `_
- `bash: 標準出力、標準エラー出力をファイル、画面それぞれに出力する方法 `_
.bashrc
============================================================================
.bashrcはBashの設定スクリプトで、bashを起動した際に毎回内容が実行されます。
ターミナルの設定などはこのファイルに書くことが多いです。
Tips
----------------------------------------------------------------------------
set -o noclobber
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
以下のコマンドを実行すれば、 ``>`` を使ったリダイレクトでファイルが上書きされなくなります。
``>|`` を使えば強制的に上書きできる。
また、 ``set +o noclobber`` で上書き禁止を解除できる。
.. code-block:: bash
set -o noclobber
cm, cs, cw
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
catkin関連のコマンドのエイリアスを以下のように定義すると便利です。
.. code-block:: bash
# catkin_wsに移動してビルドしてから元のディレクトリに戻る
alias cm="cd ~/catkin_ws && catkin build && cd -"
# catkin_ws/srcに移動する
alias cs="cd ~/catkin_ws/src"
# catkin_wsに移動する
alias cw="cd ~/catkin_ws/"
Git
============================================================================
Gitはバージョン管理ソフトウェアの一種で、インストール済みであれば ``git`` コマンドから利用することができます。
gitコマンドの使い方
----------------------------------------------------------------------------
GitHub上にあるリポジトリは ``git`` コマンドを使ってローカルにクローン(複製)することができます。
例えば、このチュートリアルのリポジトリであれば、
.. code-block:: bash
git clone https://github.com/uenota/dronedoc.git
GitHub上のROSパッケージを使う
----------------------------------------------------------------------------
ROSパッケージはワークスペース以下の ``src`` ディレクトリにクローンしてビルドすれば通常のROSパッケージと同様に使用することができます。
.. code-block:: bash
cd ~/catkin_ws/src
git clone https://github.com/uenota/dronedoc.git
cd ..
catkin_make
参考
============================================================================
- `Linuxコマンド集 | 日経 xTECH(クロステック) `_