バッチ処理の二重起動チェックをシェルだけで実現する方法

Linux

Linux系のОSでバッチを起動する場合は、シェルを作成して、シェルからJavaなどのプログラムを呼び出すケースが多いかと思います。


バッチで問題になるのが「バッチの重複起動」になります。
“バッチ突き抜け”とも言いますが、1つのバッチが終了する前に同じバッチが起動してしまうと二重起動の状態になってしまい、思わぬ不具合が発生してしまいます。
この場合、プログラム側で重複起動をおこなわないような制御をおこなう必要があります。


今回は、このバッチ重複起動チェックをシェルだけで実現する方法を紹介します。

シェルだけで実現する方法なので非常にシンプルですが、確実に二重起動チェックを防ぐことができます。


環境情報


  • OS:CentOS 7.6

pgrepコマンドとは


重複起動チェックで使用するコマンドは「pgrep」コマンドです。
「pgrep」コマンドは、プロセスが保持しているプロセス名属性からプロセスIDを取得するコマンド
になります。


要は「pgrep」コマンドは、「ps」コマンドと「grep」を合体したコマンドですね。
psコマンドの出力結果をパイプ(|)で繋いでgrepで抽出することが多いかと思いますが、この操作を同時に実行することが「pgrep」コマンドになります。


基本的な文法は以下になります。

pgrep [オプション] [プロセスの特定パターン]

二重起動チェックのシェルプログラム


二重起動チェックのシェルプログラムは以下になります。
「pgrep」コマンドで自身のプロセス名のプロセス番号を取得し、そのプロセス番号と自身のプロセス番号と比較しています。
プロセス番号の比較結果が異なる場合は、自身のプロセスと同名の他プロセスが動作していると判断する、ということですね。


#!/bin/sh

echo "start"
PGREP=`pgrep -f $0 -o`
PGREP_RSLT=$?

if [ $$ != $PGREP  ];
then
  echo "$0は起動中です。二重起動チェックです。"
  exit 1
fi

sleep 180
echo "end"

上記サンプルプログラムを同時に実行すると、一方のシェルはチェックに掛かって起動できません。
二重起動チェックにかかりやすいように、180秒のスリープをおこないバッチ実行中の時間を長くとっています。


pgrepコマンドのオプションと特定パターン


二重起動チェックで使用している「pgrep」コマンドのオプションや、使用している特殊変数について説明していきます。


まずは「pgrep」コマンドのオプションです。
二重起動チェックで使用しているのは「-f」オプションと「-o」オプションになります。


「-f」「-o」オプション含めて、よく使用するオプションを紹介しておきます。


オプション フルオプション 説明

-f

–full

コマンドライン全体をパターンマッチの対象とする。

-o

–oldest

対象のプロセスから最も昔に起動されたものだけを対象とする。

-n

–newest

対象のプロセスから最も最近に起動されたものだけを対象とする。

-U ユーザ

–uid ユーザ

指定したユーザのプロセスを対象とする。「,」区切りで複数指定可能。

-v

–inverse

検索パターンの否定。


次に特殊変数についてです。


  • $0:実行中プロセスのシェルファイル名。
  • $?:直前に実行したコマンドの実行結果。成功時は「0」。失敗時は「0」以外。
  • $$:実行中プロセスのプロセスID。

この特殊変数は非常に便利です。
実際の動きを紹介していきます。


$0特殊変数。実行中プロセスのファイル名。


実行中プロセスのシェルファイル名は「test.sh」となります。
そのファイル名がそのまま特殊変数として格納されています。


#!/bin/sh

echo "start"
echo $0
echo "end"

test.sh

$?特殊変数。コマンド実行結果。


コマンドの実行結果が格納されています。
厳密にはコマンドの実行結果を参照して、二重起動チェックに成功したか?失敗したか?についても処理分岐が必要となります。


#!/bin/sh

echo "start"
PGREP=`pgrep -f $0 -o`
echo $?
echo "end"

0

$$特殊変数。実行中プロセスのプロセスID。


実行中プロセスのプロセスIDが格納されています。


#!/bin/sh

echo "start"
echo $$
echo "end"

4269


Linuxでサーバ容量・フォルダサイズ・ファイルサイズを調べるコマンド

Linux

Linuxサーバ上で、サーバ全体のディスク使用率や、フォルダサイズ・ファイルサイズを調査する時に便利なコマンドについて紹介していきます。


サーバ容量を確認する(dfコマンド)


サーバ全体の容量について確認する際に使用するのはdfコマンドになります。


[@users]$ df
ファイルシス   1K-ブロック     使用    使用可 使用% マウント位置
devtmpfs           3981472        0   3981472    0% /dev
tmpfs              3999296      260   3999036    1% /dev/shm
/dev/sda1           613184     6908    606276    2% /boot/efi

オプションには、以下があります。


-a

すべてのディスクを表示。

隠しファイルシステムなど、全てのディスクを表示します。

-H

単位を付けて結果を表示。

容量の表示は数字が大きくなってしまうので、k(キロ)、M(メガ)、G(ギガ)の単位を付けて表示するのが一般的です。


フォルダサイズを確認する(duコマンド)


フォルダのサイズを確認する時はduコマンドを使用します。


[@users]$ du
28      ./numberAnalyze/module
1088    ./numberAnalyze/logs
1124    ./numberAnalyze
16      ./winningAnalyze/module
916     ./winningAnalyze/logs
940     ./winningAnalyze
16      ./winningExpected/module
26044   ./winningExpected/logs
26068   ./winningExpected
12      ./winningCollection/module/__pycache__
24      ./winningCollection/module
12      ./winningCollection/logs
44      ./winningCollection
28184   .

duコマンドではフォルダサイズだけではなく、ファイルサイズも確認することができます。
以下のコマンドでは、コマンドを発行しているフォルダ直下ファイルのファイルサイズも表示します。


[users]$ du ./*
4       ./loto.sh                       ★
28      ./numberAnalyze/module
1088    ./numberAnalyze/logs
1124    ./numberAnalyze
16      ./winningAnalyze/module
916     ./winningAnalyze/logs
940     ./winningAnalyze
12      ./winningCollection/module/__pycache__
24      ./winningCollection/module
12      ./winningCollection/logs
44      ./winningCollection
16      ./winningExpected/module
26044   ./winningExpected/logs
26068   ./winningExpected

★=直下のファイル


以下のコマンドでは、もう1階層下フォルダのファイルサイズを表示します。


[users]$ du ./*/*
1088    ./numberAnalyze/logs
28      ./numberAnalyze/module
4       ./numberAnalyze/numberAnalyze.sh         ★
916     ./winningAnalyze/logs
16      ./winningAnalyze/module
4       ./winningAnalyze/winningAnalyze.sh       ★
12      ./winningCollection/logs
12      ./winningCollection/module/__pycache__
24      ./winningCollection/module
4       ./winningCollection/winningCollection.sh ★
26044   ./winningExpected/logs
16      ./winningExpected/module
4       ./winningExpected/winningExpected.sh     ★

★=1階層下のファイル


指定した階層のフォルダサイズを確認したい場合は「–max-depth」オプションを使用します。
以下のコマンドでは、コマンドを実行したフォルダ直下について、フォルダ毎のサイズを表示しています。


[users]$ du --max-depth=1
1124    ./numberAnalyze
940     ./winningAnalyze
26068   ./winningExpected
44      ./winningCollection
28184   .

サイズを調べるフォルダを深くしたいきたい場合は、「–max-depth」オプションの数字を大きくしていけばよいです。

数字が大きいほど、下の階層まで検索対象となります。

[users]$ du --max-depth=2
28      ./numberAnalyze/module
1088    ./numberAnalyze/logs
1124    ./numberAnalyze
16      ./winningAnalyze/module
916     ./winningAnalyze/logs
940     ./winningAnalyze
16      ./winningExpected/module
26044   ./winningExpected/logs
26068   ./winningExpected
24      ./winningCollection/module
12      ./winningCollection/logs
44      ./winningCollection
28184   .

上記以外のよく使うオプションも紹介しておきます。


-h

読みやすい単位で表示する。

-H

読みやすい単位で表示する。

ただし、1024単位ではなく1000単位の値を使用。

-c

合計のサイズも表示

-k

キロ単位で表示

-m

メガ単位で表示



現場で使えるtailコマンド。ログ監視で必要なオプションなど。

Linux

運用・保守の業務をおこなっている人にとっては、とても馴染みがあるコマンドのtailコマンドについてまとめてみます。


筆者が一番使うタイミングは、やっぱりログ監視です。

tailは「尻尾」「末尾」の略ですが、tailコマンドを使えばファイルの終端を常に表示するので、稼働中システムのログを監視する際にとても便利です。


基本動作


tail ※ファイル名 で、ファイルの末尾を表示することができます。


$ tail file1.txt
テスト8
テスト9
テスト10

追記を監視(ラージFとスモールf)


基本動作の tail ※ファイル名 だけでは、ファイルが追記されいったとしてもコマンド上に追記内容が表示されません。


しかしこれだと、例えばアプリケーションのログ監視をおこなう場合に不便です。
アプリケーションがログに追記するたびに表示内容を更新する(常に末尾表示)ためには、-f オプションを使用します。


$ tail -f file1.txt
テスト8
テスト9
テスト10
$ tail -f file1.txt
テスト9
テスト10
テスト11 ← 追記されている。

上記は-f(スモールf)を使っていますが、ログ監視のことを考えると不便な事があります。
それはログのローテーションです。


指定しているファイルがリネームされて新しいファイル名となり、指定しているファイルが新規ファイルとなった場合、-f(スモールf)では末尾監視がおこなわれません。


tailコマンドで監視できない

ログローテーションのように、監視対象のファイルが新しく作成された場合も監視した場合は、-f(スモールf)ではなく-F(ラージF)を使います。
-F(ラージF)を使う事で、ファイル名が変わって監視対象ファイルが新規作成されたとしても、対象ファイルは監視が継続されます。


$ tail -F file1.txt
tail: `file1.txt' has become inaccessible: No such file or directory
tail: `file1.txt' has appeared;  following end of new file
tail: file1.txt: file truncated
ファイル1
ファイル2
ファイル3

行数を指定する(-n)


末尾の表示する行数を指定示することも可能です。


$ tail -n3 file1.txt
ファイル9
ファイル10
ファイル11

-fオプションを指定して、末尾N行を監視する、といったことも可能です。


$ tail -3f file1.txt
ファイル9
ファイル10
ファイル11

パイプで繋げてgrepで抽出


特にtailコマンドのオプションではないのですが、大量にログを出力するアプリケーションであれば、-fオプションを指定していてログを監視していてもログが流れるのが早くて目で追えないです。

その場合は、監視しておきたいキーワードを事前に決めておき、パイプ(|)で繋いでgrepコマンドで抽出するようにしておきます。


$ tail -f file1.txt | grep ※キーワード
ファイル12

上記のようにパイプで繋いでgrepを指定することで、grepで指定したキーワードが出現した時だけ表示してくれます。

とても効率的なログ監視をおこなうことができます。


まとめ


現場のエンジニアにとって、tailコマンドは必須のコマンドかと思います。
上手に使いこなして、日々の作業に役立ててください。




cpコマンド(コピー)の使い方。覚えておくと便利なオプションも解説。

Linux

前回、lsコマンドの使い方、覚えておくと便利なオプションについて紹介させてもらいました。



今回は、コピーコマンドについて紹介していきます。
コピーコマンドについても、Linuxで作業をおこなう上では必須のコマンドになります。
こちらもまた、使わない人はいないでしょう。


メジャーなオプションからマイナーなオプションまで、いろいろ説明していきます。


頻繁に使うコマンドなのであまり忘れることはないオプションが多いかもしれませんが、参考にしてください。


同名ファイルが存在する場合はバックアップ作成(-b)


コピー先に同名ファイルが存在する場合、バックアップファイルを作成します。
「-b」オプションを使用します。


$ ls -la
total 16
drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:31 .
drwxr-xr-x 5 xxx yyy 4096 2019-07-28 23:49 ..
-rw-r--r-- 1 xxx yyy    5 2020-01-29 01:31 dest.txt
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:31 src.txt
$ cp -b src.txt dest.txt
$ ls -la
total 20
drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:31 .
drwxr-xr-x 5 xxx yyy 4096 2019-07-28 23:49 ..
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:31 dest.txt
-rw-r--r-- 1 xxx yyy    5 2020-01-29 01:31 dest.txt~
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:31 src.txt

上記コマンド結果のようになります。
コピー先に既に「dest.txt」というファイルが既に存在するので、コピー先に存在していた「dest.txt」をバックアップファイルとして退避しています。


強制上書き(-f)


OS自体の設定にもよりますが、ファイルをコピーすると上書きになる場合、「上書きします。よろしいですか?」のメッセージが表示されます。
「-f」オプション、または、「–force」オプションを使用すると、この上書き確認メッセージを表示しません。


$ ls -la
total 12
drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:34 .
drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 ..
-rw-r--r-- 1 xxx yyy    0 2020-01-29 01:36 dest.txt
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:34 src.txt
$ cp -f src.txt dest.txt
$ ls -la
total 16
drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:34 .
drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 ..
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:43 dest.txt
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:34 src.txt

上記コマンド結果のように、同じファイル名でコピーしたとしても、上書き確認メッセージは表示されません。


必ず上書き確認メッセージを表示(-i)


先ほどの強制上書きでも記載しましたが、「上書きします。よろしいですか?」のメッセージが表示されるかどうかは、OS自体の設定に依存します。
「-i」オプション、または、「–interactive」オプションを使用すると、上書き確認メッセージを必ず表示することができます。


$ ls -la
total 12
drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:49 .
drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 ..
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:43 dest.txt
-rw-r--r-- 1 xxx yyy    0 2020-01-29 01:49 src.txt
$ cp -i dest.txt src.txt
cp: overwrite `src.txt'? yes
$ ls -la
total 16
drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:49 .
drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 ..
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:43 dest.txt
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:49 src.txt

上記コマンド結果のように、上書きコピー時に「 overwrite `src.txt’?」という確認メッセージを表示しています。
yesと入力すると、ファイルが上書き更新されます。


同名ファイルの場合は上書きしない(-n)


同名ファイルを上書きしたくない場合は、「-n」オプション、または、「–no-clobber」オプションを指定すると、上書きは行われません。


$ ls -la
total 12
drwxr-xr-x 2 xxx yyy 4096 2020-01-29 02:08 .
drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 ..
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:43 dest.txt
-rw-r--r-- 1 xxx yyy    0 2020-01-29 02:04 src.txt
$ cp -n dest.txt src.txt
$ ls -la
total 12
drwxr-xr-x 2 xxx yyy 4096 2020-01-29 02:08 .
drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 ..
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:43 dest.txt
-rw-r--r-- 1 xxx yyy    0 2020-01-29 02:04 src.txt

属性情報(タイムスタンプなど)をそのままにしてコピー(-p)


タイムスタンプ・グループ・所有者といった属性情報はそのままにしてコピーする場合は「-p」オプション、または、「–preserve」オプションを指定します。


$ ls -la
total 16
drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:35 .
drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 ..
-rw-r--r-- 1 xxx yyy    4 2020-02-05 00:38 dest.txt
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:43 src.txt
$ cp -p src.txt dest.txt
$ ls -la
total 16
drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:35 .
drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 ..
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:43 dest.txt
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:43 src.txt

フォルダをコピー/再帰的にコピー(-r)


フォルダをコピーする場合は「-r」オプションを指定します。

このオプションを指定すれば、フォルダの中身がそのまま表示されます。

フォルダをコピーというよりも、フォルダの中身を再帰的にコピーするという動きになります。


$ ls -la
total 12
drwxr-xr-x 3 xxx yyy 4096 2020-02-05 00:49 .
drwxr-xr-x 8 xxx yyy 4096 2019-09-10 01:01 ..
drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:35 dir
$
$
$ ls -la ./dir/
total 16
drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:35 .
drwxr-xr-x 3 xxx yyy 4096 2020-02-05 00:49 ..
-rw-r--r-- 1 xxx yyy    4 2020-02-05 00:40 dest.txt
-rw-r--r-- 1 xxx yyy    4 2020-01-29 01:43 src.txt
$ cp -r dir dir2
$ ls -la
total 16
drwxr-xr-x 4 xxx yyy 4096 2020-02-05 00:50 .
drwxr-xr-x 8 xxx yyy 4096 2019-09-10 01:01 ..
drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:35 dir
drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:50 dir2
$ ls -la ./dir2/
total 16
drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:50 .
drwxr-xr-x 4 xxx yyy 4096 2020-02-05 00:50 ..
-rw-r--r-- 1 xxx yyy    4 2020-02-05 00:50 dest.txt
-rw-r--r-- 1 xxx yyy    4 2020-02-05 00:50 src.txt


lsコマンドの使い方。覚えておくと便利なオプションも解説。

Linux

Linuxで作業をおこなう上では、lsコマンドは必須のコマンドになります。
使わない人はいないでしょう。


しかし、「-l」とか「-a」といった超メジャーなオプションのみを使っており、便利なオプションを使いこなしていない人が多いように思います。
今回は、lsコマンドのオプションについて、知っていればちょっと便利なオプションについて紹介していきます。


そもそもですが、lsは「ListSegment」の略です。
日本語では、”セグメントをリスト表示する”でしょうか。


lsコマンドだけ実行すると、カレントディレクトリに存在するファイルやフォルダの一覧を表示します。

$ ls
aaa.txt  folder

q


カレントディレクトリではなく、一覧を表示したいフォルダを指定すれば、指定したフォルダ配下の一覧を表示します。

$ ls  ./folder/
folder2  xyz.txt

以下から各オプションについて説明していくのですが、オプションを複数指定したい場合は、ハイフン(-)の後に使用したいオプションを連続して指定すればよいです。
「-l」と「-a」オプションを同時に使用したい場合は、「ls -la」と記述する、といった感じです。


全部表示する(-a,-A)


全てのファイルを表示する場合は「-a」オプションです。
もしくは「-all」。
通常は表示されない、先頭にピリオド「.」が付くファイルも表示します。
カレントを表現する「.」と、一つ上階層を表現する「..」も表示します。


$ ls -a
.  ..  .env.sh  aaa.txt  folder

小文字の「a」ではなく大文字の「A」を使用すると、「.」「..」は除外された形で表示されます。
もしくは「–almost-all」。


$ ls -A
.env.sh  aaa.txt  folder

バックアップファイルを表示しない(-B)


linuxが生成するバックアップファイルには、末尾に”~”(チルダ)が付きます。
このバックアップをファイルを表示したくない場合は「-B」オプションを使用します。
もしくは「–ignore-backups」。


1.「-B」を付けない場合

$ ls
aaa.txt  bbb.txt  ccc.txt  ccc.txt~  folder

2.「-B」を付けた場合

$ ls -B
aaa.txt  bbb.txt  ccc.txt  folder

出力時の色を指定する(–color)


出力時の表示色を指定する場合は「–color[=WHEN]」を指定します。
WHENには、’auto”always”never’の3パターンが指定できます。
デフォルトは’auto’です。


1.’auto’を使用。

$ ls -l --color=auto

環境設定に定義されている色に従って、表示結果の色付けをおこないます。
環境設定に定義されている表示色は、「$ dircolors -p」で確認できます。


$ dircolors -p
DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a

2.’always’を使用

$ ls -l --color=always

常に色表示を有効にします。
例えば、ls の結果をパイプで繋いで絞り込んだ場合、色指定が消えてしまうときがあります。
これを防ぎます。
常に環境変数に定義されている色指定を有効にします。


3.’never’を使用

$ ls -l --color=never

色表示を行いません。


ディレクトリのみを表示する(-d)


ディレクトリのみを表示する場合は「-d」オプションです。
もしくは「–directory」。


正確には、ディレクトリのみを表示する場合は「-d」オプションを付けるだけではなく、もう一工夫が必要です。
以下のようにします。
カレントディレクト配下のディレクトリのみを表示する場合です。


$ ls -d */
folder1/  folder2/

様々なソート方法


ファイル・ディレクトリのソートについて、様々なソートをおこなうことができます。


1.ディレクトリ昇順でソート(-f)

「ディレクトリ昇順」とは、Linuxのファイルシステムが設定する順番です。
なので、ソートせずに表示していることと同等となります。


$ ls -f
.  folder1  xyz.txt  ..  folder2

2.逆ソート(-r)

ソート順を逆にしてソートをおこないます。
「-r」もしくは「–reverse」になります。


$ ls
aaa.txt  bbb.txt  ccc.txt  ccc.txt~  folder  link
$ ls --reverse
link  folder  ccc.txt~  ccc.txt  bbb.txt  aaa.txt

3.ファイルサイズでソート(-S)

ファイルサイズの降順でソートをおこないます。


$ ls -lS
total 20
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx yyy   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt

4.更新日時でソート(-t)

更新日時の降順でソートをおこないます。


$ ls -lt
total 20
lrwxrwxrwx 1 oops.jp-sakusaku LolipopUser   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt
drwxr-xr-x 4 oops.jp-sakusaku LolipopUser 4096 2020-01-05 01:26 folder
-rw-r--r-- 1 oops.jp-sakusaku LolipopUser   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 oops.jp-sakusaku LolipopUser   20 2020-01-05 00:27 ccc.txt~
-rw-r--r-- 1 oops.jp-sakusaku LolipopUser   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 oops.jp-sakusaku LolipopUser   12 2020-01-05 00:26 aaa.txt

5.アクセス日時でソート(-u)

アクセス日時の降順でソートをおこないます。


$ ls -lu
total 20
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 17:06 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 17:06 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-12 12:02 folder
lrwxrwxrwx 1 xxx yyy   41 2020-01-12 12:02 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

6.ファイルの拡張子でソート(-X)

ファイルの拡張子でソートをおこないます。
拡張子のアルファベット順になります。


$ ls -lX
total 20
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx yyy   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt
-rw-r--r-- 1 xxx yyy    0 2020-01-12 14:19 aaa.exe
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~

ファイルタイムスタンプを秒まで表示(–full-time)


通常、ファイルのタイムスタンプは分までしか表示されないですが、秒まで表示することもできます。
「–full-time」を指定します。


$ ls --full-time
total 20
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26:52.42195666 +0900 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27:28.51452186 +0900 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28:28.96779361 +0900 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27:47.82928918 +0900 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26:07.22816214 +0900 folder

オーナーを表示しない(-g)、グループを表示しない(-G)


通常は、オーナーとグループが表示されますが、それぞれを表示しない出力も可能です。

オーナーを表示したくない場合は「-g」オプションを指定します。


$ ls -la
total 20
-rw-r--r-- 1 yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 yyy 4096 2020-01-05 01:26 folder

グループを表示したくない場合は「-G」オプションを指定します。
もしくは「–no-group」。


$ ls -lG
total 20
-rw-r--r-- 1 xxx   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx 4096 2020-01-05 01:26 folder

また、オーナーのみを表示したい場合は「-o」オプションを指定でもOKです。


$ ls -o
total 20
-rw-r--r-- 1 xxx   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

1024の累乗ではなく100の累乗でサイズ表示する(–si)


通常、1024の累乗でファイル表示をおこないますが、1000の累乗でサイズ表示。


1.1024の累乗

$ ls -la
total 28
drwxr-xr-x 3 xxx yyy 4096 2020-01-05 00:28 .
drwx-----x 6 xxx yyy 4096 2020-01-05 00:27 ..
-rw-r--r-- 1 xxx yyy    0 2019-11-19 01:28 .env.sh
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder

2.1000の累乗

$ ls -la --si
total 29k
drwxr-xr-x 3 xxx yyy 4.1k 2020-01-05 00:28 .
drwx-----x 6 xxx yyy 4.1k 2020-01-05 00:27 ..
-rw-r--r-- 1 xxx yyy    0 2019-11-19 01:28 .env.sh
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4.1k 2020-01-05 01:26 folder

ファイルのインデックス番号を表示する(-i)


Linuxにファイルに付与しているインデックス番号を表示することができます。
「-i」もしくは「–inode」になります。


$ ls -li
total 20
25566879 -rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
25566875 -rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
25566878 -rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
25566868 -rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
25566958 drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
25559629 lrwxrwxrwx 1 xxx yyy   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

リスト形式で表示する(-l)


ファイル名のみの表示ではなく、オーナー・グループ・サイズといったファイルの属性情報を含めてリスト形式で表示します。


$ ls -l
total 20
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx yyy   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

キロバイトでファイルサイズを表示する(-k)


ファイルサイズをバイト表示ではなく、キロバイト表示します。


$ ls -lk
total 20
-rw-r--r-- 1 xxx yyy 1 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy 1 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy 1 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy 1 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx yyy 1 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

シンボリックリンクはリンク先パスを表示しない(-L)


シンボリックリンクのリンク先パスを表示したくない場合は「-L」オプションを使用します。


$ ls -lL
total 24
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 link

ファイルリストをカンマ区切りで表示する(-m)


ファイルリストをカンマ区切りで表示することができます。
「-m」オプションです。
出力結果を加工する際に便利です。


$ ls -m
aaa.txt, bbb.txt, ccc.txt, ccc.txt~, folder, link

オーナーとグループを文字列ではなくID表示(-n)


オーナーとグループはID(数値)をもっています。
「-n」オプションを使用すると、ID表示をおこなうことができます。


$ ls -n
total 20
-rw-r--r-- 1 1421071 1000   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 1421071 1000   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 1421071 1000   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 1421071 1000   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 1421071 1000 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 1421071 1000   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

ダブルクォーテーションでファイル名を囲む(-Q)


ファイル名をダブルクォーテーションで囲むことができます。
「-Q」もしくは「–quote-name」になります。


$ ls -Q
"aaa.txt"  "bbb.txt"  "ccc.txt"  "ccc.txt~"  "folder"  "link"

再帰的にlsコマンドを実施(-R)


lsコマンドを実施するフォルダの中に存在するフォルダに対してもlsコマンドを実行し、再帰的に結果を表示します。
「-R」もしくは「–recursive」になります。


「再帰的」に結果を表示するので、フォルダの中にフォルダ(フォルダがネスト)が存在していて、全てのファイルを一覧表示する時に便利です。


$ ls -lR
.:
total 20
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx yyy   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

./folder:
total 8
drwxr-xr-x 2 xxx yyy 4096 2020-01-05 01:26 folder1
drwxr-xr-x 2 xxx yyy 4096 2019-11-19 01:13 folder2
-rw-r--r-- 1 xxx yyy    0 2019-11-19 01:13 xyz.txt

./folder/folder1:
total 0

./folder/folder2:
total 0

ファイル名だけを行表示(-1)


あんまり知っている人が少ないかと思いますが、ファイル名だけを表示することができます。
「-1」オプションになります。


$ ls -1
aaa.exe
aaa.txt
bbb.txt
ccc.txt
ccc.txt~
folder
link


さくさくのTips!よく使うLinuxコマンド集

Linux

こんにちは。
さくさくTECHブロガーの「さく」です。


Linuxコマンドで忘れやすいコマンドをまとめていきます。

自分用っていう部分もありますが、もしよければ参考にしてください。


Linuxコマンド

コピー

強制的にコピーするときは「-f」。

強制的というのは、いちいち”上書きします。よろしいですか?”をきかない、ということ。


cp -f a.txt b.txt


ディレクトリをコピーするときには「-r」。

コピー元ディレクトリ配下のファイル、および、サブフォルダ・サブファイルもコピーする。


cp -r directory1 directory1


ファイルの属性を保持したままコピーするときは「-p」。

ファイルの属性とは、ファイルのタイムスタンプ・権限、といったメタ情報。


cp -p a.txt b.txt

リスト

よく使うオプションは「-la」。

「l」は、詳細表示。

「a」は、全て表示。(先頭に . がついているファイルとか)


ls -la

ファイルのタイムスタンプをミリ秒まで表示したい場合は、「–full-time」


ls -la --full-time

履歴

コマンドの実行履歴をみたい場合はhistory

現在ログインしているユーザのコマンド実行履歴なので、ユーザを切り替えた場合は、切り替え前の実行履歴は表示されない。


history

履歴コマンドを実行すると、大概は大量にコマンドが出てくるので、パイプでつないでお目当てのコマンドを探す


history | grep ○△□

※「○△□」は探す対象のコマンドなど

エイリアス

OSに設定されてるエイリアスを確認する時はエイリアスコマンド


alias

登録されているエイリアスコマンドが確認できるが、たいがいのLinuxでは「ll(エルエル)」は “ls -l –color=auto” のエイリアス。


所有者とグループの変更

所有者・グループの変更はchownコマンド。


chown owner:group ○△□

「owner」はオーナー名。

「group」はグループ名。

「○△□」は、対象のフォルダ名とファイル名。


圧縮・解凍

一番簡単な圧縮コマンドは「gzip」


gzip file

解凍も「gzip」でいける
「-d」をつけると、圧縮ファイルは削除される。


gzip -d file

viエディタ

Linux上でファイルを直接修正する場合はviコマンド



vi ファイル名

「i」で編集モード、「esc」でコマンドモード、を切り替える。

コマンドモードでよく使うコマンドは以下。

コマンド 説明
/ (スラッシュ)

スラッシュをいれて検索ワードを入力。

エンターで検索開始。

n(小文字)で次検索。

N(大文字)で前検索。

Shift + g

ファイルの末尾に移動。

dd(dを2回押し)

1行削除

yy(yを2回押し)

行コピー

p

ペースト

シェル

シェルの実行

シェルを実行するときは、シェルが存在するディレクトリを明確にしたうえでシェルファイル名を指定するだけ。


./shell.sh


シェルをバックグラウンドで実行するときは、末尾に「&」をつける。

バックグラウンドで実行といっても、「huponexit」の設定次第では、実行端末を閉じるとシェル自体は停止するので注意が必要。


./shell.sh &