シェルって何?CUIログイン後に知っておくべき基本的なコマンド

シェル (shell) はオペレーティングシステム (OS) のユーザーのためにインタフェースを提供するソフトウェアであり、カーネルのサービスへのアクセスを提供する。それだけではなく、この用語は非常にゆるやかに応用され、特定のコンポーネントの周辺に構築された任意のソフトウェアを含むこともある。例えば、ウェブブラウザ電子メールクライアントHTMLレンダリングエンジンの「シェル」といわれることがある。OSの内部(カーネル)とユーザーの間にある外殻であることから、このように呼ばれる。via Wikipedia

サーバにsshでログインすると現れる画面。あなたの打つコマンドを待っているあのインターフェイスで稼働しているのがシェル(SHELL)そのものです。打ち込んだコマンドを、適切なプログラムに伝え実行するのがCUIで言うところのコマンドラインシェルの役割です。

シェルの担う代表的な機能

一般的なシェルの機能は以下のとおり(すべてのシェルが装備しているわけではない)。

  • プログラム名(プログラム出力)を指定してアプリケーションを起動する。
  • プログラムを終了する、フォアグラウンド・バックグラウンドを切り替える(ジョブコントロール)。
  • プログラムの出力をファイルに出力する(リダイレクト)、他のプログラムの入力とする(パイプ)。
  • プログラムの動作環境の設定に使用する環境変数、シェル変数の設定・参照。
  • 入力コマンドライン中の特別な記法で指定した部分をファイル名としてパターンマッチさせて展開する機能(ワイルドカードの展開)。
  • 入力履歴を呼び出す(コマンド入力ヒストリ)。
  • コマンドに別名をつける(エイリアス)。
  • 繰り返しコマンドを実行したり、条件に応じて実行させたりするための制御構造。
  • 入力時のファイル名などの補完機能
  • まとまった一連の入力をシェルスクリプトとして実行する。バッチ処理とも呼ばれる。

補完機能を覚えておこう

コマンドを見る前に絶対に覚えておきたいのが

tab キーの使い方。

tab キーは、コマンドの補完機能を呼び出すボタンになっている。以下では色々なコマンドがあり、それを色々な位置にあるファイルに対して使うみたいなかんじになるのだが、例えばindex.htmlというファイルが

/var/www/html/site1/uploadfiles/test/yourdomain/index.html

という位置にあったら、このパスを全部撃ちこむのはダルい。

/va でtab

そこまでやると /var/ となると思う。次に

/var/に加えてww までいれてtab

次にht

次にsi

などなど、適当な長さでtabをどんどん打ってみると同じ名前のファイルが無ければどんどん補完していってくれる。めちゃくちゃ便利であるが、知らないと地獄を見るのでまずはこれを抑えておこう。

絶対に使う基本的なコマンド

pwd:自分のいるディレクトリへのパスを示す

今自分のいる場所が知りたいという時に使います。pwd と打つだけです。絶対パスが返ってきます。

pwd
/var/www/html

mkdir:ディレクトリを作成するコマンド

ディレクトリを作成するコマンドです。mkdir 作成したいディレクトリ名 とすれば、今自分のいる場所にディレクトリが作られます。他の場所に作りたい場合は mkdir /var/www/html/newdir みたいにすると /var/www/html のディレクトリ内に newdirというディレクトリが作られます。ディレクトリの所有者は実行したユーザになりますので注意してください。例えば、NginxでWebサーバを動かしている場合であれば、nginxで実行できる権限になっている必要があります。権限の変更はchown を参照ください。

mkdir ~/mydir
ll ~/
mydir

chown:ファイルやディレクトリの所有者を変更するコマンド

mkdirにも書きましたが、ファイルやディレクトリの所有者という概念への理解が必要です。例えば、ユーザAが作ったファイルをユーザBが勝手に変更できると不都合が生じることがあります。こういった事を避けるために、OSには所有者という概念があります。(WindowsやMacも同様ですが)

chown nginx:nginx /var/www/html/myfile.html

このように打つことで、myfile.htmlというファイルの権限がグループ:nginx、所有ユーザ:nginx に変更されます。

nginx:nginx と書きましたが、最初のnginx がグループ。次のnginxが所有ユーザを示します。例えば、所有ユーザをuserA、所有グループをwheelとしたければ userA:wheelと指定します。

↑ ↓キー:前後に行ったコマンドを表示する

コマンドライン上で、十字キーの↑と↓をおしてみましょう。(↓は最初におしても意味ないですが)

前後に実行したコマンドが表示されます。

ls -al
↑
ls -al

という感じで↑を押すと直前のコマンドが現れます。そのまま↑を押すともうひとつ前のコマンドが現れます。

touch:ファイルのタイムスタンプを変更する

本来はタイムスタンプ変更用のコマンドなのですが、ファイルが存在しない場合は新規の空ファイルを作成します。

touch index.html

こう実行すると、index.htmlが作成されます。

cp:コピーコマンド

ファイルのコピーコマンドです。

cp file1.html file2.html

file1.htmlをfile2.htmlとう名前にしてコピーします。

¥cp ~/test /var/www/html/ -Rf

-Rfは他にも色々出てくる引数です。 Rは再帰的にという意味。フォルダが入れ子になっているような場合に、そのフォルダ構造を維持して何かをするという意味になります。このコマンドの場合はコピーですね。 fは強制的にという意味です。コピーコマンドの場合は最初に¥ を付けて -Rfを付けて実行すると、フォルダAを別の場所に強制的に上書きするみたいなことが出来ます。

WordPressを扱っていると、有料のテーマなんかは自分で一度適当なフォルダにアップロードし、wp-content/theme/yourtheme/ 以下を全部上書きするみたいな必要性があるのですが、そういう時にはこんな感じで上書きしてしまいます。

rm:削除コマンド

ファイルの削除コマンドです。

rm test.html

削除していいですか?[y/N] みたいなレスポンスがくるのでyと入力してEnterを押せば削除完了です。

これが煩わしい場合は

rm test.html -r

としましょう。yを押さずに強制的に削除してくれます。

あるフォルダ内を全部削除するという場合はtestというディレクトリがあると仮定すると

rm test -R rm test -Rf

-Rの場合は、フォルダ内のファイル全てについて削除[y/N]の選択が必要です。

-Rfの場合は何も聞かれずに削除されます。
<h3>mv:ファイルの移動コマンド</h3>
ファイルの移動及びリネームのコマンドです。

mv test.html ../

一行目はtest.html を ../ に移動するというコマンドです。 ../ はフォルダ構造の一つ上の階層に移動するという意味です。

/var/www/html/test.html という位置にtest.htmlがあるとすると

/var/www/test.html という位置にファイルが移動します。

mv test2.html test3.html

test2.htmlというファイルをtest3.htmlという名前で移動します。場所は変わっていないので同じディレクトリ内でファイル名だけが変更されるという意味です。

cat:ファイルの中身を見る or ファイルを結合する

cat index.html

こうやると、index.htmlの中身がコマンドライン上にずらずらと表示される。個人的には、中身を見たい時はだいたい編集したい時なのであまり使わないコマンド。

cat file1.html file2.html

とすると、file1.htmlにfile2.htmlが連結される。sslのキーチェインを作る時なんかに使う。

grep:ファイルの中身を検索する

grep "keyword" file

こんな感じで使います。例えば、特定のキーワードがどこのファイルに入っているかを調べるなんて場合によく使うのですが

grep "php" *.php

みたいにすると、.phpという拡張子のファイルすべての中から、php というキーワードが含まれた行を抜き出してくれます。

*は正規表現です。正規表現については最初はとっつきにくいものの、覚えてくると色々な組み合わせが出来て非常に便利です。CUI使うなら正規表現力があるとものすごく効率良く作業が出来ると思います。(とはいえ、自分も目下勉強中ですが)

wget:ファイルのダウンロードコマンド

よく使います。サーバにファイルをダウンロードしてくるコマンドです。

wget&amp;nbsp;https://ja.wordpress.org/wordpress-4.4.2-ja.tar.gz

こんな風にするとWordpressのtarファイルがダウンロードできます。

HTMLもダウンロードできちゃいます。google.comをダウンロードしてみましょう。

wget google.com
--2016-03-05 20:39:21--  http://google.com/
Resolving google.com... 216.58.197.206, 2404:6800:4004:80e::200e
Connecting to google.com|216.58.197.206|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://www.google.co.jp/?gfe_rd=cr&amp;ei=acXaVur1B4SL8QeXhJzICw [following]
--2016-03-05 20:39:21--  http://www.google.co.jp/?gfe_rd=cr&amp;ei=acXaVur1B4SL8QeXhJzICw
Resolving www.google.co.jp... 216.58.196.227, 2404:6800:400a:806::2003
Connecting to www.google.co.jp|216.58.196.227|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified 
Saving to: 'index.html'

    [ &lt;=&gt;                                                                                                             ] 19,309      --.-K/s   in 0s      

2016-03-05 20:39:21 (212 MB/s) - 'index.html.75' saved [19309]

こんな感じでindex.htmlが保存されます。

ファイルの解凍

よく使うのがtar.gzファイル。

tar vzxf&nbsp;wordpress-4.4.2-ja.tar.gz

という形で使います。vzxfはオプションですね。

zipの解凍は簡単です。

unzip your.zip

他にも色々あるのですが、覚えてられないのでこういうサイトを見に行ってます

ファイルのアップロード・ダウンロード:scp

昔はFTPソフトを使ってローカルとのやり取りをしていたのですが、sshでログインしているとサーバ内で直接ファイルがいじれてしまうのであまりローカル・ホスト間のアップロード・ダウンロードはしなくなりました。

それでもたまに必要な事があり、そういった場合に必要に応じて使います。アップロードは下に書いてあるrsyncを使うことが多いので、今回はホストからのファイルダウンロード方法を書いておきます。

ローカルにファイルダウンロードするには、ローカルのターミナルからscpコマンドを以下の様に打ちます。

scp -P xxxx ユーザ名@リモートのホスト名:コピーしたいリモートのファイル ローカルのコピー先

scp -P xxxx [email protected]:/home/user/test.txt /local/path

リモートのホスト名は、IPアドレスでOKです。

xxxxは接続するポート番号です。ssh接続に利用するポート番号を書いてください。

/local/pathは自分のローカルPCのどこにファイルをダウンロードしてくるのかという提示。 ./ としておけば今作業しているディレクトリにそのままファイルが落ちてきます。

ファイルの同期:rsync

ローカルからリモートへのファイルの同期に使います。

rsync -av /local/path/file.txt [email protected]:/home/user/test.txt -e "ssh -p xxxx"

/local/path/file.txt がローカルにある転送したいファイル(もしくはフォルダでもOKです)

-p xxxx のxxxxはポート番号です。scpは-Pでしたが、rsync は-e オプションでssh接続のコマンド呼び出しているのでsshコマンド用のオプションの-pが使われます。

-avですが a は再帰的に転送します。フォルダの中身をそのままの所有者の状態で転送する事ができます。

vは転送したファイルを表示するオプションです。転送時にずらずらと転送したファイル名が現れるので、何が起こってるか分かりやすいです。

オススメNginx本

nginx実践入門 (WEB+DB PRESS plus) 単行本(ソフトカバー) – 2016/1/16

nginxを現場で活用するための知識を、実践的なノウハウを交えて解説した書籍です。nginxのインストール方法や基本的な設定方法からはじめ、nginxを利用した「静的コンテンツ配信サーバ」「HTTPSサーバ」「Webアプリケーションサーバ」「大規模コンテンツ配信システム」の構築方法をそれぞれ詳しく紹介しています。後半ではnginxサーバのモニタリングやログの収集、そして軽量スクリプト言語Luaでnginxを拡張する方法について解説しているので、nginxをこれから使う方はもちろん、さらに活用したい方にもお勧めです。

公開日:
最終更新日:2016/03/06