みなさん、黒い画面はお好きですか?
寂しいことにWebクリエイターにはCUI(Character User Interface)がニガテな方も多いようなのですが、一方でgulpやら何やらで一般的なWebサイト制作であってもCUIと向き合わなければいけない場面は増えていると思います。
少しでも苦手意識を払拭して欲しい!という想いから、CUI基礎講座を開講してみることにします。
ここで紹介するのはUNIXコマンドなので、Macではそのまま動かせるし、Linuxサーバにログインした時ももちろん使えます。
みんな「カチャカチャカチャッターン!」すればいいよ。
Macのターミナルなどコマンドラインツールを立ち上げると、
MioPC:~ mio$
こんな表示で待ち受け状態になっていると思います。
あるいはLinuxサーバにsshログインしている状態なら、
[username@ip-12-34-56-78 ~]$
こんな表示かもしれません。
この待受状態の表示部分を「プロンプト」と言います(私はこの呼び方を今知りましたが)。
一番左から、@マークがあるならログインしているユーザー名@接続先ホスト、@なしならコンピュータ名。
その右の「~」は現在のディレクトリ。
「$」マークはユーザーとしての権限レベルを表しています。
ちなみに「$」ではなく「#」になっていると、現在はroot(全ての権限を持つ管理者状態)で操作していることになります。
CUIでは常にどこかのディレクトリに入った状態で命令を送ります。
最初にコマンドラインツールを立ち上げた時は、上記のように~というディレクトリ表示になっています。
これは、そのログインユーザーのホームディレクトリに居るということを表します。
というより、~というのがホームディレクトリの略称なのです。
正確に書くと、例えばLinuxなら
/home/mio/
とか、Macなら
/Users/mio/
みたいな場所にホームディレクトリが存在しており、これは各ユーザーごとに一箇所ずつ割り当てられています。
そして基本的に他のユーザーのホームディレクトリを覗くことはできません。
Linuxサーバにログインしている時、
su
と、魔法の2文字を打ってENTERキーを押してみましょう。
全知全能の神になれます!
先ほど書いたroot権限を持つsuperuserになることができる、魔法のコマンド「su」(Substitute User, Switch User)。
他にも、
sudo
という、その1文のみroot権限で実行するコマンドもあります。
どちらも自分の権限を上げるので、当然rootパスワードが必要です。(AWS環境なんかでは例外がありますが...)
また、superuserになった時に、元のユーザーではなくsuperuser専用の環境設定を使いたい場合は、"su -"とマイナスオプションを付ければOKです。
コマンドライン上でパスやコマンドを入力中にタブキーを押すと、勝手に予測補完してくれます。
"index.html"というファイルを指定したいなら、"ind"くらいまで打ってタブキーを叩くと"index.html"になってくれます。
でも例えば"index_2.html"というファイルも存在していた場合、"index."まで打たないと確定してくれない。
タブキーを2回押せば入力中のコマンドの予測リストが表示されるので、合わせて活用しましょう。
もうタブキー便利すぎ。
MioPC:~ mio$ cd foo/bar/
指定したディレクトリに移動します。
パスの指定は絶対でも相対でも大丈夫。
今いる場所がわからなくなったら、"pwd"コマンドで確認できます。
MioPC:~ mio$ ls -al
今いるディレクトリ内のファイル・ディレクトリ一覧を表示します。
素のlsだとちょっと分かりづらいので、一般的に-alといったオプションを付けて使うことが多いと思います。
-aは"--all"、-lは"format=long"を表しており、以下のように見やすい一覧表示になります。
MioPC:somedir mio$ ls -al total 96 drwxr-xr-x 16 mio staff 544 1 14 2016 . drwxr-xr-x@ 84 mio staff 2856 10 13 10:46 .. -rw-r--r-- 1 mio staff 1076 1 14 2016 LICENSE -rw-r--r-- 1 mio staff 31 1 14 2016 Procfile -rw-r--r-- 1 mio staff 7823 1 14 2016 README.md drwxr-xr-x 4 mio staff 136 1 14 2016 bin drwxr-xr-x 17 mio staff 578 1 14 2016 node_modules -rw-r--r-- 1 mio staff 584 1 14 2016 package.json drwxr-xr-x 5 mio staff 170 1 14 2016 scripts
MioPC:~ mio$ cp index.html index_2.html
読んで字のごとく、ファイルやディレクトリをコピーします。
左に対象、右にコピー先のディレクトリ、あるいはコピー後のファイル/ディレクトリのパスを指定します。
MioPC:~ mio$ mv index.html ../html/
cpと同様に、ファイルやディレクトリを移動します。
また、ファイル名を変更する場合もmvを使用します。
index.htmlをindex_2.htmlに変更したい場合は、
MioPC:~ mio$ mv index.html index_2.html
というわけです。
MioPC:~ mio$ rm index.html
これも読んだとおりですが、指定したファイル・ディレクトリを削除します。
よく使うオプションとして、ディレクトリを中身もまるごと全部削除したい場合、-rfと付けます。
-rは"--recursive"の略で、再帰的=ディレクトリの中のディレクトリまでループして処理するということです。
-fはよく使いますが"--force"、つまりいちいち「削除していいですか?」の確認をせずに一発で削除するオプションです。
もし、このコマンドを消しちゃいけないディレクトリに使ってしまうと......くれぐれもよく確認してから使いましょう。
MioPC:~ mio$ vi index.html
MacにもLinuxにもだいたい入っている謎のテキストエディタ"vi"を起動します。
コマンドライン上でそのままテキスト編集が出来るとスムーズだし、Linuxサーバの設定などはほぼviで行うものなので、ある意味で鬼門ですが慣れなくてはいけないのです!(俺/私はEmacs派だぜ!という方はそもそもこの記事を読む必要は無いはず)
viには「コマンドモード」と「編集モード」2つのモードがありまして、立ち上げた直後の状態ではコマンドモードになっています。
保存、終了などの包括的な操作はコマンドモードで行い、テキストの編集は編集モードで行うというわけです。
編集モードに入るにはaあるいはiを入力し、コマンドモードに戻るときは:を入力してください。
編集モードは文字を打つだけなので分かるとして、コマンドのほうが分かりづらいと思うので少し紹介します。
q quit=終了
wq write quit=保存して終了
q! 保存しないで強制終了
dd その行をまるごと削除する
u UNDO
/foo "foo"を検索(検索結果の次/前はn/N)
Web開発をしているなら避けては通れないパーミッション(権限)。666とか755とかのアレです。
パーミッションについて、まで説明すると文字数がオーバーフローするので割愛しますが......
例えばFTPでファイルが上書きできない!という場合に、「sshでログインしてroot権限でパーミッションを変更する」という操作が必要です。
[username@ip-12-34-56-78 ~]$ su [root@ip-12-34-56-78 username]# cd /var/www/html [root@ip-12-34-56-78 html]# chmod 777 upload_dir
こんな感じです。 もしupload_dirの中に既に子ディレクトリが存在し、そのディレクトリまで再帰的にchmodしたい場合は、rmの項で書いたような-rオプションを付けましょう。
こちらは権限ではなく所有者自体を変更します。chmodと対のようなもので、chmodした方がいい場合もあればchownした方がいい場面もあります。
[username@ip-12-34-56-78 ~]$ su [root@ip-12-34-56-78 username]# cd /var/www/html [root@ip-12-34-56-78 html]# chown apache:users upload_dir
このようにユーザー名:グループ名の形でグループ名も設定することができます。
ローカル端末ではあまり使うことはないと思いますが、Linuxサーバなどリモート環境では大事な操作です。
よく使う書き方としては、例えばmioさんというユーザーを追加したい場合、
[username@ip-12-34-56-78 ~]$ su [root@ip-12-34-56-78 username]# useradd mio -G wheel
-Gオプションで同時に所属グループも設定しています。
wheelというのは慣例的にsudo(root権限で実行)可能なグループとして設定することが多いグループ名です。なんでwheelなんだろう。
※一説によると"big wheel"から来ているとか
useraddしたならパスワードも設定しなきゃなりません。
[root@ip-12-34-56-78 username]# passwd mio Changing password for mio. Old Password: New Password: Retype New Password:
こんな風に応答形式でのパスワード設定画面になります。 ちなみにMacのユーザーパスワードもこれで簡単に変更できちゃいます。
ここで紹介した以外にも基本的なコマンドと呼べるものは色々ありますが、もし知らなくても忘れてしまっても、その都度ググればいいよねと思ってます。
慣れれば難しくないし、使っている内にググる頻度が減ってどんどん効率的になっていくのです。
こわくないよ!黒い画面。
※ただし、rm -rfだけは本当に気をつけましょう。