エンジニアとして開発をする上でUnixコマンドはなくてはならないものの一つです。ただただ「プログラミングをする」だけのエンジニアとして生きていくのはまだまだ辛い世の中です。
なぜなら世の中のサーバーはほとんどがLinux系のOSですので、ログインしたらもうコマンド以外ではOSの操作ができません。そのため、インフラエンジニアやサーバサイドエンジニアにとってはほぼ必須スキルと言っていいでしょう。
また、クライアントエンジニアだとしてもバージョン管理のために「git」や「svn」を使うことになりますし、「ln」コマンドを使ってリソースのリンクを貼ったりするかもしれません。
そして、Unixコマンドはちょっとしことをぱぱっとやるのに非常に便利なものです。覚えておいて全く損はありません。Macユーザならここで紹介するコマンドをほとんどそのままMac上で使うことが出来るはずですので是非試してみてください。
この記事の内容は?
基礎の基礎
「0から覚える」と明言したので、本当の基礎のコマンドも紹介しておきます。
先に言葉の定義だけしておくと、自分がいるディレクトリのことを「カレントディレクトリ」と言います。
カレントディレクトリのパスを表示する「pwd」
ルートディレクトリからカレントディレクトリまでのパスを表示するのが「pwd」コマンドです。
$ pwd
/Users/myname/article
ディレクトリを移動する「cd」
ディレクトリを移動するためのコマンドが「cd」です。
カレントディレクトリ以下にならそのディレクトリ名を、上にもどるのであれば「../」と指定します。
$ pwd
/Users/myname
$ cd article
/Users/myname/article
$ cd ../
/Users/myname
カレントディレクトリのディレクトリとファイルを一覧表示する「ls」
ファイルの一覧表示のためのコマンドが「ls」です。このコマンドを打てばカレントディレクトリのディレクトリとファイルが空白区切りで
全て見ることができます。
$ pwd
/Users/myname
$ ls
article image.jpg m.doc test.txt
コマンドの多くは「-」をつけてオプションの機能を使うことができます。「ls」にもオプションの機能があります。
かなり頻繁に使われるオプションとしては「-l」があります。「-l」をつけると付加情報とともに縦表示で確認することができます。
付加情報としてアクセス権限やowner(少し難しいのでここでは説明を省きます), ディレクトリやファイルの大きさ,作成日時などを見ることができます。
$ ls -l
drwxr-xr-x 12 myname staff 408 1 12 22:54 article
drwxr-xr-x 4 myname staff 1000 1 12 22:53 image.jpg
drwxr-xr-x 4 myname staff 223 1 12 22:53 m.doc
drwxr-xr-x 4 myname staff 13 1 12 22:53 test.txt
「-h」を付けることで付加情報を「人間が読みやすい表示」に変えることができます。
例えば上記で表示した時のファイルの大きさの単位が明確に表示されたりします。
さらにオプションは複数をまとめて指定することができます。「-l」と「-h」を同時に使用したい場合「-lh」のように指定します。
$ ls -lh
drwxr-xr-x 12 myname staff 408B 1 12 22:54 article
drwxr-xr-x 4 myname staff 1KB 1 12 22:53 image.jpg
drwxr-xr-x 4 myname staff 223B 1 12 22:53 m.doc
drwxr-xr-x 4 myname staff 13B 1 12 22:53 test.txt
すると「1000」と表示されていたところが「1KB」とわかりやすい表示となりました。
最初に覚えるべきコマンドたち
ここから上記の3つのコマンドの次に覚えるべき便利なコマンドを紹介していきます。
ファイルをコピーする「cp」
「cp [コピーしたいファイル名] [コピー先のファイル名]」と入力することでファイルをコピーすることができます。[コピー先のファイル名]は存在しなければ新規作成され、存在していれば上書きされます。
(上書きされる時は確認なしの問答無用で上書きされるので注意しましょう。古きUnixにはwindowsのゴミ箱のような機能はないのです。やはりゴミ箱は世紀の大発明だと思います。)
$ ls
article image.jpg m.doc test.txt
$ cp test.txt test2.txt
$ ls
article image.jpg m.doc test.txt test2.txt
ファイルを移動する「mv」
「mv [移動したいファイル名] [移動先のファイル名]」と入力することでファイルを移動することができます。
[移動先のファイル名]は存在しなければ新規作成され、存在していれば上書きされます。$ ls
article image.jpg m.doc test.txt test2.txt
$ mv test2.txt mv.txt
$ ls
article image.jpg m.doc test.txt mv.txt
ディレクトリを作る「mkdir」
「mkdir 「ディレクトリ名」」とすることでディレクトリをつくることができます。
「ディレクトリ名」が存在していた場合、作成に失敗します。
$ ls
article image.jpg m.doc test.txt test2.txt
$ mkdri sample
$ ls
article image.jpg m.doc sample test.txt mv.txt
ファイル, ディレクトリを削除する「rm」
「rm [削除するファイル名]」とすることでファイルを削除することができます。
$ ls
article image.jpg m.doc test.txt mv.txt
$ rm mv.txt
$ ls
article image.jpg m.doc test.txt
下記のようにオプションとして「-r」をつけることでディレクトリを削除(内包する全ファイルも一緒に)することができます。
$ mkdir sample
$ cp test.txt sample/
$ ls
article image.jpg m.doc sample test.txt
$ rm -r sample
$ ls
article image.jpg m.doc test.txt
ディレクトリの削除コマンドとしては「rmdir」もありますがこちらはファイルを含むディレクトリの削除はできません。
ファイルを作成する「touch」「echo >」
「touch [ファイル名]」とすることでファイルを作成することができます。[ファイル名]が存在しなければ何も書いてない空のファイルをさくせいします。
もし存在していたら書かれている内容を変更せずにファイルの作成日時のみを更新します。
$ ls
article image.jpg m.doc test.txt
$ touch z.txt
$ ls
article image.jpg m.doc test.txt z.txt
「echo [文字]」は標準出力に[文字]を表示するコマンドです。これを「>」とともに使うとファイル作成をすることができます。
「echo [文字] > [ファイル名]」とすることで[文字]が書き込まれたファイルを作成することができます。
$ ls
article image.jpg m.doc test.txt
$ echo "hello" > zz.txt
$ ls
article image.jpg m.doc test.txt z.txt zz.txt
ファイルの内容を表示する「cat」「less」
「cat」「less」コマンドのいずれかを使うことで、ファイルの内容を標準出力に表示することができます。
これらの違いは「cat」が問答無用で全内容を表示しようとします。「less」はファイル内容が大きい場合は途中までしか表示しません。
$ echo "hello" > zz.txt
$ ls
article image.jpg m.doc test.txt z.txt zz.txt
$ cat zz.txt
hello
$ less zz.txt
hello
まとめ
この記事ではUnixコマンドの基礎的な操作を紹介しました。初めは慣れないかもしれませんが慣れればguiで操作するよりも高速に処理できるようになります。
ここでは基礎的なものしか紹介していませんが、まだまだたくせんの便利なコマンドがあるので興味のある方は是非調べてみてください。
コマンドを使う際に注意する点としてはやはり「ゴミ箱」という機構に守られていない点でしょう。ファイルを削除する場合などはくれぐれも注意するようにしましょうね。