読んだ本
三宅 英明,大角 祐介著 「新しいLinuxの教科書」
- 読んだ本
- 用語の説明
- LInuxコマンドチートシート
- vim
- エイリアス
- 変数
- シェル設定
- ファイルパーミッション
- スーパーユーザー
- プロセスとジョブ
- 標準入出力・パイプライン
- 正規表現
- テキスト処理
- 高度なテキスト処理(非対話型)
- シェルスクリプト
- パッケージ管理
用語の説明
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)。