linuxコマンド私的メモ

cmp

2 つのファイルをバイト単位で比較します。
終了ステータスは、 入力ファイルの内容が同じであれば 0、 異なっていれば 1、 何か問題が発生すれば 2 です。

-s
異なるファイルに対しては何も表示せず、終了ステータスのみを返します。
1$ cmp -s <(echo -e "a\nb") <(echo -e "a\nb"); echo $?
20
3$ cmp -s <(echo -e "a\nb") <(echo -e "a\nb\n"); echo $?
41

comm

comm [-123] FILE1 [FILE2]
ソート済みの2つのファイルを行ごとに比較します。
他の比較ユーティリティと異なり、 comm の返す終了ステータスは比較結果に依存しません。 通常終了時は 0 を返し、エラー時は 0 以外を返します。

comm は二つの入力ファイルを読み込み、 共通な行および共通でない行をそれぞれ表示します。 一方の FILE が省略されると、その分は標準入力から読み込む。また FILE が `-' だった場合には、そのファイルには標準入力が用いられます。

オプションが与えられない場合、 comm は 3 列からなる出力を生成します。 第 1 列には FILE1 だけにしか含まれない行を、 第 2 列には FILE2 だけにしか含まれない行を、 そして第 3 列には両方のファイルに共通に含まれている行をそれぞれ出力します。 列は 区切りです。

-1
第 1 列の出力をしない。
-2
第 2 列の出力をしない。
-3
第 3 列の出力をしない。
-i
大文字と小文字を区別せずに行を比較します。
1$ comm <(echo -e "a\nb\nc\nd") <(echo -e "B\nc")
2	B
3a
4b
5		c
6d
7$ comm -1 -2 -i <(echo -e "a\nb\nc\nd") <(echo -e "B\nc")
8b
9c

cp

-f
保存先のファイルが開けない場合は、そのファイルを削除し、パーミッションに関係なく確認を求めずに新しいファイルを作成します。 ( -f オプションは、以前の -n オプションを上書きします)。
コピー前にターゲットファイルのリンクが解除されることはありません。 したがって、既存のアクセス権はすべて保持されます。

cut

cut ユーティリティは、各ファイルから各行の選択された部分を切り出し、標準出力に書き出す。

-b list
list で示したバイト位置だけを表示します。
-c list
list で示した文字位置だけを表示します。
-d delim
-f オプションと併用して使う。フィールドの区切り文字として、TAB ではなく delim を使用します。
-f list
list で示したフィールドだけを表示します。フィールド区切りのデフォルトは TAB です。
1$ cut -b 2 <(echo "abcde")
2b
3$ echo "こんにちは" | cut -c 2
45$ echo "a b c d e" | cut -f 2 -d ' '
6b

diff

-r
見つかった共通のサブディレクトリに diff を再帰的に適用します。
-s
2つのファイルが同じだったときも報告します。
-x pattern
ベースネームが pattern に一致するファイルやサブディレクトリを比較対象から除外します。 pattern は,fnmatch(3) によるシェル形式のグロビングを使用してマッチングされます。 複数の -x オプションを指定することができます。
1# ディレクトリ xz, yz を再帰的に比較。ただし log, tmp の各ディレクトリは比較対象外。
2diff -rs {x,y}z -x "log" -x "tmp"

du

-a
ファイル階層内の各ファイルのエントリを表示します。
-b
バイト単位で表示します。
-k
ブロック数を 1024 バイト (1 kiB) ブロック単位で表示します。
1# /DB ディレクトリでディスク使用量の多い順にソートして出力する
2du -abk /DB | sort -nr

envsubst

envsubst [OPTION] [SHELL-FORMAT]

シェルフォーマット文字列の環境変数を置換する。
標準入力が標準出力にコピーされ、$VARIABLE または ${VARIABLE} 形式の環境変数への参照が対応する値に置換される。環境変数 VARIABLE が未定義の場合は、空文字に置換される。 SHELL-FORMAT が与えられると、SHELL-FORMAT で参照される環境変数のみが置換され、それ以外の場合は、標準入力で発生するすべての環境変数参照が置換されます。

こちらで詳しく説明されています。
https://qiita.com/ko1nksm/items/2769edf52db7cd7b4b3d

1$ export FOO=BAR
2$ echo 'dont substitute $THIS but do substitute $FOO' | envsubst
3dont substitute  but do substitute BAR        <--- THISが未定義のため空になる
4$ echo 'dont substitute $THIS but do substitute $FOO' | envsubst $FOO
5dont substitute $THIS but do substitute $FOO  <--- 指定した変数のみ置換される

find

ファイル階層をたどる

書式

find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

説明

find ユーティリティは、リストされた各パスに対してディレクトリ ツリーを再帰的に下降させ、ツリー内の各ファイルに関して式(以下に示す「プライマリ」と「オペランド」で構成)を評価する。

オプションは次のとおりです:

-E
regexと-iregexで始まる正規表現を、基本正規表現(BRE)ではなく拡張正規表現として解釈します。 re_format(7) のマニュアルページでは、両方のフォーマットについて完全に説明されている。
-H
コマンドラインで指定された各シンボリックリンクに対して返されるファイル情報とファイルタイプ (stat(2) を参照) を、リンク自体ではなく、リンクによって参照されるファイルのものにするようにします。 参照されたファイルが存在しない場合、ファイル情報とファイルタイプはリンク自体のものになります。 コマンドライン上にないすべてのシンボリックリンクのファイル情報は、リンク自体のものとなります。
-L
各シンボリックリンクに対して返されるファイル情報とファイルタイプ(stat(2)を参照)を、リンク自体ではなく、リンクによって参照されるファイルのものとする。 参照されるファイルが存在しない場合、ファイル情報とファイルタイプはリンク自体のものになります。

このオプションは、非推奨の -follow primary と同等です。

-P
各シンボリックリンクに対して返されるファイル情報とファイルタイプ(stat(2)を参照)を、リンク自体のものにするように設定する。 これはデフォルトです。
-X
find を xargs(1) と組み合わせて安全に使用することを許可する。 ファイル名に xargs(1) が使用する区切り文字のいずれかが含まれている場合、標準エラーに診断メッセージが表示され、そのファイルはスキップされる。 区切り文字には、一重引用符(" ' ")、二重引用符(" ")、バックスラッシュ("˶")、スペース、タブ、改行文字があります。

ただし、「xargs -0」と併用する「-print0 primary」も効果的な選択肢として検討されるとよいでしょう。

-d
findに深さ優先の探索を実行させる。 このオプションは、IEEE Std 1003.1-2001("POSIX.1") で規定されている -depth primary に相当するBSD固有のものです。 詳しくは、PRIMARIESの説明を参照してください。
-s
findは、ファイル階層を辞書順、すなわち、各ディレクトリ内のアルファベット順で走査する。 注意:「find -s」と「find | sort」は異なる結果を与えるかもしれません。
-x
下降を開始したファイルのデバイス番号と異なるデバイス番号を持つディレクトリに、find が下降しないようにする。 このオプションは、非推奨の -xdev primary と同等です。

プライマリ

数値引数を取るすべてのプライマリでは、数値の前にプラス記号( + )またはマイナス記号( - )を付けることができます。 前にあるプラス記号は「n より大きい」ことを意味し、前にあるマイナス記号は「n より小さい」ことを意味し、どちらも「ちょうど n」を意味しません。

-atime n[smhdw]
最終アクセス時刻による条件指定。単位が指定されていない場合、ファイルの最終アクセス時刻と find が開始された時刻の差(24時間単位で切り上げ)が n 個の場合、このプライマリは真と評価される。

単位が指定されている場合、このプライマリは、ファイルの最終アクセス時刻と find が開始された時刻の差がちょうど n 単位である場合に真と評価される。 可能な時間単位は以下の通りです:

s       second
m       minute (60 seconds)
h       hour (60 minutes)
d       day (24 hours)
w       week (7 days)

例えば、"-atime -1h30m"のように、1つの -atime 引数に任意の数の単位を組み合わせることができる。単位は、おそらく + または - 修飾子と組み合わせて使用する場合にのみ有用です。

-maxdepth levels
検索開始ポイントから最大で levels で示される階層数のディレクトリまで検索します (levels は負ではない整数です)。 -maxdepth 0 を指定すると、テストやアクションの対象は検索開始ポイントだけになります。
-mtime n[smhdw]
最終更新日時による条件指定。単位が指定されている場合、ファイルの最終更新日時とfindが開始された日時の差がちょうど n 単位である場合に真と評価されます。 対応する時間単位については、-atime primaryの説明を参照してください。 単位が未指定の場合、単位 d を指定した場合と同じです。
-exec command [argument ...] ;
command を実行します。 command の返り値が 0 なら true を返します。 オプションの引数は command に渡すことができます。 式はセミコロン(";")で終了する必要があります。 シェルから find を呼び出す場合、シェルがセミコロンを制御演算子として扱うなら、引用符で囲む必要があるかもしれません。文字列「{}」が utilety 名や argument のどこかに現れると、それは現在のファイルのパス名で置き換えられます。 command は find が実行されたディレクトリから実行されます。 commandargument は、シェルのパターンや構成要素のさらなる拡張の対象にはならない。
1# find コマンドで ${RECEIVE_DIR} のファイル名を取得し、
2# ファイル名に日付を付けて ${BKUP_DIR} に移動する
3find ${RECEIVE_DIR}/ -maxdepth 1 -type f -name "*.gz" -exec basename {} ¥; | \
4xargs —no-run-if-empty -I mv -f ${RECEIVE_DIR}/{} ${BKUP_DIR}/${DATE}_{} 2>&
-prune
true を返します。 処理対象がディレクトリである場合、ディレクトリ内に入っていきません。
1# log または SELECT というディレクトリに対して true を返す
2find . -type d \( -name log -o -name SELECT \) -prune -o -type f -print
-L
各シンボリックリンクのファイル情報とファイルタイプ(stat(2)を参照)を、リンク自体ではなく、リンクによって参照されるファイルのものにします。参照されるファイルが存在しない場合、ファイル情報とファイルタイプはリンク自体のものになります。
-newerXY file
対象ファイルのタイムスタンプ X が、file のタイムスタンプ Y より新しい場合は true を返します。 X と Y の位置に記述する文字は、 以下の文字とします。
a	ファイルのアクセス日時
B	ファイルの i ノード生成日時
c	ファイルの i ノード変更日時
m	ファイルの更新日時
t	file に直接時間表現が書かれたとして解釈

組み合わせによっては、 無効になるものも発生します。 たとえば、 X に t を指定しても無効です。 またシステムによっては、 特定の組み合わせを実装していない場合があります。 たとえば B は、 すべてのシステムでサポートされているわけではありません。 指定された XY の組み合わせが、 無効や未サポートの場合は、 致命的エラーが発生します。 なお,-newermm は -newer と等価です。

! expression
これは単項 NOT 演算子です。 式が false の場合、true と評価されます。
1# 更新日時が2023年3月2日〜2023年3月6日のファイルの詳細リストを表示
2find -L . -type f -newermt "2023/03/02 00:00:00" ! -newermt "2023/03/06 23:59:59" |
3xargs ls -l

演算子(OPERATORS)

プライマリは、以下の演算子を用いて結合することができる。 演算子は優先順位の低い順に記載されています。

( expression )
括弧で囲まれた式が true と評価された場合、true と評価されます。
! expression
-not expression
単項のNOT演算子です。 式が false の場合、true と評価されます。
-false
常に false です。
-true
常に true です。
expression expression
expression -a expression
expression -and expression
-a, -and 演算子は、論理的なAND演算子です。 2つの式の並置によって暗示されるため、指定する必要はありません。 式は、両方の式が true である場合に true と評価されます。 2番目の式は、1番目の式が false の場合、評価されません。 -andはPOSIX には準拠していません。
expression -o expression
expression -or expression
-o, -or 演算子は、論理的なOR演算子です。 この式は、第1式または第2式のいずれかが true である場合に true と評価されます。 最初の式が true である場合、2番目の式は評価されません。 -orはPOSIX には準拠していません。

すべてのオペランドとプライマリは、findを実行するための別々の引数でなければなりません。 それ自身が引数を取るプライマリは、各引数が find を実行するための別々の引数であることを期待します。

ftp

put ローカルマシンのファイル名 [リモートマシンに出力するファイル名]

grep

-n
各出力行の前には、1行目から始まるファイル内の相対的な行番号が付きます。 行番号カウンターは、ファイルを処理するごとにリセットされます。 このオプションは、-c, -L, -l, または -q が指定されている場合、無視されます。
-v
選択された行は、指定されたパターンのいずれにも一致しない行です。
-w
マッチする部分が完全な単語を形成するときにのみ、その行を選択します。 -x も指定されている場合、このオプションは効果がありません。
-x
パターンが行全体とぴったりマッチしたときにのみ、その行を選択します。
-H
各々のマッチに対してそのファイル名を表示します。
-I
バイナリファイルを無視します。 このオプションは、-binary-file=without-match オプションと同等です。

hexdump

ファイルの内容を 16 進数、10 進数、8 進数、ASCII 文字で表示します。

-C
標準的な 16 進数 + ASCII での表示。 入力オフセットを 16 進数で表示し、その後に、入力データを 1 バイトずつ 2 桁の 16 進数で表現し、それを 1 行当たり 16 個、空白で区切って表示します。 その後に、2 つの '|' で囲まれた中に同じ 16 バイトを %_p フォーマットで表示します。
-v
入力データをすべて表示するようになります。 -v オプションを指定しない場合は、直前の出力行と (入力オフセット以外が) 同じ内容の行は、何行であっても、ただ 1 個のアスタリスクからなる 1 行に置き換えられます。

hostname

現在システムのホスト名の設定と変更

-s
出力された名前からドメイン情報を削除します。

ls

-R
見つかったサブディレクトリを再帰的にリスト表示します。

vmstat

仮想メモリの統計を報告

xargs

xargs ユーティリティは、スペース、タブ、改行、ファイル終端の区切られた文字列を標準入力から読み込み、その文字列を引数としてユーティリティを実行します。

コマンドラインで指定された引数は、各呼び出し時にユーティリティに与えられ、その後に xargs の標準入力から読み込まれた引数がいくつか続きます。 これは、標準入力がなくなるまで繰り返されます。

スペース、タブ、改行は、シングルクォート、ダブルクォート、バックスラッシュを使用して引数に埋め込むことができます。 シングルクォートは、改行を除くすべての非シングルクォート文字を、マッチするシングルクォートまでエスケープします。 二重引用符は、改行を除くすべての二重引用符以外の文字を、一致する二重引用符までエスケープします。 改行を含むすべての1文字は、バックスラッシュでエスケープすることができます。

-I replace-str
initial-arguments 中で文字列 replace-str が現れるすべての箇所を、 標準入力から読み込んだ名前で置き換えます。 なお、 標準入力中にクォートされていない空白があっても、 それは入力項目の区切りにはなりません。 区切り文字は改行文字だけになります。 -x と -L 1 の指定を暗に含みます。
-i[replace-str], --replace[=replace-str]
このオプションは、 replace-str が指定されていれば、 -Ireplace-str の同義です。引数 replace-str が省略されていれば、 -I{} と同じことになります。 このオプションは非推奨です。-I を使ってください。
--no-run-if-empty
標準入力に空白しか含まれていない場合は、 指定したコマンドを実行しません。 通常では、 入力が全くない場合でも、 コマンドが一回は実行されます。 このオプションは GNU 拡張です。
-t
実行するコマンドを、実行直前に標準エラーにエコーします。

関連ページ