Closed16

『新しいLinuxの教科書』メモ

okuno_555okuno_555

Chapter01 Linuxを使ってみよう

ディストリビューション

  • 本来Linuxとは、コンピュータのハードウェア制御を行うソフトウェアである「Linuxカーネル」のみを指す狭義の言葉
  • Linuxカーネルに加えて基本的なコマンド群やアプリーケーションなど含めてそのまま利用できるようパッケージングしたものが広義のLinux
  • 広義のLinux = ディストリビューションと考えてOK
系統 ディストリビューション
Red Hat系 red Hat Enterprise Linux, CentOS Stream, Fedora
Debian系 Debian GNU/Linux, Ubuntu
okuno_555okuno_555

Chapter02 シェルって何だろう?

シェルの役割

  • Linuxカーネルのインターフェースになっているソフトウェア

プロンプト記号

$:一般ユーザー
#:スーパーユーザー(root)

シェルの種類

  • sh
    • 最も古くから存在するシェル
    • シェルスクリプトを書く時はshを利用するのが一般的
    • 機能が少なく対話型で利用するのは不便
  • csh
    • 後継のtcshがある為利用される事は稀
  • bash
    • shを基本として機能拡張したシェル。shと後方互換性を持つ
    • 対話型・シェルスクリプトどちらにも向いている
  • tcsh
    • 対話型操作で便利な機能が多い
    • シェルスクリプトには向いていない
  • zsh
    • bash, tcshなど他のシェルの機能を取り込み、独自拡張加えた新しいシェル
    • macOSのログインシェル
okuno_555okuno_555

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キーは検索したコマンドラインを修正して実行したい場合に利用
okuno_555okuno_555

Chapter04 ファイルとディレクトリ

各ディレクトリの役割

Linuxのディレクトリ構成はFHSという標準化仕様に基づいている
http://www.pathname.com/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 ファイル名の後ろにファイルの種類を表す記号が追加される
記号なし:通常ファイル
/:ディレクトリ
*:実行ファイル
@:シンボリックリンク
okuno_555okuno_555

Chapter05 ファイル操作の基本

catコマンド

行番号を表示する

-nオプションをつける事で行番号を表示することできる。プログラムのソースコードやリスト表示する時に利用すると便利

lessコマンド

ファイル内容を1画面毎に表示し、上下にスクロールすることができる
スクロール処理

コマンド 内容
Ctrl + v, スペース 1画面下にスクロール
b, Meta + v 1画面上にスクロール
okuno_555okuno_555

Chapter06 探す、調べる

findコマンド

ディレクトリツリーからファイルを探すコマンド。

# 基本的な使い方
find <検索開始ディレクトリ> <検索条件> <アクション>

find . -name file-1.txt -print
find . -name '*.txt' -print

引数についての補足

  • 検索開始ディレクトリを指定しない場合はカレントディレクトリが対象となる
  • アクションを指定しない場合は -print が指定されたとみなす
  • -name, -inameはファイル名を指定してファイルを探す。-nameは大文字小文字を区別するが-inameは区別しない
  • -typeはファイルの種類で検索する。-type fは通常ファイル、-type dはディレクトリ
okuno_555okuno_555

Chapter07 テキストエディタ

ファイルの種別

  • テキストファイル
    • テキスト(文字列)が書かれたファイルのこと。メモやプログラムのソースコード、HTMLファイルなどはテキストファイルに分類される
  • バイナリファイル
    • 画像ファイルや音声ファイル、Linuxコマンドの実行ファイルなど、人が直接読むことを考慮していないもの
okuno_555okuno_555

Chapter08 bashの設定

シェル変数

bash内部で使用される変数で、数値や文字列を保存し、様々な値を設定することができる

設定した変数は「$<変数名〉」で参照できる

<変数名>=<値>

$ var1='test variable'
// ※ = の左右にスペースをつけてはいけない 
$ echo $var1

環境変数

  • 外部コマンド
    • 実行ファイルとしてファイルシステム上に存在するコマンド 例)cp
  • 組み込みコマンド
    • シェル自体に内蔵しているコマンド 例)set
      → 外部コマンドはシェルの外側で実行されるので、シェル変数の値を参照することができない
      シェル上だけでなく外部コマンドからも値を参照できるようにした変数を環境変数という
# 現在設定されている環境変数を表示
$ printenv

# 自身で環境変数を設定
$ LESS='--no-init'
$ export LESS
okuno_555okuno_555

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つのコマンドだけをスーパーユーザーで実行できる
okuno_555okuno_555

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 &
okuno_555okuno_555

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 行数やバイト数を出力する
okuno_555okuno_555

Chapter13 正規表現

grepコマンド

grepは文字列を検索するコマンド

$ grep [オプション] <検索パターン> <ファイル名>
$ grep Hokk file1.txt
# Hokkを含む文字列がfile1.txtにあれば出力

※grepの検索パターンには文字列だけでなく、正規表現を利用することができる

$ grep '^cron' file1.txt

grepでよく使うオプション

オプション 意味
-n マッチした行番号を合せて表示
-i 大文字小文字を区別せずに検索
-v 検索パターンに一致しないものだけを表示
okuno_555okuno_555

chapter15 シェルスクリプトを書こう

シェルスクリプトとは...

実行したい一連のコマンドをあらかじめファイルに記載しておき、そのファイルをシェルに読み込ませる事でコマンドを実行させる。
このコマンドラインをあらかじめ記述しておくファイルをシェルスクリプトと呼ぶ。

シェルスクリプトを作成する

シェルスクリプトのファイル名はなんでもいいが慣習として拡張子を.shにする

shebang(シバン)

Linuxカーネルはシェルから実行命令を受けると、まず対象ファイルの先頭を確認し「#!」があった場合、その後ろに書かれたコマンドを実行する。
下記の例だとLinuxカーネルは「$ /bin/bash ./sample.sh」を実施するので毎回コマンドラインに/bin/bashと入力する必要がなくなる

sample.sh
#!/bin/bash
du -h ~ | tail -n 1

シェルの実行方法

  1. ファイル名のみを指定して実行(./sample.sh)
  2. シェルの引数として実行(bash sample.sh)
  3. sourceコマンドを利用して実行(source ./sample.sh)
    ①、②は動作としては同じ
    ③は実行シェルの設定を引き継ぐ点が異なる
okuno_555okuno_555

chapter16 シェルスクリプトの基礎知識

シェルスクリプトの行

  • シェルスクリプトでは空行は無視される
  • 行末に「 \ 」をおく事で途中改行が可能
sample.sh
#!/bin/bash

echo \
    "root directory"

# 出力結果
=> root directory

コマンド置換

コマンドの結果を文字列として取得したい場合、「 $( ) 」を利用する

sample3.sh
#!/bin/bash

filename=$(date '+%Y-%m-%d')
touch "$filename"
# 本日日付のファイル(yyyy-mm-dd)が作成される

位置パラメータ

シェルスクリプトからコマンドライン引数を扱いたい場合、位置パラメータと呼ばれるシェル変数を利用する

sample4.sh
#!/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... コマンドライン引数の値(位置パラメータ)
$# 位置パラメータの個数
$@, $* 全ての位置パラメータ
okuno_555okuno_555

Chapter18 アーカイブと圧縮

アーカイブとは

複数のファイルやディレクトリおwまとめたファイルの事で、ファイルをメールを送ったりバックアップを保管したりする事を目的に作成される

圧縮とは

ファイルの冗長性を利用して、データ内容を壊す事なくファイルサイズを小さくする事

windows, macOSで一般的に利用されるzipファイルはアーカイブと圧縮を同時に行うが、Linuxの場合は別個にアーカイブしてから圧縮するのが一般的

このスクラップは1ヶ月前にクローズされました