どうもです。タドスケです。
こちらの記事に書いていた『Linuxの新しい教科書』を読み終えたので、学んだことを簡単にまとめておきます。
Linuxの基本
Linuxとディストリビューション
Linux自体がオープンソース。
多くのディストリビューションがあり、大きくRedhat系とDebian系に分かれる。
それぞれ使えるコマンドが微妙に違ったりする。
全てがファイル
ディレクトリ、コマンド、デバイスもファイルとして扱われる。
コマンドで指示されたことは実行されるべき
コピー時の上書き、削除などは追加オプション(-iなど)を付けない限りは確認しない。
root権限で削除を実行する時は特に慎重に。最悪起動できなくなる恐れもある。
一つのコマンドに一つの機能
複雑な機能はシンプルなコマンドの組み合わせて実現する。
最小権限
ユーザーには必要な権限だけを与える。
コマンドラインの基本操作
ファイル/ディレクトリ操作
cat:コマンドラインに直接出力
長文には向かない。リダイレクトを使ってファイルに出力するケースで利用される。
less:ビュワー形式で表示
行送り、ページ送り、検索などの操作ができるので、長文向き。
touch:ファイル作成
本来は更新日時を最新にするコマンドだが、存在しないファイルを指定すると新規作成されるので、むしろその使い方をされる方が多い。
mkdir:ディレクトリ作成 -p:間のディレクトリを自動で作る
cp:コピー -r:ディレクトリの中身を全部コピー
mv:移動
移動先を同一ディレクトリにすればリネームになる。
rm:削除 -r:ディレクトリの中身ごと削除
ln:リンクを張る -s:シンボリックリンク
デフォルト挙動はハードリンクだが、シンボリックの方が利用頻度は高い。
標準入出力とパイプライン
多くのコマンドは標準入力を受け取り、加工して標準出力に結果を出す。
パイプ
「|」を使って、前のコマンドの出力を次のコマンドの入力にできる。
リダイレクト
「>」で標準出力をファイルなどに出力できる。
ログファイルを作成したい時によく使う。
パーミッション(権限)
- 閲覧
- 編集
- 実行
オーナー、グループ、他ユーザー単位で設定可能。
新たにシェルスクリプトを作成した際には chmod で実行権限を付与する必要がある。
プロセスとジョブ
ps:一覧表示
kill:終了
テキストエディタ
vim:テキストエディタを起動
Vimではコマンドモードと編集モードを行き来する。
コマンドモード時はHJKLでカーソル移動ができ、使いこなすとホームポジションから手を離さずに操作できるようになる。
リモートログイン時などにVimでサクッと操作できると便利。
テキスト処理
wc:行数、単語数、バイト数を数える
sort:行を並び替える -n:数字順ソート -k:ソートに使う列
uniq:重複行を削除 -c:重複数を数える
シェルスクリプト
.sh でスクリプトファイルを作り、実行権限を付与する。
初期コマンドの一部もシェルスクリプトで作られている。
パッケージ管理
Red Hat系はyum、Debian系はapt。
パッケージ自体のバージョンもあるので、
apt update
という感じで更新してからじゃないとinstall時にエラーが出る恐れがある。
パッケージ管理コマンドは管理者権限が必要。(実際には sudo apt~ と実行する)
学んだこと
普段Windowsを使っている僕にとって、特に新鮮だったのは以下の項目です。
ディストリビューションによる違い
シェルにshやbashがあったり、インストールコマンドにyumやapt-getがあったりして、なぜ似たようなコマンドがあるのかをイマイチ理解できていなかったのですが、ディストリビューションによる違いだとわかりました。
今後Qiitaとかで特に断りなくyumコマンドが出てきても、今使っているのがUbuntuならapt-getに置き換えれば問題なく進められそうです。
CtrlとEscの位置
大学時代にLinuxの授業を受けていた際、CapsLock⇔Ctrl、半角⇔ESCを入れ替える設定が推奨されていたのですが、いまいち理由が納得できていませんでした。
しかし、VimエディタではCtrl/Escキーを多用するので、これらのキーを入れ替えた方がホームポジションから手を離さずに操作でき、作業効率が上がることを実感できました。
全てがファイル
全てをファイルとして扱うことで、デバイス特有の仕様などを意識することなく一括で操作できるなどのメリットもありそうです。
Windowsにもある機能の理解が深まった
シンボリックリンクなどはWindowsにもありますが、何となく使っているだけでした。
この本の解説をじっくり読むことで、「そういう仕組みだったのか」と改めて理解することができたように思います。
まとめ
Linuxに関する「何となくしかわからない」という感じがだいぶ薄れた気がします。
今後システム管理やdockerなどの本を読む上でも理解しやすくなりそうです。
コメント