【第一回】GNUとUNIXコマンド

この記事では基本的なコマンドラインについて説明します。

スポンサードサーチ

シェル

Linuxではコマンドを入力するとそれに対応したプログラムが実行され、結果が表示されます。ユーザーからのコマンドを受け付け、必要なプログラムを実行しているのはshellというプログラムです。

シェルにもいくつか種類があります。

・Bourneシェル

UNIXで標準的なシェルでこれを改良したものがbashです。bashは多くのLinuxディストリビューションで標準シェルになっています。

・Cシェル(csh)

C言語に似たスクリプトが利用できるシェル。cshを拡張したtcshもあり、LinuxではCシェルとして使われているのはtcshです。

・Kornシェル(ksh)

Bourneシェルを拡張したシェル。kshにbashやtcshの機能を取り入れたzshという高機能シェルも存在する。

補足

利用可能なシェルは/etc/shellsファイルで確認可能。また、chshコマンドを使ってデフォルトのシェルも変更可能

システムにログインした直後に起動されるシェルをログインシェルと呼びます。ユーザーごとのログインシェルは下記のコマンドで確認可能です。私の場合はbashでした。

user@computer$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
initial:x:1000:1000:,,,:/home/initial:/bin/bash

ユーザーがログインするとシェルは$もしくは#などのプロンプトを表示して入力待機します。bashでは$が一般ユーザーで、rootの場合は#が表示されます。ここの表示形式設定は自由に設定でき、環境変数PS1にて行うことが出来ます。

スポンサードサーチ

覚えておきたい操作と設定

ここでは基本的に覚えてほしい操作を書いておきます。

補完機能

シェルの補完機能を使うことで入力ミスを軽減できます。

例えば、test.txtの中身をcatで見たいとします。まずはlsで確認すると・・・

ls
Desktop Downloads Public a.sh dir  script.deb.sh Diary Music Templates a.txt dir2 file.txt test.txt Documents Pictures Videos d.sh docker.sh remote.txt thinclient_drives

沢山あって、見にくいですね。そこで

cat test

の状態から、tabを押すと

cat test.txt

と表示されましたね!これがlinuxの補完機能です。便利な機能なのでどんどん使っていきましょう。

その他にも下記のコマンドは是非を覚えておきたいので、マスターしましょうね。

コマンド 操作説明
Tabキー
コマンドやディレクトリ名を補完する
Ctrl+Aキー
行の先頭へカーソルを移動する
Ctrl+Eキー
行の最後へカーソルを移動する
Ctrl+Dキー
カーソル部分を1文字削除する、ログアウトする
Ctrl+Hキー
カーソルの左を1文字削除する(Backspaceキーと同じ)
Ctrl+Lキー
画面をクリアしてカレント行を再表示する
Ctrl+Cキー |処理を中断する
Ctrl+Sキー 画面への出力を停止する
Ctrl+Qキー 画面への出力を再開する
Ctrl+Zキー
処理を一時停止(サスペンド)する

 

 

スポンサードサーチ

シェル変数と環境変数

シェルはユーザーとLinuxシステムとの対話を図ります。そのためには、ユーザーのホームディレクトリやログイン名など、ユーザーに関する情報をしっておく必要があります。Linuxでは、このような情報は変数に保存されます。変数は、その有効範囲(スコープ)によって、シェル変数と環境変数に分かれます。

・シェル変数のスコープ

その変数を定義したシェル・プロセスのみです。シェル・プロセスを終了すれば、シェル変数は勿論失われます。別のシェルを新しく立ち上げた場合は、新しいシェルから元のシェルで定義した内容を参照できません。

・環境変数のスコープ

その変数を定義したシェル上、およびそのシェルで実行されるプログラムにも引き継がれる変数です。環境変数はシェル変数をexportコマンドでエクスポートすることで設定します。

その他にもよく利用される環境変数は以下になります。

環境変数 説明
EDITOR
デフォルトのエディタのパス
HISTFILE
コマンド履歴を格納するファイル
HISTFILESIZE
HISTFILEに保存する履歴数
HISTSIZE
コマンド履歴の最大値
HOME
カレントユーザーのホームディレクトリ
HOSTNAME ホスト名
LANG
ロケール(言語処理方式)
LOGNAME
ログインシェルのユーザー名
PATH
コマンドやプログラムを検索するディレクトリリスト
PS1
プロンプトの表示文字列
PS2
複数行にわたる入力時のプロンプト
PWD
カレントディレクトリ
TERM
端末の種類
USER
現在のユーザー

 

変数を定義する

変数の定義する方法は下記になります。

変数名=値

この時に=の前後にスペースを入れないようにしてください。

定義された変数はechoで確認できるので試してみましょう。

~user@computer$ echo name=’test’
name=test
~user@computer$ name=’test’
~user@computer$ echo $name
test

消したいときはunsetコマンドを使いますが、変数名の先頭に$はつけません。

~user@computer$ unset name #先ほどセットした値を削除
~$echo $name
##ここには何も表示されない

定義されている環境変数の一覧を表示するにはenvやprintenvを使用します。また、環境変数とシェル変数を両方表示したい場合はsetを使用します。

次にexportを使ってシェル変数と環境変数の違いを見ていきます。

export 変数名=値

~user@computer$ VAR=lpic #VAR変数を定義(シェル変数)
~user@computer$ echo $VAR
lpic
~user@computer$ bash #新たにbashを起動
~user@computer$ echo $VAR #VAR変数の内容を出力
##何も表示されない
~user@computer$ exit #bashを抜ける
exit
~user@computer$ export VAR #VAR変数をエクスポート
~user@computer$ bash#bashを起動
~user@computer$ echo $VAR
lpic

環境変数PATH

プロンプトが表示されている状態でコマンドを入力すると、シェルはそのコマンド(プログラム)を実行できます。

コマンドには二種類あります。内部コマンドと外部コマンドです。

  1. 内部コマンド・・・シェル自体に組み込まれている ex.cd
  2. 外部コマンド・・・独立したプログラムとして存在 ex.ls

外部コマンドの場合は、シェルはそのコマンドがどこに置かれているかを、PATHに指定されたディレクトリを順番に調べて見つけます。

コマンドが置かれたディレクトリを環境変数に追加することをパスを通すと言います。パスの通っていない場所に置かれているコマンドやプログラムを実行する場合は絶対パス(フルパス)もしくは相対パスを指定する必要があります。

パスについてはこちらのサイトに詳しく書いてあるので、よくわからなかった方は参考にしてください。

例えば、一般ユーザーが/usr/sbin/useraddコマンドを実行しようとしても、一般ユーザの環境変数PATHには/usr/sbinが記載されていないので、コマンドが見つからずにエラーになる場合もあります。

~user@computer$ echo $PATH |grep /usr/sbin
/usr/local/sbin:/usr/local/bin:/usr/sbin

私の場合はありました。(笑)つまり、ここに指定されている/usr/local/sbinを探しに行って、useraddコマンドが見つけて実行しているということですね。

いい例が見つからないのですが、ここに指定されていないと、コマンドを入力しても実行されません。

PATH変数に含まれてないディレクトリにあるコマンドでも、絶対パスを指定すれば実行することができます(コマンドを実行する権限が必要です。

/user/sbin/useradd -D

環境変数PATHにパスを追加するには、~/.bash_profileなどの環境設定ファイルのPATH設定を修正するか、次のコマンドを使用する。

PATH=$PATH:追加するディレクトリ名

次の例では、/opt/binディレクトリを環境変数PATHの末尾に追加しています。

PATH=$PATH:/opt/bin

シェルは、環境変数PATHの先頭から順にディレクトリを検索します。もし、同名のプログラムがあった場合は、環境変数PATHの先頭に近いほうのディレクトリに置かれているプログラムが実行されます。

環境変数PATHに追加したいパスだけを指定します。

PATH=/opt/bin

このようにしてしまうと、パスが通っているディレクトリは/opt/pathだけになってしまい、外部コマンドが使えなくなります。

通常、環境変数PATHにはカレントディレクトリを含めません。そのため、カレントディレクトリにあるプログラムを実行するには、カレントディレクトリを意味する ./ を明示します。次の例では、カレントディレクトリにあるプログラムmycommandを実行しています。

./mycommand

 

スポンサードサーチ

まとめ

今回の記事では、シェルの基礎から、コマンドライン、シェル変数と環境変数についてまとめました。次回はコマンドラインについてまとめていきたいと思いますので、よろしくお願いします。

 

コメントを残す

メールアドレスが公開されることはありません。