FC2ブログ

更新履歴Blog

日記

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

iノード

iNode(iノード)

  • ファイル、ディレクトリが持っている番号の事。
    この番号は重複しない。

  • iNodeは作成された時に自動で割り振られる。
    割り振られたiNode番号は「ls -i」コマンドで確認できる

    ファイルtest.txtを作成する
    $ touch test.txt
    
    「ls -i」コマンドでiNode番号を確認する
    $ ls -i
    12345 test.txt
    
    ファイル名の左に表示される番号がiNode番号

  • 割り振れるノードには上限があり、使用している数は「df -i」コマンドで確認できる
    $ df -i
    
    201605271732.png
    • Inodes … iNodeの総数
    • IUsed … 使用しているiNodeの数
    • IFree … 使用していないiNodeの数
    • IUse% … 使用しているiNodeの割合
スポンサーサイト

killallコマンド

killall

プロセスにプロセス名指定でシグナルを送信する
プロセスIDで指定したい場合はkillコマンドの方を利用する
同じプロセス名のプロセスが複数あれば、その全てに送信できる。

  • abcdeというプロセス名のプロセスに終了シグナルを送信する例
    • $ killall -SIGTERM abcde
    • $ killall -15 abcde
    上記はどちらも同じ動作となる。

    プロセス名は「ps -ef」コマンドなどで調べる

killコマンド

kill

プロセスにシグナルを送信するコマンド

  • プロセスID「12345」のプロセスを終了させる例
    • $ kill 12345
    • $ kill -15 12345
    • $ kill -s SIGTERM 12345

    上記3つどれでも動作は同じ。

    ・プロセスIDを調べるには「ps」コマンドなどで確認できる。
    ・プロセスはSIGTERMシグナルを受け取ると終了する。このコマンドはプロセスにSIGTERMを送信するコマンド。
    ・プロセスに遅れるシグナルは「kill -l」コマンドで確認できる。

  • 体表的なシグナル
    • SIGINT ・・・ 「Ctrl」+「C」と同じ(キーボードによるプロセス終了)
    • SIGKILL ・・・ 強制終了
    • SIGTSTP・・・「Ctrl」+「Z」と同じ(キーボードによるプロセス一時停止)

seqコマンド

seq

終了値になるまで加算して表示する

  • 構文
    1. seq 終了値
      終了値になるまで1ずつ加算されて表示される
      実行例
      $seq 5
      1
      2
      3
      4
      5
      

    2. seq 初期値 終了値
      初期値を設定したい場合
      実行例
      $ seq 2 5
      2
      3
      4
      5
      

    3. seq 初期値 増分 終了値
      加算される値を設定したい場合
      実行例
      $ seq 0 10
      0
      2
      4
      6
      8
      10
      

  • for文のループカウントでの利用例

    サンプルコード
    #!/bin/bash
    echo START
    
    for i in `seq 10`;
    do
        echo $i
    done
    
    echo END
    
    実行結果
    START
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    END
    
    

シェルスクリプトで四則演算

加算、減算、乗算、除算をするにはletを使う


サンプルコード
#!/bin/bash
echo START

aa=20
bb=10
echo $aa
echo $bb

let answer=aa+bb
echo $answer

let answer=aa-bb
echo $answer

let answer=aa*bb
echo $answer

let answer=aa/bb
echo $answer

echo END
出力結果
START
20
10
30
10
200
2
END
続きを読む

シェルスクリプト条件式

条件式と書式
[]で囲む形式と、testの2種類の書き方がある

整数の比較
整数A -eq 整数BAとBが等しければ真
整数A -ne 整数BAとBが等しくなければ真
整数A -ge 整数BA>=Bなら真
整数A -gt 整数BA>Bなら真
整数A -le 整数BA<=Bなら真
整数A -lt 整数BA<Bなら真

if [ 整数A 条件式 整数B ]; then
    真だった時の処理
fi
if test 整数A 条件式 整数B; then
    真だった時の処理
fi
while [ 整数A 条件式 整数B ]
do
   処理
done

文字列の比較
文字列A = 文字列BAとBが等しければ真
文字列A != 文字列BAとBが等しくなければ真

if [ 文字列A 条件式 文字列B ]; then
    真だった時の処理
fi
if test 文字列A 条件式 文字列B; then
    真だった時の処理
fi

ファイルの比較
-d ファイル名ファイルがディレクトリなら真
-e ファイル名ファイルが存在すれば真
-f ファイル名ファイルが存在して通常ファイルなら真
-x ファイル名ファイルが存在して実行ファイルなら真

if [ 条件式 ファイル名]; then
    真だった時の処理
fi
if test 条件式 ファイル名; then
    真だった時の処理
fi

シェルスクリプトの引数

シェルスクリプトに引数を渡す使い方サンプル

  1. test.shを作成
    #!/bin/bash
    echo START
    echo $0
    echo $1
    echo $2
    echo END
    

  2. test.shに実行権限を付ける
    $ chmod 700 test.sh
    
    シェルスクリプトはインタプリタなので実行するには、読み込み権限(4)も必要なので、実行権限(1)と合わせて(5)を指定がある。
    スクリプトは編集したい時もあるので書き込み権限(2)をつけてここでは7を指定している。

  3. 引数を2つ(「111」と「222」)指定してtest.shを実行する
    $ ./test.sh 111 222
    

  4. 実行結果 201605241516.png
    引数のアクセスには変数「$0」、「$1」、「$2」・・・でアクセスできる。
    「$0」の変数はは実行したコマンドが入る。

コマンドに別名をつける

alias コマンドに別名(エイリアス)を付けるコマンド
オプションなどを付けると長くなってしまう時など、短縮した別名(エイリアス)を付けて利用する事が可能。

  • コマンド「ls -la」に「ls」の別名(エイリアス)を付ける例
    $ alias ls='ls -la'
    

  • 設定したエイリアスを確認するには引数なしでaliasコマンドを実行する
    $ alias
    
    alias ls='ls -la'
    

  • 一時的にエイリアスを解除したい場合は、先頭に「\」バックスラッシュを付ける
    $ \ls
    

functionコマンド

function

シェルに関数を登録する

  • functionコマンドを使うとシェルに関数を登録できる
    $ function zzz(){ echo ZZZZZZ;}
    

  • 登録した関数はsetコマンドで確認できる
    $ set
    
    201605201901.png

    declareコマンドでも確認でき、-fオプションで関数のみ確認できる。
    $ declare -f
    

  • 登録した関数はシェルからコマンドと同じように実行できる。
    $ zzz
    
    201605201911.png


コマンドの結果出力をシェル変数に代入する

  • コマンドを$()で囲んで実行(以下の書式で実行)すると、出力結果をシェル変数に格納できる
    [シェル変数]=$([コマンド])
    

  • シェル変数ABCにlsコマンドの出力を格納
    $ ABC=$(ls)
    

  • シェル変数$ABCを出力
    $ echo $ABC
    

  • ()の変わりにバッククォートで囲っても同じ事が可能

ログインシェル

ログインシェル
  • ユーザログイン時に起動するシェルの事

  • /etc/passwordのファイルにユーザごとのログインシェルとして実行されるファイルが確認できる
    $ less /etc/passwd
    
    201605201006.png

  • ログインシェルは起動時に、さらに以下の順番でファイルを実行する
    1. /etc/profile
    2. [ユーザのホーム]/.bash_profile
    3. [ユーザのホーム]/.bash_login
    4. [ユーザのホーム]/.profile
    5. ※ファイルがない場合は実行されないだけで、必要であれば自分で作成しても良い
      ※/etc/profileがなく、/etc/profile.d/がある場合は/etc/profile.d/の中にある*.shファイルが実行される

バックグラウンドでジョブを動かす

    コマンドの最後に「&」をつけると、バックグラウンドで実行されるジョブになる

  • バックグラウンドで電卓ツールを起動する例
    $ gcaltool &
    

  • バックグラウンドで動いているジョブをフォアグラウンドに戻すには、fgコマンドを使う
    $ fg
    

niceコマンド

nice
優先度を設定してコマンドを実行する

  • 優先度には-20〜19の値が指定でき値が小さい程、優先度の高いプロセスとなる
  • 優先度がマイナスの値はroot権限で実行しないと指定できない
  • 優先度に「12」を指定してbcコマンドを実行例
    $ nice -n 12 bc
    

実行中のプロセスの優先順位を変更する

プロセスの優先順位について
  • プロセスには優先順位(NICE値)があり、-20〜19までの値が指定される。
  • 優先度が高いとCPUからのタイムスライスを優先で受けれられる。
  • NICE値は小さい程、優先順位が高い

NICE値の確認
  • プロセスのNICE値は以下のコマンドなどで確認できる
    $ top
    $ ps -l
    201605161219.png
    NIがNICE値

NICE値の変更(topコマンド)
  • topコマンドの実行中にNICE値の変更ができる。topコマンド実行中に「r」キーを押す。
    「PID to renice:」と表示されるので、NICE値を変更したいプロセスのPIDを入力。
    201605161404.png

  • 「Renice PID [PID] to Value:」と表示されるので、変更後のNICE(-20〜19)を指定する
    201605161416.png

NICE値の変更(reniceコマンド)
  • プロセスID「12345」の優先度を10に設定する例
    $ renice 18 -p 12345
    

テキストファイルのスペースをタブに変換する

unexpand

テキストファイルのスペースをタブに変換するコマンド

  • test.txtのスペース2つをタブに変換
    $ unexpand -t2 -a test.txt
    
    「-t」オプションでタブ1つに対するスペースの数を指定できる。
    「-a」オプションはファイル内すべてが対象で、これを省略すると行頭のスペースのみが変換対象となる。

テキストファイルを分割する

split

テキストファイルを分割するコマンド

  • テスト用にtest.txtを作成する
    111
    222
    333
    444
    555
    

  • test.txtを2行ごとに分割する
    $ split -l2 test.txt
    
    test.txtを分割した内容がm「xaa」「xab」「xac」という3つのファイルで作成される
    -iオプションで分割したい行数が指定でき、何も指定しない場合は1000行単位で分割される

    xaaの内容
    111
    222
    
    xabの内容
    333
    444
    
    xacの内容
    555
    

  • test.txtを10バイト単位で分割する
    $ split -b10 test.txt
    
    「-b」オプションを指定するとバイト単位で分割できる。

    xaaの内容
    111
    222
    33
    
    xabの内容
    3
    444
    555
    

  • 出力されるファイル名を数字の連番にする
    $ split -l2 -d test.txt
    
    出力ファイル
    x00
    x01
    x02
    
    「-d」オプションを指定するとx[連番数字]のファイル名で出力される

  • ファイル名の接頭のプリフィックスを変更したい場合
    $ split -l2 test.txt AAA
    
    出力ファイル
    AAAaa
    AAAab
    AAAac
    
    ファイル名の後に追加した文字が、ファイル名の接頭に追加される

タブをスペースに変換する

expand

テキストファイルのタブをスペースに変換する

  • file1.txtのスペースをタブ(4文字間隔)に変換する
    $ expand -t 4 file1.txt
    
    -tオプションでタブの文字間隔を指定できる。デフォルト(tオプションを指定しない場合)では8文字間隔のタブになる

  • file1.txtのタブをスペースに変換した内容をfile2.txtに保存する
    $ expand file1.txt > file2.txt
    

  • -iオプションを指定すると、行頭のタブのみがスペースに変換される
    $ expand -i file1.txt
    

文字列の置換を行う

sed

文字列の置換を行う

  • test.txtを作成
    11111
    22222
    33333
    44444
    55555
    
  • 文字列「33」を「00」に置換する
    $ sed 's/33/00/g' test.txt
    
    11111
    22222
    00003
    44444
    55555
    
    sed 's/置換対象の文字列/置き換え後の文字列/g' ファイル名
    
    最後の「g」を付けない場合、行で最初に見つかったところだけ置換になる
    sed 's/33/00/' test.txt
    
    11111
    22222
    00333
    44444
    55555
    

  • test.txtの1行目を削除して表示
    $ sed '1d' test.txt
    
    22222
    33333
    44444
    55555
    
  • test.txtの2行目から4行目を削除して表示
    $ sed '2,4d' test.txt
    
    11111
    55555
    
  • 結果をファイルに出力したい場合はリダイレクトすると良い
    $ sed '2,4d' test.txt > test.log
    
    test.logに出力されている
    $ cat test.log
    
    11111
    55555
    

コマンドの終了ステータス

コマンドは終了時にステータスを返していて、0(ゼロ)が返されると正常終了(成功)した事を意味し、正常しなければ0以外の数値を返している。

  • 直前のコマンドの終了ステータスは以下で確認できる。
    $ echo $?
    

  • コマンドが終了時に返す値は、それぞれのコマンドで指定されている。 LinuxのコマンドはPOSIX(Portable Operating System Interface)準拠で、コマンドの成功は「0」失敗の場合は「0」以外の数値を返す。
    Linuxのプログラムを作成する場合もこのPOSIXに準拠する事が推奨されている。

  • POSIX準拠のマクロがstdlib.hに定義されているので、C言語でプログラムする場合はプログラムの戻り値として正しく使えばPOSIX準拠となる。
    #define EXIT_FAILURE    1
    #define EXIT_SUCCESS    0
    

コマンドを連続実行する

コマンドを「;」「&&」「||」で繋ぐと、連続してコマンドを実行できる。

  • 「ls -l」のコマンドが実行され、終了したら「ls -la」のコマンドが実行される
    $ ls -l ; ls -la
    

  • 「ls -l」のコマンドが実行され、終了ステータスが0(ゼロ)の場合は次の「ls -la」コマンドが実行される
    $ ls -l && ls -la
    

  • 「ls -l」のコマンドが実行され、終了ステータスが0(ゼロ)以外の場合は「ls -la」コマンドが実行される
    $ ls -l || ls -la
    

コマンドの出力をディスプレイ(標準出力)とファイル両方に出力する

tee

teeコマンドを利用するとディスプレイ(標準出力)とファイル両方に結果を出力できる
teeコマンドは|(パイプ)で他の命令と組み合わせて利用する

  • ls -lのコマンドの出力をディスプレイ(標準出力)とファイル(test.txt)に出力する
    $ ls -l | tee text.txt
    
    結果はls -lコマンドの出力と同じものがtest.txtにも保存される

  • -a オプションでファイル出力は追記になる
    $ ls -l | tee -a test.txt
    

ファイルを最後の行から表示する

tac

tacコマンドを利用するとファイルを最後の行から表示できる

  • file1.txtを作成
    11111
    22222
    33333
    
    file1.txtを最後の行から表示させる
    $ tac file1.txt
    
    出力結果
    33333
    22222
    11111
    

  • ファイルは複数指定可能、ただし内容の連結はできない
    file2.txtを作成
    44444
    55555
    66666
    
    file1.txtとfile2.txtを最後の行から表示
    $ tac file1.txt file2.txt
    
    出力結果
    33333
    22222
    11111
    66666
    55555
    44444
    

シェル変数と環境変数

○シェル変数
  • シェルでのみ有効な変数の事
  • シェル変数を作成する手順、変数「HOGE」に文字列「hoge」を代入
    $ HOGE=hoge
    
  • シェル変数「HOGE」を出力
    $ echo $HOGE
    
    echoは文字列を出力するコマンド

  • 設定されているシェル変数は「set」コマンドで確認できる
    $ set
    
    setコマンドの出力に先ほど設定した変数「HOGE」が確認できる
    HOGE=hoge
    
  • シェル変数は、シェルで起動したプログラム(子プロセス)では値を引き継げない
    test1.shを作成して実行してみる
    $ vi test1.sh
    
    #!/bin/sh
    echo $HOGE
    
    作成したtest1.shを実行する
    ./test1.sh
    
    $HOGEは有効でないので何も出力されない
  • シェル変数をシェルで起動したプログラム(子プロセス)で使いたい場合は環境変数にする必要がある。


○環境変数
  • 環境変数のセットは「export」コマンドを使ってシェル変数を指定する事で設定できる。
    $ export HOGE
    
  • 設定した環境変数は「env」コマンドで確認できる。
    $ env
    
    設定したHOGEが確認できる
    HOGE=hoge
    
  • 環境変数はシェルで起動したプログラム(子プロセス)にも引き継ぐ事ができる。
    試しに、上で作成したtest1.shを実行する
    $ ./test1.sh
    
    HOGEは環境変数としてセットされているので出力される
    hoge
    
  • 環境変数から値(HOGE)を削除したい時はexportコマンドの-nオプションで削除できる
    環境変数から削除されるだけなので、シェル変数には残っている。
    export -n HOGE
    


○sourceコマンド
  • シェルで起動したプログラム(子プロセス)でシェル変数や環境変数をセットする事はできない
  • シェルスクリプトtest2.shを作成して実行
    $ vi test2.sh
    
    #!/bin/sh
    HOGE2=hoge2
    export HOGE2
    
    $ ./test2.sh
    
  • setコマンド、envコマンドでHOGE2を探しても見つからない(設定されていない事が確認できる)
  • 「source」コマンドを使うと正しく設定できる
    $ source test2.sh
    
  • setコマンド、envコマンドでHOGE2が設定されてる事が確認できる

WCコマンド

ファイルの行数、単語数、バイト数を調べるコマンド

$ wc ファイル名
行数 単語数 バイト数 ファイル名


$ wc test.txt
13 26 480 test.txt

vi(vim)エディタの操作メモ

左 「h」キー
上 「j」キー
下 「k」キー
右 「l」キー

「Ctrl」+「f」キー 1ページ(画面)先へ進む
「Ctrl」+「b」キー 1ページ(画面)前へ戻る

「0」キー 現在の行の先頭へ移動
「^」キー 現在の行の先頭へ移動(空白を除いた先頭へ移動)

「x」キー 一文字削除
「X」キー バックスペース
「d」キー2回 一行削除(カット)
「y」キー2回 一行コピー
「p」キー   ペースト
「u」キー  Undo(アンドゥ)直前の入力を取り消す
「.」キー  Redo(リドゥ)直前のUndo(アンドゥ)を取り消す
「/」キー+検索したい文字列  文字列検索「n」キーで次の文字列を検索「Shift」キー+「n」キーで前の文字列を検索

「H」キー 表示されている画面の一番上の行へ移動
「M」キー 表示されている画面の真ん中の行へ移動
「L」キー 表示されている画面の一番下の行へ移動
「G」キー ファイルの一番下の行へ移動
「1」+「G」キー ファイルの一番上の行(1行目)へ移動。数字の行へジャンプできる。

「:!」の後にコマンド(lsなど)を入力すると、エディタを終了する事なくコマンドが実行できる。

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。