「新しいLinuxの教科書」覚え書き

読んだ本

三宅 英明,大角 祐介著 「新しいLinuxの教科書」

用語の説明

FHS(Filesystem Hierarchy Standard)

コマンド 内容
/bin Linuxシステムの動作に最低限必要な、重要度の高いコマンドを格納
/dev バイスファイルを格納
/etc 設定ファイルを格納
/home ホームディレクトリ(ユーザーにrwが与えられている)
/sbin 管理者向けコマンド格納
/tmp 一時的なファイルを置く
/var 変化するデータを格納

LInuxコマンドチートシート

カット&ヤンク

コマンド 内容
Ctrl+k カーソル位置から行末までを削除する
Ctrl+u カーソル位置から行頭までを削除する
Ctrl+y 最後に削除した内容を挿入する

トラブルシュート

コマンド 内容
Ctrl+s 画面表示をロックする
Ctrl+q 画面表示のロックを解除する
Ctrl+c 実行を終了
Ctrl+l 画面を消去

インクリメンタル検索

コマンド 内容
Ctrl+r 履歴を遡ってインクリメンタル検索
Ctrl+g 検索結果を破棄し、プロンプトに戻る

directory

コマンド 内容
pwd current directory

ls

ls ba??:baで始まり全体の長さは4文

コマンド 内容
ls -l 属性表示
ls -F ファイルの種類表示

rm

コマンド 内容
rm -r directoryの中身も消す
rmdir 空のdirectoryを消す

-r: 再帰的に実行(再帰的とはディレクトリのさらに下にディレクトリがあるかを探して、最も深い階層にあるファイルやディレクトリを表示する方法)

cat

コマンド 内容
cat -n 閲覧&行番号表示
Ctrl+d catコマンドから抜ける

less

1画面ごとに表示して、上下にスクロール

コマンド 内容
Space or f 1画面下にスクロール
b 1画面上にスクロール
j 1行下にスクロール
k 一行上にスクロール
q lessコマンド終了

検索

コマンド 内容
/ 下方向検索
? 上方向検索
n 次の検索結果に移動
N 前の検索結果に移動

シンボリックリンク

コマンド 内容
ln -s リンク元ファイル名 リンク名 シンボリックリンク作成

findとlocate

find 検索開始dir 検索条件 アクション

  • find . -name ファイル名(*.txtなど): ファイル名検索(*を使うときは'を忘れずに)
  • find . -type ファイル種別: 以下参照
指定 ファイル種別
f 通常ファイル
d directory
l シンボリックリンク

locate オプション 検索パターン find: ディレクトリツリーを下って全てのファイルを探す locate: 事前にファイルパスのデータベースが作られており、データベースだけを検索するので、高速に動作する ただし、以下のようなことが起こる

  • locateコマンドで表示されたファイルが実際にはディスク上に存在しない
  • locateコマンドでは表示されないのに、ディスクにファイルファ存在する
オプション 内容
-i 大文字小文字区別しない
-b ファイル名を対象に検索(無いとパス名も検索対象)
-a AND検索(無いとOR検索)

コマンドのヘルプ

  • --help: コマンド自身のヘルプ表示
  • man コマンド: lessコマンドを使ってマニュアル表示(-kでキーワードからコマンドを探す)(lessと動作は同じ)

which

which オプション コマンド: 指定されたコマンド名をサーチパスから探して、見つかった実行ファイルのフルパスを表示

vim

コマンド 内容
vi 起動
:q 終了(!をつけると編集内容を破棄して終了)
:w 保存(*w ファイル名: ファイル名で保存)
x カーソル下削除
i カーソルの左側に入力
a カーソルの右側に入力

カーソル移動

コマンド 内容
w 前方に単語1つぶん移動する
b 後方に単語1つぶん移動する
W スペース区切りで前方に単語1つぶん移動する
B スペース区切りで後方に単語1つぶん移動する
0 行頭に移動する
$ 行末に移動する
行番号G 行番号に移動
gg 最初の行へ移動
G 最後の行へ移動

デリート

コマンド 内容
d$ 行末までをデリート
d0 行頭までをデリート
x、dl 1文字をデリート
dw 単語1つをデリート
dgg 最初の行までをデリート
dG 最後の行までをデリート
dd 現在カーソルのある行を削除

プットはp ヤンクはy(上記の表のdをyに置き換えると同じ動きをする)

検索・置換

コマンド 内容
/<文字列> 下方向に向かって<文字列>を検索する
? <文字列>上方向に向かって<文字列>を検索する
n 次の検索結果に移動する
N 前の検索結果に移動する

:を押した後に%s/置換元/置換後/g

その他

コマンド 内容
j 現在の行と下の行が連結される
u 元に戻す
Ctrl+r undoを取り消す(redo)

エイリアス

コマンド 内容
alias 名前='コマンド' エイリアスの作成
type コマンド エイリアスの確認
unakias コマンド エイリアスの削除
command コマンド or \コマンド エイリアスではなく明示的にコマンドを実行する

変数

変数名=値: 変数の設定(値にスペースが必要な場合は'')※=の左右にはスペースを入れない $変数名で参照

既にあるパスに追記する場合はPATH=$PATH:追記パス

シェル設定

環境変数

export シェル変数名: 指定したシェル変数を環境変数にする(export 変数名='値'で値も設定できる)

カスタマイズ

カスタマイズ例 ※設定ファイルはコピーすること、必ず違うシェルを開いておきログインできなくなる事態を避けること

˜/.bash_profile

if [ -f̃˜ /.bashrc ]; then
     sourcee˜ /.bashrc
fi

˜/.bashrc

LANG=ja_JP.UTF8
PS1='[\u@\h]\w\$'
exportLESS='--no-init'

set -o ignoreeof

#コマンド履歴設定
shopt -s histappend
HISTSIZE=1000000
HISTFILESIZE=1000000

export PATH="$PATH:$HOME/bin"

#エイリアスの設定
alias ls='ls -F'
alias la='ls -a'
alias ll='ls -l'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias mkdir='mkdir -p'

ファイルパーミッション

グループ

記号 ファイルのパーミッション ディレクトリのパーミッション
r 読み取り ディレクトリに含まれるファイル一覧の取得
w 書き込み ディレクトリ下にあるファイル・ディレクトリの作成・削除
x 実行 ディレクトリをカレントディレクトリにする

シンボルモードのパーミッション変更(相対指定)

chmod [ugoa][+=][rwx] <ファイル名>
記号 意味
u オーナー
g グループ
o その他のユーザー
a ugo全て

数値モードのパーミッション変更(絶対指定)

chmod <8進数の数値> <ファイル名>
記号 数字
r 4
w 2
x 1

<8進数の数値> = オーナー合計 グループ合計 その他のユーザーの合計

スーパーユーザー

suでスーパーユーザーに入るexitで出る 基本sudoの使用を推奨

プロセスとジョブ

プロセス

メモリ上で実行状態にあるプログラム(Linuxカーネルから見た処理の単位)

ps: 実行中のプロセス確認

ps xf(-なし): 現在のユーザーが実行中の全てのプロセスを表示

kill %プロセスID: プロセスを終了

ジョブ

シェルから見た処理の単位(パイプを繋ぐとジョブはコマンドライン全体で1つとなる)

  • Ctrl+z: コマンド停止
  • jobs: 現在のジョブ一覧(末尾に&がついていたら、バックグラウンド処理)
  • fg %ジョブ番号: フォアグラウンドへ(ユーザー入力を受け付けるジョブの状態)(数字をつけないとカレントジョブ(+)がフォアグラウンドになる)
  • bg %ジョブ番号: ジョブをバックグラウンドへ(コマンドの末尾に&をつけて実行することでバックグラウンドになる)
  • kill %ジョブ番号: ジョブを終了

標準入出力・パイプライン

標準入出力:コマンドなどの処理の流れの入出力を表しており、標準入力をキーボードやファイル、標準出力と標準エラー出力をディスプレイやファイルと自由に選択できる

リダイレクト

標準入出力先を変更する機能

  • コマンド < ファイルなど: 入力リダイレクト
  • コマンド > ファイルなど: 出力リダイレクト
  • コマンド 2> ファイルなど: エラー出力リダイレクト
  • コマンド 2>&1 ファイルなど: 出力&エラー出力リダイレクト

>>>にすると追記※基本はこっちを使う

/dev/null: 入力や出力をnullにする - コマンド >> /dev/nullなどでエラーだけを表示 - コマンド >> /dev/null 2>&1で何も表示しない

パイプライン

1つのコマンドの結果を別のコマンドに直接送り込んでコマンドを連携させる

コマンド1 | コマンド2 | コマンド3: コマンド1→コマンド2→コマンド3

history: コマンドライン履歴表示

フィルタ

標準入力を入力とし、標準出力を出力とするコマンド

コマンド 内容
cat 入力をそのまま出力する
head 先頭の部分を表示する
tail 末尾の部分を表示する
grep 指定した検索パターンに一致する行だけを表示する
sort 順番に並べ替える
uniq 重複した行を取り除く
tac 逆順に出力する
wc 行数やバイト数を出力する

フィルタ例

  • history | head: コマンド履歴を最初の10行だけ表示
  • du -b パス | sort -n: ファイルサイズの小さい順に並べ表示(-n: 数値で指定)
  • du -b パス | sort -n | tac: ファイルサイズの大きい順に並べ表示(`sort -rn': 逆順に数値を並べ表示)
  • ps x | sort -k 5: コマンド順に並べ表示(-k: フィールドで指定) ※sortはオプションなしではASCII順に並べる

正規表現

条件に合致する文字列集合を表現するための記法

文字列検索(使用頻度多い) grep オプション 検索パターン ファイル名

オプション 内容
-n 行番号表示
-i 大文字小文字区別せず
-v マッチしなかった行を表示

基本正規表現

正規表現は''で囲んで指定する

メタ文字 意味
. 任意の1文字にマッチ
[文字列] 特定の文字のどれかにマッチ([a-zA-Z]などの指定、[^文字]で指定した文字以外とマッチ)
|メタ文字を打ち消す
^文字列 行頭の文字列を指定しマッチ
文字列$ 行末の文字列を指定しマッチ
文字* 0回以上の繰り返しとマッチ

grep -v ^$ ファイル名: 空行だけ取り除いて表示

^ex.*txt$: exで始まってtxtで終わる行

拡張正規表現

-Eオプションをつける

記号 意味
文字+ 1回以上の繰り返しとマッチ
文字? 0回または1回の繰り返し
{m,n} m回以上n回以下の繰り返し
(文字列) 文字列のグループ化
| OR条件

テキスト処理

wc

行数・単語数・バイト数を数えるコマンド

オプション 内容
-l 行数表示
-w 単語数表示
-c バイト数表示

uniq

重複した行を取り除く(重複行が連続していない場合は取り除かれない) sort ファイル名 | uniq: ソートして重複した行を取り除く(基本セットで使う) uniq -c: 重複数を数える

cut

cut -d 区切り文字 -f フィールド番号 ファイル名: 区切り文字で指定した文字で入力行を分割し、その中のフィールド番号(行において何番目か)で指定したものを出力

tr

tr 置換前の文字 置換後の文字

例:cat file | tr abc BCD: a→B、b→ C、c→Dと置き換えている(a-zならaからzまで) tr -d 削除文字: "\n"を削除文字に指定すると改行を全て削除する

tail&head

-n 行数で表示する行数を選択 -f ファイル名: ファイルを監視する

diff

ファイルの差分を表示

diff オプション 比較元ファイル 比較先ファイル
記号 意味
<範囲1>a<範囲2> 1つ目のファイルの範囲1の後に、2つ目のファイルの範囲2の内容が追加された
<範囲1>c<範囲2> 1つ目のファイルの範囲1の箇所が、2つ目のファイルの範囲2の内容に変更された
<範囲1>d<範囲2> 1つ目のファイルの範囲1の箇所が削除された

ハンク(hunk): 差分表示ひとかたまり

-u: ユニファイド形式 @@ -1つ目のファイルの変更開始行,変更行数,+2つ目のファイルの変更開始行,変更行数@@

高度なテキスト処理(非対話型)

sed

「Stream Editor」の略。非対話型エディタ。 編集結果を標準出力として出力するので、元のファイルは変更しない。

sed オプション スクリプト 対象ファイル

スクリプトは「アドレス コマンド」や「コマンド 引数 プラグ」の組み合わせでできている(基本''で囲ったほうがいい)。

コマンド 内容
d 行を削除
p 行を表示
s 行を置換
アドレス例 意味
1d 1行目を削除
2,5d 2~5行目を削除
3,$d 3行目から最終行までを削除
d 全て削除
/^B/d 先頭がBで始まる行を削除

コマンドpの注意点:sedコマンドは行をパターンスペースにコピーしてから、パターンスペースに編集コマンドを実行し、最後にパターンスペースの内容を出力する。 パターンスペースを表示させないようにするには-nオプションを使う。

s/置換前文字列/置換後文字列/フラグ

フラグなしだと一つだけ置換。gフラグで全て置換

sed -n 's/!//gp' ファイル名で置換が発生した行だけを表示

sed -r 's/My (.*)/--\1--/' 

awk

テキストの検索や抽出・加工などの編集操作を行うコマンド。「オーク」と読む。

awk オプション スクリプト 対象ファイル

スクリプトは「パターン { アクション }」で構成されている。 パターン:アクションを実行するかどうかの条件(処理中に読み込んでいく1行の入力テキストをレコードと呼ぶ)。 アクション:テキストの編集処理

printとフィールド変数

print: アクションを記述

フィールド変数

  • $1や$2のように$をつける($0はレコード全体)
  • $NFをprintするとレコードの最後のフィールドが表示される($(NF-1)とすると最後から数えて1番目となる)
  • 複数指定は$1,$2でスペースをつけて出力される($1 $2だとスペースが消える)

パターン

正規表現は/でかこむ。 例:第9フィールドの先頭がcpの文字列ならば5,6フィールドを出力(~正規表現の比較)

awk '$9 ~ /^cp? {print $5,$9}'
  • END{アクション}: 全ての入力ファイルを処理し終えてから最後に実行

その他

  • アクションを省略するとレコードが({print $0}が実行され)出力される。
  • -F区切り文字: 区切り文字の変更(-F,など)
  • NR:これまで読み込んだレコード数が代入されている組み込み関数
  • スクリプトを再利用する方法(-fを使用)
$ cat average.awk
{sum += $NF} END{print "Average:",sum/NR}
$ awk -F -f average.awk score.csv
Average 53:833

シェルスクリプト

  • シバン #!/bin/bash(shebang(シバン))を最初の行に入れる。これにより「このシェルスクリプトは/bin/bashで動かします」という宣言をする。 $ ./test.sh$ /bin_bash ./test.shと実行される。

  • source 指定したファイルの内容をそのままコマンンドラインに入力した時と同じように実行する(シバンいらない)。設定ファイルの実行などに使われる。

※実行後は元のシェル(カレントシェル)にも影響をおよぼすことに注意。

./test.shはサブシェル(現在のシェルから起動される子プロセス)で実行される(サーチパス(`$PATH)にはカレントディレクトリが登録されていないため相対パス指定してる)。

sourceコマンドをしようするときは、必ずパスを明示する(サーチパスを自動的に探してしまうため、予期せぬファイルをsourceコマンドで読み込んでしまう危険性がある)。

シェルスクリプト基礎

  • ;で区切ることで1行にまとめて書く事ができる
  • コマンドラインが長くなってしまう時は\を末尾に置くことで改行できる

シェル変数

  • 代入時には$をつけない(参照時のみ使用)
  • =の前後にはスペースを入れない
  • 変数名の区切りを明示するときは{}で囲う
  • シングルクォートは変数展開無効のため$が記号となる、一方でダブルクォートは変数展開されるてめ後が変数となる

コマンド置換

$( コマンド )でコマンドを記述

位置パラメータ

制御構造

if

if [ "a" = "b" ]; then

elif コマンド; then

else

fi

[ "a" = "b" ]にはすべてスペースがある([は条件式開始のコマンド)。

コマンド連結評価

  • コマンド1 && コマンド2:コマンド1が正常終了した時だけコマンド2を実行する(if文でAND条件として使用可能)
  • コマンド1 || コマンド2:コマンド1が正常動作しなかった時だけコマンド2を実行する(if文でOR条件として使用可能)

終了ステータス

exit 終了ステータスシェルスクリプトが別のプログラムから呼ばれた際にエラー処理可能

for

for 変数名 in リスト
do 

done
  • seq 開始値 終了値:数値列を出力する
  • "$@": 全てのコマンドライン引数を出力する

case

指定された文字列がパターンにマッチするかどうかを判断し、マッチしたパターンに対応する処理を行う

case 文字列 in
        パターン1)
           処理1
              ;;
        パターン2)
           処理2
              ;;
        *)
           例外処理
              ;;
esac

文字列 | 文字列: 複数のパターンのOR条件記述

while

while コマンド
do

done

$((数式)): 文字列を計算式として扱う

関数

localでlocal関数を定義(何も宣言しなければglobal関数となる)。

xargs

以下のようにfindとxargsを組み合わせれば、サブディレクトリ内のファイルまで含めて任意のコマンドを実行できる。

find . -type f -name '*.txt' | xargs ls -l

パッケージ管理

APT(Advanced Packaging Tool) APTはリポジトリにあるパッケージをその依存関係に基づいてダウンロードし、システムにインストールするツール。

apt-get オプション コマンド パッケージ名
apt-cache オプション コマンド パッケージ名 

パッケージインストール

sudo apt-get install パッケージ名

パッケージ検索

apt-cache search 検索ワード

--names-onlyでパッケージ名だけ検索

リポジトリ」の情報を管理するのが「sources.list」と呼ばれるファイルである(/etc/apt/sources.listas)。