rocky-engineer7の技術日記

webエンジニアを目指して奮闘中!!

【初学者向け】Linuxを学んでみた

本記事について

タイトル通りではありますが、「Linuxというワードは聞いたことある程度や、そもそも名前すら聞いたことないよ!(TT)」という方に向けて作成しました。 入門書の入門のような感覚で見ていただけると幸いです。

Linuxとは?

LinuxはOSの一種でコンピュータを動かす基本ソフトウェアのことです。

Linuxの特徴

  • オープンソースであるため、誰でも自由かつ実質無償で利用することができる
  • 質の高い多くのソフトウェアがLinux上で利用できる
  • 世界中でサーバ用途として広く利用されているため、信頼性が高く、また汎用性もバッチリ
  • 操作を自動化するための仕組みが用意されており、サーバの運用が行いやすい
Linuxの技術は長い時をかけて検証されているため大幅な変更をする必要がない

つまり!!一度習得すれば何年も使えるという代物なのです!

Linuxカーネルディストリビューション

カーネル

カーネルアプリケーションソフトウェアとハードウェアの架け橋のような役割
OS(OperatingSystem)の中核となるソフトウェア

種類は一つ

ディストリビューション

Linuxを使ううえで必要ないくつものソフトウェアなど
諸々をまとめてパッケージ化しユーザが使いやすくしたもの

様々な種類があるが今の主流は、Red Hat系・Debian

シェル

シェルは、LinuxCLIを提供するソフトウェア

ユーザとLinuxカーネルの仲介役

CLI:キーボードからコマンド入力し、文字列として結果を出力するインターフェースのこと

ユーザ→シェル→Linuxカーネル

ユーザ←シェル←Linuxカーネル

ユーザがコマンド入力し、シェルが解釈して、Linuxカーネルに伝える
コマンド実行して、シェルを介して、ユーザにコマンド結果を表示する

[Rocky(ユーザー名)@localhost~]$

localhostはホスト名

「$」マークはプロンプト

プロンプトとは、コマンド入力を待っているから入力してねという意味

シェルの仕組み

  1. ユーザがプロンプトにコマンドを打つ
  2. シェルが入力された名前のコマンドを探す
  3. Linuxカーネルが見つかったコマンドを実行
  4. シェルが実行結果を画面に表示する

シェルの種類

sh

  • 最も古いシェル
  • ほぼ全てのUnixで利用できる標準的なシェル
  • 機能は少ない

bash

  • shを基本として機能拡張したシェル
  • Linux環境でデフォルトのログインシェル
  • 学習ならbashがおすすめ

zsh

  • bashの機能を取り込み独自の拡張も追加
  • 機能の豊富なシェル

設計思想として

Linux一つのプログラムには一つのことをうまくやらせる
色々な機能をできるだけ細かく切り分けて作る

ディレクトリとファイルについて

WindowsmacOSでは、アプリや文書、音楽、動画、画像などのデータ(情報)はファイルとして保存されます。そしてこうしたデータを格納したいくつかのファイルをフォルダという入れ物にまとめることで、管理をしやすくしています。

このデータの取り扱い方法はLinuxでも同様です。

WindowsmacOSでフォルダと呼ばれるものを、Linuxではディレクトと呼びます。

Linuxではシステム全体も1つ1つのファイルとして構成されています。
Linuxではあらゆるものがファイルとして管理されているため、Linuxを使いこなすにはファイルの取り扱いについてもしっかりとした知識を持っている必要があります。

Linuxは一つのディレクトリから、入れ子構造が始まります。
イメージとしては、大きな箱に小さな箱を入れていく感じです。

特別なディレクト

ディレクトリを操作するために覚えてほしい特別なディレクトリが4つあります。 ルートディレクトリ・ホームディレクトリ・カレントディレクトリ・親ディレクトリです。 これらはディレクトリの居場所を把握するために必要なディレクトリです。

ルートディレクト

ディレクトリ階層の最上階層のことです。 ファイルやディレクトリ操作では「 /(スラッシュ、ルート)」を使って表します。 ファイルシステムの始まりの場所で、全てのファイルやディレクトリはここから始まります。 「ルート」とも呼ばれ、ルート(root)は「起源、根っこ」を意味します。

ホームディレクト

ユーザーの作業開始位置となるディレクトリです。 Linuxにログイン直後のユーザーは必ずホームディレクトリにいます。 ユーザー毎に異なるホームディレクトリを使うので、ユーザーによってホームディレクトリの場所は異なります。 ファイルやディレクトリ操作では「 ~チルダ)」を使って表します。

カレントディレクト

現在居るディレクトリのことをカレントディレクトリと言います。 ファイルやディレクトリ操作では「 .(ドット)」を使って表します。

ディレクト

カレントディレクトリの直上にあるディレクトリを親ディレクトリと言います。 親ディレクトリは通常、カレントディレクトリを含む階層の一つ上に位置しています。 ファイルやディレクトリ操作では「 ..(ドット2つ)」を使って表します。

パス(Path)

ファイルやディレクトリが、どの位置にあるかを教えてくれる文字列のこと。
ファイルやディレクトリへの道筋を示しています。

そして、ファイルの位置を表した道筋をファイルパス、ディレクトリの位置を表した道筋をディレクトリパスと呼びます。先程紹介したルートディレクトリ、ホームディレクトリ、カレントディレクトリ、親ディレクトリの4つにはそれぞれ「ディレクトリパス」が設定されています。

特別なディレクト ディレクトリパス
ルートディレクト / 」 (スラッシュ)
ホームディレクト ~ 」 (チルダ)
カレントディレクト . 」 (ドット)
ディレクトリ(カレントディレクトリの一つ上にある階層) .. 」 (ドット2つ)

絶対パス相対パス

パスはルートディレクトリ( / )を起点とした絶対パスとカレントディレクトリ( . )を起点とした相対パスの2つの方法で指定することができます。

相対パスでは、1つ上の階層のディレクトリ(親ディレクトリ)は「..」(ドット2つ)というパスを使って指定します。

以下のディレクトリ構造を例に、「Rocky」というディレクトリを
カレントディレクトリとした時の絶対パス相対パスの書き方は下の表のようになります。

/
└── abc
     ├── Users
     │      └── Rocky(ユーザー名)
     │              └── study
     │                     └──linux
     └── Work Documents

Linuxディレクトリ構造

Linuxディレクトリ構造はディレクトリの種類がとても多く、一度に覚えるとパンクしてしまいます。
「ここのディレクトリはこういう役割か〜」ぐらいの認識で大丈夫なので、知らないディレクトリが出てきた時にググってインプットしていくのが一番ベストかなと思います。

ディレクト 役割
/(ルートディレクトリ) ディレクトリの最上位に位置し、すべてのファイルとディレクトリの起点となっています。
/bin(ビン) 基本的なコマンドが含まれるディレクトリです。例えばlsコマンドやcpコマンドなどのコマンドがここにあります。binはbinaryの略です。
/boot(ブート) システムの起動に関する重要なファイルがここにあります。ユーザーはこのディレクトリを操作するようなことは殆どありません。
/dev(デヴ) バイスファイルが格納されているディレクトリです。デバイスファイルとはマウスやモニターといったハードウェア機器をファイル化した表したものです。devはdeviceの略です。
/etc(エトセ) OSなどのシステム全体の設定ファイルが格納されているディレクトリです。設定ファイルがあるのでとても重要なディレクトリです。etcはetceteraの略です。
/home ユーザーのホームディレクトリが格納されているディレクトリです。ホームディレクトリはLinuxにログインした時の最初の場所となるディレクトリのことです。
/lib(リブ、ライブラリ) OSに必要なライブラリファイルが格納されているディレクトリです。ライブラリファイルとはたくさんのプログラムで共有されて使われている特別なファイルで、プログラムが動くために必要な機能やコードが詰まっています。libはlibraryの略です。
/root(ルート) システムの管理者であるrootユーザーのホームディレクトリです。ルートディレクトリ「/」とは別物です。
/sbin(エスビン) システムの管理者であるrootユーザーのみが実行できるコマンドが含まれているディレクトリです。システムの管理や設定に必要なコマンドがここにあります。sbinはsystem binaryの略です。
/usr(ユーザー) 全ユーザーが共通して利用するプログラムやライブラリのデータが格納されているディレクトリです。
/var(バー) ログファイルが格納されているディレクトリです。ログファイルは、コンピューターの動作やアプリケーションの動きを記録するためのファイルです。varはvariableの略です。

Linuxのコマンドとオプション

Linuxディレクトリ構造やパス表記などについて理解したところで、ここからは実際にディレクトリを操作していく方法を学んでいきましょう!

おさらいですが、下の図の[Rocky@localhost~]$の部分はコマンドプロンプトのこと。
つまり、コマンドの入力を待ち受けていることを示す文字列です。
[Rocky@localhost~]$ 以降に打ち込む部分を「コマンド」といいます。下記の図の場合だと「ls」がコマンドにあたります。
コマンド入力後にエンターキーを押下すると結果が出力されます。

#コマンド入力
[Rocky@localhost~]$ ls

#出力結果
ダウンロード デスクトップ
ドキュメント 音楽 画像

ここからは、初歩的かつよく使うコマンドを紹介します!
コマンドプロンプトのユーザ情報は省略して、$の部分だけを残しています。

cd(change directory)

ディレクトリを移動するコマンド
※cdコマンドではオプションを使うことは滅多にありません。

# 書式
cd オプション ディレクトリ

# 例
$ cd /Users/Rocky

cdコマンドを用いた特別なディレクトリへの移動方法

コマンド(+ 特別なディレクトリを指定) 説明
cd ディレクトリを移動するコマンドです。
cd .. 1つ上の階層のディレクトリに移動します。
cd ~ ホームディレクトリ(Linuxにログインした時の最初に位置するディレクトリ)に移動します。
cd / ルートディレクトリに移動します。

pwd(print working directory)

自分が現在いるディレクトリ(カレントディレクトリ)を表示するコマンドです。
シェルでファイルなどを操作する際には、カレントディレクトリが起点となります。
そのため、なにか作業をする前にはまずpwdコマンドを実行して、カレントディレクトリを確認する癖をつけておくとケアレスミスが格段に減るのでオススメです。
※cdコマンド同様、オプションを使うことは滅多にありません。

# 書式
pwd オプション

# 例
pwd
/Users/Rocky
コマンド 説明
pwd 自分が現在いるディレクトリ(カレントディレクトリ)を表示するコマンドです。

ls(list)

ファイルやディレクトリの一覧を表示するコマンドです。

# 書式
ls オプション ファイル

# lsだけの場合はカレントディレクトリのファイルとディレクトリを表示
$ ls   
Desktop Library Pictures

# 複数のディレクトリを指定することもできる
$ ls / /Rocky_Stuby
/:
Desktop Library Pictures
/Rocky_Stuby:
Ruby  JavaScript   React

パス名展開

ファイル名の一部をパターンで指定することで、複数のファイルを一度に指定することができます。
これをパス名展開といいます。

パス名展開で使用するのは2つの記号です。

記号 意味
* 任意の文字列
? 任意の1文字

「 * 」や「 ? 」のような特殊な文字のことを「ワイルドカード」といいます。
ワイルドカードはファイル名やディレクトリ名を検索する時によく利用されますので覚えておいてください。

* (アスタリスク)」は、「任意の文字列を指定する」と言う意味です。

* (アスタリスク)を用いた検索の一例

# 拡張子がtxtのファイルの一覧を表示
$ ls *.txt
test.txt    Ruby_stuby.txt    Vim_practice.txt

? (クエスチョンマーク)で、「任意の1文字を指定する」、と言う意味です。
ファイル名の文字数がわかっている場合は「 ? 」を使って絞り込むことができます。「 ? 」は一個につき一文字を表します。

? (クエスチョンマーク)を用いた検索の一例

#zから始まり、4文字で終わるファイルを表示
$ ls /bin/z???
/bin/zcal   /bin/zamp

オプションとは?

コマンドの動きに追加の機能を指定したり、本来のコマンドの動きとは違った動きを指定するものです。
オプションは、「-」ハイフンの後に文字や記号を付けて記述します。

オプションのいろいろな書き方

# 書き方①コマンドの後ろに半角スペースで区切って指定する
ls -a

# 書き方②オプションは2つ以上指定することができる
ls -a -l

# 書き方③オプションは2つ以上指定する場合、一つにまとめることができる
ls -al

# 書き方④オプションとコマンドの引数を同時に指定できる
ls -al /

# 書き方⑤「--」で始まるロングオプションがある
ls --version
コマンド (+ オプション) 説明
ls -l ファイルの詳細情報(ファイルタイプ・ファイルモード・リンク数・所有者・所有グループ・サイズ・タイムスタンプ・ファイル名ディレクトリ名)を表示します。
ls -a 「.」ドットで始まる隠しファイルも含めた全て(all)のファイルを表示します。
※ 隠しファイルとはファイル名が「.」ドットから始まるファイル。通常lsコマンドだけでは表示されません。
ls -t ファイルやディレクトリの最終更新時間順(time)に表示します。
ls -r 逆の順序(reverse)でファイルやディレクトリを表示します。

mkdir(make directory)

ディレクトリを作成するコマンドです。
ディレクトリ名は日本語だと文字化けしたりする恐れがあるので、英語でファイル名を作成しましょう。

# 書式
mkdir オプション 作成するディレクトリ名

# 例) testディレクトリを作成する
$ mkdir test

必要なディレクトリ階層を一度に作成する

mkdirコマンドに-pオプションを付けると、親ディレクトリも含めて、必要なディレクトリ階層を一度に作成することができます。
例えばtestディレクトリの中にpracticeというディレクトリを作りたい時はこのように書きます。

# photosディレクトリの中にsummerディレクトリを作成
$ mkdir -p test/practice
コマンド (+ オプション) 説明
mkdir ディレクトリを作成するコマンドです。
mkdir -p ディレクトリも含めて、必要なディレクトリ階層を一度に作成します。

rmdir(remove directory)

空のディレクトリを削除するコマンドです。

空のディレクトリとは、中にファイルやディレクトリが含まれていないディレクトリのことを指します。
空ではないディレクトリを削除しようとするとエラーになります。それは中にファイルが残っていることを気付かずにディレクトリを削除してしまうのを防ぐためです。

# 書式
rmdir ディレクトリ名

# 例
$ rmdir test
コマンド 説明
rmdir 空のディレクトリを削除するコマンドです。

cat(concatenate)

ファイルの内容を表示するコマンドです。

# 書式
cat オプション ファイル名

# 例
$ cat /etc/hosts
127.0.0.1 localhost
::1       localhost

catコマンドでは主に以下のオプションが用いられます

-n:行番号を付加して表示します。

# 例
$ cat /etc/hosts
1 127.0.0.1  localhost
2 ::1       localhost
コマンド (+ オプション) 説明
cat ファイルの内容を表示するコマンドです。
cat -n ファイルの内容に行番号を付加して表示します。

less(less - opposite of more)

ファイルの中身をスクロール表示するコマンドです。 たくさんのコードが書かれたファイルの中身を開く時に便利なコマンドです。

例えば上記のコードを実行すると以下のように長いファイルの中身がスクロール画面で表示されます。

# 書式
less オプション ファイル名

# 例
$ less /etc/zshrc


# System-wide profile for interactive zsh(1) shells.

# Setup user specific overrides for this in ~/.zshrc. See zshbuiltins(1)
# and zshoptions(1) for more details.

# Correctly display UTF-8 with combining characters.
if [[ "$(locale LC_CTYPE)" == "UTF-8" ]]; then
    setopt COMBINING_CHARS
fi

# Disable the log builtin, so we don't conflict with /usr/bin/log
disable log

# Save command history
HISTFILE=${ZDOTDIR:-$HOME}/.zsh_history
HISTSIZE=2000
SAVEHIST=1000

# Beep on error
setopt BEEP

# Use keycodes (generated via zkbd) if present, otherwise fallback on
# values from terminfo
.
.
.

lessコマンド時のスクロール画面の操作は以下の通りです

操作方法 内容
スペースキー または F 画面下にスクロール移動します。
b 画面上にスクロール移動します。
j 1行下にスクロール移動します。
k 1行上にスクロール移動します。
q lessコマンド(スクロール画面)を終了します。

lessコマンドでファイルの中身を表示した際に、特定の文字列を検索して確認することもできます

操作方法 内容
/検索したい文字列 下方向に向かって文字列を検索します。
?検索したい文字列 上方向に向かって文字列を検索します。
文字列を検索後にn 検索した文字列の次の検索結果に移動します。
文字列を検索後にN 検索した文字列の前の検索結果に移動します。

headとtail

ファイルの中身の先頭から10行を確認したい場合は head コマンド

ファイルの中身の末尾から末尾から10行を確認したい時は tail コマンド

headコマンド、tailコマンド共に書式やよく用いられるオプションは同じです。

# 書式
head オプション ファイル名
tail オプション ファイル名

# 例:headコマンドでFILEファイルの先頭10行を表示する
head FILE

# 例:tailコマンドでFILEファイルの末尾10行を表示する
tail FILE

headコマンドでは主に以下のオプションが用いられます

オプション 説明
-n 行数:ファイルの先頭から指定した行数を表示します。
-c バイト数:ファイルの先頭から指定したバイト数を表示します。

tailコマンドでは主に以下のオプションが用いられます

オプション 説明
-n 行数:ファイルの末尾から指定した行数を表示します。
-c バイト数:ファイルの末尾から指定したバイト数を表示します。
-f ファイル名:ファイルに新しい内容が追加されるたびに自動的に表示を更新します。

まとめるとこのような表になります。

コマンド (+ オプション) 説明
head ファイルの中身の先頭から10行を表示します。
head -n 行数 ファイルの先頭から指定した行数を表示します。
head -c バイト数 ファイルの先頭から指定したバイト数を表示します。
tail ファイルの中身の末尾から10行を表示します。
tails -n 行数 ファイルの末尾から指定した行数を表示します。
tail -c バイト数 ファイルの末尾から指定したバイト数を表示します。
tail -f ファイルに新しい内容が追加されるたびに自動的に表示を更新します。

touch

空の新しいファイルを作成したり、既存のファイルの更新日時を変更するコマンドです。

# 書式:空の新しいファイルを作成する場合
$ touch 新しいファイル名

# 書式:既存のファイルの更新日時を現在の日時に変更する場合
$ touch 既存のファイル名
コマンド 説明
touch 新しいファイル名 空の新しいファイルを作成します。
touch 既存のファイル名 既存のファイルの更新日時を現在の日時に変更します。

rm(remove)

作成したファイルを削除するコマンドです。
rmコマンドを実行すると、対象のファイルはゴミ箱には行かず、完全に削除されるので注意してください。

# 書式
rm オプション 削除するファイル名

# 例
$ rm test.txt

rmコマンドでは主に以下のオプションが用いられます

オプション 説明
-i 削除の確認を行う。対象のファイルを本当に削除しますか?という形で確認する。これは誤って削除することを防ぐために利用されます。
-f 強制的に削除を実行します。ファイルによっては削除に確認を求められる場合がありますが、このオプションはその確認を無視して強制的に削除を行います。
-r ディレクトリを対象に削除を行います。※ディレクトリの中のファイルやディレクトリも削除されます。
コマンド (+ オプション) 説明
rm 作成したファイルを削除するコマンドです。
rm -i 削除を行う時の確認をします。
rm -f 確認を無視して強制的に削除を実行します。
rm -r ディレクトリを対象に削除を行います。

mv(move)

ファイルの移動、ファイル名の変更を行うコマンドです。

移動元と移動先が「ファイルと存在しないファイル」「ファイルとディレクトリ」「ディレクトリとディレクトリ」
それぞれの組み合わせ次第でmvコマンドの内容が意味合いが変わります。
ディレクトリなのかファイルなのかはシステムが自動的に判断します。

# 書式:ファイルの移動
mv 移動元のファイル 移動先のファイル

# 例
$ mv file1 file2
コマンド 移動元 移動先 rmコマンドの内容
mv ファイル 存在しないファイル 移動元のファイル名が、移動先のファイル名に変更します。
mv ファイル ディレクト 移動元のファイルは、移動先のディレクトリに移動します。
mv ディレクト ディレクト 移動元のディレクトリは、移動先のディレクトリに移動します。
コマンド (+ オプション) 説明
mv ファイルの移動、ファイル名の変更を行うコマンドです。
mv -i 移動や名前の変更を行う時の確認をします。
mv -f 確認を無視して強制的に移動や名前の変更を実行します。

cp(copy)

ファイルをコピーするコマンドです。

先程のmvコマンドと同じようにコピー元とコピー先が「ファイルと存在しないファイル」「ファイルと既存ファイル」「ファイルとディレクトリ」それぞれの組み合わせ次第でcpコマンドの意味合いが変わります。
こちらも、ディレクトリなのかファイルなのかはシステムが自動的に判断します。

# 書式
cp オプション コピー元 コピー先

# 例
$ cp file1 file2
コマンド コピー元 コピー先 cpコマンドの内容
cp ファイル 存在しないファイル コピー元の中身をコピーして、コピー先のファイル名でファイルが作成されます。
cp ファイル 既存ファイル コピー元の中身を、コピー先に上書きします。
cp ファイル ディレクト ディレクトリの下にコピー元のファイルが作成されます。

cpコマンドでは主に以下のオプションが用いられます

オプション 説明
-i ファイルを上書きコピーしてよいのかを確認するために使います。これは誤って上書きコピーすることを防ぐために利用されます。
-r ディレクトリをコピーします。cpコマンドは基本的にファイルをコピーする機能なのでコピー元がディレクトリだとエラーが発生してしまいます。-rオプションを付けると、ディレクトリをコピーすることができるようになります。
コマンド (+ オプション) 説明
cp ファイルをコピーするコマンドです。
cp -i コピーを行う時の確認をします。
cp -r ディレクトリをコピーします。

リンクを張るコマンドです。

「リンクを張る」とは?

Linuxではファイルに別名を付けることができ、別名を付けることを「リンクを張る」と言います。

そして、このリンクには2種類のリンクが存在しています。 それが「ハードリンク」と「シンボリックリンク」です。

ハードリンクとは?

  • 1つのファイルの実体に複数の名前をつける機能です
  • 元のファイルを削除しても消えない
  • 削除が必要な場合は全てのファイル(ハードリンク)を消す必要がある

シンボリックリンクとは?

  • リンク先のパス名が書かれた特殊ファイル
  • リンク先がファイルの実体
  • シンボリックリンクを消しても何も影響はない
    シンボリックリンクはリンク先のパス(道筋)名を記載しただけだから
  • シンボリックリンクを残したままファイルの実体を削除したり、ファイル自体を別の場所に移動させてしまうとファイルの参照はできない
    →ファイルの実体(目的地)が無ければ行くことはできない
    →ファイル自体が別の場所に移動すればパス(道筋)も変わってしまうから

リンクを使用するタイミング

長いパス名を省略したい時に使うことが多いです。

例えば、/home/user/documents/practice/study_1/......のようにディレクトリやファイルが深い層にあると、指定するたびにパス名を入力しなければなりません。たくさんの手間と時間が掛かってしまいます。 そこで、リンクを使用すると設定したディレクトリ名やファイル名だけで簡単にアクセスできます。

※ ハードリンクとシンボリックリンクでは、シンボリックリンクのほうが使用することが多いです。

  • ハードリンクには制限があります。
    • 異なるディスクを跨いで作成できない
    • ディレクトリに対して使えない

その点シンボリックリンクは制限なしのため、非常に使い勝手が良いです。

書式、ハードリンク、シンボリックリンクの詳細は以下のとおりです。

# 書式
ln オプション リンク元ファイル名 リンク名

# 例:ハードリンクを作成
$ ln file1 file2

# 例:シンボリックリンクを作成
$ ln -s file1 file2
コマンド (+ オプション) 説明
ln リンクを張る(ハードリンクを作成する)コマンドです。
ln -i シンボリックリンクを作成します。

find

ファイルがどこにあるのか検索するコマンドです。

# 書式
find 検索開始ディレクトリ 検索条件 アクション

# 例
$ find.- name README.md -print
./wordpress/ /README.md

$ find.- name README.md -print の解説

. :検索開始ディレクトリ(例では、「 . 」カレントディレクトリを指定)
- name README.md :検索条件
-print :検索アクション

フローで表すと
1. カレントディレクトリを起点にして
2. file.txtに該当するファイルを検索し、該当ファイルを見つけたら
3. -print(パスを表示すること)を実行

「 -print 」はfindコマンドで頻出の検索アクションでパス名を表示します。
検索アクションを指定しない場合は「 -print 」が指定された時と同じ動作を行うので省略可能です。

よく使われる検索条件

-name
  • ファイル名を指定してファイルを検索します。
  • ファイル名の大文字,小文字は区別します。
  • ワイルドカード(「 * 」や「 ? 」)を組み合わせて使えます。
  • 「 * 」を使って指定する際は、検索条件を「 ' ' 」(シングルクォーテーション)または「 " " 」(ダブルクォーテーション)で囲います。
記号 意味
* 任意の文字列
? 任意の1文字
# 拡張子が「.html」であるファイルを検索する
$ find . -name "*.html" -print 

#「.html」が含まれる検索結果を出力
./Desktop/stuby.html
./Desktop/Ruby.html
-iname
  • ファイル名を指定してファイルを検索します。
  • ファイル名の大文字小文字は区別しません。
# 例
$find . -iname file.txt

./Desktop/documents/FILE.txt
./Desktop/pictures/File.txt
./Desktop/sample_git/file.txt
-type
# -type f は 通常のファイルを検索
$ find . -type f -print

# -type l は シンボリックリンクを検索
$ find . -type l -print

# -type d は ディレクトリを検索
$ find . -type d -print
-a
  • 複数の検索条件を指定します。
  • 「-a」は省略可能。
# 例
$ find . -type d -a -name images -print

「ファイルの種類がディレクトリ」と「TESTという名前」の両方の条件を満たすディレクトリの検索を意味します。

コマンド 検索条件 説明
find -name 大文字小文字を区別して指定した名前を検索します。
find -iname 大文字小文字を区別せずに指定した名前を検索します。
find -type f 通常のファイルを検索します。
find -type l シンボリックリンクを検索します。
find -type d ディレクトリを検索します。
find 検索条件1 -a 検索条件2 検索条件1 且つ 検索条件2 を満たしたものを検索します。

chmod(change mode)

chmodコマンドはファイルやディレクトリのパーミッションを設定するコマンドです。
と言われても、なんのことやらさっぱりだと思うので大事な説明を先にします。

chmod開設の前に知っておきたいこと

chmodコマンドを理解するために知っておきたい概念が大きく2つあります。

1. ファイルのオーナーとグループ
2. パーミッション

この二つについて説明します。

1. ファイルのオーナーとグループ

ファイルには全てオーナー(所有者)とグループ(所有グループ)が設定されていて権限管理されています。

オーナーとはファイルやディレクトリの所有者を指します。
オーナーはファイルやディレクトリを作成したユーザーであり、そのファイルやディレクトリに対して特定の権限を持ちます。

グループとは複数のユーザーをまとめて管理するための仕組みです。
複数のユーザーが同じグループに所属することで、同じ権限を共有したり、ファイルやディレクトリの共有を行うことができます。

確認方法

ls -l コマンド でファイルのオーナーとグループを確認することができます。 

# ls -lコマンドで表示された「Rocky」はオーナー、「practice」はグループの項目です
$ ls -l ~/Study2023
-rwxr-xr-x  1 Rocky  practice  59  7 19 18:50 /Users/Rocky/Study2023

2. パーミッション

パーミッションとはファイルやディレクト「誰がどのように操作できるか」を定めたものです。
ファイルやディレクトリにはオーナー、グループ、その他のユーザーの3つのユーザーが存在し
それぞれに対して①read(読み取り)、②write(書き込み)、③execute(実行)の3つの権限が設定されています。

具体的には、以下のような形でパーミッションが表現されます。

記号 権限
r 読み取り read
w 書き込み write
x 実行 execute

これらの権限は、オーナー、グループ、その他のユーザーごとに個別に設定されます。
例えば、所有者が r (読み取り)と w (書き込み)の権限を持ち、グループとその他のユーザーは r (読み取り)のみ許可されるといった設定ができます。
また、ディレクトリに対しても同様にパーミッションを設定することができます。

パーミッションの確認方法と読み方

ファイルのオーナーとグループの時と同じように ls -l コマンド でファイルやディレクトリのパーミッションを確認することができます。

#例
$ ls -l ~/Study2023

#出力結果
-rwxr-xr-x  1 Rocky  practice  59  7 19 18:50 /Users/Rocky/Study2023

ls -l コマンド で出力された -rwxr-xr-x に注目してください。
1文字目の「 - (ハイフン)」がある場所はファイルタイプ(ファイルの種類)の項目です。

今回の場合は1文字目が「-」のため、通常のファイルです。

1文字目の「-」の後ろの9文字 rwxr-xr-xパーミッションです。
パーミッションrwx , r-x , r-x と3文字1セットが3つ連なっていて、

を意味しています。

ファイル(ディレクトリ)への権限とその種類

パーミッションに表示された r w x の記号は、先ほど紹介したファイル(ディレクトリ)への権限を意味します。 - は権限がないことを意味します。

権限を許可する対象 read (読み取り) write (書き込み) execute (実行)
オーナー rwx ○ 許可 ○ 許可 ○ 許可
グループに属するユーザー r-x ○ 許可 × 権限なし ○ 許可
その他のユーザー r-x ○ 許可 × 権限なし ○ 許可

オーナーとグループ、そしてパーミッションへの理解が深まったと思うのでchmodコマンドの書き方について見ていきましょう。

chmodの書き方

おさらいですがchmodコマンドはファイルやディレクトリのパーミッションを設定するコマンドと説明しました。ここからは書式を見ていきましょう。

# 書式
chmod [u、g、o、a] [+、-、=] [r、w、x] ファイル名

# 例
$ chmod u+x test.txt
  • 設定対象ユーザー

ugoa」はそれぞれパーミッションを設定する対象を示す記号です。

記号 意味 英語名 説明
u ユーザー User 所有者に対するパーミッションを設定する。
g グループ Group グループに対するパーミッションを設定する。
o その他のユーザー Others その他のユーザーに対するパーミッションを設定する。
a すべてのユーザー All u、g、oすべてのユーザーに対するパーミッションを設定する。
  • 権限の追加・削除・設定

+-=」は権限の追加・削除・設定を示します

記号 意味 説明
+ 権限を追加する 指定したパーミッションを追加する。
- 権限を削除する 指定したパーミッションを削除する。
= 権限を設定する 指定したパーミッションを設定する。
記号 権限
r read(読み取り)
w write(書き込み)
x execute(実行)
  • ugoa は 「誰に対して」
  • +-= は 「どうするのか」
  • rwx は 「何を」

を表します。

  • 誰に対して : u ユーザー
  • どうするのか : + 権限(パーミッション)を追加する
  • 何を : x 実行(を)

以上から「test.txtファイルにおいて、ユーザー(u)に / 実行(e)する権限(パーミッション)を / 追加する(+)」という意味になります。

「 誰に対して / どうするのか / 何の権限を 」を記号で組み合わせて記述します。

chmodコマンドを数字で指定する

8進数は0から7までの数字を使って表現される数の表記方法です。 パーミッションに割り振られた8進数を3桁で記述することで権限の指定を行うことができます。 意味がわかると簡潔に記述することができてとても便利です。

記号 権限 割り振られている数字
r read(読み取り) 4
w write(書き込み) 2
x execute(実行) 1

(読み込み)には「4」、w(書き込み)には「2」、x(実行)には「1」が割り振られています。 上記の合計値を「オーナー」「グループ」「その他のユーザー」の順で入力するとパーミッションを変更することができます。

# 書式
chmod 8進数3桁の表記 ファイル名

# 例
chmod 755 test.txt

例の chmod 755 test.txt では

1.オーナーに read(4),write(2),execute(1) の権限が追加されて、 4 + 2 + 1 = 7
2.グループに read(4),execute(1) の権限が追加されて、 4 + (0) + 1 = 5
3.その他のユーザーに read(4),execute(1)の権限が追加されて、 4 + (0) + 1 = 5

となり、この数字を記号に直すと 

  • オーナーは read と write と execute が付与されて rwx
  • グループは read と execute が付与されて r-x
  • その他のユーザーは read が付与されて r-x

以上から 755 は rwx / r-x / r-x を意味します。

早見表

記号 権限 数字の割り振り 8進数
rwx 読み取り,書き込み,実行 4 + 2 + 1 7
rw- 読み取り,書き込み 4 + 2 6
r-x 読み取り,実行 4 + 1 5
r-- 読み取り 4 4
-wx 書き込み,実行 2 + 1 3
-w- 書き込み 2 2
--x 実行 1 1

chown(chamge owner)

ファイルの所有者や所有グループを変更するコマンドです。

# 書式:ファイルの所有者を変更する
chown オプション ユーザー ファイル

# 例:test.txtファイルの所有者をuserに変更する
chown user test.txt

# 書式:ファイルの所有グループを変更する
chown オプション :グループ ファイル

# 例:practice.txtファイルの所有グループをStudy(グループ)に変更する
chown :Study practice.txt

chownコマンドでは主に以下のオプションが用いられます。 ※小文字rではなく大文字のRです。

-R:指定したディレクトリとそのディレクトリ以下のファイルやディレクトリの所有権も変更します。
コマンド (+ オプション) 説明
chown ファイルの所有者や所有グループを変更するコマンドです。
chown -R 指定したディレクトリとそのディレクトリ以下のファイルやディレクトリの所有権も変更します。

ps(process status)

実行中のプロセスを表示するコマンドです。

プロセスとは

コンピューター上で実行されるプログラムのことです。ここでいうプログラムとは、Webブラウジングスプレッドシートを立ち上げて入力をするなどを指します。

# 書式
ps オプション

# 例
$ ps

#出力結果
  PID TTY           TIME CMD
24545 ttys000    0:00.23 -zsh
25211 ttys002    0:00.05 /usr/local/bin/zsh -il

psコマンドを実行すると、PIDTTYTIMECMDが表示されます。
図で解説するとこのようになります。

項目 内容
PID プロセスID
TTY ターミナル名
TIME プロセスがCPUを使用した時間
CMD 実行したコマンドやプログラム名

psコマンドのauxオプションとは?

  • a はすべてのユーザーのプロセスを表示
  • u は詳細情報を表示
  • x はユーザーのすべてのプロセスを表示

という意味です。

# auxはオプションですが、「-」を付けなくていいです
aux:すべてのユーザーのプロセスを、詳細情報に合わせて表示します。

# 例
ps aux
USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
_windowserver      145   4.3  0.8 410229936  63184   ??  Ss    1 170  574:25.76 /System/Library/
Rocky             24539   2.5  0.3 35518656  27064   ??  S    日11AM   0:20.34 /System/Applicat
  • auxオプションで表示される各項目について
項目 内容
USER プロセスを実行しているユーザー名
PID プロセスID
%CPU プロセスのCPU使用率
%MEN プロセスのメモリ使用率
VSZ プロセスが使用している仮想メモリのサイズ
RSS プロセスが使用している物理的なメモリのサイズ
TT ターミナル名
STAT プロセスの状態
STARTED プロセスを開始した時刻
TIME CPUの使用時間
COMMAND 実行中のコマンド
コマンド (+ オプション) 説明
ps 実行中のプロセスを表示するコマンドです。
ps aux すべてのユーザーのプロセスを、詳細情報に合わせて表示します。

kill

プロセスに対してシグナルを送るためのコマンドです。 シグナルを送られたプロセスは終了します。

例えば、突然プロセスが動かなくなってしまった場合、そのプロセスに対してシグナルを送ると、強制的にプロセスを終了させることができます。

シグナルとは

実行中のプロセスを制御する信号のこと。シグナルには、シグナル番号とシグナル名が割り振られています。
kill -l コマンドでシグナルの種類を確認することができます。

代表的なシグナル
シグナル 番号 意味
SIGHUP 1 端末エミュレーターなどの終了
SIGNIT 2 Ctrl+cキーを押したときの強制終了
SIGKILL 9 強制終了
SIGALRM 14 設定した時刻に送られるタイマーシグナル
SIGTERM 15 終了(killコマンドのデフォルト)
SIGCONT 18 実行再開
SIGTSTP 20 Ctrl+Zキーを押したときの一時停止
# 書式
kill PID   または   kill -シグナル番号 PID   または   kill -シグナル名 PID
# この2つのコマンドは同じ
$ kill 8795
$ kill -TERM 8795

このように kill PID の入力でプロセスを終了させることができます。

コマンド 説明
kill プロセスに対してシグナルを送り、プロセスを終了させるコマンドです。
kill PID 指定したプロセスIDにシグナルを送り、プロセスを終了させます。
kill -シグナル番号 PID 指定したプロセスIDにをシグナル番号に該当するシグナルを送り、プロセスを終了させます。
kill -シグナル名 PID 指定したプロセスIDにをシグナル名に該当するシグナルを送り、プロセスを終了させます。

おわりに

Linuxの入門の入門ということで、実際に学んで見たことを記事にしてみました。 コマンドだけでもなかなかボリューミーなので、焦らずターミナルを使って一つ一つコマンドを打って実行結果を確かめてみるのが一番おすすめです! YoutubeやUdemyなどの動画教材を見ながら手を動かしていくとなお知識として定着しやすいと思うで、ぜひやってみてください! 大変長くなりましたが、お読みいただきありがとうございました。