3行まとめ
- Linux完全初心者~Linux触りたての人向け
- 新人に読ませたい技術書ベストセレクションに選出
- シェルスクリプト作成の練習問題がついている
感想
Linuxのおすすめ本を教えてというツイートをした際に教えていただいた本。Software Designの新人に読ませたい技術書ベストセレクションで選出されていたらしい。
Linuxセクションで選出されていて、その中でも一番初心者向けという事で手に取りました。
自分はインフラ領域を扱うようになって一年弱になりますが、なぜもっと早く読まなかったんだ……と後悔するぐらい初心者向けにわかりやすく書かれてるんじゃないかと思います。
シェルとかターミナルのような、自分にとっては業務で使う分には困らないけれども何が起きているかよくわかっていない概念の説明から、コマンドの実践的な使いかた、シェルスクリプト、さらにはgitの基本的な触り方まで懇切丁寧に教えてくれます。
Linux関連の書籍は星の数ほどあって対象者や難易度、書いてる内容も千差万別だと思うので有識者に聞いてよかったなと思います。
シェル・ワンライナー160本ノックが難しすぎて心折れてたけど、初心者向けの本からコツコツ鍛えてシェルスクリプトをすらすら書けるようになりたいすね。
引用&コメント
本文から印象に残った箇所の引用&コメントです。表現は適宜変更しています。今回は引用というよりメモに近いです。
- curl -o <ファイル名> <URL>でファイルDL。
- 出力する文字の色や背景を設定するとよい。
- Linuxの思想は「1つのプログラムには、1つのことをうまくやらせる」
- AltキーをMetaに割り当てるとよい(Windows)
- ctrl + l = clear
- ctrl + r = インクリメンタル検索
- /usrはルートディレクトリと似た構造
- /varは変化するデータを置くためのディレクトリ
- ~がユーザーのホームディレクトリに置き換えられる機能をチルダ展開と言う。
- bashではファイル名の一部をパターンで指定でき、これをパス名展開(ワイルドカード展開、ファイル名グロブ)という。*が任意の文字列で、?が任意の一文字を表す。
- Linuxの内部ではディレクトリはファイルの一種として扱われているため、既存のファイル名と同名のディレクトリを作ることはできない。
- catコマンドはconcatenateから来ている。これは、catコマンドで引数に複数のファイルを指定すると連結して1つのファイルとして出力できるから。
- ハードリンクの実体はすべてのハードリンクがなくなったときに削除される
- find <検索開始ディレクトリ> <検索条件> <アクション>
- -nameオプションに対して*や?(メタ文字)を使うときはダブルクォートで囲む。そうしないとパス名展開されて-nameオプションに対して複数のファイルを指定した扱いとなり、エラーが出てしまう。
- メタ文字をコマンドに渡したいときは、どこまでをシェルが展開してどのような文字列でコマンドが実行されるかを意識する必要がある。
- コマンドによってパターンマッチングを行うものと行なわないものがあるらしい。例えばlsはパターンマッチングを行わないが、find -nameの引数はパターンマッチングを行う。そのため、lsでは引用符で囲まず、find -nameでは引用符で囲む必要がある。ちょっとややこしすぎるなこれ……
- vim
- 0を押すと行頭、$を押すと行末
- ggで一行目、shift + g(=G)最後の行
- d + 数字で現在のカーソルから指定した行数分だけ削除する。削除した文字列はpで張り付けることができる。
- y + 数字でコピー(ヤンク)ができる。
- command + 目的のコマンドでエイリアスを無効化できる。エスケープを使うのもあり。
- set/shoptでオプションを設定できる
- PS1に文字列を設定するとシェルのプロンプトが変更できる
- \(バックスラッシュ)wがカレントディレクトリを示す
- ファイルが削除できるかどうかはディレクトリの権限に依存する。ファイル自体の権限は一切関係ない。
- /etc/sudoersを編集するにはvisudoという特別なコマンドを実行する。
- メモリ上で実行状態にあるプログラムのことをプロセスと呼ぶ。Linuxカーネルから見た処理の単位はプロセスとよぶが、シェルから見た処理の単位はジョブと呼ぶ。
- sigkill(9)は強制終了。
- 標準出力をリダイレクトした後に 2>&1とすればエラーも同じ場所に出力できる。
- > で上書き、 >> で追記
- sedは元のファイルは変更しない
- awk ‘パターン { アクション }’ ファイル
- awkで処理中に読み込んでいく一行一行のことをレコードと呼ぶ。
- $0にレコードの全体が、NFにレコード数が、NRにこれまで読み込んだレコード数が代入されている
- 環境変数はシェル変数の一種(シェル変数のほうが上位概念)
- コマンド置換は$()という形式で書かれる。シェルスクリプト実行時に中身がコマンドの標準出力で置き換えられる。
- 必要のないメッセージは出力しないのがLinuxの思想
- {<開始数値>..<終了数値>}で連番のリストを生成する記法をブレース展開という。文字列でも利用可能。
- パッケージとはコンパイル済みのバイナリファイルのこと
ちなみに
実行されているプロセスの1つ1つのことを「インスタンス」と呼ぶらしい。
でもEC2のこともインスタンスっていうよな、これって同じ意味かな?と思ってGPT先生に聞いてみたところ、なんと5つもの用法があるらしいと判明しました。
面白かったので記しておきます。
- オブジェクト指向プログラミングにおけるインスタンス
- クラス(設計図)から生成される具体的なオブジェクト。このインスタンスはクラスに定義された属性と振る舞い(メソッド)を具現化したものです。
- データベースインスタンス:
- データベースシステムにおいて、実行中のデータベースサーバーのプロセス。データベースインスタンスは、データベースのデータや関連するメタデータ、実行環境を管理します。
- クラウドコンピューティングにおけるインスタンス:
- 仮想化されたサーバー。クラウドプロバイダー(例:Amazon Web Services、Google Cloud Platform、Microsoft Azure)が提供する仮想マシンを指します。
- ソフトウェアまたはアプリケーションインスタンス:
- 特定のソフトウェアアプリケーションの実行例。例えば、テキストエディタを二度開くと、二つの異なるインスタンス(実行例)が生じます。
- コンピュータネットワークにおけるインスタンス:
- 特定のプロトコルやサービスの実行例。例えば、特定のプロトコルに基づく通信セッション
「具体的に実行されている1つの実体」というコアとなる意味があるみたいです。