My Day One

毎日東京の隅っこでコードを書いているエンジニアのブログです。

UNIX/Linuxについてまとめてみる

半年で自走できるバックエンドエンジニアになるためにアウトプット用のブログを作りました。 一応、数年コーダーやフロントエンドの開発に携わっていたこともあるので、全くの初心者ではありませんが、壊滅的にネットワークやインフラ、バックエンドのスキルがないため、勉強し始めました。

今回はUNIX/Linuxについてまとめていきます。

UNIXとは?

  • OSの一種である。
  • WindowsUNIXの2つのOSがあるが、大雑把にいうと、違いはGUIがメインかどうか。
  • UNIXのOSのベースはCUI
  • UNIXの中心にはカーネルがある
  • カーネルはCPU、メモリ、ハードウェア割り込みなど、ハードウェアに関することを管理
  • カーネルが中心となり、様々なソフトやドライバ、シェルなどが動いている
  • ちなみにシェルはコマンドインタプリタともいう

ファイルシステム

$ cd hoge

マウント

  • UNIXの場合はファイル構造が全てルートディレクトリから始まる
  • そのため、CD-ROMなどのファイルを指定する場合、ディレクトリを関連づけることでファイル構造を表現する
  • mnt/cdromに対して/develop/romを関連付けるようなイメージ
  • Windowの場合はこの概念がない

mnt/cdromに対して/develop/romを関連付けるようなイメージ、という表現はとてもしっくりきた。今までなんとなくみていたものが繋がった感じ。

シェル

  • キーボードからの入力を受けてそのコマンドを解釈、実行するプログラム
  • ユーザーとカーネルの間に立つ仲介役のようなもの
  • bash,zshなど様々な種類がある
  • どれを使用すべきというのはない
  • 過去に入力したコマンドを記憶するヒストリ機能というものがある
(base) MyMacBookpuro:~ username$ history 5
  542  ssh name@100.00.0.10
  543  ssh-copy-id -i ~/.ssh/id_rsa.pub name@100.00.0.10
  544  ssh-copy-id -i ~/.ssh/id_rsa.pub name@100.00.0.10
  545  ssh-copy-id -i ~/.ssh/id_rsa.pub name@100.00.0.10 -p 3000
  546  history 5
$ !542 

のようにすると一番上に表示されているコマンドを実行できるらしい。こんな機能もあるんだな。

ワイルドカード

  • *(アスタリスク)を使うことで、hogeで始まるファイル名とかを検索できたりする
$ ls hoge*

こうすると

hoge001
hoge002

のようなファイルを検索することができる

パイプ

  • あるコマンドの出力結果を別のコマンドの入力として使う機能 例えば ls コマンドで以下のような結果が出る場合
$ ls

abcd
abbc
acdc

dが入っているものを検索したいとしたら

$ ls | grep d

abcd
acdc

ls コマンドで出力したものを grep コマンドに渡すことで絞り込みを行うことができるようになる。 これは ls の後ろにある |のおかげでそれができるようになる。

シェル変数と環境変数

  • シェル変数は実行中のシェルの中で有効なもので、環境変数は新しいシェルや別のコマンドでも使える
$ HOGE=fuga

のようにするとシェル変数をセットでき、

$ export HOGE=fuga

のようにすると環境変数にセットできる。

なんかいつも何も考えずにexport PATH .... とやっているのもこれだったのだな。なるほど…

ファイルやディレクトリの所有権

  • ファイル、ディレクトリにはアクセス権が存在する
  • 操作するユーザーの立場によって、ファイルやディレクトリの操作を制限することができる

chmod コマンドはそれを設定するためのコマンド

$ chmod [-f] [-R] MODE FILE

のように使う。FILEに指定したファイルやディレクトリへのアクセス権が変更され、変更内容はMODEで受け付けるようになっている MODEは3桁の8進数で表示することができ、一番上の桁から順に、所有者のアクセス権、グループのアクセス権、その他のアクセス権、となっていて

例えばSSH接続する際によく出てくる

$ chmod 600 id_rsa

のような記述は

  • 所有者のアクセス権が6=読み込み権と書き込み権がある
  • グループ、その他はそれぞれ0=権限なし
  • 対象はid_rsa のように指定しているということ。

長くなってしまったので、一旦この辺りで。勉強になった。