私的linux逆引きリファレンス
目次
2つのファイルの内容が同じかどうかを確認するには?
cmp -s
コマンドを使用すると、2 つのファイルをバイト単位で比較し、内容が同じであれば何も表示せず終了ステータス 0
を返します。内容が異なる場合も何も表示せず終了ステータス 1
を返し、何らかの問題が発生した場合には終了ステータス 2
を返します。
以下は cmp -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
最初のコマンドでは、両ファイルの内容が同じため終了ステータスが 0
になります。2番目のコマンドでは、ファイルの内容が異なるため終了ステータスが 1
になります。
2つのファイルを比較して、それぞれのファイルに特有の行や共通する行を確認するには?
comm
コマンドは、2つのソート済みファイルを比較し、共通の行とそれぞれのファイルにのみ存在する行を表示します。デフォルトでは、3列の出力が得られます。具体例として、次のコマンドを使用すると、ファイル内容が次のように表示されます:
1$ comm <(echo -e "a\nb\nc\nd") <(echo -e "B\nc")
2 B
3a
4b
5 c
6d
この出力では、第 1 列には FILE1
のみに含まれる行(a
, b
, d
)、第 2 列には FILE2
のみに含まれる行(B
)、第 3 列には両方のファイルに共通する行(c
)が表示されます。
特定の列を表示しないようにするには、次のオプションを使用します:
-1
:第 1 列の出力をしない。-2
:第 2 列の出力をしない。-3
:第 3 列の出力をしない。
例えば、第 1 列と第 2 列を表示せず、大文字と小文字を区別せずに行を比較するには、次のコマンドを使用します:
1$ comm -1 -2 -i <(echo -e "a\nb\nc\nd") <(echo -e "B\nc")
2b
3c
このコマンドでは、-1
と -2
オプションで第 1 列と第 2 列が表示されず、-i
オプションにより大文字と小文字が区別されないため、b
と c
だけが出力されます。
ファイルコピー時に保存先ファイルを強制的に上書きするには?
cp
コマンドの -f
オプションは、保存先のファイルが開けない場合に、そのファイルを削除し、パーミッションに関係なく確認を求めずに新しいファイルを作成します。このオプションは、以前に指定された -n
オプションを上書きします。また、コピー前にターゲットファイルのリンクが解除されることはなく、既存のアクセス権はすべて保持されます。
例えば、次のコマンドは source.txt
を destination.txt
にコピーしますが、destination.txt
が存在しアクセスできない場合、ファイルを削除して新しいファイルを作成します:
1$ cp -f source.txt destination.txt
このコマンドでは、destination.txt
が存在していても、アクセス権に関係なく確認なしで強制的に上書きされます。
テキストファイルの各行から特定のバイト位置や文字位置、またはフィールドを抽出して表示するには?
cut
コマンドを使用して、行から特定の部分を切り出すことができます。具体的には以下のオプションがあります:
バイト位置を表示するには、
-b
オプションを使用します。例えば、次のコマンドは各行から2番目のバイトを表示します:1$ cut -b 2 <(echo "abcde") 2b
文字位置を表示するには、
-c
オプションを使用します。例えば、次のコマンドは日本語の文字列から2番目の文字を表示します:1$ echo "こんにちは" | cut -c 2 2ん
フィールドだけを表示するには、
-f
オプションを使用します。デフォルトではTABがフィールド区切り文字として使用されますが、区切り文字を変更するには-d
オプションを併用します。例えば、次のコマンドはスペースをフィールド区切り文字として使用し、2番目のフィールドを表示します:1$ echo "a b c d e" | cut -f 2 -d ' ' 2b
任意のサイズのファイルを作成するためには?
dd
コマンドを使用すると、任意のサイズのファイルを作成することができます。このコマンドは、ファイルの変換とコピーを行います。具体的には、if
オプションで指定した入力ファイルからデータを読み込み、of
オプションで指定した出力ファイルに書き込みます。bs
オプションでブロックサイズを指定し、count
オプションで読み込むブロックの数を指定します。
例えば、7MB のNULLファイルを作成するには、次のコマンドを使用します:
1$ dd if=/dev/zero of=null_7MB bs=1M count=7
このコマンドでは、/dev/zero
から 1MB 単位で 7 回読み込み、null_7MB
という名前のファイルに書き込みます。出力結果として、ファイルサイズが 7340032 バイトであることが確認できます。
また、20 バイトのランダムデータファイルを作成するには、次のコマンドを使用します:
1$ dd if=/dev/urandom of=my_random bs=1 count=20
このコマンドでは、/dev/urandom
から 1 バイト単位で 20 回読み込み、my_random
という名前のファイルに書き込みます。出力結果として、20 バイトのランダムデータが生成されることが確認できます。生成されたファイルの内容を base64 形式で表示するには、次のコマンドを使用します:
1$ cat my_random | base64
ファイルやディレクトリを再帰的に比較するには?
diff
コマンドの -r
オプションを使用することで、見つかった共通のサブディレクトリに対しても diff
を再帰的に適用し、ディレクトリ内のファイルも含めて比較することができます。例えば、次のコマンドはディレクトリ dir1
と dir2
を再帰的に比較します:
1$ diff -r dir1 dir2
このコマンドは dir1
と dir2
内の全てのファイルとサブディレクトリを比較し、その違いを表示します。
2つのファイルを比較して、内容が同じ場合にもその結果を報告するには?
diff
コマンドの -s
オプションを使用することで、2つのファイルが同じであった場合にも、その旨を報告することができます。例えば、次のコマンドは file1.txt
と file2.txt
の内容を比較し、同じであればその旨を報告します:
1$ diff -s file1.txt file2.txt
2ファイル file1.txt と file2.txt は同一です
このコマンドは、両ファイルが同一であることを示すメッセージを出力します。
ディレクトリの比較時に特定のファイルやサブディレクトリを比較対象から除外するには?
diff
コマンドの -x
オプションを使用することで、ベースネームが指定したパターンに一致するファイルやサブディレクトリを比較対象から除外できます。複数の -x
オプションを使用して、複数のパターンを指定することも可能です。例えば、次のコマンドはディレクトリ dir1
と dir2
を再帰的に比較し、log
と tmp
のディレクトリを除外します:
1$ diff -rs dir1 dir2 -x "log" -x "tmp"
このコマンドは log
と tmp
ディレクトリを除外して、その他のファイルとサブディレクトリを比較します。
ファイルを比較した結果、内容が異なる場合だけを簡潔に報告するには?
diff
コマンドの -q
または --brief
オプションを使用することで、ファイルが異なるかどうかだけを簡潔に報告することができます。例えば、次のコマンドは file1.txt
と file2.txt
の違いを簡潔に報告します:
1$ diff file1.txt file2.txt
21c1
3< aaa
4---
5> abc
6
7$ diff -q file1.txt file2.txt
8ファイル file1.txt と file2.txt は異なります
このコマンドは、ファイルが異なるかどうかだけを示すメッセージを出力します。
(サブディレクトリを含む)ディレクトリ内で、ディスク使用量が最も大きいファイルを特定するには?
du
コマンドを使用してディレクトリ内のディスク使用量を表示し、最もディスク使用量が大きいファイルを特定することができます。具体的には、次のコマンドを使用します:
1$ du -abk /DB | sort -nr | head -n 10
このコマンドの説明は以下の通りです:
-a
オプションは、ディレクトリ内のすべてのファイルとサブディレクトリのエントリを表示します。-b
オプションは、ディスク使用量をバイト単位で表示します。-k
オプションは、ディスク使用量を 1024 バイト (1 kiB) ブロック単位で表示します。sort -nr
コマンドは、ディスク使用量を数値として逆順にソートします。head -n 10
コマンドは、最もディスク使用量が大きい上位10ファイルを表示します。
このコマンドを実行することで、指定したディレクトリ内でディスク使用量が最も大きいファイルやサブディレクトリを簡単に特定することができます。
設定ファイルやテンプレート内で、特定の環境変数だけを動的に置換し、他の環境変数はそのままにしておくには?
envsubst
コマンドを使用すると、設定ファイルやテンプレート内で特定の環境変数だけを動的に置換し、他の環境変数はそのままにすることができます。これにより、設定ファイルの一部だけを変数に基づいて更新し、固定部分は変更せずに済みます。
具体的な使用例は以下の通りです:
すべての環境変数を置換する場合:
1$ export FOO=BAR 2$ echo 'dont substitute $THIS but do substitute $FOO' | envsubst 3dont substitute but do substitute BAR
この例では、未定義の
$THIS
は空文字に置換され、定義された$FOO
はBAR
に置換されます。すべての環境変数を置換する際に使います。特定の環境変数のみを置換する場合:
1$ echo 'dont substitute $THIS but do substitute $FOO' | envsubst '$FOO' 2dont substitute $THIS but do substitute BAR
この例では、指定した
$FOO
のみが置換され、$THIS
はそのまま残ります。設定ファイルやテンプレートで特定の変数だけを更新したい場合に便利です。
このようにすることで、設定ファイルの一部を動的に変更し、他の部分は固定することができます。
特定のディレクトリ内で、ファイルタイプに基づいてファイルを検索し、検索する階層を制限するには?
find
コマンドを使用すると、指定したディレクトリ内で特定のファイルタイプだけを検索し、探索する階層を制限できます。たとえば、指定したディレクトリ内で通常のファイルだけを検索し、階層1までのファイルのみを対象にすることができます。
1# 指定ディレクトリで通常のファイルだけを検索し、階層1まで探索する
2find ${RECEIVE_DIR}/ -maxdepth 1 -type f
特定のディレクトリやファイルを検索結果から除外し、それ以外のファイルをリストアップするには?
find
コマンドの -prune
オプションを使うと、特定のディレクトリやファイルを検索対象から除外することができます。このオプションを使用することで、指定したディレクトリやファイルを検索結果から除外し、他のファイルだけを表示することができます。
1# log または SELECT というディレクトリを除外し、その他のファイルを表示する
2find . -type d \( -name log -o -name SELECT \) -prune -o -type f -print
更新日時やタイムスタンプに基づいてファイルを絞り込み、指定の期間内のファイルを検索するには?
find
コマンドを使って、ファイルの更新日時やタイムスタンプに基づいてファイルを検索することができます。これにより、特定の期間内に更新されたファイルだけをリストアップできます。たとえば、ある日時のファイルだけを見つけたい場合や、指定した日時の範囲内にあるファイルを検索する場合に便利です。
1# 2023年7月19日までに更新されたファイルを検索する
2find . -name "*.txt" -newermt "20230718 23:59:59" ! -newermt "20230719 23:59:59"
タイムスタンプが指定ファイルよりも新しいファイルを見つけるには?
find
コマンドの -newer
オプションを使用すると、指定したファイルのタイムスタンプよりも新しいファイルを検索することができます。この方法は、ある基準となるファイルよりも更新されたファイルを特定するのに役立ちます。
1# 指定ファイルよりも新しく更新されたファイルを検索する
2find . -name "*.txt" -newer somefile.txt
ファイルをリモートマシンに転送するときにファイル名を変更するには?
ftp
コマンドを使用すると、ローカルマシン上のファイルをリモートマシンに転送することができます。この際、リモートマシン上でのファイル名を指定することも可能です。転送する際に、リモートマシンでのファイル名を異なる名前に設定することで、リモートサーバー上での管理がしやすくなります。
1# ローカルファイル localfile.txt をリモートマシンに転送し、リモートマシンでは remote_file.txt として保存する
2ftp> put localfile.txt remote_file.txt
ディレクトリ内のファイルを検索する際に、バイナリファイルとテキストファイルの違いを確認する方法は?
file
コマンドを使用して、複数のファイルがバイナリファイルかテキストファイルかを一度に確認できます。
1$ file /usr/bin/some_binary_file /usr/bin/some_text_file
2/usr/bin/some_binary_file: data
3/usr/bin/some_text_file: ASCII text
バイナリファイルを除外してテキストファイルのみを対象にするには、grep
コマンドの -I
オプションを使用します。
1$ grep "search_pattern" /usr/bin/*
2/usr/bin/some_binary_file:search_pattern
3/usr/bin/some_text_file:search_pattern
4
5$ grep -I "search_pattern" /usr/bin/*
6/usr/bin/some_text_file:search_pattern
ファイルの内容を検索する際に、検索結果に行番号も表示させるには?
grep
コマンドの -n
オプションを使用します。これにより、検索結果に各行の行番号が表示されます。
1$ grep "example" sample.txt
2This is an example line.
3Another example line here.
4
5$ grep -n "example" sample.txt
62:This is an example line.
75:Another example line here.
ファイルの内容を検索する際に、指定したパターンに一致しない行だけを表示させるには?
grep
コマンドの -v
オプションを使用します。これにより、指定されたパターンに一致しない行だけが表示されます。
sample.txt
の内容:
1This is a test line.
2This is an example line.
3Another test line.
4Yet another line.
5Another example line here.
実行例:
1$ grep "example" sample.txt
2This is an example line.
3Another example line here.
4
5$ grep -v "example" sample.txt
6This is a test line.
7Another test line.
8Yet another line.
ファイルの内容を検索する際に、単語全体として一致する行のみを表示させるには?
grep
コマンドの -w
オプションを使用します。これにより、検索パターンが単語全体として一致する行のみが表示され、単語の一部として含まれる場合は表示されません。
1$ grep "cat" sample.txt
2The catalog for the new books is available online.
3The educational material was very thorough.
4I spotted a bobcat while hiking in the forest.
5The cat is on the roof.
6The playful cat! Meowed loudly.
7I saw a cat-like creature in the yard.
8
9$ grep -w "cat" sample.txt
10The cat is on the roof.
11The playful cat! Meowed loudly.
12I saw a cat-like creature in the yard.
ファイルの内容を検索して、指定したパターンと完全一致する行を表示するには?
grep
コマンドの -x
オプションを使用します。これにより、行全体が指定したパターンと完全に一致する場合のみ、その行が表示されます。
1$ grep "exact match line" sample.txt
2exact match line here.
3A line with exact match line in it.
4
5$ grep -x "exact match line" sample.txt
6exact match line
ファイルの内容を検索する際に、検索結果にファイル名も含めて表示させるには?
grep
コマンドの -H
オプションを使用します。これにより、検索結果にファイル名が含まれるようになります。
1$ grep "example" sample.txt
2This is an example line.
3Another example line here.
4
5$ grep -H "example" sample.txt
6sample.txt:This is an example line.
7sample.txt:Another example line here.
複数のファイルを検索する際に、出力結果からファイル名の表示を取り除くには?
grep
コマンドの -h
オプションを使用します。これにより、複数のファイルを検索する際に出力からファイル名のプレフィックスが削除されます。
1$ grep "example" file1.txt file2.txt
2file1.txt:This is an example line.
3file2.txt:Another example line here.
4
5$ grep -h "example" file1.txt file2.txt
6This is an example line.
7Another example line here.
ファイルを検索する際に、バイナリファイルを無視してテキストファイルだけを対象にするには?
grep
コマンドの -I
オプションを使用します。これにより、バイナリファイルを無視してテキストファイルのみが検索対象となります。
1# ファイルがバイナリかテキストかを確認するには、`file` コマンドを使用する
2$ file *
3some_binary_file: data
4some_text_file: text
5
6$ grep -Il "^[^#]*\s*exec\s" *
7some_text_file
ファイル内の特定のパターンが含まれるファイルのみをリストアップするには?
grep
コマンドの -l
オプションを使用します。これにより、パターンにマッチする行を含むファイル名のみが出力されます。
1$ grep "search" file.txt
2search term
3another search term
4
5$ grep -l "search" file.txt
6file.txt
特定の文字列を含まないファイル名だけをリストするには?
grep
コマンドの -L
オプションを使用します。
-L
オプションは、指定した文字列を含まないファイルの名前だけを標準出力に表示します。
1$ cat normal.txt
2normal
3
4$ cat warning.txt
5warning
6
7$ cat error.txt
8error
9
10$ grep -L 'error' normal.txt warning.txt error.txt
11normal.txt
12warning.txt
テキストから特定のパターンにマッチする部分だけを抽出し、それぞれを個別の行に表示するには?
grep
コマンドの -o
オプションを使うと、マッチした部分だけを表示し、それぞれを別の行に出力できます。
1$ echo "State of A : RUN State of B : STOP State of C : RUN" | \
2grep -Eo '(\S+\s+){4}\S+'
3State of A : RUN
4State of B : STOP
5State of C : RUN
ファイル内の固定文字列にマッチする行を検索するには?
grep
コマンドの -F
オプションを使うと、パターンを固定文字列として扱います。一方、-F
オプションを使用しない場合は、パターンが正規表現として扱われます。
1$ cat file.txt
2apple pie
3apple (pie)
4apple.pie
5apple+pie
6
7$ grep -F "apple.pie" file.txt
8apple.pie
9
10$ grep "apple.pie" file.txt
11apple pie
12apple.pie
13apple+pie
パターンファイルを使って、ファイル内の行を検索するには?
grep
コマンドの -f
オプションを使用すると、パターンファイルから複数のパターンを読み込み、それらのパターンでファイル内のテキストを検索することができます。
以下の例では、grepを使ってcsvの1〜4カラムがユニークな行のみを出力します。
1$ cat sample.csv
220230830,52678,004,Apple,21
320230830,52678,004,Apple,20
420230830,52678,004,Apple,19
520230831,47689,001,Orange,15
620230901,47620,002,Grape,29
7
8$ cut -d, -f 1-4 sample.csv | uniq -d # uniqコマンドの-dオプションは重複行のみを出力する
920230830,52678,004,Apple
10
11$ grep -vF -f <(cut -d, -f 1-4 sample.csv | uniq -d) sample.csv
1220230831,47689,001,Orange,15
1320230901,47620,002,Grape,29
-f FILE
: 指定したファイルからパターンを読み込みます。この例ではプロセス置換を使用して、cut
とuniq
コマンドの出力をパターンとして直接grep
に渡します。-v
: マッチしない行を表示します。-F
: パターンを固定文字列として扱います。- プロセス置換 (
<(...)
):cut
とuniq
コマンドの出力を一時的なファイルとしてgrep
コマンドに渡すために使用しています。
ファイル内で特定のパターンを検索し、結果を表示せずにマッチする文字列が見つかった時点で検索を終了するには?
grep
コマンドで出力を抑制し、最初にマッチした時点でスキャンを終了するには、-q
(または --quiet
または --silent
)オプションを使用します。このオプションを指定すると、マッチの有無だけが判定され、通常の出力が抑制されます。
1$ ### bash配列の存在チェック ###
2$ array=('apple' 'orange' 'banana' 'peach')
3$ grep -wq "banana" <<< "${array[@]}"
4$ echo $?
50
6$ grep -wq "bana" <<< "${array[@]}"
7$ echo $?
81
ディレクトリ内のファイルを再帰的に検索する際、ヒットしたシンボリックリンクのリンク先をたどるかどうかを制御するには?
ディレクトリ内のファイルやシンボリックリンクを再帰的に検索する際、シンボリックリンクをたどるかどうかを制御するには、-r
(または --recursive
)オプションと -R
オプションを使用します。
-r
(または--recursive
)オプション: シンボリックリンクがコマンドラインに指定されている場合に限り、各ディレクトリ内のすべてのファイルを再帰的に読み込みます。ファイルを指定しない場合は、現在の作業ディレクトリが検索対象となります。-R
オプション: 各ディレクトリ内のすべてのファイルを再帰的に読み込みます。また、すべてのシンボリックリンクもたどります。これは、-r オプションとは異なり、シンボリックリンクも含めて検索を行います。
1$ ls -l
2合計 4
3-rw-r--r--. 1 dam dam 12 9月 3 16:59 file1
4lrwxrwxrwx. 1 dam dam 7 9月 3 17:00 link_to_dir2 -> ../dir2
5lrwxrwxrwx. 1 dam dam 13 9月 3 17:00 link_to_file2 -> ../dir2/file2
6
7$ cat file1
8search_term
9
10$ cat ../dir2/file2
11search_term
12
13$ grep -r "search_term" . # シンボリックリンクがコマンドラインに指定されていないのでリンク先は検索対象外!
14./file1:search_term
15
16$ grep -R "search_term" .
17./file1:search_term
18./link_to_file2:search_term
19./link_to_dir2/file2:search_term
20
21$ grep -r "search_term" # シンボリックリンクがコマンドラインに指定されていないのでリンク先は検索対象外!
22file1:search_term
23
24$ grep -R "search_term"
25file1:search_term
26link_to_file2:search_term
27link_to_dir2/file2:search_term
28
29$ grep -r "search_term" * # パス名展開によりシンボリックリンクがコマンドラインに指定される!
30file1:search_term
31link_to_dir2/file2:search_term
32link_to_file2:search_term
33
34$ grep -R "search_term" *
35file1:search_term
36link_to_dir2/file2:search_term
37link_to_file2:search_term
grep
でファイルが存在しない場合や読み込めない場合に、エラーメッセージを表示しないようにするには?
ファイルが存在しない場合や読み込めない場合にエラーメッセージを表示しないようにするには、-s
(または --no-messages
)オプションを使用します。このオプションを指定すると、エラーメッセージが抑制されます。
1$ ls file
2ls: 'file' にアクセスできません: そのようなファイルやディレクトリはありません
3
4$ grep -s 'test' file
5$ echo $?
62
ファイルの内容を16進数やASCII文字で表示するには?
hexdump
コマンドを使用してファイルの内容を表示します。-C
オプションと -v
オプションは、表示形式や内容の表示方法に影響を与えます。
-C
オプション は、標準的な16進数とASCII形式でファイル内容を表示します。16進数でのオフセットを表示し、その後にデータを1バイトずつ2桁の16進数で表現し、1行あたり16バイトが表示されます。右側にはASCII文字も表示されます。
-v
オプション は、 全ての入力データを表示します。-v
オプションを指定しない場合、連続する同じ内容の行は1行のアスタリスク(*
)で置き換えられます。-v
オプションを使用すると、すべての行がそのまま表示され、内容が完全に表示されます。
※連続する同じ行とは、hexdump実行結果に対するものであって、入力ファイルに対するものではないことに注意。
1$ cat sample.txt
2Hello,world!!!!
3Hello,world!!!!
4Good evening,worGood evening,wor
5Good evening,world!
6Good evening,world!
7
8$ hexdump -Cv sample.txt
900000000 48 65 6c 6c 6f 2c 77 6f 72 6c 64 21 21 21 21 0a |Hello,world!!!!.|
1000000010 48 65 6c 6c 6f 2c 77 6f 72 6c 64 21 21 21 21 0a |Hello,world!!!!.|
1100000020 47 6f 6f 64 20 65 76 65 6e 69 6e 67 2c 77 6f 72 |Good evening,wor|
1200000030 47 6f 6f 64 20 65 76 65 6e 69 6e 67 2c 77 6f 72 |Good evening,wor|
1300000040 0a 47 6f 6f 64 20 65 76 65 6e 69 6e 67 2c 77 6f |.Good evening,wo|
1400000050 72 6c 64 21 0a 47 6f 6f 64 20 65 76 65 6e 69 6e |rld!.Good evenin|
1500000060 67 2c 77 6f 72 6c 64 21 0a |g,world!.|
1600000069
17
18$ hexdump -C sample.txt
1900000000 48 65 6c 6c 6f 2c 77 6f 72 6c 64 21 21 21 21 0a |Hello,world!!!!.|
20*
2100000020 47 6f 6f 64 20 65 76 65 6e 69 6e 67 2c 77 6f 72 |Good evening,wor|
22*
2300000040 0a 47 6f 6f 64 20 65 76 65 6e 69 6e 67 2c 77 6f |.Good evening,wo|
2400000050 72 6c 64 21 0a 47 6f 6f 64 20 65 76 65 6e 69 6e |rld!.Good evenin|
2500000060 67 2c 77 6f 72 6c 64 21 0a |g,world!.|
2600000069
ホスト名を表示する際に、ドメイン情報を除いてホスト名だけを表示するには?
コマンド hostname -s
を使用します。
1$ hostname
2myhostname.example.com
3
4$ hostname -s
5myhostname
プロセスの存在(生死)を確認するには?
kill
コマンドを使用すると、プロセスID(pid)の存在を確認できます。具体的には、kill -0 $pid
を使うことでプロセスの存在チェックが可能です。「0」シグナルを使うことで、プロセスが存在しているかどうかを確認できますが、プロセスに対して実際のシグナルは送信されません。このコマンドの返り値をチェックすることで、プロセスが存在するかどうかを判断できます。プロセスが存在すればコマンドは成功し、存在しなければエラーが返されます。
以下のスクリプトは、プロセスの存在を確認する方法を示しています。
1# プロセスの存在をチェック
2if kill -0 "$pid" 2>/dev/null; then
3 echo "Process $pid exists."
4fi
このスクリプトでは、kill -0 "$pid"
を使用してプロセスID $pid
の存在を確認し、存在する場合にメッセージを表示します。
同様のチェックを ps
コマンドで行うこともできます:
1if ps -p "$pid" > /dev/null; then
2 echo "Process $pid exists."
3fi
隠しファイルを含めて全てのファイルを表示するには?
ls
コマンドを使用します。-a
または --all
オプションを付けることで、隠しファイル(.
で始まるファイル)も含めて全てのファイルを表示できます。
1$ ls -a
2. .. .bashrc .profile file1.txt file2.txt
ディレクトリ自体をリスト表示するには?
ls
コマンドを使用します。-d
または --directory
オプションを付けることで、ディレクトリの内容ではなくディレクトリ自体をリスト表示できます。
1$ ls -ld /etc
2drwxr-xr-x 1 root root 4096 2024-09-06 07:13 /etc
ファイルのインデックス番号(inode番号)を表示するには?
ls
コマンドを使用します。-i
または --inode
オプションを付けることで、各ファイルのインデックス番号(inode番号)を表示できます。
1$ ls -i
2131072 .bashrc 131073 .profile 131074 file1.txt 131075 file2.txt
サブディレクトリを再帰的にリスト表示するには?
ls
コマンドを使用します。-R
オプションを付けることで、見つかったサブディレクトリを再帰的にリスト表示できます。
1$ ls -R
2.:
3file1.txt file2.txt subdir
4
5./subdir:
6file3.txt
ファイルの詳細なタイムスタンプを表示するには?
ls
コマンドを使用します。--full-time
オプションを付けることで、ファイルの詳細なタイムスタンプを表示できます。
1$ find DIR -type f | xargs ls --full-time | sort -k6,7
2-rw-r--r-- 1 user group 1234 2023-09-07 07:13:40.000000000 +0900 file1.txt
3-rw-r--r-- 1 user group 5678 2023-09-07 07:13:41.000000000 +0900 file2.txt
特定の時刻/日付形式でファイルのタイムスタンプを表示するには?
ls
コマンドを使用します。--time-style=TIME_STYLE
オプションを付けることで、特定の時刻/日付形式でファイルのタイムスタンプを表示できます。TIME_STYLE
引数には、full-iso
、long-iso
、iso
、locale
、または +FORMAT
を指定できます。
1$ find DIR -type f | xargs ls -l --time-style='+%Y%m%d%H%M%S' | sort -k6,6
2-rw-r--r-- 1 user group 1234 20230907071340 file1.txt
3-rw-r--r-- 1 user group 5678 20230907071341 file2.txt
ファイルサイズでソートするには?
ls
コマンドを使用します。-S
オプションを付けることで、ファイルサイズでソートできます。デフォルトでは、サイズの大きい順に表示されます。
1$ ls -lS
2合計 40
3-rw-r--r--. 1 dam user 20480 7月 30 16:43 file3.txt
4-rw-r--r--. 1 dam user 10240 7月 30 16:42 file1.txt
5-rw-r--r--. 1 dam user 5120 7月 30 16:43 file2.txt
6
7$ ls -lSr
8合計 40
9-rw-r--r--. 1 dam user 5120 7月 30 16:43 file2.txt
10-rw-r--r--. 1 dam user 10240 7月 30 16:42 file1.txt
11-rw-r--r--. 1 dam user 20480 7月 30 16:43 file3.txt
システム上で現在使用されているすべてのファイルを表示するには?
lsof
コマンドを使用します。このコマンドを実行すると、システム上で現在オープンされているすべてのファイルのリストが表示されます。
1# 全てのオープンファイルを表示
2$ lsof
3COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
4systemd 1 root cwd DIR 253,0 4096 2 /
5systemd 1 root rtd DIR 253,0 4096 2 /
6systemd 1 root txt REG 253,0 1620224 821084 /lib/systemd/systemd
特定のプロセスによって使用されているファイルを表示するには?
lsof -p <PID>
コマンドを使用します。ここで <PID>
はプロセスIDです。このコマンドは、指定したプロセスが開いているファイルのリストを表示します。
1# 特定のプロセスによって開かれているファイルを表示
2$ lsof -p 1234
3COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
4myprocess 1234 user cwd DIR 253,0 4096 2 /home/user
5myprocess 1234 user txt REG 253,0 1620224 821084 /usr/bin/myprocess
特定のユーザーによって使用されているファイルを表示するには?
lsof -u <username>
コマンドを使用します。ここで <username>
はユーザー名です。指定したユーザーが開いているファイルのリストが表示されます。
1# 特定のユーザーによって開かれているファイルを表示
2$ lsof -u username
3COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
4bash 5678 user cwd DIR 253,0 4096 2 /home/user
5bash 5678 user txt REG 253,0 1620224 821084 /bin/bash
特定のファイルやディレクトリが使用されているか確認するには?
lsof <filename>
コマンドを使用します。ここで <filename>
はファイル名またはディレクトリ名です。このコマンドは、指定したファイルやディレクトリを開いているプロセスのリストを表示します。
1# 特定のファイルやディレクトリが開かれているか確認
2$ lsof /path/to/file
3COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
4vim 9101 user txt REG 253,0 1620224 821084 /path/to/file
ネットワーク接続の情報を表示するには?
lsof -i
コマンドを使用します。このコマンドは、ネットワーク接続のリストを表示します。特定のプロトコル(TCP、UDPなど)やポート番号に基づいてフィルタリングすることもできます。
1# ネットワーク接続の情報を表示
2$ lsof -i
3COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
4sshd 1234 root txt REG 253,0 1620224 821084 TCP *:22 (LISTEN)
特定のポートやプロトコルに基づいてフィルタリングする場合は、以下のように使用します。
1# 特定のポートに基づいてフィルタリング
2$ lsof -i :80
3COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
4httpd 5678 root txt REG 253,0 1620224 821084 TCP *:80 (LISTEN)
5
6# 特定のネットワークプロトコルに基づいてフィルタリング
7$ lsof -i tcp
8COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
9sshd 1234 root txt REG 253,0 1620224 821084 TCP *:22 (LISTEN)
ファイルの非表示文字を表示するには?
非表示文字を表示する方法はいくつかあります。
まず、sample.txt
ファイルを以下のように作成します。
1$ echo -e "Hello, World!\tThis is a test.\nNew Line here." > sample.txt
\t
はタブ、\n
は改行コードを示します。
cat
コマンドの -A
オプションを使用して、非表示文字を表示することができます。タブや改行などが特定の記号で表示されます。
1$ cat -A sample.txt
2Hello, World!^IThis is a test.$
3New Line here.$
^I
はタブ文字、$
は行末の改行コードを示します。
hexdump
コマンドを使って、ファイルのバイナリ内容を表示します。-C
オプションを使用すると、16進数の値と対応するASCII文字が表示されます。
1$ hexdump -C sample.txt
200000000 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 09 54 68 |Hello, World!.Th|
300000010 69 73 20 69 73 20 61 20 74 65 73 74 2e 0a 4e 65 |is is a test..Ne|
400000020 77 20 4c 69 6e 65 20 68 65 72 65 2e 0a |w Line here..|
50000002d
09
はタブ文字(\t
)、0a
は改行コード(\n
)を示しています。
od
コマンドを使用して、ファイルの内容をバイナリ形式で表示します。-c
オプションを使用すると、文字として表示されます。
1$ od sample.txt
20000000 062510 066154 026157 053440 071157 062154 004441 064124
30000020 071551 064440 020163 020141 062564 072163 005056 062516
40000040 020167 064514 062556 064040 071145 027145 000012
50000055
6
7$ od -c sample.txt
80000000 H e l l o , W o r l d ! \t T h
90000020 i s i s a t e s t . \n N e
100000040 w L i n e h e r e . \n
110000055
ファイルやディレクトリの絶対パスを取得するには?
realpath
コマンドは、指定されたファイルやディレクトリの絶対パスを表示します。相対パスやシンボリックリンクを解決し、最終的な絶対パスを出力します。
相対パスから絶対パスを取得する
1$ realpath myfile.txt 2/home/user/project/myfile.txt
シンボリックリンクを解決する
1$ realpath /path/to/symlink 2/home/user/target/actualfile.txt
ディレクトリの絶対パスを取得する
1$ realpath /home/user/../user/docs 2/home/user/docs
ディスクI/Oにおけるバッファキャッシュの使用状況を表示するには?
sar -b
コマンドを使用します。
-b
はディスクI/Oのバッファキャッシュ使用状況を表示します。以下の例では、データを1秒間隔で3回収集することを指定しています。
1$ sar -b 1 3
2Linux 4.15.0-96-generic (hostname) 09/05/2024 _x86_64_ (4 CPU)
3
409:00:01 AM kbmemfree kbmemused %memused kbbuffers kbcached %buff %cache
509:00:02 AM 10240 20480 66.0 5120 8192 25.0 40.0
609:00:03 AM 10240 20480 66.0 5120 8192 25.0 40.0
709:00:04 AM 10240 20480 66.0 5120 8192 25.0 40.0
8
9Average: 10240 20480 66.0 5120 8192 25.0 40.0
kbmemfree
: 自由に使えるメモリ量(KB単位)kbmemused
: 使用中のメモリ量(KB単位)%memused
: 使用中のメモリの割合kbbuffers
: ディスクI/Oのために使用されているバッファキャッシュのメモリ量(KB単位)kbcached
: ディスクI/Oのために使用されているキャッシュのメモリ量(KB単位)%buff
: バッファキャッシュの使用割合%cache
: キャッシュの使用割合
メモリの使用状況を表示するには?
sar -r
コマンドを使用します。
-r
はメモリの使用状況を表示します。以下の例では、データを1秒間隔で3回収集することを指定しています。
1$ sar -r 1 3
2Linux 4.15.0-96-generic (hostname) 09/05/2024 _x86_64_ (4 CPU)
3
409:00:01 AM kbmemfree kbmemused %memused kbbuffers kbcached %buff %cache
509:00:02 AM 10240 20480 66.0 5120 8192 25.0 40.0
609:00:03 AM 10240 20480 66.0 5120 8192 25.0 40.0
709:00:04 AM 10240 20480 66.0 5120 8192 25.0 40.0
8
9Average: 10240 20480 66.0 5120 8192 25.0 40.0
kbmemfree
: 自由に使えるメモリ量(KB単位)kbmemused
: 使用中のメモリ量(KB単位)%memused
: 使用中のメモリの割合kbbuffers
: ディスクI/Oのために使用されているバッファキャッシュのメモリ量(KB単位)kbcached
: ディスクI/Oのために使用されているキャッシュのメモリ量(KB単位)%buff
: バッファキャッシュの使用割合%cache
: キャッシュの使用割合
CPUの使用状況を表示するには?
sar -u
コマンドを使用します。
-u
はCPUの使用状況を表示します。以下の例では、データを1秒間隔で3回収集することを指定しています。
1$ sar -u 1 3
2Linux 4.15.0-96-generic (hostname) 09/05/2024 _x86_64_ (4 CPU)
3
409:00:01 AM %usr %nice %sys %iowait %irq %soft %steal %guest %idle
509:00:02 AM 15.00 0.00 5.00 2.00 0.00 0.00 0.00 0.00 78.00
609:00:03 AM 15.00 0.00 5.00 2.00 0.00 0.00 0.00 0.00 78.00
709:00:04 AM 15.00 0.00 5.00 2.00 0.00 0.00 0.00 0.00 78.00
8
9Average: 15.00 0.00 5.00 2.00 0.00 0.00 0.00 0.00 78.00
%usr
: ユーザーモードでのCPU使用率%nice
: 優先度変更済みプロセスによるCPU使用率%sys
: カーネルモードでのCPU使用率%iowait
: 入出力待ちによるCPU使用率%irq
: ハードウェア割り込みによるCPU使用率%soft
: ソフトウェア割り込みによるCPU使用率%steal
: 仮想化環境でのCPUの「奪われた」割合%guest
: ゲストOSのCPU使用率(仮想化環境で)%idle
: アイドル(待機)CPU使用率
ファイルのタイムスタンプを改変するには?
touch -d
コマンドを使用します。
touch -d
コマンドを使用することで、ファイルのタイムスタンプを指定した日付や時刻に設定できます。以下にいくつかの用例を示します。
- 特定の日時に設定する:
1$ touch -d "2024-01-01 12:00:00" filename.txt
このコマンドは、filename.txt
のタイムスタンプを 2024年1月1日 12時00分00秒 に設定します。
- 現在の日時に設定する(タイムスタンプを更新):
1$ touch filename.txt
このコマンドは、filename.txt
のタイムスタンプを現在の時刻に更新します。
- 日付だけで設定する(時刻はデフォルトで00:00:00):
1$ touch -d "2024-01-01" filename.txt
このコマンドは、filename.txt
のタイムスタンプを 2024年1月1日に設定し、時刻は00:00:00になります。
- 相対的な日時で設定する(例えば「1日前」):
1$ touch -d "1 day ago" filename.txt
このコマンドは、filename.txt
のタイムスタンプを現在の時刻から1日前に設定します。
- 特定のタイムゾーンに設定する:
1$ TZ=Asia/Tokyo touch -d "2024-01-01 12:00:00" filename.txt
このコマンドは、filename.txt
のタイムスタンプを 2024年1月1日 12時00分00秒(東京時間)に設定します。
現在使用している端末のデバイスファイル名を表示するには?
tty
コマンドを使用します。
tty
コマンドは、現在使用している端末のデバイスファイル名を表示します。このファイル名は、端末がシステム内でどのように識別されるかを示します。以下に用例を示します。
1$ tty
2/dev/ttys000
このコマンドは、現在の端末が /dev/ttys000
というデバイスファイルであることを示しています。これは、あなたがログインしている端末の識別子であり、ターミナルセッションがどの端末で実行されているかを知るのに役立ちます。
システムのメモリ使用状況やプロセスの統計情報を表示するには?
vmstat
コマンドを使用します。
vmstat
コマンドは、システムのメモリ、プロセス、ページング、ブロックI/O、ディスクI/O、CPUの統計情報を表示します。以下のコマンドで、1秒間隔で3回、システムの統計情報を表示できます。
1$ vmstat 1 3
出力例:
1procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
2 r b swpd free buff cache si so bi bo in cs us sy id wa st
3 1 0 0 81448 25680 181496 0 0 15 22 8 18 1 1 98 0 0
4 1 0 0 81448 25680 181496 0 0 0 0 175 242 1 1 98 0 0
5 1 0 0 81448 25680 181496 0 0 0 0 191 274 1 1 98 0 0
procs
: プロセス情報r
: 実行可能なプロセス数(CPUの処理を待っているプロセス数)b
: ブロックされているプロセス数(I/O待ちのプロセス数)
memory
: メモリ使用状況swpd
: スワップ領域の使用量(MB)free
: 空きメモリの量(KB)buff
: バッファメモリの量(KB)cache
: キャッシュメモリの量(KB)
swap
: スワップ領域の使用状況si
: スワップイン量(MB/s、スワップ領域からメモリに読み込まれるデータの速度)so
: スワップアウト量(MB/s、メモリからスワップ領域に書き込まれるデータの速度)
io
: I/O統計bi
: ブロック読み込み量(ブロック単位、読み込まれたデータの量)bo
: ブロック書き込み量(ブロック単位、書き込まれたデータの量)
system
: システム統計in
: 割り込み数(秒あたりのハードウェア割り込みの数)cs
: コンテキストスイッチ数(秒あたりのプロセス間の切り替え回数)
cpu
: CPUの使用状況us
: ユーザーモードでのCPU時間(ユーザーのプロセスが消費するCPU時間)sy
: システムモードでのCPU時間(カーネルモードでのCPU時間)id
: アイドル時間(CPUが何も実行していない時間)wa
: I/O待ち時間(CPUがI/O操作を待っている時間)st
: ステール時間(仮想化環境でのスチール時間、他の仮想マシンにリソースが奪われている時間)
ユーザーモードでのCPU時間 (
us
): ユーザープログラムがCPUを使用している時間。これには、アプリケーションやスクリプトの実行が含まれます。システムモードでのCPU時間 (
sy
): カーネルがCPUを使用している時間。システムコールやドライバの処理が含まれます。ステール時間 (
st
): 仮想化環境で、他の仮想マシンにリソースが奪われた時間。物理CPUが他の仮想マシンに割り当てられているため、現在の仮想マシンのCPUが実行できなかった時間を示します。
find
コマンドで取得したファイルを指定したディレクトリに移動するには?
xargs --no-run-if-empty -I
コマンドを使用します。
--no-run-if-empty
オプションを指定すると、xargs
が引数がない場合にコマンドを実行しないようになります。-I
オプションを使用すると、指定した文字列(ここでは {}
)がコマンド内の引数のプレースホルダーとして使われます。
以下のコマンドは、find
コマンドで取得したファイル名を xargs
に渡し、各ファイルを指定したディレクトリに移動します。--no-run-if-empty
により、find
が結果を返さなかった場合でもコマンドは実行されません。
1find ${RECEIVE_DIR}/ -maxdepth 1 -type f -name "*.gz" -exec basename {} \; | \
2xargs --no-run-if-empty -I mv -f ${RECEIVE_DIR}/{} ${BKUP_DIR}/${DATE}_{} 2>&1
このコマンドでは、find
が ${RECEIVE_DIR}
内の .gz
拡張子のファイル名を取得し、basename
コマンドでファイル名のみを抽出します。その後、xargs
が mv
コマンドを使って、ファイルを ${BKUP_DIR}
に移動し、ファイル名に ${DATE}_
を付加します。
find
の実行結果を xargs
に渡してコマンドを実行する際に、そのコマンドの実行内容を表示するには?
xargs -t -n
コマンドを使用します。
-t
オプションを指定すると、xargs
が実行するコマンドが標準エラー出力(stderr)に表示されます。-n
オプションを使うと、一度に指定する引数の数を設定できます。
以下のコマンドは、find
コマンドで取得したパスを xargs
で処理し、指定された数の引数ごとにコマンドを実行し、その実行コマンドを標準エラー出力に表示します。
1$ find .
2.
3./file1
4./link_to_file2
5./link_to_dir2
6
7$ find . | xargs -t -n 3 echo
8echo . ./file1 ./link_to_file2
9. ./file1 ./link_to_file2
10echo ./link_to_dir2
11./link_to_dir2
このコマンドは、find .
で現在のディレクトリ内のすべてのファイルとディレクトリをリストし、xargs -t -n 3
で処理します。-n 3
により、3つの引数ごとに echo
コマンドが実行され、その前に実行されるコマンドが標準エラー出力に表示されます。
補足:
xargs
にコマンドを指定しない場合、デフォルトで echo
コマンドが実行されます。xargs
は標準入力からアイテムを読み取り、それを指定したコマンド(デフォルトでは echo
)で実行します。コマンドを明示的に指定しない場合は、echo
がデフォルトのコマンドとして実行されるため、指定しない場合でも echo
が実行されます。
自分のコンピュータが使用しているバイトオーダー(エンディアン)を確認する方法は?
コンピュータのバイトオーダー(エンディアン)を確認するには、いくつかの方法がありますが、以下の手順が簡単で一般的です:
lscpu
コマンドの利用:lscpu
コマンドを実行し、その出力から「Endian」に関する情報を探します。このコマンドは、CPUに関する詳細な情報を提供し、システムのエンディアン形式も確認できる場合があります。1$ lscpu | grep "Endian" 2バイト順序: Little Endian
これにより、リトルエンディアン(Little)やビッグエンディアン(Big)が表示されます。
Pythonスクリプトの利用: Pythonを使用して、システムのバイトオーダーを簡単に確認できます。次のスクリプトを実行することで、リトルエンディアンかビッグエンディアンかを確認できます。
1$ cat sample.py 2import sys 3print(sys.byteorder) 4 5$ python3 sample.py 6little