ソフトウェア

Linuxの基礎用語を完全理解するためにエンジニアが作成した「10のミニプロジェクト」とは?

by Adam Harvey

Linuxを利用していると「シェル」や「grep」「プロセス」といった言葉を目にします。エンジニアのCarl Riis氏はそんなLinuxの基礎用語の意味や仕組みをさまざまなウェブサイトから学習し、「10のミニプロジェクト」を作成することでスキルを向上させたとして、その詳細を公開しています。

Getting better at Linux with 10 mini-projects - carltheperson
https://carltheperson.com/posts/10-things-linux

GitHub - carltheperson/10-things-linux: Getting better at Linux with 10 mini-projects.
https://github.com/carltheperson/10-things-linux

◆01:UNIX
LinuxはUNIX系のオペレーティングシステム(OS)であるため、Riis氏はまずUNIXを理解するためにウィキペディアで学習したとのこと。また、UNIX開発者のデニス・リッチーケン・トンプソンによる以下の原論文も読んだそうです。

Untitled Document - unix.pdf
(PDF)https://people.eecs.berkeley.edu/~brewer/cs262/unix.pdf

Riis氏は学習のアウトプットとして、UNIXの哲学に従った「Recat」をC言語で開発しました。Recatは「文字列を逆に表示する」プログラムで、ファイルの内容を表示する「cat」コマンドに基づく実装となっています。

10-things-linux/recat.c at master · carltheperson/10-things-linux · GitHub
https://github.com/carltheperson/10-things-linux/blob/master/1_UNIX__Recat/recat.c


◆02:シェル
Riis氏は次に「Bash」や「zsh」に代表される「シェル」について学習を始めました。Riis氏はシェルとターミナルの区別がついていなかったそうですが、UNIXの論文や以下のウェブサイトが学習の支えになったとのこと。なお、シェルはユーザーとカーネルの橋渡し的な存在で、ターミナルは画面表示専用の端末をエミュレートするソフトウェアを指します。

Unix / Linux - What is Shells? - Tutorialspoint
https://www.tutorialspoint.com/unix/unix-what-is-shell.htm

Learning the shell - Lesson 1: What is the shell?
https://linuxcommand.org/lc3_lts0010.php

Riis氏はシェルの理解のアウトプットとして、「SeaShell」という独自のシェルを開発し、公開しています。

10-things-linux/2_What_is_a_shell__SeaShell at master · carltheperson/10-things-linux · GitHub
https://github.com/carltheperson/10-Things-Linux/tree/master/2_What_is_a_shell__SeaShell


◆03:所有者と権限
Linuxにおいて所有者と権限は非常に重要な概念ですが、Riis氏はセキュリティにあまり関心がなかったため、知識が定着していなかったとのこと。確かにLinuxの権限は「755」や「644」など、直感的に理解しづらい部分があります。Riis氏は以下のウェブサイトを参考に学習を進めました。

Understanding Basic File Permissions and ownership in Linux – The Geek Diary
https://www.thegeekdiary.com/understanding-basic-file-permissions-and-ownership-in-linux/

Riis氏は所有者と権限を直感的に表示できる「Tellaccess」というソフトウェアを開発し、公開しています。

10-things-linux/3_Ownership_and_permissions__Tellaccess at master · carltheperson/10-things-linux · GitHub
https://github.com/carltheperson/10-Things-Linux/tree/master/3_Ownership_and_permissions__Tellaccess


◆04:grep
grepはLinuxでデータを検索する際に用いられる代表的なコマンドです。Riis氏はgrepで検索条件を絞る際に利用する正規表現を学ぶため、Wikipediaやコマンドのマニュアルにあたるmanページを閲覧したとのこと。

Man page of GREP
https://linuxjm.osdn.jp/html/GNU_grep/man1/grep.1.html

Riis氏はgrepに関するプロジェクトとして、ヒントを元にある情報をgrepコマンドで検索する「Grep detective」を公開しています。

10-things-linux/4_Grep__Grep_detective at master · carltheperson/10-things-linux · GitHub
https://github.com/carltheperson/10-Things-Linux/tree/master/4_Grep__Grep_detective


◆05:awksed
Riis氏はStack Overflowでawkとsedを含む狂ったようなワンライナーを見つけても、その内容を深く考えずにコピー&ペーストして使っていたそうです。

Riis氏が「狂った」と表現するような、awkやsedなどを複雑に組み合わせてワンライナーでどんな処理でも実現してしまう人は、「シェル芸人」と呼ばれることもあります。

【シェル芸人への道】シェル芸人の第一歩 - Qiita
https://qiita.com/t_nakayama0714/items/bfe4852e0535858ee662


awkとsedコマンドの学習には、以下のニューヨーク大学の論文が役立ったとRiis氏は語っています。

grep_awk_sed.pdf
(PDF)https://www-users.york.ac.uk/~mijp1/teaching/2nd_year_Comp_Lab/guides/grep_awk_sed.pdf

Riis氏は学習の成果として、ユーザー情報を表示できるawkとsedコマンドのワンライナー「Passwdinfo」を公開しています。

10-things-linux/5_Awk_and_sed__Passwdinfo at master · carltheperson/10-things-linux · GitHub
https://github.com/carltheperson/10-Things-Linux/tree/master/5_Awk_and_sed__Passwdinfo


◆06:find
findコマンドはgrepやawk、sedと同じく、Linuxで多用されるデータ検索コマンドです。Riis氏にとってfindコマンドの学習は簡単だったようで、オプション形式の記憶は以下のウェブサイトが役立ったとのこと。

Use the Unix find command to search for files
https://kb.iu.edu/d/admm

Riis氏は学習の成果として、複雑なディレクトリ構造の奥深くに隠された「財宝」にあたるファイルを見つけ出すゲーム「Find treasure hunt」を公開しています。

10-things-linux/6_Find__Find_treasure_hunt at master · carltheperson/10-things-linux · GitHub
https://github.com/carltheperson/10-Things-Linux/tree/master/6_Find__Find_treasure_hunt

◆07:ファイルシステム
Riis氏は「bin」や「sys」といったLinuxのディレクトリ構造の学習にあたり、構造をわかりやすい図で表していた以下のウェブサイトが参考になったと語っています。

The Linux Filesystem Explained - Linux.com
https://www.linux.com/training-tutorials/linux-filesystem-explained/

なお、Linuxのファイルシステム構造はディストリビューションによって異なりますが、基本的にはファイルシステム階層標準(FHS)を拡張したものとなっています。FHSには「このディレクトリはどんな用途か」「どのディレクトリが必須ディレクトリか」などが規定されています。

ファイルシステムのミニプロジェクトは、ルートフォルダの各ディレクトリを説明するものとなっています。

10-things-linux/7_File_system__Root_tour at master · carltheperson/10-things-linux · GitHub
https://github.com/carltheperson/10-Things-Linux/tree/master/7_File_system__Root_tour


◆08:プロセス
Riis氏はLinuxのプロセスについて一度も学んだことがなかったとのこと。そんなRiis氏でも「わかりやすかった」と紹介している記事は以下。

Processes in Linux/Unix - GeeksforGeeks
https://www.geeksforgeeks.org/processes-in-linuxunix/

学習の成果としてRiis氏が開発したのは、自分やrootに属していないプロセスをすべて表示するコマンド「Stranger danger」です。

10-things-linux/8_Processes__Stranger_danger at master · carltheperson/10-things-linux · GitHub
https://github.com/carltheperson/10-things-linux/tree/master/8_Processes__Stranger_danger


◆09:systemd
Linuxのプロセス起動システムは、以前はSysV Initが主流でしたが、記事作成時点ではsystemdが広く普及しています。systemdの学習には、Wikipediaや以下のページが役に立ったとRiis氏は語っています。

How to Create and Run New Service Units in Systemd Using Shell Script
https://www.tecmint.com/create-new-service-units-in-systemd/

プロジェクトとして、実行ファイルからsystemdのユニットファイルを作成できる「Creatservice」が生まれました。

10-things-linux/9_Systemd_services__Createservice at master · carltheperson/10-things-linux · GitHub
https://github.com/carltheperson/10-Things-Linux/tree/master/9_Systemd_services__Createservice


◆10:Bashスクリプト
Riis氏はBashスクリプトについて、「構文がひどい」「Goの方が優れている」という理由から、長い間避けてきたとのこと。確かにBashスクリプトで「case」文を「esac」で閉じている文を見るといささか古さを感じますが、Riis氏は実際にやってみないとわからないと考え、Bashスクリプトを学ぶことにしました。

学習には以下のチートシートが役に立ったそうです。

Bash scripting cheatsheet
https://devhints.io/bash

プロジェクトとして、Riis氏はLinux のマスコットにちなんだ「Penguin cipher」という暗号プログラムを公開しています。

10-things-linux/10_Bash_scripting__Penguin_cipher at master · carltheperson/10-things-linux · GitHub
https://github.com/carltheperson/10-Things-Linux/tree/master/10_Bash_scripting__Penguin_cipher

この記事のタイトルとURLをコピーする

・関連記事
UNIXの貴重なブート画面を記録したムービー「AT&T UNIX PC 7300 boot up」 - GIGAZINE

SteamユーザーがLinuxに切り替えても不自由なくゲームを楽しめるよう開発された「Proton」でプレイできるタイトル数が1万2000本を突破 - GIGAZINE

PS5のDualSense用Linuxドライバーをソニーが公式に提供 - GIGAZINE

Linux生みの親リーナス・トーバルズが15年ぶりにメインマシンのCPUをIntelからAMDに変更 - GIGAZINE

CentOSに代わる新しいRHELダウンストリーム「Rocky Linux」が正式に発足 - GIGAZINE

in ソフトウェア, Posted by darkhorse_log

You can read the machine translated English article here.