『新しいLinuxの教科書』メモ
Chapter01 Linuxを使ってみよう
ディストリビューション
- 本来Linuxとは、コンピュータのハードウェア制御を行うソフトウェアである「Linuxカーネル」のみを指す狭義の言葉
- Linuxカーネルに加えて基本的なコマンド群やアプリーケーションなど含めてそのまま利用できるようパッケージングしたものが広義のLinux
- 広義のLinux = ディストリビューションと考えてOK
系統 | ディストリビューション |
---|---|
Red Hat系 | red Hat Enterprise Linux, CentOS Stream, Fedora |
Debian系 | Debian GNU/Linux, Ubuntu |
Chapter02 シェルって何だろう?
シェルの役割
- Linuxカーネルのインターフェースになっているソフトウェア
プロンプト記号
$:一般ユーザー
#:スーパーユーザー(root)
シェルの種類
- sh
- 最も古くから存在するシェル
- シェルスクリプトを書く時はshを利用するのが一般的
- 機能が少なく対話型で利用するのは不便
- csh
- 後継のtcshがある為利用される事は稀
- bash
- shを基本として機能拡張したシェル。shと後方互換性を持つ
- 対話型・シェルスクリプトどちらにも向いている
- tcsh
- 対話型操作で便利な機能が多い
- シェルスクリプトには向いていない
- zsh
- bash, tcshなど他のシェルの機能を取り込み、独自拡張加えた新しいシェル
- macOSのログインシェル
Chapter03 シェルの便利な機能
文字の削除
削除コマンド一覧
コマンド | 内容 |
---|---|
Ctrl + h | カーソル位置の後方1文字を削除 |
Ctrl + d, または Delete | カーソル位置の1文字を 削除 |
Ctrl + w | 後方にスペース区切りで1単語ぶんを削除 |
画面の表示を消去
コマンド | 内容 |
---|---|
Ctrl + l or clearコマンド | 画面を消去する |
※「ctrl + l」では画面スクロールで過去の表示を見れるが、clearの場合は見れなくなる |
コマンド履歴検索
過去に利用したコマンドを再度実行したい時に利用できる
コマンド | 内容 |
---|---|
Ctrl + p, または↑キー | 1つ前のコマンド履歴に移動 |
Ctrl + n, または↓キー | 次のコマンド履歴に移動 |
Ctrl + r | 履歴を遡ってインクリメンタル検索 |
インクリメンタルサーチ時は以下のようになるの文字を入力すると都度検索が実施される
(reverse-i-search)`':
インクリメンタル検索時の操作
コマンド | 内容 |
---|---|
Ctrl + r | 1つ前の検索結果に移動 |
Enterキー | 現在の検索結果を実行 |
Escキー | 現在の検索結果を表示したまま、コマンドラインに戻る |
※Escキーは検索したコマンドラインを修正して実行したい場合に利用 |
Chapter04 ファイルとディレクトリ
各ディレクトリの役割
Linuxのディレクトリ構成はFHSという標準化仕様に基づいている
主要なディレクトリの役割
ディレクトリ名 | 役割 |
---|---|
/bin | コマンド(cat,ps,mv等)の実行ファイルが格納されている |
/dev | デバイスファイルが格納されている |
/etc | 設定ファイルを置くディレクトリ Linuxで動作する様々なアプリケーションの設定には、設定ファイルが/etc配下に置かれる |
/home | ホームディレクトリが配置されるディレクトリ ホームディレクトリとは、Linuxのユーザー毎に割り当てられる個人用のディレクトリでユーザー名がディレクトリ名になっている |
/sbin | 管理ユーザー向けのコマンドの実行ファイルが格納されている |
/tmp | 一時的なファイルを置く為のディレクトリ アプリケーション実行中に、作成途中の結果などを一時的にファイルとして保存する場合などに利用される |
/usr | 各種アプリケーションとそれに付随するファイルを置く為のディレクトリ |
/var | 変化する(variable)なデータを置く為のディレクトリ<br>アプリケーションを動作する上で作成されたデータやログなどが格納される /varは多くのファイルが書き込まれる為、容量逼迫する事が多くシステム管理上では注意が必要なディレクトリである |
lsコマンド
パス名を指定して、一致したものだけ展開する
例)拡張子が.htmlのファイル一覧を表示したい
$ ls *.html // *をつける事で任意の文字列に一致するものを表示する
lsコマンドのオブション
オプション名 | 役割 |
---|---|
-l | ファイル属性などの詳細情報を同時に表示する ファイルモードなどを確認する為に利用される |
-a | 隠しファイルも含めた全てのファイルを表示する |
-F | ファイル名の後ろにファイルの種類を表す記号が追加される 記号なし:通常ファイル /:ディレクトリ *:実行ファイル @:シンボリックリンク |
Chapter05 ファイル操作の基本
catコマンド
行番号を表示する
-nオプションをつける事で行番号を表示することできる。プログラムのソースコードやリスト表示する時に利用すると便利
lessコマンド
ファイル内容を1画面毎に表示し、上下にスクロールすることができる
スクロール処理
コマンド | 内容 |
---|---|
Ctrl + v, スペース | 1画面下にスクロール |
b, Meta + v | 1画面上にスクロール |
Chapter06 探す、調べる
findコマンド
ディレクトリツリーからファイルを探すコマンド。
# 基本的な使い方
find <検索開始ディレクトリ> <検索条件> <アクション>
find . -name file-1.txt -print
find . -name '*.txt' -print
引数についての補足
- 検索開始ディレクトリを指定しない場合はカレントディレクトリが対象となる
- アクションを指定しない場合は -print が指定されたとみなす
- -name, -inameはファイル名を指定してファイルを探す。-nameは大文字小文字を区別するが-inameは区別しない
- -typeはファイルの種類で検索する。-type fは通常ファイル、-type dはディレクトリ
Chapter07 テキストエディタ
ファイルの種別
- テキストファイル
- テキスト(文字列)が書かれたファイルのこと。メモやプログラムのソースコード、HTMLファイルなどはテキストファイルに分類される
- バイナリファイル
- 画像ファイルや音声ファイル、Linuxコマンドの実行ファイルなど、人が直接読むことを考慮していないもの
Chapter08 bashの設定
シェル変数
bash内部で使用される変数で、数値や文字列を保存し、様々な値を設定することができる
設定した変数は「$<変数名〉」で参照できる
<変数名>=<値>
$ var1='test variable'
// ※ = の左右にスペースをつけてはいけない
$ echo $var1
環境変数
- 外部コマンド
- 実行ファイルとしてファイルシステム上に存在するコマンド 例)cp
- 組み込みコマンド
- シェル自体に内蔵しているコマンド 例)set
→ 外部コマンドはシェルの外側で実行されるので、シェル変数の値を参照することができない
シェル上だけでなく外部コマンドからも値を参照できるようにした変数を環境変数という
- シェル自体に内蔵しているコマンド 例)set
# 現在設定されている環境変数を表示
$ printenv
# 自身で環境変数を設定
$ LESS='--no-init'
$ export LESS
Chapter09 ファイルパーミッション、スーパーユーザー
Linuxは1つのマシンへ複数のユーザーが同時にログインして操作する事を前提として作られている。
その為、ファイルの閲覧権限・上書きを防ぐ仕組みなどアクセス権限の仕組みが用意されている。
ファイルオーナーの確認
$ ls -l
-rw-r--r-- 1 user user 0 Oct 12 02:44 file1
-rw-r--r-- 1 user user 0 Oct 12 02:44 file2
# ファイル所有者がuser : 3列目
# ファイルが所属するグループがuser:4列目
ファイルのパーミッション
ファイルは**「誰に、どんな操作を許可するか」という権限**を規定する事ができる
$ ls -l
-rwxr-xr-x. 1 root root ...
1文字目はファイル種別を表している
種別 | 意味 |
---|---|
- | ファイル |
d | ディレクトリ |
l | シンボリックリンク |
残りの9文字は3文字毎にブロックになっており、「オーナー」、「グループ」、「その他のユーザー」に対するパーミッションを意味している
パーミッション記号と意味
記号 | 意味 |
---|---|
r | 読み取り(read) |
w | 書き込み(write) |
x | 実行(execute) |
ファイルモードを変更する
chmodコマンドを利用してファイルモードを変更する事ができる。chmodコマンドには「シンボルモード」による指定と「数値モード」による指定の2種類がある
※ファイルのパーミッション変更は、そのファイルのオーナーか、スーパーユーザーしか変更できない
数値モードのパーミションの数値
意味 | 数値 |
---|---|
読み取り(r) | 4 |
書き込み(w) | 2 |
実行(x) | 1 |
# オーナーに読み取り、書き込み・グループ、その他のユーザーに読み取りを指定する場合
$ chmod 644 sample.txt
スーパーユーザー
あらゆる操作が許可された強い権限を持つユーザー。suコマンドやsudoコマンドを利用する事でスーパーユーザー権限で実行する事が可能
- su
- スーパーユーザーに切り替わる
- exitするまではスーパーユーザー
- sudo
- 1つのコマンドだけをスーパーユーザーで実行できる
Chapter10 プロセスとジョブ
プロセスとは...
シェルからコマンドを実行すると、Linuxカーネルはディスクから実行ファイルを読み出してメモリに格納し、メモリの内容に従ってCPUがプログラムを実行する
このメモリ上で実行状態にあるプログラムを「プロセス」と呼ぶ
Linuxカーネルはプロセスに「プロセスID」を割り振り、プロセスを管理している
# プロセスの表示
$ ps
PID TTY TIME CMD
11 pts/1 00:00:00 sh # PIDカラムがプロセスIDを示す
52 pts/1 00:00:00 bash
57 pts/1 00:00:00 ps
psコマンドでよく利用されるのオプション組み合わせ
オプション | 意味 |
---|---|
x | psコマンドを実行したユーザーのプロセス全てを表示 |
ux | psコマンドを実行したユーザーのプロセス全てを、詳細情報と合わせて表示 |
ax | 全てのユーザーのプロセスを表示 |
aux | 全てのユーザーのプロセスを、詳細情報を合わせて表示 |
ジョブとは...
シェルから見た処理の単位をジョブと呼ぶ
コマンドラインに入力している一つの行が一つのジョブにあたる
※コマンドをパイプで繋いだ場合、プロセスはコマンド毎に作成されるがジョブはコマンドライン全体で一つになる
ジョブをバックグラウンドで実行
バックグラウンド処理させる事で、時間がかかるコマンドの実行終了までの時間を無駄にしなくて済む
bgコマンドを利用する事でジョブをバックグラウンドで実行する事が可能
$ cp file1 file2
# ctrl + zで一時停止させる
$ bg %1
ジョブを停止させなくても末尾に「&」を追加する事でバックグラウンド実行となる
$ cp file1 file2 &
Chapter11 標準出力とパイプライン
標準入出力
標準入力は通常キーボード、標準出力はディスプレイに割り当てられるが、ファイルやプリンタでも構わない。内部的には「標準入力から入力し、標準出力に出力」するのみ
標準入出力を実際どこに繋ぐかわ、ユーザーが自由に設定できるようシェルで制御できる(リダイレクト)
# 入力リダイレクト
$ cat < ファイル名 # 指定したファイルを入力リダイレクト
# 出力リダイレクト
$ ls -l / > list.txt # list.txtに結果を出力
上記の記述ではリダイレクトする際に指定したファイルと同一のファイルが存在する場合は、ファイル自体が上書きされ元のデータが失われる。
「>」の代わりに「>>」を利用する事でファイル末尾に追記する事が可能
※新規ファイルに「>>」を利用してもOK
$ echo 2024-10-17 >> number.txt
スペシャルファイル
Linuxでは「/dev/null」(スペシャルファイル)がリダイレクト先としてよく使われる
- 入力元として指定しても、何も内容を返さない
- 出力先として指定しても、書き込んだデータはどこにも保存されずに消える
# ファイルを空にする
$ cp /dev/null application.log
# エラーメッセージを非表示にする
$ ls / /xxxx 2> /dev/null
パイプライン
複数のコマンドを連携したり、あるコマンドの結果を別のコマンドで利用する為の仕組みが「パイプライン」
フィルタ
標準入力を入力として受け取り、標準出力に出力するコマンドをフィルタと呼ぶ
代表的なフィルタコマンド
コマンド | 意味 |
---|---|
cat | 入力をそのまま出力する |
head | 先頭の部分を表示する |
tail | 末尾の部分を表示する |
grep | 指定した検索パターンに一致する行だけを表示する |
sort | 順番に並べ変える |
uniq | 重複した行を取り除く |
tac | 逆順に出力する |
wc | 行数やバイト数を出力する |
Chapter13 正規表現
grepコマンド
grepは文字列を検索するコマンド
$ grep [オプション] <検索パターン> <ファイル名>
$ grep Hokk file1.txt
# Hokkを含む文字列がfile1.txtにあれば出力
※grepの検索パターンには文字列だけでなく、正規表現を利用することができる
$ grep '^cron' file1.txt
grepでよく使うオプション
オプション | 意味 |
---|---|
-n | マッチした行番号を合せて表示 |
-i | 大文字小文字を区別せずに検索 |
-v | 検索パターンに一致しないものだけを表示 |
chapter15 シェルスクリプトを書こう
シェルスクリプトとは...
実行したい一連のコマンドをあらかじめファイルに記載しておき、そのファイルをシェルに読み込ませる事でコマンドを実行させる。
このコマンドラインをあらかじめ記述しておくファイルをシェルスクリプトと呼ぶ。
シェルスクリプトを作成する
シェルスクリプトのファイル名はなんでもいいが慣習として拡張子を.shにする
shebang(シバン)
Linuxカーネルはシェルから実行命令を受けると、まず対象ファイルの先頭を確認し「#!」があった場合、その後ろに書かれたコマンドを実行する。
下記の例だとLinuxカーネルは「$ /bin/bash ./sample.sh」を実施するので毎回コマンドラインに/bin/bashと入力する必要がなくなる
#!/bin/bash
du -h ~ | tail -n 1
シェルの実行方法
- ファイル名のみを指定して実行(./sample.sh)
- シェルの引数として実行(bash sample.sh)
- sourceコマンドを利用して実行(source ./sample.sh)
①、②は動作としては同じ
③は実行シェルの設定を引き継ぐ点が異なる
chapter16 シェルスクリプトの基礎知識
シェルスクリプトの行
- シェルスクリプトでは空行は無視される
- 行末に「 \ 」をおく事で途中改行が可能
#!/bin/bash
echo \
"root directory"
# 出力結果
=> root directory
コマンド置換
コマンドの結果を文字列として取得したい場合、「 $( ) 」を利用する
#!/bin/bash
filename=$(date '+%Y-%m-%d')
touch "$filename"
# 本日日付のファイル(yyyy-mm-dd)が作成される
位置パラメータ
シェルスクリプトからコマンドライン引数を扱いたい場合、位置パラメータと呼ばれるシェル変数を利用する
#!/bin/bash
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
# 実行する
$ sample4.sh aa bb
# 出力結果
$0 = ./sample4.sh
$1 = aa
$2 = bb
コマンドライン引数関連のシェル変数
変数 | 意味 |
---|---|
$0 | 実行時のシェルスクリプト名 |
$1, $2... | コマンドライン引数の値(位置パラメータ) |
$# | 位置パラメータの個数 |
$@, $* | 全ての位置パラメータ |
Chapter18 アーカイブと圧縮
アーカイブとは
複数のファイルやディレクトリおwまとめたファイルの事で、ファイルをメールを送ったりバックアップを保管したりする事を目的に作成される
圧縮とは
ファイルの冗長性を利用して、データ内容を壊す事なくファイルサイズを小さくする事
windows, macOSで一般的に利用されるzipファイルはアーカイブと圧縮を同時に行うが、Linuxの場合は別個にアーカイブしてから圧縮するのが一般的