現在のほぼすべてのLinux ディストリビューションで採用されている,コマンドシェルです。
このシェルこそが、Linuxを一般の人から遠ざけている一番の原因なのでしょうけど、
使いこなせるようになると、便利な機能にあふれていることに気づくことでしょう。
また、bashと、viを使えるようになると、比較的低レベルの端末や、速度の遅い回線からでも
快適にサーバへのアクセスをできるようになります。
Linuxと言うよりも、Windowsコンピュータの世界では一般に使用しないキーを多く使用します。
それらの読み方と主な使用方法について紹介します。
bashには、キー入力を少しでも省略して、少しでも早く・快適に使用できるように、様々なキーボードショートカット機能があります。
その一部をご紹介します。
それ以外に
bashには、途中まで入力した後、TABキーを押すことにより、その時点で補完できるコマンドやファイル名を表示してくれる機能があります。
この機能を使うことにより、長いファイル名や複雑なファイル名を、間違えることなく、しかも比較的短いキーストロークで入力することができます。
カーソルキーの、↑ ↓ を押すことにより、過去に入力したコマンドを再度利用することができます。
CTRL + r を押して、何文字か文字を入力すると、過去に入力した文字列で、一致する文字列で最近使用した文字列を表示します。
期待したものと一致しない場合、そのまま入力を続けるとさらに絞り込んだ条件で検索を続けます。
Linuxで主に使用するコマンドの一覧とそれらの簡単な使用説明を紹介します。
Linuxには、様々なディレクトリを参照する省略表記があります。
例:johアカウントを例に説明します。
johのホームディレクトリは、/home/joh
ホームディレクトリの省略表記は、『~』(チルダ)です。
つまり、自分のホームディレクトリを表示しようとする場合、
ls -l ~
となります。
Linuxでは、様々なディレクトリが存在します。
自分が現在どのディレクトリにいるのか分からなくなる時がありますが、その時には
pwd
と入力することにより、自分の現在いるディレクトリの場所が分かります。
自分の現在いるディレクトリのことを、カレントディレクトリと言います。
Linuxのコマンドは単機能のものがほとんどです。
CLIの特徴として、実行した結果を、標準出力(通常スクリーン)にテキスト形式で出力するのが、一般的です。
その出力された結果のテキストを用いて、別のコマンドに渡すという処理を行う際に用いるのが、
| パイプ と呼ばれるものです。
実際にどのような場合に使用するのかを説明しましょう。
$ ls -l
合計 44
drwxr-xr-x 2 joh joh 4096 10月 21 2010 Desktop/
drwx------ 3 joh joh 4096 8月 3 2011 Mail/
-rw-rw-r-- 1 joh joh 8476 10月 29 2010 a
-rw-r--r-- 1 joh joh 1008 10月 18 2010 sample
drwxrwxr-x 2 joh joh 4096 9月 26 2011 ruby/
-rw-rw-r-- 1 joh joh 6869 10月 29 2010 tk
-rw-rw-r-- 1 joh joh 1607 10月 29 2010 test
drwxrwxr-x 3 joh joh 4096 9月 3 14:50 work/
この状態だと、カレントディレクトリにある、ディレクトリもファイルもすべていっぺんに表示されてしまいます。
ファイルだけ出力させたい場合、lsで出力される情報で、ディレクトリであることを示す先頭行の『drwx』を
もちいます。grep の機能の一つ『一致した情報は表示させない』を使います。
ls -l | grep -v drwx
-rw-rw-r-- 1 joh joh 8476 10月 29 2010 a
-rw-r--r-- 1 joh joh 1008 10月 18 2010 sample
-rw-rw-r-- 1 joh joh 6869 10月 29 2010 tk
-rw-rw-r-- 1 joh joh 1607 10月 29 2010 test
このように、ディレクトリの情報を抜いた、ファイルだけの一覧を表示させることができるようになります。
実行した結果を、ファイルに出力させるときや、
実行するコマンドに対して、ファイルの内容を指定するする場合に使用します。
ls-lコマンドの結果を、ls-fileというファイルに出力させる場合
ls -l > ls-file
grep コマンドで、coreというキーワードを、file-dataから抽出する場合
grep core< file-data
上記の例にあるように、ディレクションは、データの流れを> は、左から右へ、
< は、右から左へ というようになっています。
上記コマンドを組み合わせれば、こんなコマンドも実際にはあり得ます。
grep core < file-data > grep-data
ディレクトリの参照方法には、絶対参照と相対参照の2種類があります。
それぞれの表現方法を説明しましょう。
例: johのホームディレクトリの下にあるDocuments/manualディレクトリの参照方法を説明します
現在のカレントディレクトリは、johのホームディレクトリにいます。
絶対参照
/home/joh/Documents/manual
~/Documnts/manual
相対参照
Documents/manual
相対参照には、他にもこの様な表記をすることができます。
下記の2つのディレクトリがあり、カレントディレクトリがjoh/Documents/manualで、graphディレクトリの情報を見たい場合には
joh/Documents/manual
joh/Documents/graph
../graph
と表記します。
一般的に、絶対表記は、同一のマシン環境だけで運用している場合には問題無いのですが、ファイルを含めたディレクトリごと、別のディレクトリに移動した場合とか、まったく別のマシンにコピーした場合等、ディレクトリの環境が変化した場合には設定している箇所すべてを書き換える必要があります。
しかし、相対参照の場合、別のマシンにコピーした場合でも、参照するディレクトリなどの相対関係に変化が無い場合には、そのまま使用することが出来ます。
ただし、記述が分かりにくくなったり記述が長くなったりするため、ケースバイケースでの利用をおすすめします。
各ユーザのホームディレクトリに、.bashrcファイルがあり、このファイルに様々な記述を施すことにより、
カスタマイズを行うことができます。
『快適な環境は、作業効率を向上する』という言葉もあるらしいので、ぜひとも環境向上のカスタマイズを行ってみてください。
linuxでは、長いコマンドやよく使うコマンドを短縮した名称で登録することができます。
このコマンドは、Ubuntuや一般的なディストリビューションでは、標準的に組み込まれていることが多いです。
サンプル
alias ll='ls -l --color=auto'
aliasの後ろに、aliasとして登録したい文字列を入力し、直後(スペースなどを開けずに)=(イコール)を入力
そして、'(シングルクォート)で、登録したコマンドを挟みます。
PATH
入力したプログラムを検索するディレクトリ情報を設定する項目です。
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
上記の例は、Ubuntuをインストールした直後の設定です。
各ディレクトリの設定は、『:』(コロン)で区切って入力します。
自分の作ったスクリプトをホームディレクトリ以下の『bin』に保存しておいて、そのディレクトリを追加することが可能です。
export PATH=$PATH:~/bin
Linuxの環境変数の設定方法は、MS-DOSと違ってちょっと変わっています。
環境変数 $TEST_PARAM を設定する場合
export TEST_PARAM='TEST Parameter'
同じコマンドを何回も実行した際に、1つだけHISTORYに記録されるようにする。
export HISTCONTROL=ignoredups
aliasでは表現できない、引数を伴うようなコマンドを登録する場合、function(関数)を使用します。
functionを使用することで、引数を伴った、複雑な処理を行うことが出きるようになります。
例:
function func-test() {
if [ "$1" == "" ]; then ; return fi;
}
$1, $2, ... の順番で、引数として割り当てられたパラメータを取得することが可能です。
個人的によく登録するコマンド
# ISO Image Mount
function isomount() {
sudo mount -t iso9660 -o loop $1 $2
}
意外と覚えないのよねぇ~このオプション
覚えきれないオプションはすべて登録してしまう。
しかし、これら自作関数などは、使用方法が記載されていないため、
翌日以降の自分のために、使い方を記載するというのが親切だと思います。
そこで、こんな風に改良してみました。
ISOイメージマウンタ
コマンドのみを入力すると、使い方を表示する。
しかも、コマンドオプションを省略すると、既定値を変更してくれる
isomount ()
{
if [ "$1" = "" ]; then
echo ISO Image Mount;
echo --------------------------------------------------;
echo isomount isofile [mount-device];
echo;
echo isomount /media/usb/ubuntu12.10.iso /mnt/cdrom;
echo;
else
if [ "$2" = "" ]; then
Param2="/mnt/cdrom";
else
Param2=$2;
fi;
sudo mount -t iso9660 -o loop $1 $Param2;
fi
}
これで、いちいち悩まなくて済みますね ;-)
オートマウントのON/OFF設定
下記のコマンドは、Ubuntuで動作確認しているものです。
function a-mount() {
echo AutoMount Check
echo -----------------------
echo a-mount [true / false]
echo
gsettings get org.gnome.desktop.media-handling automount $1
}
オートマウントは非常に便利な機能だけれども、たまに不要な時があるんですよね・・・
そんな時にはこれを使って一時的に解除しましょう!
functionの削除
一度登録したコマンドは、.bashrcに記述されている限り再起動しても消えることはありません。
また、.bashrcから削除しても、ログオフしない限りずっと残ったままです。
登録したfunctionを削除するコマンド
unset [登録した関数名]
登録されたfunctionの一覧を表示する
登録されているfunction(関数)の一覧を表示するコマンド
declare -F
declare -f get_modules
declare -f isomount
declare -f quote
declare -f quote_readline
declare -f renjpg
declare -f set_prefix
上記コマンドは、登録しているfunction名のみが表示されます。
登録されているfunctionの内容を表示させる場合には、下記のコマンドを入力します。
declare -f isomount
isomount ()
{
sudo mount -t iso9660 -o loop $1 $2
}
コマンドラインでの作業に慣れてくると、一度の入力で、複数のコマンドを実行させたりするようになります。
その一つが、『;』です。
簡単な例で示すと、
% mkdir backup ; cp -p /etc/hosts.deny backup/hosts
このようなコマンドは、非常に便利でよく使われるのですが、一番最初のmkdirコマンドが失敗しようが成功しようが、次のcpコマンドを実行します。
最初のコマンドが成功したときにのみ、次のコマンドを実行させる場合には、『&&』でコマンドを区切ります。
% mkdir backup && cp -p /etc/hosts.deny backup/hosts
上記のように記述するだけで、mkdirコマンドが正常に実行できた時のみ、次のcpコマンドを実行させることができるようになります。
では、最初のコマンドが失敗した場合にはどうするのかというと、『||』を使うといいそうです。
% mkdir backup && cp -p /etc/hosts.deny backup/hosts || touch backup/hosts.deny
backupディレクトリの作成に成功したら、/etc/hosts.denyをコピーするが、失敗したらbackup/hosts.denyファイルを作成するだけ
sshでほかのホストに接続する際に、公開鍵認証方式で接続することはあると思います。
公開鍵の生成方法は、ここに記載しています。