2019-10-28_Linuxコマンド小ネタ

概要

今の案件ではシェルスクリプト組むことがないのですがしばらく触らないと忘れそうだったのでよく使うパターンをまとめることにしました。

cat

リダイレクトと合わせて、追記するパターンをよく使います。

終了文字列をシングルクォートで囲むことで、変数が展開されない (入力通りに追記される) テクニックがあります。シェルスクリプト内でconfigに自動追記したりするパターンでは便利です。

1
2
3
4
cat << 'FIN' >> ${output_file}
hogehoge
${piyo}
FIN

dateコマンド

表示フォーマットの指定

YYYY/MM/DD形式

1
date +"%Y/%m/%d"

YYYY-MM-DD形式

1
date +"%F"

よく使うフォーマット

パラメータ 説明 表示例
%F YYYY-MM-DD形式 2019-10-24
%Y 年を4桁で表示 2019
%y 年を下2桁で表示 19
%m 01..12
%d 日付 01..31
%H 00..23
%I 01..12
%M 00..59
%S 00..60
%a ロケール表示による曜日の省略名 Sun、日
%A ロケール表示での曜日の完全名 Sunday、日曜日

基準日を指定フォーマットで表示

2019年10月1日をYYYY/MM/DD形式で表示

1
2
date -d "20191001" +"%Y/%m/%d"
date -d "2019-10-01" +"%Y/%m/%d"

基準日からの加算・減算

2019年10月1日を基準日とし3日後を表示

1
date -d "20191001 3 days" 

指定フォーマットで表示もできる。

1
date -d "20191001 3 days" +"%Y/%m/%d"

2019年10月1日を基準日とし3日前を表示

1
date -d "20191001 3 days ago" 

指定フォーマットで表示もできる。

1
date -d "20191001 3 days ago" +"%Y/%m/%d"

sed

セパレーター

セパレーターになっている文字が置換文字列に含まれていると、セパレーターと区別できずにエラーになります。セパレーターは通常はスラッシュ/を使いますが@なども使用できるので置換文字列に含まれない記号を使用するとエラーが回避できます。

行削除

先頭1行を削る

1
sed '1d' ${file_name}

stat

権限を数値で取得する方法

1
2
# 権限(数値) ユーザー名 グループ名 ディレクトリorファイル名
stat --format='%a %U %G %n' ${target}

testコマンドのオプションとか条件とか

ifでよく使うけど忘れるので。

ファイル・ディレクトリ系

オプション 意味
-e ${taget} 対象が存在
-f ${taget} 対象が通常のファイル
-d ${taget} 対象がディレクトリ
-s ${taget} 空ファイルでない
-L ${taget} 対象がシンボリックリンク
${taget1} -ef ${taget2} 対象1が対象2のハードリンク

数値比較系

真の条件
${num1} -eq ${num2} 値1と値2が等しいとき(=)
${num1} -ne ${num2} 値1と値2が等しくないとき(!=)
${num1} -gt ${num2} 値1が値2より大きいとき(<)
${num1} -ge ${num2} 値1が値2より大きいか等しいとき(<=)
${num1} -lt ${num2} 値1が値2より小さいとき(>)
${num1} -le ${num2} 値1が値2より小さいか等しいとき(>=)