Linuxってなにものか
Linuxとは
OS(基本ソフトウェア)の一種で、コンピュータを動かすための基本ソフトです。
オープンソース型の 無性のOS で、有償だった UNIX を個人で使用する仕様にリーナス=トーバルスが開発した。それが普及のきっかけに。
そして、このLinuxは現在、多くの派生 OS の基礎となっている。ちなみに、Google社の Chrome OSもその代表例である。
Linuxの特徴
CLI(Command Line Interface:コマンド・ライン・インターフェース)と呼ばれ、キーボードを用いて、プロンプト文を打ち込み、結果が画面に出力される方式です。(これがスタンダードですが、入手力の仕方を変更することもできる)
一般的に流通している私たちが手にしているコンピュータはGUI(Graphical User Interface:グラフィカル・ユーザ・インターフェース)で、マウスを動かしファイルを選択したり、そのファイルの中身を画面に出力しています。
つまり、CUIに比べ、人が視覚的にすぐに理解できるかたちでコンピュータを操作します。
補足
CLIは、CUI(Command User Interface:コマンド・ユーザ・インターフェース)と同じ意味です。高校生が学習するのは「CUI」です。
Linuxの用途
主に、サーバーやスーパーコンピュータに使用されることが多い。
【ざっくりと体験】LinuxのコマンドをMacのターミナルで実践
さて、Linuxはキーボードを用いて、コンピュータに出力してほしい結果を命令します。つまり、そのためのコマンドがあるわけです。
すべての紹介は難しいですが、基本コマンドから管理者権限でできるコマンドまで、初心者がよりLinuxを体験しやすくできるコマンドにしぼって紹介します。
準備
Macの「ターミナル」を使用するので、そこまで移動してください。
下のようなアプリです。

ターミナルを起動させると [ユーザ名]@[現在のディレクトリ名]
が初期表示です。
ディレクトリは フォルダー のこと。
コマンド一覧
~ $
をコマンド一覧につけて説明しますが、皆さんのターミナルにはデフォルトで表示されているものなので、記述しなくて大丈夫です。
カレントディレクトリの中にあるファイルやディレクトリを表示
まず、カレントディレクトリは2つに分けられ、カレント(現在作業中の/現在ユーザがいる)とディレクトリ(フォルダーのこと)です。
~ $ ls # カレントディレクトリにあるファイルやディレクトリを表示
~ $ ls -l # ファイルやディレクトリの詳細を表示
~ $ ls -a # ファイルやディレクトリ以外に隠しファイルやディレクトリも表示
~ $ ls -al # ファイルやディレクトリ、隠しファイル・ディレクトリの詳細を表示
隠しファイルやディレクトリは最初に「.」みたいな点が先頭にあります。
※ ls -al
は ls -la
でも同じ出力になります。
現在いる場所(パス)を表示する
実際に、作業をしていて、自分がどこで作業をしているのか分からなくなってしまうケースがあります。そのためのコマンドです。
現在いる場所というのは「カレントディレクトリ」のこと。
パスは、現在いる住所みたいなものだと思ってください。
~ $ pwd # 現在いる場所のパスを表示
カレントディレクトリ以外のディレクトリに移動する
下のサイトを参考にした方も多いと思います。
エラーが表示されたコマンドもあるので、自分なりに情報を更新しました。
~ $ cd ディレクトリ名 # ディレクトリ名に移動(※ファイル名は移動できない)
~ $ cd ~ # ホームディレクトリに移動(ホームディレクトリは、ターミナル起動後の初期表示されたディレクトリ)
~ $ cd .. # 一つ上の階層のファイルに移動する
補足
cd ディレクトリ名
について補足です。
カレントディレクトリに存在しないフォルダに移動しようとするとエラーが起きます。例えばDesktop
上にindex.txt
というファイルがあったとします。
でも、カレントディレクトリは ホームディレクトリで、cd index.txt
をすると「そんなファイルもディレクトリもねぇーよ」と出力されます。
ディレクトリを作成/削除
いよいよ新規のディレクトリを作成してみましょう。
~ $ touch ディレクトリ名 # 中身のないディレクトリを作成
~ $ rmdir ディレクトリ名 # ディレクトリを削除
~ $ rm -r ディレクトリ名 # ディレクトリを削除
~ $ rmdir/rm -r ディレクトリ名1 ディレクトリ名2 ... ディレクトリ名N # 複数のディレクトリを削除(ディレクトリ名の間に空白)
rmdir
はディレクトリ内にファイルなどがあれば、今のところ削除ができないので、ディレクトリ内のファイルも全部削除する場合は、rm -r
で実施する。
削除前に
削除する場合、Macであれば通常「ゴミ箱」のフォルダに移動しますが、rmdir
やrm
を入力したら、「ゴミ箱」を経由せずに完全に消去されます。
ファイルを作成/削除
いよいよ新規のファイルを作成してみましょう。
~ $ touch ファイル名 # 何も記述されていないファイルを作成
~ $ rm ファイル名 # ファイルを削除
~ $ rm ファイル名1 ファイル名2 ... ファイル名N # 複数のファイルを削除(ファイル名の間に空白)
削除前に
削除する場合、Macであれば通常「ゴミ箱」のフォルダに移動しますが、rmdir
やrm
を入力したら、「ゴミ箱」を経由せずに完全に消去されます。
ファイルの中身を表示
2つ方法があるので、うまく使い分けしてみよう。
ちなみに、ディレクトリの中身を見たいときは ls
です。
~ $ cat ファイル名 # ファイルの中身を表示
~ $ cat ファイル名1 ファイル名2 ... ファイル名N # 複数のファイルの中身を表示(ファイル名の間に空白)
~ $ less ファイル名 # ファイルの中身を表示
~ $ less ファイル名1 ファイル名2 ... ファイル名N # 複数のファイルの中身を表示(ファイル名の間に空白)
cat
はテキストの表示のみ。
less
はテキストの表示に加え、スクロールや検索などの操作が可能。
テキストの表示に違いがあり、cat
は前に打ったコマンドが残った状態でテキストが表示されるので、ファイルの中身によっては見づらいです。
一方でless
は、先ほどまで打っていたコマンドやらなんやらが消え、別の画面に飛び、テキストのみの表示にしてくれます。
下側に「:」の表示があるので、その続きは、検索等のコマンドを打ちます。
:j # 下へ移動 (カーソル下、矢印キーでも動く)。
:k # 上へ移動 (カーソル上、矢印キーでも動く)。
:d # 半ページ下へ移動
:u # 半ページ上へ移動
:g # ファイル先頭へ移動
:G # ファイル末尾へ移動
:/検索したいワード # 検索
q
を押し、エンターキーを押せば、元の画面に戻ります。Vimのノーマルモードでも同様のコマンドがありましたね。
ファイルの中身の最後らへんの行(最後の11行目まで)を表示
cat
やless
は便利なのですが、全部を見る必要がなくて、かつファイルの最後のページでどんな編集をしたか確認するために、このtail
コマンドは最適です!
~ $ tail ファイル名 # ファイルの中身の最後らへんの行(最後の11行目まで)を表示
~ $ cat ファイル名1 ファイル名2 ... ファイル名N # 各ファイルの中身の最後らへんの行(最後の11行目まで)を表示(ファイル名の間に空白)
出力結果は今のところ下のようなかたちになると思います。
==> ファイル名1 <==
こんにちは
私はジョンです
生まれはアメリカ
育ちは日本です
==> ファイル名2 <==
<ul>
<li>企業理念</li>
<li>お問い合せ</li>
<li>商品について</li>
<li>会社について</li>
</ul>
</div>
</div>
</footer>
</body>
</hyml>
.
.
.
==> ファイル名N <==
123
456
789
abc
def
hij
Linux.txt
index.html
my_html_css
sample.txt
example_images
ファイルやディレクトリをコピーする(複製する)
こちらもよく使用されます。
~$ cp 既存のファイル名元 新規のファイル名 # コピーする既存のファイル名元を新規のファイル名(違う名前)で複製
~$ cp 既存のファイル名 コピー先(ディレクトリ名) # 既存のファイル名をディレクトリ内にコピーして移動
~$ cp -r 既存のディレクトリ名 新規のディレクトリ名 # 既存のディレクトリ名を新規のディレクトリ名(違う名前)で複製
cp
は場所の指定がなければ基本的に、現在作業しているディレクトリにファイルを複製されます。
コピーする前に
もし、既存のファイル名と同じ名前で新しくファイル名で複製する場合、中身が上書きされるので注意です。
例)
Desktop
上にindex.txt
があった場合、cp sample.txt indedex.txt
とすると、Desktop
上のindex.txt
に保存されていたドキュメントがsample.txt
の中身になります。
ファイルやディレクトリを別のディレクトリに移動/名前を変更
こちらもよく使用されます。こちらは記述により、命令の意味が異なるので注意です。
~$ mv 名前変更前のファイル名/ディレクトリ名 名前変更後のファイル名/ディレクトリ名
~$ mv ファイル名/ディレクトリ名 移動先のディレクトリ名
リンクを作成
リンクを作成するというのは、ファイルやディレクトリに「別名」をつけたり「ショートカットのようなもの」を作るイメージです。
~$ ln 既存のファイル名 リンク先のファイル名 # ハードリンクを作成
~$ ln -s 既存のファイル名 リンク先のファイル名 # シンボリックリンクを作成
このコマンドは、どちらも既存のファイル内で編集したものがリンク先のファイルでも反映されるので非常に便利な機能です。
ハードリンクとシンボリックリンクの違いをまとめます。
ハードリンク | シンボリックリンク | |
---|---|---|
特徴 | 既存のファイルを消去してもリンク先のファイルがあれば、中身は確認できる | 既存のファイルを消去するとリンク切れを起こし中身は確認できない(=リンクが壊れる) |
用途によって、使い分けが大切です。
ファイルやディレクトリを探す
pwd
は自分が現在どこのディレクトリにいるか確認するコマンドでしたが、今度はカントディレクトリから目的のファイルやディレクトリがどこにあるのか探してくれるコマンドを紹介します。
たくさんあるので、目的に応じて。
~$ find 検索したいディレクトリ名 # 特定のディレクトリ内でファイルを検索
~$ find 検索したいディレクトリ名/ファイル名 # 特定のディレクトリ内で特定のファイルを指定して検索
~$ find 検索したいディレクトリ名 -type f/d # ファイルのみ/ディレクトリのみを検索
~$ find ディレクトリ名 -name/-iname 検索したいディレクトリ名/ファイル名 #検索したいディレクトリ名/ファイル名の完全一致/部分的に一致しているものを検索
シェルの機能であるワイルドカードを使用すると、複数の文字に合致するファイル名やディレクトリ名を指定できます。
ワイルドカードの種類
記号 | 意味 | 例 |
---|---|---|
* | 0文字以上の任意の文字列 | *.txt |
? | 任意の1文字 | hello?.txt |
[] | 角カッコ内の任意の文字。ハイフンで範囲を指定できる | [0-9], [a-zA-Z] |
管理者側で使うコマンド集
前提知識としてsudo
コマンドを覚えてください。
コマンドを管理者権限(root 権限)で実行するための仕組みになります。つまり、コマンドによっては管理者でないとコマンドが実行できない場合があります。
Macだと下のような管理者でないとコマンドが実行できないとエラーが発生します。
Cannot open remote host, error: DSOpenDirServiceErr
エラーが出た場合
sudo これから紹介するコマンド
で記述し直してください。
ファイルやディレクトリごとに編集権限を変更する
~$ chmod u/g/o/a +/-/= r/w/x ファイル名/ディレクトリ名
# 権限の変更を行うファイル名/ディレクトリ名に user/group/other/all に対して read/write/execute を +(付与)/-(なくす)/=(置き換え)を行う
まず、コマンドを打ち込む前にls -l
でファイルやディレクトリにどんな権限があるのかをみてみましょう。
-rwxr--r--
やdrwx------
が出てくると思います。
記号 | 意味 |
---|---|
r | 読み取り(read) |
w | 書き込み(write) |
x | 実行(execute) |
記号 | 意味 | |
---|---|---|
左から1文字目まで | - | ファイル |
d | ディレクトリ | |
左から2文字目から4文字目まで | --- r-- rw- r-x rwx |
ユーザができる権限 |
左から5文字目から7文字目まで | --- r-- rw- r-x rwx |
グループができる権限 |
左から7文字目から9文字目まで | --- r-- rw- r-x rwx |
他のユーザができる権限 |
sample.txt
が-rwxr--r--
とする。
-
chmod g-r sample.txt
をすれば、グループには読み取り権限を与えないことができる。 -
chmod o+w sample.txt
をすれば、他のユーザに書き込み権限を付与できます。
編集権を他のユーザやグループに変更
~$ chown 新しいユーザ ファイル名/ディレクトリ名 # 新しいユーザにファイル名の権限を変更
~$ chown 新しいユーザ:新しいグループ ファイル名/ディレクトリ名 # 新しいユーザとグループにファイル名の権限を変更
この新しいユーザやグループは勝手に入れると怒られます。
なので、dscl . list /Users
でMac に存在するすべてのユーザ名を出力。グループ名はdscl . list /Groups
で出力。そこから権限を与えるユーザやグループを見つけ、コマンドを記述。
パスワードを編集者変更でおそらくパスワードを要求されるので、現在ログインしているMacのアカウントで設定しているパスワードを入力してくだい。
注意
パスワードはセキュリティ上、打ち込んでいる文字は表示されません!
現在実行しているプロセスを確認
プロセスとは、コンピュター内で実行中のプログラムのことです。
その状態を見ることができます。
~$ ps # カレントディレクトリで実行中のプロセスの詳細を表示
カレントディレクトリ内で実行されているプロセスが確認できます。
各項目はこのような意味です。
- PID → プロセス番号(操作するときに指定する)
- TTY → どのターミナルで動いているか
- TIME → CPU 使用時間
- CMD → 実行中のコマンド名
他にもオプションがありますので、下のサイトを参考にしてください。
現在実行しているプロセスを終了させる
このコマンドを実行する前に、sleep 20
(20秒間ターミナルを休止)を入れてみましょう。実行中は何も打てないと思います。ctr
+ c
で終了できます。
そこで、sleep 20 &
を打ち込みましょう。そうすると、文字が打てるようになります。つまりは、プロセス実行中でも編集ができます。
[1] 54940
のような表示も出てくると思います。
ここで、今回のキーコマンドです。
~$ kill %プロセスID # 実行中のプロセスIDを終了
~$ kill SIGKILL/-9 # 強制終了(通常のkillコマンドでも反応しない場合に使用。最終手段)
sleep 20 &
を押すと[1] 54940
のような表示が出てくるので、[1]
がプロセスIDなので、kill %1
とすると [1] + terminated sleep 20
と表示されます。プロセスが終了したという意味です。
補足
プロセスが実行しているかps
を使用して確認すると、以下のようになります。
最後に
コマンドは使ううちに身につきます。
しかし、忘れるのも人間のさがです。そういうときは、man コマンド名
コマンドを使い、コマンドがどんなことをしてくれるのか忘れてしまった時に、確認することができます(英語で説明されてます)。