
初心者Linuxの勉強はこれでいいじゃん
初心者Linux用の記事を書いていたのですが、良いドキュメントを見つけました。これを一通り読んでハンズオンすれば大体のことはできそうな感じで、豆知識というか経緯もよくわかるという優れもの。ただ今読まなくてもいい部分があるので拾い読みで。基本的に第一部を読めばいいかなと思いました。
ただWindowsPCが必要なのとUbuntuしか言及されていないのは玉に瑕。とはいえ多くのユーザーが持っているWindowsマシンと一般的なUbuntuというディストリビューションは一般性があると思うので、多くの人がリーチする環境なのではないかと思います。この際、Macは無視して説明していきましょうかねw。
普通にPDFで公開されているので落としてきて見れば普通に読めます。内容的にはWSL2を使ってUbuntuを使ってみようという話なのですが、もちろん導入の方法もあるので誰がやってもできます。ただバージョンが古いからか、スクショで見られるような画面が見られない部分もあったりするので、そこは読み替えというか臨機応変にしましょうねというところで。というか、最近のソフトは見た目をガチャガチャ変えすぎなんだよな。
上にあるリンクから文章を読んでもらえばそれでOKなんですけど、それでは自分の意見が言えないので、ここから下は蛇足です。蛇に足がついていればそれは面白いのかもしれませんが、そこまで面白くなっているのかどうかはわかりませんw。
目次
目次を見ていきましょう。抽出するのめんどいな…。ええい、Macのプレビューは文字選択もまともにできんのか!w
第 1 部 基礎知識編 1
第 1 章 WSL をインストールしよう 2
第 2 章 Windows Terminal を使いこなそう 9
第 3 章 Ubuntu のパッケージ管理を学ぼう 18
第 4 章 ユニバーサルパッケージシステム「Snap」を使ってみよう 30
第 5 章 Windows 上で Linux の GUI アプリを動かしてみよう 37
第 6 章 Linux の基礎コマンド群をマスターしよう 42
第 7 章 シェルをカスタマイズして、コマンドラインを便利に使おう 59
第 8 章 ターミナルマルチプレクサで、コマンドラインをさらに快適にしよう 66
第 10 章 標準入力と標準出力について知ろう 90
第 11 章 CLI でもテキストエディタを使おう 95
第 12 章 ワンライナーで作業を劇的に効率化しよう 107
第 13 章 コマンドを並列実行して効率をアップしよう 113
第 2 部 開発環境構築編 119
第 14 章 設定ファイルを管理しよう 120
第 15 章 バージョンマネージャーを使いこなそう 126
第 16 章 プロジェクト単位で環境変数を管理しよう 133
第 17 章 Windows でも Docker を動かそう 138
第 18 章 Kubernetes クラスターを構築してみよう 145
第 3 部 WSL 応用編 152
第 19 章 WSL のカスタムディストリビューションを作ってみよう 153
第 20 章 WSL 環境の初期セットアップを自動化してみよう 162
第 21 章 WSL 環境をまるごとバックアップしよう 169
第 22 章 Windows ファイルシステムへのアクセスを高速化しよう 179
第 23 章 WSL 上のサーバーを公開してみよう 186
第 24 章 WSL におけるデータレスキュー方法を知ろう 194
こんな感じになっていますが、自分もWSL独自のところは知らないところも多いですね。あとUbuntuも最近まともに使っていないので、新しめのところは全然知らないこともちらほら。ページ数が残っていますが消すのが面倒なのでそのままです。
内容的に通読をお勧めしますが、分からないところや使わなそうなところは飛ばしていいと思います。前に出てきた知識が必要なところは都度戻るしかないですが。目次を見ること自体は、本を読むことにおいて蔑ろにされやすいですが、技術書や啓発本に関しては読む前に心構えとして目を通しておいた方がいいと思います。
実際読んでみて
今、『第 4 章 ユニバーサルパッケージシステム「Snap」を使ってみよう』を読んでいますが、詳しく書かれていてちょっとしんどいですね。通読した方がいいと言いましたが、これを全部読んで頭に入れるのは不可能かもしれなません。やっぱり必要なところだけでいいです。
ただWSL2でLinuxを学ぼうというコンセプトは大事で、VirtualBoxとかVMwareで仮装環境でサーバを作るとしても、VirtualBox自体の知識も必要ですし、Ubuntuを色々パラメーターを決めて立ち上げるまでが大変なので、お手軽にできるこの方法は優れていると感じます。OSインストールから考えるのは色々と学ぶことが多いと思いますが、時間も労力もかかることなので実際に何かを動作させることを考えるとショートカットできた方がいいです。現在ではタイパとかやたら言いますしね。
ちなみにsnapの話ですが、aptがあればいらないなと思いました。脆弱性の対応も遅そうな予感がするし、そもそもあまり信用ならないパッケージも存在するようだし、メリットはあまりないかなと思いました。そんなこと言いながら便利だったら使っているかもしれないけれども。
「第 5 章 Windows 上で Linux の GUI アプリを動かしてみよう」ですが、仕事で使うと決まっているなら飛ばしていいです。なぜなら仕事でGUIのあるLinuxはまず使わないからです。例外的にGUI環境でJavaの開発環境としてEclipseを使ったことがありますが、デプロイ環境は皆GUIなんて重くなるだけの飾りなどつけないです。GUIでできることは大抵CLIでできますが、逆はできない可能性があるのでCLIに慣れておいた方がいいです。
第 6 章 Linux の基礎コマンド群をマスターしよう」ではCoreutilsの話が出てきていて、これらのコマンドがあらまし使えるようになったら「ワタシハリナックスチョットデキル」って言ってもいいと思います。実際はめちゃめちゃできるという意味らしいですが…。最近はCoreutilsもRustで書き換えられているのかぁ。
RustではLinuxカーネルだけじゃなくて、ユーザーランドも結構書き換えられているなぁ。C言語は入門時にも枯れた環境にも使われますが、その扱い方が人によって差があるので脆弱性は出やすいのかもしれません。
cdコマンドなどのシェル組み込みコマンドについてはやはり書いていないな。まぁお題がCoreutilsだしな。シェルの設定周りも多いから避けたんだろう。
これらも全部覚えている必要はなく、調べてコマンドの動作が分かる程度であればいいと思います。あんまり頻繁に使わないコマンドもあるし、頻繁に使うものはパラメータといっしょにまとめて覚えましょう。結局、使う時になったらわからないものは調べるしかないですね。なんだかんだでこの章が一番大事かもしれない。細かく知る必要はないですが、ざっくり何があって何ができるのだけは知っておいた方が良いです。
「第 7 章 シェルをカスタマイズして、コマンドラインを便利に使おう」ですが、会社で多量の台数を扱うとなると、全部に設定しないといけないのか、ということがあると思うので、デフォルト動作に慣れていたほうがいいような気がします。WSLなどで家で固定的に日常的に使うならいいですが、中途半端に慣れてしまうと、あれっ?これできないなというストレスが来ると思います。
そもそもLinuxをカスタマイズして使うべきか?なんですけど、前にviとEmacsについて言った時に、とりあえず素のvimを使えるようにしましょうと言った気がします。カスタマイズをかけるのは技術的にも楽しいことではあるのだけれども、わりと最近のWindowsのようにOS入れっぱなしということもディストリビューションの選択肢が多いLinuxでは少ないような気がする(?)ので、移行の意味でも手間がかかる以上にメリットが有るのか見極めることは必要だと思います。
手元のデスクトップマシンだとUSBメモリに入れるだけでいいですけど、SSH接続だとwinscpで引っ張ってこないといけないなとか考えるとしんどい気はします。他のマシンに直接入れるのもネットワークポリシーでscpというかssh通さないとなとかも考えるとなるとしんどいです。昔はセキュリティうんぬんで通されないことは少なかったけど、今はいろんなプロトコルとかポート番号を基本通さない運用をしているところがほとんどだと思います。
ただ多人数で使う時に、使い方を共通化したり強制したりするのに使うのはよくあることだと思うので、サーバがたくさんある環境でも知っていて損はないかもしれないです。
それとそもそもWSLなんだから完全に個人のLinuxなのでどんなにカスタマイズかけたところで誰にも迷惑をかけないんじゃないかとは思います。今まで言ってきたのは、あくまで仕事でみんなの使うサーバを使う前提でどうするかであって、WSLで使う分には何も遠慮することはないでしょう。ただ、自分の環境がそのまま色々な所で使えると思いなさんなということだけは言っておきたいです。自分のところだけの環境でなれてしまうと凄くストレスが溜まります(個人的には…)。
「第 8 章 ターミナルマルチプレクサで、コマンドラインをさらに快適にしよう」はやったほうがいいと思います。自分は一時期UbuntuかDebianにデフォルトで入っていたtmuxを使っていましたが、RHELを仕事で使うようになってからはそれ系のソフトは使っていないです(そもそもデフォルトで入っていないはず)。最初GNU screenを使っていたのですが、デフォルトで縦割りができなくて、枯れていたtmuxを使うようになりました。
やれることとしてはコマンドラインのウインドウを分割できるというものです。そんなんSSHを複数つなげばいいですがな、と思っている人もいるかも知れないですが、それは使い方としてちょっと悪手かなと思います。
普段はそんなに気にする必要はないかもしれませんが、大人数が使うときなどリソースの消費とかそもそも接続数を増やすメリットがないとか気にする人は気にするかもしれません。そもそも一つのポートにたくさんぶら下がるのは気持ち悪いというのもあります。
WindowsのソフトRLoginなどで画面分割できるかもですけど、結局あれって複数の接続を持っていたはずで、端末ウインドウを複数接続して開くのと変わらないんですよね、たぶん。
「第 9 章 さらに現代的な Linux コマンドを活用しよう」は新しめのコマンドがあります。そのほとんどが既存コマンドの改良となっていて、今までのコマンドは見にくいけど、あったら便利だなのレベルなので基礎から学ぶ人にとってはそれに慣れすぎると後戻りをするのがしんどくなりそうです。ほとんどがデフォルトで入っていないみたいで、aptで入れないといけないのも心理的ハードルが高そうです。
昔、Linux初心者の時にディレクトリ操作がしんどくてmidnight commanderを入れた時がありましたが、結局OSインストールするたびに入れないといけないので面倒で入れなくなりました。結局、デフォルトで入っているものを使うようになるんですよね。
強力な機能があれば入れたくもなるし、それでしかできない機能があれば尚更のことです。ただそういうツールは入れる素の環境によっては少なくて、汎用アプリでデフォルトで取り入れられるのはなかなかないと思います。試すのは面白いし良いと思いますが、どこでもできる方法をまずは学んでからの方が困らないです。
「第 10 章 標準入力と標準出力について知ろう」は知らない人は副作用を含めて知っておいた方がいいです。たぶん、色々なコマンドを使うときにちょくちょく出てくるから何となくわかっている人も多いと思います。UNIX系の基本なのでLinuxでも当然常識として出てきます。
「第 11 章 CLI でもテキストエディタを使おう」はUbuntuではnanoが標準らしいことが書いてあります。まぁ今更viもないだろうとは思うけど、viに慣れると逆にnanoの方が使いにくかったりします。あと相当昔のviのバージョンでなければカーソルキーで動かないことはないと思います。vimではまず動くのですが、RHELではvimを入れなくてもviでカーソルキーが使えた気がします。あれはvimなのかもしれないけど、文字に色付けしてくれないバージョンのものでもカーソルキーは使えます。そもそもviとvimのコマンドは別だったし。
EmacsはELispを使うまで考えている人は絶対入れなきゃならないですね。逆にテキストエディタに多機能を求めていない人はEmacsは学習コストが高すぎるのでお勧めしません。少なくともたくさんのサーバを扱う仕事においてあったとしてもviでサクッと終わらせたいところです。
mseditについての言及もありますが、WSLだから書いてあるだけで使っている人は少数なんじゃないかと思います。それだったらVSCodeをSSHプラグインかまして使うの方が一般的なのかもしれません。
そこにも書いてあることですが、困ったことにコンテナ環境だとviすら入っていないことも普通で、設定ファイルを変更するのにどないすんねんとなるわけですが、edやsedやcatを使えとあるんですが、コンテナ環境を軽くするだけのためにそこまで削らんでもと思うんですけどね。そもそもコンテナの概念ってのがあやふやな感じではある気がする(自分だけ?)。そもそもchrootからの発展だとは思うのだけれど、普通にサーバとして使うとしたら使いにくかったりはします。
「第 12 章 ワンライナーで作業を劇的に効率化しよう」でのワンライナーですけど、シェル芸とも言われていた気がするんですが、シェルスクリプトとしてファイルに書き出して動作させるようなものも一行でやってしまおうという感じのものです。無理にワンラインで書く必要はないので大概にしとけやとは思うのですが、技術屋さんはそういう簡潔さに弱いところはあります。
WSLではWindowsのExeも蹴れるらしいけど、WSLを専用で使っていくつもりだったらやったらどうですかという感じ。決してLinux単体の環境ではできないので、相当メリットがない限りは普通はやらないでしょう。
「第 13 章 コマンドを並列実行して効率をアップしよう」ではGNU Parallelを使って多コア環境で並列処理しましょうというもので、シングルスレッドで動くツールでも並行処理ができそうです。潤沢にCPUのリソースがあればいいですが、CPUを分ける仮想環境では暴走して100%に張り付いたら嫌だなと思ったりはします。ただ例にあるように複数サーバに分散させる時などは良いと思います。
といちいち首を突っ込んできましたがキリがないのでこれくらいにしておきます。「第 2 部 開発環境構築編」についてはビギナーの域を超えていると思いました。なので詳しく言及しません。WSLでここまでできまっせという事を示しておきたかったのかもしれません。
第3部についても同様で、WSL自体の開発者向けの話になっています。WSLの丸バックアップは開発環境を配るときなど使い所があるかもしれないですが、Linuxを使うという初心者にとっては直接触れることが少なそうなところですね。VirtualBoxではOVAとかがありましたが、そういうノリで使えるのかもしれません。
まとめ
基本的に第一部だけでいいと思いますけど、必要がないと思ったら飛ばしつつ読んだらいいと思います。Ubuntuの良い入門書ではあるとは思いますが、基本的にWSLの入門書ではあるので、初心者がそこまでやらんでもという傾向はあります。
自分はDockerとかkubernetesに興味があるからちょっとやってみようかなと思いました。Dockerはお手軽に環境を用意できるけれども、正直初心者向けではないなといつも思っていました。dockerは有料化されてしまったので、podmanなのかもしれないですが、どちらにせよ動くまでと変更をかけるときが面倒なのは変わっていないかもしれません。