読者です 読者をやめる 読者になる 読者になる

amarron2’s blog

linuxや資格関係の記事を書きます。基本自分用のメモです。

101-3. GNUとUnixのコマンド

  1. コマンド行で操作する
    • シェルでコマンドを実行でき、変数にはシェル変数と環境変数がある
  2. ファイルを使ってテキストストリームを処理する
    • 「cat,head,tail等」コマンドでファイルを扱える
    • リダイレクト(>)で出力結果をファイルへ書き込める
  3. 基本的なファイル管理を行う
    • 「ls,cp,mv,file等」コマンドでファイルの確認や操作が出来る
    • 「tar」コマンドアーカイブ、「gzip,gunzip,bzip2」で圧縮・解凍
  4. ストリーム、パイプ、リダイレクトを使う
    • データをストリームとして扱うための3つインターフェイス(標準入力・標準出力、標準エラー出力
    • パイプは、「|」で実行結果を標準入力へ送る
    • リダイレクトは、「>」で実行結果をファイルへ出力する
  5. プロセスを生成、監視、終了する
    • 「ps,top」コマンドでプロセスを監視できる
    • 「kill」コマンドでプロセスを終了できる
    • 「&」でバックグランド実行、「nohup」でログアウト中も実行
    • 「jobs」コマンドで実行中ジョブの確認(「fg ジョブ番号」「bg ジョブ番号」でバックグラウンドとフォアグラウンドを切り替え)
  6. プロセスの実行
    • 「nice」コマンドでプロセスの優先度が指定できる
    • 実行中のプロセスは「renice」コマンドで優先度を変更できる
  7. 正規表現を使用してテキストを検索する
    • ^[0-9].*[a-z]$:行頭が「0〜9」、行末が「a~z」
  8. viを使って基本的なファイル編集を行う
    • 「vi」コマンドでファイルを編集できる

note

  • 3章:1,2,3,4,7,8
  • 4章:5,6

1. コマンド行で操作する

コマンド [オプション] [引数]
コマンド 説明
コマンド1 ; コマンド2 コマンド1に続いてコマンド2を実行する
コマンド1 && コマンド2 コマンド1が正常に終了したときのみコマンド2を実行する
コマンド1 || コマンド2 コマンド1が正常に終了しなかった場合のみコマンド2を実行する
(コマンド1 ; コマンド2) ひとまとまりのコマンドグループとして実行する
{コマンド1 ; コマンド2} 現在のシェル内でコマンドを実行する
コマンド1 > hoge.log 実行結果をファイルに出力
  • 引数の引用符(「'」「"」「`」)でそれぞれ実行結果が異なる
    • 「'」:文字列として表示
    • 「"」:変数の内容が展開されてを表示
    • 「`」:コマンドの実行結果が展開されて表示

シェル

  • コマンドを受け付け、必要なプログラムを実行しているのはシェル
代表的なシェル 説明
sh(Bourne Shell) UNIXの標準的なシェル、最低限の機能しか持たない
bash(Bourne Again Shell) shを改良したもの、多くのLinuxの標準的なシェル
csh(C shell) C言語に似たスクリプトを利用できるシェル
ksh(Korn Shell) shを改良したもの
ログインシェル システムログインした直後に起動されるシェル(ログイン後は/etc/passwdに設定されているユーザー別のシェルが起動する)

シェル変数と環境変数

  • 変数は、有効範囲別に「シェル変数」と「環境変数」に分けられる
    • 「export」コマンドで環境変数にでき、他のシェルからも変数が使用できる
  • シェル変数と環境変数の確認コマンド
  • 変数を参照する時は、「$」を変数名の先頭につけて、定義する時は「$」をつけない

パスの追加

PATH=$PATH:追加するディレクトリ名 

2. ファイルを使ってテキストストリームを処理する

コマンド 説明
cat ファイルの内容を表示
nl ファイルの内容に行番号を付与し表示
head ファイルの先頭部分を表示
tail ファイルの末部分を表示(ログファイルをリアルタイムで監視する時に「-f」のオプションをつける)
cut 指定したフィールドを表示(オプションに「-c 文字数」で指定したテキストファイルから切り出す文字位置を指定、「-d 区切り文字」で区切り文字を指定、「-f フィールド 」で取り出すフィールドの指定(「cut -d : -f 1,7 /etc/passwd」で/etc/passwdから「:」で区切られた1列目と7列目を表示できる))
join 2つのファイルを読み込んで連結(「-j フィールド」オプションで連結するフィールドの指定出来る(「join -j 1 data1.txt data2.txt」で「data1.txt」と「data2.txt」ファイルの第1フィールドに基づいて連結))
paste 1つ以上のファイルを読み込んで連携(「-d 区切り文字」で区切り文字を指定)
sort 行単位でファイル内容をソートして表示(「-b」オプションで行頭の空白を無視、「-f」オプションで大文字小文字の区別を無視)
split 指定されたサイズでファイルを分割(デフォルトは1,000行で分割)
uniq 重複している行を1行にまとめて表示(「-d」オプションで重複している行のみ表示)(予めsortされている必要あり)
pr 印刷用にファイルの書式を整える(「pr -l 30 +1:5 data.txt」で data.txtファイルを1ページで30行として、1ページ目から5ページ目を出力)
expand ファイルのタブを空白に変換
unexpand ファイルの空白をタブに変換
wc ファイルの行数、単語数、文字数を表示(Word Count)
grep ファイルやテキストストリーム検索(正規表現でメタキャラを使った検索で良く使われる)
オプションに「-E」をつけると正規表現、「-F」は正規表現ではなく固定文字、「-i」は大小区別しない
sed テキストストリーム編集(一致した文字を削除したり、置換できる(sed -e 's/xxx/XXX/g' ./hoge.txt(xxxをXXXへ置換、-eは正規表現、sは置換(dは削除)、gは1行に複数あった場合も置換)))
od バイナリファイルの内容をASCII文字、8進数、16進数のいずれかで表示

3. 基本的なファイル管理を行う

ファイル操作

コマンド 説明
ls ディレクトリ内のファイルを表示
cp ファイルやディレクトリをコピー
mv ファイルやディレクトリを移動
mkdir ディレクトリを作成
rm ファイルやディレクトリを削除
rmdir からのディレクトリを削除
touch ファイルのタイムスタンプを変更、ファイルが存在しない場合ファイルを作成
file ファイルの種類を表示

アーカイブ・圧縮・解凍

  • 「tar」コマンドは、複数ファイルをアーカイブ化する(「gzip」コマンドは圧縮、「tar」は1つにまとめるだけ)
  • オプションの「-」は省略可(「tar zcf htttpd」で圧縮してアーカイブファイルを作成、「tar zxf htttpd.tar.gzip」で解凍してアーカイブからファイルを取り出す)

tar [オプション] [ファイル名]

オプション 説明
-c アーカイブ作成
-x アーカイブからファイルを取り出す
-t アーカイブの内容を確認する
-f ファイル名 アーカイブファイル名を指定する
-z gzipによる圧縮/展開を行う
-j bzip2による圧縮/展開を行う
-v 詳細な情報を表示する
--delete アーカイブからファイルを削除する
  • gzip」コマンドでファイルの圧縮・解凍ができる
    • オプションを指定しなかった場合、指定したファイルが直接圧縮される
    • 圧縮されたファイルの拡張子は「.gz」
    • 「.gz」拡張子は「gunzip」コマンドでも解凍出来る
    • 「.bz2」拡張子は「bunzip2」コマンド

gzip [オプション] [ファイル名]

オプション 説明
-d 圧縮ファイルを解凍
-c 圧縮ファイルを作成
-r ディレクトリ内の全てのファイルを圧縮する

cpio フラグ [ オプション ]

  • 「 ls | cpio -o > /tmp/backup」でカレントディレクトリ以下を /tmp/backup ファイルとしてバックアップ
フラグ 説明
-i アーカイブからファイルを抽出
-o アーカイブの作成
-p ファイルを別のディレクトリにコピー

4. ストリーム、パイプ、リダイレクトを使う

  • Linuxではデータをストリームとして扱うため、3つの基本的なインターフェースが定めらている
    • 標準入力(入力元はキーボード)
    • 標準出力(出力先は端末画面)
    • 標準エラー出力(出力先は端末画面)
  • 「tee」コマンドは、実行結果をファイルへ保存し、画面にも表示できる
  • パイプは、「|」で実行結果を標準入力へ送る
  • リダイレクトは、「>」で実行結果をファイルへ出力する
    • コマンドを一切表示したくない(コマンドの実行のみしたい)場合、「コマンド > /dev/null 2>&1」とする(/dev/nullは特殊なファイルで入力された全てのデータを消し去る)

5. プロセスを生成、監視、終了する

  • プロセスとは、OSからメモリ領域などの割り当てを受けて処理を実行しているプログラムのこと
    • 同時にプログラムが実行されているように見えるのは、CPUの処理を細切れにしてごく短い時間で切り替えながら処理をしているから
  • 「ps,top」コマンドでプロセスを監視できる(「ps -e」又は「ps ax」で実行中の全てのプロセスを確認できる)
  • 「pstree」コマンドでプロセスの親子関係が階層型で表示される
  • 「kill」コマンドでプロセスを終了できる
    • シグナルIDは「15」が通常終了、「9」が強制終了
    • 「kill 560」も「kill -15 560」も「kill -TERM 560」も「kill -s 15 560」も「kill -SIGTERM 560」も全て同じ結果
killコマンド書式)
kill -[シグナル名またはシグナルID] PID
kill -s [シグナル名またはシグナルID] PID
kill -SIGシグナル名 PID
シグナル名 シグナルID 動作
HUP 1 ハングアップ(設定の再読み込みがしたいときに使う)
INT 2 キーボードからの割り込み(Ctrl+C)
KILL 9 強制終了
TERM 15 終了(デフォルト)
CONT 18 停止しているプロセスを再開
STOP 19 一時停止

ジョブ管理

  • コマンドの最後に「&」を付けるとバックグランドで実行
  • 「jobs」コマンドで実行中のジョブを確認出来る
    • 「fg ジョブ番号」でバックグラウンドで実行中ジョブをフォアグラウンドへ
    • 「bg ジョブ番号」でフォアグラウンドで実行中ジョブをバックグラウンドへ
    • 手順例
      1. コマンド実行
      2. 「Ctr+z」で処理一時停止
      3. 「jobs」コマンドでジョブ番号を確認し、再開または停止を実行する
        • フォアグラウンドで再開:「fg ジョブ番号」
        • バックグラウンドで再開:「bg ジョブ番号」(1. コマンド実行の時に「&」をつけて実行した場合と同じ)
        • 停止:「ps」コマンドでプロセスIDを確認し、「kill プロセスID」で処理を停止(「jobs」コマンドで一覧からジョブが削除されている)
  • 「nohup」コマンドを実行したいコマンドの最初につけるとログアウトしても実行し続ける

6. プロセスの実行

  • プロセスには優先度があり、優先度が高いプロセセスはより多くCPU時間を割り当てられる
    • 「ps -l」または「top」コマンドで優先度が確認出来る
  • 「nice」コマンドでプロセスの優先度が指定できる
    • 「ナイス値」は「-20〜19」までで、小さいほど優先順位が高くなる(-20が最優先)(優先度を高く出来るのはrootのみ
  • 実行中のプロセスは「renice」コマンドで優先度を変更できる

7. 正規表現を使用してテキストを検索する

  • a[357]...:「a」で始まる5文字、2文字目が「3or5or7」
  • ;$:行末が「;」
  • ^[0-9].*[a-z]$:行頭が「0〜9」、行末が「a~z」
記号 説明
. 任意の一文字
* 0文字以上の文字列
[] いずれか1文字
^ 行頭
$ 行末

8. viを使って基本的なファイル編集を行う

vi [-R] [ファイル名](-Rで読み取りモード)
  • 入力には、「i,a」等
  • カーソル操作は。「0,$,gg,G」等
  • 削除は、「x,dd」等

入力モード

コマンド 説明
i カーソルの前にテキスト入力
a カーソルの後ろにテキスト入力
I 行頭にテキスト入力
A 行末にテキスト入力

コマンドモード

カーソル操作

コマンド 説明
0 行頭へ移動
$ 行末へ移動
H 画面の先頭へ移動
L 画面の最終部へ移動
w 次の単語へ移動
b 前の単語へ移動
gg ファイルの先頭行へ移動
G ファイルの最終行へ移動
nG n行目に移動(「:n」も同じ)

終了

コマンド 説明
:q 保存せずに終了
:q! 保存せずに終了(ファイル変更時)
:w 保存
:wq 保存して終了(「ZZ」「:x」も同じ)
:e! 前回の保存時の状態に戻る

編集

コマンド 説明
x カーソルの1文字削除
X カーソル前の1文字削除
r カーソルの1文字置換
dd カレントの1行削除
dw カーソル文字から次の単語までまとめて削除
yy カレント行コピー
p カーソルの後ろに貼り付け
P カーソルの前に貼り付け
u 前回の作業の取り消し

検索

コマンド 説明
/ パターン カーソルから後ろへパターン検索
? パターン カーソルから前へパターン検索
n 次の検索結果へ
N 前の検索結果へ

その他(補足)

  • コマンドモードには、大きく分けて「オペレータ」と「モーション」の2種類がある
  • 「オペレータ」+「コマンド」でコマンドを実行する
    • オペレータ: 動詞として動作を指定する「c」「d」「y」「g」の4つ
      • c : change (変更)
      • d : delete (削除)
      • y : yank (ヤンク: コピーと同義)
      • g : go (移動全般)
    • モーション: 対象範囲を指定する
例)「dw」(カーソル文字から次の単語までまとめて削除)は、dがオペレータでwがモーション
  他にも、「yw」で単語コピー出来たり組合せ色々
  • 入力モードとコマンドモード以外にビジュアルモード(vキー)もある
  • 範囲指定してコピーしたいときなど、ビジュアルモードで範囲指定してyキーでコピーが出来る

使用した教材

LPIC101,102