Linuxコマンドラインとshellスクリプトプログラミング大全(三)


十二、提示データ


入力と出力
標準ファイル記述子
0 stdIN標準入力
1 stdOUT標準出力
2 stdERR標準エラー
リダイレクトエラー
                  1.リダイレクトエラーのみ
 ls -al badfile 2>test1         ##2> 

                  2.リダイレクトエラーとデータ
ls -al test test2 test3 badtest 2>test4 1>test5

### 2> test4 ,1> test5 

ls -al test test3 test4 badtest &> test7

### &> , 


スクリプトで出力をリダイレクト
1.一時リダイレクト
出力リダイレクトを使用して、出力情報をstdERRファイル記述子にリダイレクトします.ファイル記述子にリダイレクトする場合は、ファイル記述子の数の前に&
2.永続リダイレクト
execコマンドを使用して、shellにスクリプトの実行中に特定のファイル記述子にリダイレクトするように伝えます.
##  , &
echo "this is an error" >&2
echo "this is normal output"

##  , exec 
exec 2>testerror # 
echo "this is the start of the script" ## 
echo "now redirecting all output to another location" ## 


exec 1>testout ## 
echo "this is a test should go to testout file" ## testout 
echo "this line should go to testerror file" >&2 ## testerror 

スクリプトへの入力のリダイレクト
execコマンドでは、stdINをLinuxシステム上のファイルにリダイレクトできます.
exec 0

独自のリダイレクトを作成
## 1  
exec 3>testout
echo "this should be stored in the file " >&3
echo "this should be on the screen"
## 2  
exec 3>&1  ## 3 1, STDOUT
exec 1>testout  ##STDOUT 
echo "this should store in the output file"
echo "along with this line"
exec 1>&3 ##STDOUT 
echo "now things should be back to normal"
## 3  
exec 6
exec 3<>testfile
read line &3
## 5  , &-, , 
exec 3>&-

オープンファイル記述子のリスト
 
##   lsof 
## lsof -a -p $$ -d 0,1,2,3,4,5,6,7,8,9
exec 3>testfile1
exec 5

コマンド出力のブロック
stdERRを/dev/nullという特殊なファイルにリダイレクトできます.
ls -al >/dev/null

一時ファイルの作成
mktemp testing.XXXXXX

ファイル名テンプレートを指定します.テンプレートには任意のテキストファイル名を含めることができ、ファイル名の末尾に6つのXを追加すればいいです.mktempコマンドは、6つのXを6文字で置き換え、システムの起動時に削除されません.-tオプションを使用すると、mktempコマンドはシステムの一時ディレクトリにファイルを作成するように強制されます.このオプションを使用すると、mktempコマンドは一時ファイルのフルパスを返し、/tmpディレクトリのファイルはシステム起動時に削除されます.-dオプションは一時ディレクトリを作成する
## 
#   mktemp testing.XXXXXX,mktemp 6 6 X, 
# -t mktemp /tmp , , 
# -d 
tempfile=$(mktemp test.XXXXXX)
exec 3>$tempfile
echo "This script writes to temp file $tempfile"
echo "This is the first line" >&3
echo "This is the second line" >&3
echo "This is the thrid line" >&3
exec 3>&-
echo "Done creating temp file.The contents are:"
cat $tempfile
rm -f $tempfile 2> /dev/null

メッセージの記録
teeコマンドは出力をディスプレイとログファイルに同時に送信できます.コマンドフォーマット:tee filename、-aオプションはデータをファイルに追加します.
##  
# tee , tee filename
#  : date | tee -a testfile
# -a 

十三、制御スクリプト


しょりしんごう
    1.Linux常用信号
信号値の説明
1 SIGHUP保留プロセス
2 SIGINTプロセスの終了
3 SIGQUIT停止プロセス
9 SIGKILL無条件終了プロセス
15 SIGTERMできるだけプロセスを終了する
17 SIGSTOP無条件でプロセスを停止するが、プロセスを終了するわけではない
18 SIGTSTPはプロセスを停止または一時停止するが、プロセスは終了しない
19 SIGCONT運転停止プロセスの継続
    2.生成信号:割り込みプロセスCtrl+C一時停止プロセスCtrl+Z
##  
trap commands signals

3.キャプチャスクリプトの終了
trap commands EXIT

4.取得を変更または削除します.取得が変更される前に信号が受信された場合、スクリプトは最初のtrapコマンドに従って処理されます.
##  trap 
trap "echo 'sorry,I have trapped ctrl-c'" SIGINT
count=1
while [ $count -le 10 ]
do
	echo "Loop #$count"
	sleep 1
	count=$[ $count + 1 ]
done
#  , 
trap "echo goodbye..." EXIT
#  
trap -- SIGINT

バックグラウンドモードでスクリプトを実行
    1.バックグラウンドでスクリプトを実行し、コマンドの後に&符を付けるといいです.ターミナルセッションが発売され、バックグラウンドプロセスも終了します.
    2.非コンソールでスクリプトを実行しnohupコマンドを使用
nohup ./test1.sh &

さぎょうせいぎょ
    1.≪ジョブの表示|View Job|emdw≫:jobs、プラス記号付きジョブはデフォルト・ジョブとして扱われ、マイナス記号付きジョブは次のデフォルト・ジョブであり、いつでもプラス記号付きジョブとマイナス記号付きジョブが1つしかありません.
    2.停止したジョブを再起動するには:
バックグラウンドモード再起動:bgにジョブ番号を付ける
フロントモード再起動:fgにジョブ番号を付ける
謙譲度を整える
スケジューリングの優先度は-20(最優先度)から+19(最優先度)までです.デフォルトではshellは優先度0ですべてのプロセスを開始します.
1.niceコマンドは、コマンドをより低い優先度で実行させ、優先度を上げることはできません.
nice -n 10 ./test4.sh> test4.out &( n)

nice -10 ./test4.sh> test4.out &( n)

2.reniceコマンド:システム上で実行されているコマンドの優先度を変更する
renice -n 10 -p 5055    ##(5055 10)

あなたのプロセスに対してのみreniceを実行できます
#reniceでのみプロセスの優先度を下げることができます
#rootユーザーはreniceでプロセスの優先度を任意に調整できます(優先度を上げることができます)
タイミング運転ジョブ
    1. atコマンド
基本フォーマットat[-f filename]time
≪時間フォーマット|Time Format|oem_src≫:10:15などの標準的な時間および分フォーマット
AM/PMインジケータ、例えば10:15 PM
now,noon,midnight,teetimeなどの特定の命名可能な時間
MMDDYY、MM/DD/YYまたはDD.MMなどの標準日付フォーマット.YY
Jul 4またはDec 25などのテキストフォーマット
指定時間増分現在時間+25 min、明日10:15 pm、10:17+7日
atqは、システム内で待機しているジョブを表示できます.
atrmは待機中のジョブを削除できます
    2.定期的に実行する必要があるスクリプト
--cronスケジュール
書式:min hour dayofmonth month dayofweek command 1
特定の値、値の範囲、またはワイルドカードを使用してエントリを指定できます.
--cronスケジュールcrontab-lの構築
--cronディレクトリを参照
/etc/ディレクトリの下に4つの基本ディレクトリがあります.hourly,daily,weekly,monthly,スクリプトを毎日1回実行する必要がある場合は、スクリプトをdailyディレクトリにコピーすればよい
--anacronプログラム
あるジョブはシャットダウンで実行時間を逃したため、anacronはできるだけ早くジョブを実行し、cronディレクトリにあるのみを処理し、一般的に/etc/anacrontabファイルで
書式:period delay identifier command
peroidは、ジョブがどのくらい実行されるかを定義し、日単位でidentifierエントリは、ログエラーとエラーメール内のジョブを一意に識別するための特別な非空文字列です.commandエントリにはrun-partsプログラムとcronスクリプトディレクトリ名が含まれています.
新しいshell起動スクリプトの使用
ユーザーがログインすると、次のファイルが順番に検索されます.順序値の低いファイルが見つかった場合、検索は続行されません.
$HOME./bashrc,$HOME/.bash_profile,$HOME/.bash_login,$HOME/.profile