基本的な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(クロステック) `_