黒い画面のCUIを操作することにかなり苦労した覚えがあります。 初心者がCUIに慣れるためのLinuxコマンドをまとめました。
コマンドの解説は多くありますが、操作の流れの中での解説はあまりみかけないので書いてみました。
途中のこのような部分はコラム的なTipsです。
(1度コラムを書いてみたかった)
説明等に間違いや誤字脱字がありましたら、twitterか問い合わせからお知らせ下さると大変有難いです。
この記事の目標
Linuxに慣れていないエンジニアが「コンフィグのあのパラメータ変えといて」や「ログ確認してくれない?」と言った指示を一人で完遂できるところまでです。
具体的には以下のことを目指します。
- ルート権限 sudo
- ディレクトリの探索
- ファイルの確認
- ファイルの複製・削除・作成・移動
- ファイルの編集
そして、具体例としてApacheのログの確認とコンフィグの変更を行います。
熟練者から見るともっと良い方法があるかもしれません。 しかし、まずは一人で作業がこなせるようになることが大事です。
慣れてきたらもっといい方法を探して覚えれば大丈夫!!
ルート権限 sudo
UNIX(LinuxのOSの総称)では、重要なファイルの閲覧や操作に管理者権限が必要です。
sudo
はルート権限レベルでプログラムを実行するためのコマンドです。
表記の先頭の$について
$ [コマンド] [オプション]
先頭の`は、画面の入力を受け付ける部分です。 root権限の時は`#`になります。 `から先のコマンドから入力してください。
また、コピペの防止だと個人的に解釈しています。 よくわからないコマンドは入力しないよう気を付けてください。
ディレクトリの探索
まずはディレクトリを移動して探索ができるようなコマンドです。
コマンド | 意味 |
---|---|
pwd | 現在のディレクトリのフルパスを表示 |
cd | ディレクトリを移動 |
ls | ディレクトリ内のファイルを表示。よく似たll は情報も表示する |
例 「確か"/var/log/"にApacheのアクセスログがあるから探してみて」
ログの確認を頼まれました。 まずは目的のaccess.logを探します。
ここで、ApacheはWEBサーバーです。サイトにアクセスがあるとaccess.logというファイルにログ(アクセス履歴)が残ります。
現在地を確認 pwd
迷ったらこれを打ちます。
$ pwd
/home/ubuntu
どうやらubuntu
というユーザーのホームディレクトリからスタートしています。
"/var/log/"まで移動する cd
cd [ディレクトリパス]
で移動します。
$ cd /var/log/
$ pwd
/var/log/
ディレクトリ名やファイル名はtabキーを押すと入力を補完してくれます。
例えばcd /v
まで打ってからtabキーを押すとcd /var/
まで補完します。
ひとつ下のディレクトリへ戻るときはcd ../
とします。
$ cd /var/log/
$ cd ../
$ pwd
/var/
ディレクトリ内を確認しながらアクセスログを探す ls
ls
で現在のディレクトリ内のファイルやディレクトリを表示できます。
$ ls
alternatives.log apparmor auth.log redis sysstat unattended-upgrades
apache2 apt bootstrap.log dbconfig-common postgresql
いっぱい出てきました。
apache
は頭文字aなので絞り込んでみます。
$ ls a*
apparmor auth.log apache2 apt
*
はワイルドカードといって以降の文字を曖昧にして検索できます。
確認するとapache2
という名前のディレクトリがあり、これの中にありそうです。
ls [ディレクトリ名]
でそのディレクトリ内を確認できます。
$ ls apache2/
access.log error.log other_vhosts_access.log
$ cd apache2
$ pwd
/var/log/apache2
access.log
を見つけました!
/var/log/apache2
というパスにあったようです。
ファイルの確認・表示
目的のファイルを見つけられたら、ファイルの中身を確認します。
コマンド | 意味 |
---|---|
cat | ファイルを全て表示 |
tail | ファイルの後方の数行を表示。 |
`cat | grep [文字列]` |
例 「アクセスログの"POST"でアクセスしてるデータ見せてくれない?」
WEBサイトのアクセスは基本GETの通信が多いかと思います。 その中でサーバへのリクエストがPOSTで来ているデータが見たいようです。
あまり良い例が浮かばなかった。 例としては微妙かもしれない。。。
ファイルを確認する cat
cat [ファイル名]
でファイルの中身を確認できます。
$ cat access.log
64.242.88.10 - - [07/Mar/2004:16:05:49 -0800] "GET /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables HTTP/1.1" 401 12846
64.242.88.10 - - [07/Mar/2004:16:06:51 -0800] "GET /twiki/bin/rdiff/TWiki/NewUserTemplate?rev1=1.3&rev2=1.2 HTTP/1.1" 200 4523
64.242.88.10 - - [07/Mar/2004:16:10:02 -0800] "GET /mailman/listinfo/hsdivision HTTP/1.1" 200 6291
64.242.88.10 - - [07/Mar/2004:16:11:58 -0800] "GET /twiki/bin/view/TWiki/WikiSyntax HTTP/1.1" 200 7352
64.242.88.10 - - [07/Mar/2004:16:20:55 -0800] "GET /twiki/bin/view/Main/DCCAndPostFix HTTP/1.1" 200 5253
64.242.88.10 - - [07/Mar/2004:16:23:12 -0800] "GET /twiki/bin/oops/TWiki/AppendixFileSystem?template=oopsmore¶m1=1.12¶m2=1.12 HTTP/1.1" 200 11382
64.242.88.10 - - [07/Mar/2004:16:24:16 -0800] "GET /twiki/bin/view/Main/PeterThoeny HTTP/1.1" 200 4924
64.242.88.10 - - [07/Mar/2004:16:29:16 -0800] "GET /twiki/bin/edit/Main/Header_checks?topicparent=Main.ConfigurationVariables HTTP/1.1" 401 12851
64.242.88.10 - - [07/Mar/2004:16:30:29 -0800] "GET /twiki/bin/attach/Main/OfficeLocations HTTP/1.1" 401 12851
64.242.88.10 - - [07/Mar/2004:16:31:48 -0800] "GET /twiki/bin/view/TWiki/WebTopicEditTemplate HTTP/1.1" 200 3732
64.242.88.10 - - [07/Mar/2004:16:32:50 -0800] "GET /twiki/bin/view/Main/WebChanges HTTP/1.1" 200 40520
(省略)
どうやら、データが大量にあって追いきれませんでした。
ファイルの後方の数行を表示 tail
一番新しいログはファイルの末尾にあります。
tail [ファイル名]
で後方の10行を表示して確認します。
$ tail access.log
10.0.0.153 - - [12/Mar/2004:12:23:41 -0800] "GET /dccstats/stats-hashes.1week.png HTTP/1.1" 200 1670
10.0.0.153 - - [12/Mar/2004:12:23:41 -0800] "GET /dccstats/stats-spam.1month.png HTTP/1.1" 200 2651
10.0.0.153 - - [12/Mar/2004:12:23:41 -0800] "GET /dccstats/stats-spam-ratio.1month.png HTTP/1.1" 200 2023
10.0.0.153 - - [12/Mar/2004:12:23:41 -0800] "GET /dccstats/stats-hashes.1month.png HTTP/1.1" 200 1636
10.0.0.153 - - [12/Mar/2004:12:23:41 -0800] "GET /dccstats/stats-spam.1year.png HTTP/1.1" 200 2262
10.0.0.153 - - [12/Mar/2004:12:23:41 -0800] "GET /dccstats/stats-spam-ratio.1year.png HTTP/1.1" 200 1906
10.0.0.153 - - [12/Mar/2004:12:23:41 -0800] "GET /dccstats/stats-hashes.1year.png HTTP/1.1" 200 1582
216.139.185.45 - - [12/Mar/2004:13:04:01 -0800] "GET /mailman/listinfo/webber HTTP/1.1" 200 6051
pd95f99f2.dip.t-dialin.net - - [12/Mar/2004:13:18:57 -0800] "GET /razor.html HTTP/1.1" 200 2869
d97082.upc-d.chello.nl - - [12/Mar/2004:13:25:45 -0800] "GET /SpamAssassin.html HTTP/1.1" 200 7368
行の中央にGET
の文字があります。
これが、GETでアクセスしているログです。
つまり、ここがPOST
になっている行を探せば良さそうです。
tail -f access.log
オプション-f
を付けると新しく書き込まれた行が逐次表示できる。 稼働中のサイトのテストなんかで役立ちます。
文字が流れていくのでハッカー気分も味合えます!見終わったらCtrl + cで戻りましょう。
特定の文字列を含む行を表示する | grep
POSTの行だけ探さないといけません。
その時はcat [ファイル名] | grep [文字列]
を入力してください。
$ cat access.log | grep POST
h24-71-249-14.ca.shawcable.net - - [07/Mar/2004:22:29:41 -0800] "POST /mailman/options/cnc_notice HTTP/1.1" 200 3533
h24-71-249-14.ca.shawcable.net - - [07/Mar/2004:22:30:08 -0800] "POST /mailman/options/cnc_notice HTTP/1.1" 200 13973
h24-71-236-129.ca.shawcable.net - - [09/Mar/2004:15:51:24 -0800] "POST /mailman/admin/ppwc HTTP/1.1" 200 2182
h24-71-236-129.ca.shawcable.net - - [09/Mar/2004:15:52:09 -0800] "POST /mailman/admin/ppwc HTTP/1.1" 200 2182
h24-71-236-129.ca.shawcable.net - - [09/Mar/2004:15:52:15 -0800] "POST /mailman/admin/ppwc HTTP/1.1" 200 19597
h24-71-236-129.ca.shawcable.net - - [10/Mar/2004:11:19:32 -0800] "POST /mailman/admin/ppwc HTTP/1.1" 200 19597
h24-71-236-129.ca.shawcable.net - - [10/Mar/2004:11:41:52 -0800] "POST /mailman/admin/ppwc HTTP/1.1" 200 19597
10.0.0.153 - - [10/Mar/2004:12:02:59 -0800] "POST /mailman/admin/ppwc HTTP/1.1" 200 19597
10.0.0.153 - - [10/Mar/2004:12:05:06 -0800] "POST /mailman/options/ppwc/ppwctwentynine@shaw.com HTTP/1.1" 200 14579
10.0.0.153 - - [10/Mar/2004:12:05:54 -0800] "POST /mailman/admin/ppwc/members?letter=p HTTP/1.1" 200 23169
10.0.0.153 - - [10/Mar/2004:12:07:07 -0800] "POST /mailman/admin/ppwc/members/add HTTP/1.1" 200 6762
10.0.0.153 - - [10/Mar/2004:12:07:25 -0800] "POST /mailman/admin/ppwc/members?letter=p HTTP/1.1" 200 24577
h24-71-236-129.ca.shawcable.net - - [11/Mar/2004:12:29:03 -0800] "POST /mailman/admindb/ppwc HTTP/1.1" 200 3407
h24-71-236-129.ca.shawcable.net - - [11/Mar/2004:12:29:27 -0800] "POST /mailman/admindb/ppwc HTTP/1.1" 200 1134
見事、POSTのログだけ抽出できました!
|
はパイプラインといってコマンドを繋ぐ役割をします。
grep
は文字列を検索するコマンドです。
cat [ファイル名] | grep [文字列]
の意味は、cat
で表示するファイルの中からgrep
で一致する行だけに絞り込んでいることになります。
grep
はgrep [文字列] [ファイル名]
としても使えますが、パイプラインを挟んだほうが使い勝手が良さそうです。
例えば、さらにIPアドレスで絞り込むにはこう書けます。$ cat access.log | grep POST | grep 10.0.0.153 10.0.0.153 - - [10/Mar/2004:12:02:59 -0800] "POST /mailman/admin/ppwc HTTP/1.1" 200 19597 10.0.0.153 - - [10/Mar/2004:12:05:06 -0800] "POST /mailman/options/ppwc/ppwctwentynine@shaw.com HTTP/1.1" 200 14579 10.0.0.153 - - [10/Mar/2004:12:05:54 -0800] "POST /mailman/admin/ppwc/members?letter=p HTTP/1.1" 200 23169 10.0.0.153 - - [10/Mar/2004:12:07:07 -0800] "POST /mailman/admin/ppwc/members/add HTTP/1.1" 200 6762 10.0.0.153 - - [10/Mar/2004:12:07:25 -0800] "POST /mailman/admin/ppwc/members?letter=p HTTP/1.1" 200 24577
また、正規表現についても覚えるともっと便利に使いこなせます。
access.logのサンプルはこちらを借りています。 その為、日付が2004年と古いです。
ファイルの複製・編集
コマンド | 意味 |
---|---|
cp | ファイルをコピー |
vi | ファイルを編集 |
例 「 Apacheのポートを80から8080に変更しといて」
一般のWEBサーバーはHTTPのリクエストを80ポートで受け付けています。 開発環境や他のWEBサーバーが同居する場合、被らないように違うポート(8080や8081)などに変えることがあります。
ポートの設定ファイルは"/etc/apache2/ports.conf"にあることを教わったので、まずは確認してみます。
$ cd /etc/apache2/
$ cat ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
#
はコメントです。
# Listen 80
Listen 8080
このように書き換えれば、8080ポートに変更できます。
ファイルの複製 cp
ファイルをいきなり書き換えてはダメです。 間違えて消した場合など復元が難しくなります。
バックアップをとってから編集してください。
ports.conf.org
という名前でバックアップを取ります。
cp [複製元ファイル] [複製先ファイル]
でできます。
$ cd /etc/apache2/
$ cp ports.conf ports.conf.org
$ ls p*
ports.conf ports.conf.org
これで、間違えてしまってもports.conf.org
を戻せば大丈夫です。
ファイルの編集 vim
ここから編集ですが、vi
は説明が長くなるので推敲します。
書き途中で読んでくださった方申し訳ない。
$ sudo vi ports.conf
参考
ファイルの作成・削除
コマンド | 意味 |
---|---|
cp | ファイルをコピー |
rm | ファイルを削除 |
touch | ファイルを作成 |
※ 削除については下記のコマンドは実行しないでください。全ディレクトリが消えます。
# rm -rf /*
OSによっては確認や