はじめに
こんにちは!Akira(彰)です!
もう怖くないLinuxコマンド。手を動かしながらLinuxコマンドラインを5日間で身に付けよう
Linux標準教科書
こちらの教材で学んだことのアウトプット練習第3弾!Linuxの基本コマンドについて、です!
できるだけわかりやすく説明できたらなと思うので是非見ていってください~!
Linuxとは数あるOSの一種です。OSとは有名どころだとWindowsやmacOS等がありますが、それらに比べてLinuxは、
- オープンソースでだれでも自由に使える。
- サーバーの運用がやりやすい。
- 世界中の人が使っているため信頼性が高い。
- 技術が枯れている。
等の特徴があります。
以上の特徴から安定性を求められるサーバー等のOSとして選ばれるのが多い事や、技術が枯れている為1度習得してしまえば何年たっても使える事から是非習得したい技術の1つです!
ではこれからそんなLinuxでよく使うコマンドの方を説明していきたいと思います!
シェルとは?
コマンドを説明する!と意気込んでみましたが、まず最初にコマンドがどのように入力されて実行されるかの仕組みに大きく関わる シェル について説明させてください。
まずLinuxのコマンドはターミナルという画面にコマンドを打ち込み、それをシェルが解釈し、Linuxの中核部(カーネル)が実行するという流れになります。
この流れを見てわかるように、シェルの役割は我々が入力したコマンドをLinuxの中核部(カーネル)に伝える役割を持っています。
以上の流れを何となく理解しておくとターミナルとシェルの違いで変に混乱しなくなると思いますのでターミナルとシェルは 別物 という感覚を持って以降のコマンド説明を見てみて下さい!
コマンド
それでは本題のコマンド説明に移っていきたいと思います。
この説明ではまずコマンドの共通した書き方から入り、その後に各種コマンドについて説明していきます。
コマンドの書き方
Linuxのコマンドは基本的に以下の構成で書きます。
$ [コマンド名] [オプション]
コマンド名は名の通りなのですが、オプションに関しては各コマンドに付随する便利機能のようなもので、このオプションを使うと同じコマンドでも全く違う動きをさせることが出来ます。
これから説明するコマンド達はコマンド名と有用なオプションがあればそれも合わせて説明していきますのでよろしくお願いします!
cdコマンド(change directory)
cdコマンドとは change directory の略でディレクトリを移動する為のコマンドです。
LinuxはWindows等GUIのあるOSとは違いコマンドでディレクトリの移動をしなければいけません。
その際に使用するのがcdコマンドというわけです。以下が書式と使用例です!
書式
$ cd [オプション] [ディレクトリ]
使用例
$ cd /home/akira/
以上が書式と使用例です。cdコマンドではオプションはあまり使われないので使うシーンが来たら調べて使う程度で良いと思います。
使用例を見るとわかるようにディレクトリはPATHで指定します。使用例では、homeディレクトリ内のakiraディレクトリに移動するという様に指定しています。
cdコマンドとこれから説明する pwd, ls コマンドは非常によく使うコマンドなので手癖になるレベルで覚えることをお勧めします!
pwdコマンド(print name of working directory)
pwdコマンドは print name of working directory の略でカレントディレクトリ(現在位置)のPATHを表示するコマンドです。
非常に簡単なコマンドなので書式と使用例を見ていきましょう。
書式
$ pwd [オプション]
使用例
$ pwd
/home/akira
pwdコマンドも最初はオプションを使うことはないので使うシーンが来たら調べてみてください!
使用例を見るとpwdを実行した後になにやらPATHが記載されています。これがカレントディレクトリです。
今自分がどこのディレクトリに居るのかわからなくなったらpwdを実行することで迷子を回避できます。
lsコマンド(list)
lsコマンドは list の略でファイルやディレクトリの一覧を表示するコマンドです。
具体的な書式と使用例を見ていきましょう。
書式
$ ls [オプション] [ディレクトリ・ファイル名]
使用例
$ ls /home/akira
README.txt dairy_report.txt icon.png test work
使用例を見てください。lsコマンドを実行後各種ファイルが表示されています。
これがディレクトリ・ファイル名で指定した場所の中身一覧になります。
また、lsコマンドには幾つか覚えてほしいオプションと パス名展開 と呼ばれるものがあるので説明していきます。
それではパス名展開から説明していきます。パス名展開を使うと複数のファイルを絞り込んで指定できます。
表と使用例をまとめたので見てみましょう。
使用例
# 拡張子がtxtのファイルの一覧を表示
$ ls *.txt
README.txt dairy_report.txt
# tから始まり4文字で終わるファイルを表示
$ ls t???
test
以上がパス名展開を使用したファイルの指定方法です。
次はよく使うオプションを表にまとめましたので、実際に使って動作がどう違うかを実感しながら見てみましょう!
オプション |
動作 |
-l |
ファイルの詳細情報を表示 |
-a |
隠しファイルも含めた全てのファイルを表示 |
-F |
ファイル種別を表示 |
-F指定時にファイル横に出てくる記号でファイル種別を判断できます。
/ : ディレクトリ
@ : シンボリックリンク
* : 実行可能ファイル
記号なし : 通常ファイル
以上がlsコマンドの使い方とパス名展開、よく使うオプションでした!
とりあえずcdコマンドでディレクトリを移動したらlsコマンドで確認、というのを手癖にするといい感じかなと思います!
mkdirコマンド(make directory)
mkdirコマンドは make directory の略でディレクトリを作成するのに使用します。
書式と使用例を見ていきましょう。
書式
$ mkdir [オプション] <作成するディレクトリ名>
使用例
# workディレクトリを作成する
$ mkdir work
以上がmkdirを使ったディレクトリの作成方法です。
次はオプションについて見ていきましょう!
オプション |
動作 |
-p |
ディレクトリ構造を1度に作成 |
-pオプションを付けるとディレクトリ構造を1度に作成できます。
例えば /work/code/test のようなディレクトリ構造を作成する場合、workを作成してからcodeを作成してtestといった具合に計3回mkdirコマンドを打たなければなりませんが
-pオプションを使うと一度に、work/code/testと1回のコマンド入力で済みます。
rmdirコマンド(remove directory)
rmdirコマンドは remove directory の略でディレクトリを削除する際に使用します。
書式と使用例を見ていきましょう。
書式
$ rmdir <ディレクトリ名>
使用例
$ rmdir work
空でないディレクトリを削除しようとするとエラーになる点に注意しよう
以上がrmdirの書式と使用例です。
短く簡単で覚えやすいです!
catコマンド(concatenate)
catコマンドは concatenate の略でファイルの中身を表示する際に使用するコマンドです。
書式と使用例を見ていきましょう。
書式
$ cat [オプション] [ファイル名]
使用例
$ cat /home/akira/dairy_report.txt
取り組んだこと
わかったこと
次取り組むこと
感じたこと
学習時間
使用例はdairy_report.txtの中身を表示している様子です。
また、catコマンドでよく使うオプションを表にまとめました!
以上がcatコマンドの使用方法とよく使うオプションです。
catコマンドは使用するとファイルの内容をターミナル全体に表示するため長い内容のファイルを表示するとターミナルが埋め尽くされます。
これを回避するために次のコマンド2種を見ていきましょう!
lessコマンド(less - opposite of more)
lessコマンドは less - opposite of more の略でファイルの中身をスクロール表示するコマンドです。
このコマンドは先程catでも説明したようにターミナルに内容が埋め尽くされるのを回避するために使用したりするコマンドです。
書式と使用例を見ていきましょう。
書式
$ less [オプション] <ファイル名>
使用例
$ less /home/akira/dairy_report.txt
取り組んだこと...
lessを使用すると一旦ファイルの内容だけの画面に飛びます。
この時コマンドを使用して操作する必要があるためそのコマンドを表にまとめました!
コマンドを |
動作 |
スペース, f |
1画面下にスクロール |
b |
1画面上にスクロール |
j |
1行下へ |
k |
1行上へ |
q |
lessを終了 |
/[文字列] |
下方向へ検索 |
?[文字列] |
上方向へ検索 |
n |
次の検索結果へ |
N |
目の検索結果へ |
lessコマンドを使用後は以上のコマンドを使用して操作することになるので慌てずに操作しましょう!
以上がlessコマンドを使用したファイル内容の閲覧になります。
tailコマンド
tailコマンドは文字通り後ろという意味で、指定したファイルの終わり部分を出力するコマンドです。
書式と使用例を見ていきましょう。
書式
$ tail [オプション] <ファイル名>
使用例
$ tail -n 1 /home/akira/dairy_report.txt
学習時間
本来、tailコマンドはオプションを付けないで使用すると末尾10行を表示します。
ですが-nコマンドを使用して末尾1行のみの表示としました。tailコマンドで使用するオプションを見ていきましょう。
オプション |
動作 |
-n [行] |
末尾から指定した行を表示する |
-c [バイト] |
末尾から指定したバイト分表示する |
-f |
リアルタイムで変更を見る |
以上がtailで使うオプションになります。最後の-fに関しては使い方が少し特殊なので簡単に説明していきます。
-fオプションを使うことでファイルの内容をリアルタイムで監視することができます。
これを使用すると監視しているファイルの内容が追記された際などにリアルタイムで何が追記されたのかを監視することができます。
ログファイルの監視等の使用が多いようです!
touchコマンド
touchコマンドは指定したファイル名が存在する時はタイムスタンプを更新し、存在しない場合は0バイトの空ファイルを作成するコマンドです。
主にファイル作成で使用したりします。書式と使用例を見ていきましょう!
書式
$ touch <ファイル名1> <ファイル名2>
使用例
$ touch index.html
この使用例のように入力すると同じファイル名が存在しない場合、指定したファイル名が新規に作成されます!
rmコマンド(remove)
rmコマンドは remove の略でファイルやディレクトリを削除する際に使用します。
書式と使用例を見ていきましょう。
書式
$ rm [オプション] <削除するファイル名>
使用例
$ rm dairy_report.txt
以上がrmコマンドの書式と使用例です!またrmコマンドにはよく使うオプションが複数存在するので見ていきましょう!
オプション |
動作 |
-r |
ディレクトリも合わせて削除する |
-f |
ファイルを削除する際の警告文を非表示 |
-i |
ファイルの削除前に確認 |
以上がrmコマンドのオプションとなりますが、-rオプションではディレクトリの中にあるファイルやディレクトリもまとめて削除されてしまうので十分気を付けて作業するようにしましょう!
mvコマンド(move)
mvコマンドは move の略でファイルの移動やファイル名を変更する際に使用するコマンドです。
早速書式と使用例を見ていきましょう。
書式
$ mv [オプション] <移動元> <移動先>
使用例
# ファイルを移動
$ mv dairy_report.txt work/
#ファイル名を変更
$ mv test test2
このように書式での<移動先>の部分にディレクトリを指定するかどうかで動作が変わるのがmvコマンドの特徴です。
また、mvコマンドで既存のファイルを指定してしまうと上書きされてしまいます。これを回避するオプションがあるので紹介します!
この-iオプションを使うことで上書きが発生する際に確認してくれるようになります。事故防止の為に覚えておきましょう!
cpコマンド(copy)
cpコマンドは copy の略でファイルやディレクトリをコピーするのに使用するコマンドです。
このコマンドはコピーとペーストの役割を同時にこなします。書式と使用例を見ていきましょう。
書式
$ cp [オプション] <コピー元> <コピー先>
使用例
$ cp dairy_report dairy_report_cp
以上が書式と使用例です!コピー先にディレクトリPATHを記載することもできるので柔軟に使っていきましょう!
またこのcpコマンドもオプションがありますので見ていきましょう。
オプション |
動作 |
-i |
上書きする前に確認 |
-r |
ディレクトリをコピー |
以上がcpコマンドでよく使うオプションです!
-iは先程のmvコマンドで使用した通りですが-rはディレクトリごとコピーするというオプションになるのでディレクトリをコピーする際には忘れずに付けるようにしましょう。
lnコマンド(link)
lnコマンドは linkの略でWindowsでいうショートカットを作成する際に使用するコマンドになります。
Linuxではこのショートカットに2つの種類があり、それを ハードリンク と シンボリックリンク と言います。
書式と使用例に入る前にこの2つの違いを説明しておきます。
ハードリンク
ハードリンクの大まかな特徴は以下通り。
・1つのファイルに複数の名前(あだ名)をつける
・元のファイルを削除しても消えない
・全てのハードリンクがなくなった時に削除される
シンボリックリンクの大まかな特徴は以下の通り。
・リンク先のパス名が書かれた特殊なファイル
・ファイルの実体を削除したり移動するとパスが通らないので参照できなくなる
これがハードリンクとシンボリックリンクの特徴と違いになります。Windowsのショートカットに近いのはシンボリックリンクですね!
実際に使用する際はシンボリックリンクを使用することが多いので主にシンボリックリンクを覚えればとりあえずは大丈夫だと思います。
ということで長くなりましたが書式と使用例を見ていきましょう。
書式
$ ln [オプション] <リンク元ファイル> <リンク名>
使用例
#ハードリンク
$ ln dairy_report dairy_report_hardln
#シンボリックリンク
$ ln -s dairy_report dairy_report_symboliln
この使用例をみてわかるようにオプションに -s をつけるとシンボリックリンクに、何もつけないとハードリンクになる点に注意しましょう!
findコマンド
findコマンドはファイルを検索する際に使用するコマンドです。
findでは使用する検索条件が多いため、通常の書式と使用例を書いた後に条件表、その後に各検索条件を使用した使用例を見ていきたいと思います。
書式
find <検索開始ディレクトリ> <検索条件> <アクション>
使用例
$ find . -name dairy_report.txt -print
この使用例の "." が検索開始ディレクトリ "-name" が検索条件 "-print" が検索アクションとなります。
よく使うオプション表です。
検索条件 |
動作 |
-name |
ファイル名を指定して検索。大文字小文字区別する |
-iname |
ファイル名を指定して検索。大文字小文字区別しない |
-type |
ファイルの種類で検索 |
-a |
複数の検索条件を指定 |
各検索条件の使用例を上から順に書いていきます。
-name使用例
# lsのパス名展開でも使った * と ? が使えます。
$ find . -name *.txt -print
# ここでは拡張子が.txtのファイルを検索しています。
-iname使用例
# 大文字と小文字を区別しないため全部大文字で書いたりしても大丈夫。
$ find . -iname DAIRY_REPORT.TXT
-type使用例
# -type f は通常ファイル
# -type l はシンボリックリンク
# -type d はディレクトリ
$ find . -type [ファイルtype] -print
[ファイルtype]の部分を変えることでファイルtypeを指定できる。
-a使用例
$ find . -name w??? -a -type d -print
# w から始まる4文字のディレクトリを検索している。
以上がfindコマンドの検索条件と使い方でした。少し長かったですが1つ1つパーツで理解するとあとは組み合わせだけなので頑張りましょう!
chmodコマンド(change mode)
chmodコマンドは change mode の略でファイルやディレクトリのパーミッションを設定、変更する際に使用するコマンドです。
パーミッションという言葉がでてきたと思います。このコマンドを使用するにはこのパーミッションの理解が不可欠となるので軽くパーミッションとは何なのかについて説明しておきます。
パーミッションとはファイルやディレクトリを誰がどの程度操作できるのかという設定です。
ls -lコマンドを使用した際、ファイル情報の一番左に下記の様な情報が書かれていたと思います。
-rwxr-xr-x.
これですね。そのファイルの権限を表す羅列となっています。
具体的には左から3文字区切りでファイル所有者、グループ、その他ユーザーとなっています。
先程の羅列を例に説明すると rwx がファイル所有者、r-x がグループ、 r-x がその他ユーザー、です。
パーミッションの区切りが見えたところで次はこの英字が何を表しているか表で見てみましょう。
このように割り当てられています。これを見たうえで先のファイル所有者権限を見てみると rwx となっているのでこのファイル所有者は全部の権限を有していることになります。
そしてこのパーミッションを変更するコマンドが chmodコマンド というわけです!
はい!ということで本題に戻ってパーミッションを変更するためのchmodコマンドについて書式と使用例を見てみましょう。
書式
$ chmod [ugoa] [+-=] [rwx] <ファイル名>
使用例
$ chmod u-w dairy_report.txt
# dairy_reportのファイル所有者権限 w を消す。
このように記述します。ただこのugoaなどを全部覚えるのはちょっと大変です。
そこでchmodのパーミッション記述方法には数値で指定する方法もありますので見てみましょう!
書式数値指定
$ chmod <8進数の数値> <ファイル名>
使用例
$ chmod 755 dairy_report.txt
これは何をしているのかというと各権限に割り当てられている数字を足して指定しているのです。
文字だけだとわかりにくいと思うので表にして説明します。
このように各パーミッションに数字が割り当てられています。これを足した数を指定することで設定できます。
使用例を見てみると 755 と指定していました、これは r+w+x=7
,r+x=5
,r+x=5
= -rwxr-xr-x.
これを左から 所有者、グループ、その他 と並べたものです。
この数値指定を使うと簡潔にパーミッションの設定が可能になるので是非覚えましょう!
chownコマンド
chownコマンドはchmodコマンドで出てきたそのファイルの所有者を変更する為のコマンドです。
書式と使用例を見ていきましょう。
書式
$ chown [オプション] <変更ユーザー> <グループ> <ファイル or ディレクトリ>
使用例
$ chown new_user akira dairy_report.txt
# dairy_report.txtの所有者が new_user グループが akira となります。
このコマンドを実行する際にはrootユーザーである必要がある点に注意してください。
また、このままではディレクトリのユーザーを変更した際でもディレクトリの中身の所有ユーザーは変わっていません。
これを解決するためのオプションが以下になります。
このオプションを使うとディレクトリ内のファイルやディレクトリも1度に変更できるので覚えましょう!
psコマンド(process status)
psコマンドは process status の略で実行中のプロセスを表示するコマンドです。
プロセスとは実行中のコマンドやプログラム1つ1つを指します。
今回は具体例を省略してコマンドを入力後にどのような画面が表示されるのかについて説明していきます。
書式
$ ps [オプション]
以上のコマンドを入力すると PID, TTY, TIME DMD という行の下文字が書いた列が出てくると思います。
この表示されている列が現在実行中のプログラムやコマンドになります。
次はオプションを付けて実行してみましょう。このオプションは -
を使わない点に注意です。
オプション |
動作 |
aux |
全ユーザのプロセスを詳細情報とともに表示 |
このオプションをつけて実行するとps単体で実行した時と比べて、プロセスを実行しているユーザーやCPU、メモリの使用率等も表示することが出来ます!
また、次が最後のコマンド紹介になるのですがこのpsコマンドで出てきたPIDが重要になるので覚えておきましょう!
killコマンド(kill process)
killコマンドは kill process の略でプロセスやジョブを終了させる際に使用するコマンドです。
このコマンドを使うと先程psコマンドで確認したPIDを使用してプロセスを終了させることができます。
また、今回はジョブという物について詳しく説明することを省きますが、プロセスをまとめた1つの集まりだと思ってください。
書式と使用例を見ていきましょう。
書式
# ジョブを終了させる場合
$ kill [オプション] %<ジョブID>
# プロセスを終了する場合
$ kill [オプション] <プロセスID(PID)>
使用例
$ kill 29
# PID 29 のプロセスを終了する。
実はkillコマンドは TERM
シグナルというものを送信してプロセスを停止しています。
kill 29
と書くのと kill -TERM 29
と書くのは同じ意味です。
この応用で強制的に終了するシグナルというのも用意されています。それが SIGKILL
です。
先程の使用例に当てはめて書くと kill -SIGKILL 29
という風になります。
ただし、このSIGKILLは保存状況等に関わらず強制的に終了するものになるので最後の手段として使い、常用は避けましょう。
以上でLinuxのコマンド説明を終了します!!とても長くなりましたがここまでありがとうございました!!!
おわりに
ここまで読んでいただきありがとうございました!
思ったよりも長くなってしまい自分でも驚いています(1万文字越えらしいです)
この記事を書きながら自分でも知識が補完されていってアウトプットは本当に重要だな~と感じています!
またそう遠くないうちになにかしらのアウトプット記事を書くと思いますのでよろしくお願いします。
改めましてここまで読んでいただきありがとうございました!