大丈夫です。確かにLinuxコマンドはたくさんありますが、WEB関連業務で、使用するコマンドは大体限られてきます。
実業務を通して、覚えておくべきLinuxコマンドをまとめます。
本記事を読むことで、以下のメリットが得られます。
- 覚えておくべきLinuxコマンドを取捨選択できる
- Linuxの扱い方がわかる
まずは全体を把握する所から
ざっくりと全体から把握していくことは、何かを学ぶ際についての鉄板だと思いますが、Linuxの勉強をする際にも、有効な手段だと思います。
以下、ツイートしました。
Linuxを扱うためには、まず、全体を把握することが特に重要です。
— ふわふわしょうちゃん@WEBエンジニア/マネジメント (@FuwaFuwaShoChan) November 5, 2020
なぜなら、各ディレクトリにどんな役目をするファイルが置いてあるかを知ることで行う作業が見えてくるからです。
まずは、/home/{user}とか、var/www/htmlとか作業場所覚えましょ🙂
まず、「どこに何を構成されているのか」ということを把握しない限り、そこで「何を作業するのか」がわからないですよね。
なので、まず、Linuxを効率良く学ぶためには、ディレクトリの構成を覚えて、どこに何が配置されているのか、ということを覚えなくてはなりません。
「じゃあ、結局、全部覚えないといけないじゃん」
と感じるかもしれませんが、方向性としては、まず、「WEBアプリケーション開発」をするのでしたら、WEBアプリケーションサーバー関連のサービス群を把握していくという感じで良いと思います。
※サーバーの構築は、予め必要です。
例えば、
- ApacheやnginxなどのWEBサーバー
- WEBシステム開発に欠かせないデータベースサーバー
- エラーが起きた際のログ確認場所
辺りで十分です。
本記事だけでは、全て説明するのは難しいので、また別の機会に全体の把握のコツも書ければと考えています。
では、僕が業務で良く使用した、覚えておくべきLinuxコマンドを見ていきましょう。
状態確認系Linuxコマンド
cd(シーディ) - changedirectoryの略。ディレクトリ間の移動
状態確認というより、cdコマンドがなかったら始まりません。まず最初に覚えることになる、ディレクトリ間の移動です。
MacでもWindowsでもありますよね。なので、皆知っているのではないでしょうか。
command
$ cd /home
ホームディレクトリへ移動する
まず、ディレクトリ間をcdコマンドで移動しまくって、絶対パス・相対パスなどに慣れることも重要です。
ls(エルエス)- list segmentsの略。ファイルとディレクトリを表示
command
$ ls -la
ファイルとディレクトリを隠しファイルを含めて、全て一覧表示する
lsコマンドも、必ず覚えるべきコマンドです。
ファイルとディレクトリの表示の仕方わからなくて、「どうやって作業すんねん」レベルですから。
とりあえず、例に示しているオプション含めて覚えておくのが吉です。
「配置したはずのファイルがない!!」という、しょーもない躓きを回避できますので。
cat(キャット)- concatenateの略。ログの出力などに使用
ログの出力などに多用します。catコマンドも確実に覚えておきましょう。
command
$ cat /var/log/messages
messagesファイルの内容を出力する
tail(テール)- catと同じ出力系
tailコマンドはファイルの内容の最後辺りを出力してくれます。僕は、オプションとセットで覚えています。
command
$ tail -n 100 /var/log/messages
最後の行から100行だけ messagesファイルの内容を出力する
この例では、messagesのファイル内容が何万行かになっていた場合、catで出力すると、「バーーー」っと画面出力がされてしまい、まともに見ることができません。
イメージとしては無限ループみたいな感じ。なので、tailを使用して、必要な分だけ指定しておけば、指定した行数だけ出力してくれます。
僕的には、catコマンドで端末の負荷を与えてしまう恐れがあるのを完全に排除するために、基本はtailを使用します。
command
$ tail -f /var/log/messages
最後の行から /var/log/messages をリアルタイム出力する
何か、ログに書き込みがあった場合、それをリアルタイムで出力してくれます。「Ctrl + c」で終了します。
何の時に使うかというと、WEB開発時に上手くメール送信ができなかった時などの、デバッグなどに使用しています。
エラーログをリアルタイムに監視することで、より的確にエラー内容と箇所が把握できますので、便利です。
これもコマンドオプションとセットで覚えておきましょ。
ps(ピーエス)- プロセスの使用状況を確認
psコマンドもオプションと一緒に覚えましょう。
command
$ ps aux
プロセスの実行ユーザーやCPUとメモリー含め、使用状況を一覧表示する
サーバープロセスが正常に稼働しているか、端末のリソースを「どのプロセスが一番食っているか」などを調べる際に、使用します。
PID(プロセスID)も把握できるので、例えば、
「WEBサーバーが正常に動いていない、尚且、serviceコマンドで起動もできない時など、ハングアップ状態の時に、PIDを調べ、それをkillコマンドを使用して、プロセスを強制終了する。」
と、いったようなケースでも使用します。
サーバーの調査に、よく使用するので、覚えておきましょう。
権限系Linuxコマンド
sudo(スードゥー)- 別のユーザーの権限でプログラムを実行
sudoコマンドは、主にスーパーユーザーを利用する時に使用します。
command
sudo cat /var/log/messages
ルート権限でcatコマンドを実行する。
実は、一般ユーザーでは、catすら実行権限がありません。なので、sudoは良く使用します。
コマンド実行時に「Permission denied」というエラーが出れば、「権限がない」ということなので、sudoコマンドで再度実行してみてください。
ルート権限のパスワードを聞かれると思いますが、パスワード入力後、実行できるようになるはずです。
「そもそもルートパスワードなんて知らんがな」
お待ちください。では、次のコマンドで設定しましょう。
su(ス)- 指定したユーザーに変更
suコマンドも、主にルートユーザー(スーパーユーザー)に変更する際に使用します。
command
$ su -
カレントディレクトリや環境変数含め、ルートユーザーに変更する
suコマンドは、ほぼ、ルートユーザー変更の際に使用します。ハイフン付きでセットで覚える形で良いです。
Linux初期状態で、ルートユーザーに変更し、パスワードを設定するような、初期設定の時に良く利用します。
passwd(パスワード)- パスワードの変更
Linuxの初期の状態では、ルートパスワードも設定されていません。
なので、初期状態でルートパスワードを設定する必要があります。
「su -」でルートユーザーになった後、「passwd」コマンドでルートパスワードを設定するなどで、良く利用します。
chmod(チェンジモード)- ファイルのパーミッションを設定
command
$ chmod -R 777 /var/www/html/laravel/storage/
Laravel/storageディレクトリ以下の全てを書き込み許可させる。
得に、ローカルでWEB開発をしたものをサーバーに配置した際に、フレームワークなどの設定規約で、storageやcacheディレクトリを書き込み可能にしておかなければいけない場合に使用するケースが多いです。
オプションの「-R」は再帰的に指定したディレクトリ内ファイルも含めて全て対象とする形になります。
chown(チェンジオーナー)- ファイルの所有者やグループを変更
command
$ chown -R apache:apache /var/www/html
/var/www/html 配下全てをapacheユーザーとapacheグループに変更する
chownコマンドも、chmodと同様で、WEBプログラムの実行ユーザーなどでエラーが起きた場合や、本番環境でデプロイする際にルート権限である場合だと、コピー禁止になっていたりすることがあります。
随時、「適切な所有者とグループに所属させておく」といったイメージで使用します。
ファイル操作系Linuxコマンド
vi(ヴィーアイ)- ファイルの作成と編集
command
$ vi /var/www/html/index.php
index.php ファイルを編集する、または、ファイルが存在しない場合、作成する。
今では「vim」の方がエディターとしては、普及率が高いかもしれませんが、emacsとか、Linuxのテキストエディターに値します。
僕は昔から、デフォルトインストールされている「vi」を良く使用します。ちょっとした編集しか用途がないので。
viでファイルを開くと、結構、癖のある使い方を覚えなければいけないので、ここでは割愛します。よく使うLinuxコマンドとして覚えておいてください。
mv(エムブイ)- ファイルやディレクトリの移動。他に、名前変更などに使用
command
$ mv /home/user/html /var/www/
home/user以下のhtmlディレクトリを/var/www以下に移動する
mvコマンドも欠かせないLinuxコマンドの一つになります。ディレクトリの移動や名前変更に必ず使用するので、覚えましょう。
上手く利用するコツとしては、絶対パスと相対パスを完全に理解してください。
cp(コピー)- ファイルやディレクトリをコピー
command
$ cp -a /var/www/html /home/user/
所有者とグループなども含め、htmlディレクトリをhome/user/以下にコピーする
cpコマンドは、さほど説明はいりませんね。覚えやすいと思います。ただし、注意したいのがオプションです。
「-a」を使用することで、所有者とグループ名も含めてコピーしてくれます。
サーバーの構築の際でも、オプションを忘れて、プロセスが起動しなかったり、躓く要素になりやすいので、オプション含めて覚えておく方が良いです。
mkdir(メイクディレクトリ)- ディレクトリを作成
command
$ mkdir /home/user/test
/home/userディレクトリ以下にtestディレクトリを作成する。
mkdirコマンドはディレクトリを作成してくれます。作業する時のイメージは容易に想像できると思います。
バックアップディレクトリを作って、そこに、mvコマンドを使用して、ファイルを移動させるとか。
cpコマンドでファイルをコピーするとか、そんな感じですね。
rm(アールエム)- ファイルやディレクトリを削除
command
$ rm -rf /var/www/html/cache
cacheディレクトリをメッセージを表示せずに削除する
rmコマンドでディレクトリを削除する場合は、「-r」のオプションを使用します。
削除する前に確認メッセージも必要ないので「-f」もセットで使用する場合が僕は多いです。
ですが、誤ってコマンドを実行してしまうと、半ば強制的に削除してしまうので、ここは自己責任で実行するようにしてください。
僕は、せっかちなのでオラオラと消してしまいます。とりあえずは、気を付けましょう。
サービスコントロール
yum(ヤム)- Linuxアプリケーションをインストールしたりする管理コマンド
yumコマンドは、Linuxの初期設定などによく使用しますね。
command
$ yum update
アプリケーション群をアップデートする
AmazonLinux2でも、最初にインスタンスを起動し、「yum update」をする必要があります。
サーバーを管理するようになると、yumコマンドは頻繁に使用することになります。
後、インストールされているか確認するために使用したりします。
command
$ yum list installed | grep php
phpアプリケーション群の既にインストールされているものを一覧表示する。
yumの正式な読み方は「ヤム」というらしいですが、僕は今でも「ユム」と言ってしまっています。
以前の組織で、シニアエンジニアの方に「いや、ユムでしょw」とゴリ押ししてしまっていました。ここでお詫びします。本当にゴメンナサイ!!
service(サービス)- 各デーモンの起動や停止などのコントロール
command
$ service httpd start
apache(httpd)を起動する
serviceコマンドは、比較的新しいLinuxで追加されたコマンドです。
昔の起動の仕方の方が、僕は馴染みが深いですが、どちらにしても、serviceコマンドがなければサービスのコントロールができないので、覚えておきましょう。
以下、コントロールの種類です。
- start
- stop
- reload
- status
- graceful
特にWEB開発の仕事だと、httpd(WEBサーバー)を扱う機会が多くなると思います。
WEBシステムは構成が複雑なものも多いので、cronなどで1分毎に処理を実行していたり、バックグラウンド処理が走っている場合も多くあるかと思います。
ですので、安易にrestartとかしてしまうと、処理実行中にサービスが停止してしまい、データを拾い上げることが出来なかったとか、甚大な被害につながる可能性が出てきます。
ですので、コントロールは以下の状況で使い分けると良いです。
- サービス影響が少ない形での再起動は「graceful」を使う
- サービス影響をあまり気にしなくても良い再起動は「restart」を使う
- 設定ファイルの読み直しのみは「reload」を使う
ぶっちゃけ、「restart」は、基本使わないようにすべきだと思います。設定のみの反映なら、reloadにしておきましょう。
そして、それ以外の場合だと、gracefulが無難です。
業務上では、とても大切なことです。覚えておきましょう。
最後に
WEB開発者が覚えるべきLinuxコマンドを、僕が実際の業務を通して、どのようにして使う場合が多いか。ということを、できるだけ絞り込んで説明しました。
Linuxを効率良く学ぶコツは、必要最低限のことだけ覚えておいて、後は必要になったら随時ググって、使うことができれば、それで良いと思います。
無駄にLinuxコマンドを覚える努力をするより、WEBサービスのクリエイティブなプロダクトのことを創造するために時間を割くことの方が生産的です。
Linuxコマンドの例は、オプション含めて便利ですので、是非、覚えてください。
少し長くなりましたが、今回はこの辺で。