はじめに
当記事は、不運にも OMVS 上に作成されてしまった文字化けしたファイルやディレクトリーを削除したときのお話です。
背景
OMVS 上で実行されるコマンドをバッチで実行したところ、RC=256 で終了したため、ログを確認したところ、ログの内容が所々文字化けしていました。
嫌な感じがしたので、SSH 接続で OMVS 上に異変が無いか調べたところ、文字化けしたディレクトリーが作成されていました。
-bash-4.3$ ls -l
total 192
-rw-r--r-- 1 BPXROOT BPXGRP 0 Jan 5 2023 *
drwxr-xr-x 6 BPXROOT BPXGRP 8192 Sep 22 2017 SYSTEM
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Dec 28 2022 Service
drwxr-xr-x 4 BPXROOT BPXGRP 16384 Feb 21 2023 bin
drwxr-xr-x 2 BPXROOT BPXGRP 0 Aug 19 2021 bk
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 dev -> $SYSNAME/dev
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 etc -> $SYSNAME/etc
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Sep 22 2017 global
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Oct 3 2017 lib
drwxrwxrwx 2 BPXROOT BPXGRP 8192 Apr 3 2019 log
drwxr-xr-x 3 BPXROOT BPXGRP 8192 Apr 17 2019 opt
drwxr-xr-x 4 BPXROOT BPXGRP 8192 Jan 26 2023 rsusr
drwxr-xr-x 4 BPXROOT BPXGRP 8192 Sep 23 2017 samples
drwxr-xr-x 2 BPXROOT BPXGRP 0 Feb 13 2018 serverpac
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 tmp -> $SYSNAME/tmp
drwxr-xr-x 28 BPXROOT SYS1 8192 Apr 25 2023 u
drwxr-xr-x 10 BPXROOT BPXGRP 8192 Mar 8 2023 usr
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 var -> $SYSNAME/var
drwxr-xr-x 2 BPXROOT BPXGRP 0 Feb 15 12:20 ���Ā:���%�
-bash-4.3$
対処方法
1. ls コマンドを駆使して対象を選択して削除
文字化けしたディレクトリーが作成されてすぐに気づいたため、ls -t | head -1
で削除対象を選択し、rm
にパイプで渡すことができました。
bash-4.3# ls -t | head -1
���Ā:���%�
bash-4.3#
これを利用して、xargs rm
で削除をします。
bash-4.3# ls -t | head -1 | xargs rm -fr
bash-4.3# ls -l
total 192
-rw-r--r-- 1 BPXROOT BPXGRP 0 Jan 5 2023 *
drwxr-xr-x 6 BPXROOT BPXGRP 8192 Sep 22 2017 SYSTEM
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Dec 28 2022 Service
drwxr-xr-x 4 BPXROOT BPXGRP 16384 Feb 21 2023 bin
drwxr-xr-x 2 BPXROOT BPXGRP 0 Aug 19 2021 bk
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 dev -> $SYSNAME/dev
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 etc -> $SYSNAME/etc
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Sep 22 2017 global
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Oct 3 2017 lib
drwxrwxrwx 2 BPXROOT BPXGRP 8192 Apr 3 2019 log
drwxr-xr-x 3 BPXROOT BPXGRP 8192 Apr 17 2019 opt
drwxr-xr-x 4 BPXROOT BPXGRP 8192 Jan 26 2023 rsusr
drwxr-xr-x 4 BPXROOT BPXGRP 8192 Sep 23 2017 samples
drwxr-xr-x 2 BPXROOT BPXGRP 0 Feb 13 2018 serverpac
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 tmp -> $SYSNAME/tmp
drwxr-xr-x 28 BPXROOT SYS1 8192 Apr 25 2023 u
drwxr-xr-x 10 BPXROOT BPXGRP 8192 Mar 8 2023 usr
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 var -> $SYSNAME/var
bash-4.3#
ちゃんと削除されていますね!
2. inode 番号指定で削除
今回は ls
コマンドの出力で削除対象を選択できましたが、一般的には inode 番号で対象を選択して削除することが多いと思いますので、そちらも試してみます。
(愚かにも)文字化けしたディレクトリーを再作成して、inode 番号で削除を試してみます。
bash-4.3# ls -l
total 192
-rw-r--r-- 1 BPXROOT BPXGRP 0 Jan 5 2023 *
drwxr-xr-x 6 BPXROOT BPXGRP 8192 Sep 22 2017 SYSTEM
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Dec 28 2022 Service
drwxr-xr-x 4 BPXROOT BPXGRP 16384 Feb 21 2023 bin
drwxr-xr-x 2 BPXROOT BPXGRP 0 Aug 19 2021 bk
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 dev -> $SYSNAME/dev
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 etc -> $SYSNAME/etc
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Sep 22 2017 global
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Oct 3 2017 lib
drwxrwxrwx 2 BPXROOT BPXGRP 8192 Apr 3 2019 log
drwxr-xr-x 3 BPXROOT BPXGRP 8192 Apr 17 2019 opt
drwxr-xr-x 4 BPXROOT BPXGRP 8192 Jan 26 2023 rsusr
drwxr-xr-x 4 BPXROOT BPXGRP 8192 Sep 23 2017 samples
drwxr-xr-x 2 BPXROOT BPXGRP 0 Feb 13 2018 serverpac
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 tmp -> $SYSNAME/tmp
drwxr-xr-x 28 BPXROOT SYS1 8192 Apr 25 2023 u
drwxr-xr-x 10 BPXROOT BPXGRP 8192 Mar 8 2023 usr
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 var -> $SYSNAME/var
drwxr-xr-x 2 BPXROOT BPXGRP 0 Feb 15 14:14 ���Ā:���%�
bash-4.3#
i-node 番号は ls -i
で表示できます。
bash-4.3# ls -il
total 192
20098 -rw-r--r-- 1 BPXROOT BPXGRP 0 Jan 5 2023 *
38924 drwxr-xr-x 6 BPXROOT BPXGRP 8192 Sep 22 2017 SYSTEM
38957 drwxr-xr-x 2 BPXROOT BPXGRP 8192 Dec 28 2022 Service
38562 drwxr-xr-x 4 BPXROOT BPXGRP 16384 Feb 21 2023 bin
20999 drwxr-xr-x 2 BPXROOT BPXGRP 0 Aug 19 2021 bk
38937 lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 dev -> $SYSNAME/dev
2 lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 etc -> $SYSNAME/etc
38923 drwxr-xr-x 2 BPXROOT BPXGRP 8192 Sep 22 2017 global
38560 drwxr-xr-x 2 BPXROOT BPXGRP 8192 Oct 3 2017 lib
5149 drwxrwxrwx 2 BPXROOT BPXGRP 8192 Apr 3 2019 log
38934 drwxr-xr-x 3 BPXROOT BPXGRP 8192 Apr 17 2019 opt
5147 drwxr-xr-x 4 BPXROOT BPXGRP 8192 Jan 26 2023 rsusr
38829 drwxr-xr-x 4 BPXROOT BPXGRP 8192 Sep 23 2017 samples
38958 drwxr-xr-x 2 BPXROOT BPXGRP 0 Feb 13 2018 serverpac
38938 lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 tmp -> $SYSNAME/tmp
1 drwxr-xr-x 28 BPXROOT SYS1 8192 Apr 25 2023 u
3 drwxr-xr-x 10 BPXROOT BPXGRP 8192 Mar 8 2023 usr
7 lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 var -> $SYSNAME/var
18213 drwxr-xr-x 2 BPXROOT BPXGRP 0 Feb 15 14:14 ���Ā:���%�
bash-4.3#
文字化けしたディレクトリーの inode 番号は 18213
と分かりました。
これを使って、単純に inode 番号 18213 のデータを削除、、とするとマズいです。
試しに find -inum
コマンドで inode=18213 のデータを検索してみると、、、
bash-4.3# find . -inum 18213
./usr/lpp/liberty_zos/19.0.0.3/lib/features/l10n/com.ibm.websphere.appserver.restConnector-2.0_de.properties
./rsusr/rocket/ported/python-2017-04-12-py27/pkgs/jupyter-dashboards-0.6.1-py27_1/lib/python2.7/site-packages/jupyter_dashboards/nbextension/notebook/bower_components/jquery-ui/themes/hot-sneaks/theme.css
./rsusr/rocket/ported/python-2017-04-12-py27/python27/lib/python2.7/site-packages/jupyter_dashboards/nbextension/notebook/bower_components/jquery-ui/themes/hot-sneaks/theme.css
./���Ā:���%�
bash-4.3#
複数合致してしまいました。
OMVS では zFS (HFS) データ・セットがファイル・システムとしてマウントされており、大きなデータセットの作成はをしない運用をすることが多いです。(3390-x 型の単位の DASD を利用していたり、4 GB を超える VSAM を作成する場合には追加の設定が必要だったり。。)
inode 番号はファイル・システム単位で管理されているため、コンポーネントや用途単位で細かくファイル・システムを分ける運用が多い OMVS では、上記のような重複が発生しやすいです。
ですので、find -level 0
を利用して、現在のディレクトリーで上記の inode 番号を持つデータのみを検索します。
bash-4.3# ls -li
total 192
20098 -rw-r--r-- 1 BPXROOT BPXGRP 0 Jan 5 2023 *
38924 drwxr-xr-x 6 BPXROOT BPXGRP 8192 Sep 22 2017 SYSTEM
38957 drwxr-xr-x 2 BPXROOT BPXGRP 8192 Dec 28 2022 Service
38562 drwxr-xr-x 4 BPXROOT BPXGRP 16384 Feb 21 2023 bin
20999 drwxr-xr-x 2 BPXROOT BPXGRP 0 Aug 19 2021 bk
38937 lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 dev -> $SYSNAME/dev
2 lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 etc -> $SYSNAME/etc
38923 drwxr-xr-x 2 BPXROOT BPXGRP 8192 Sep 22 2017 global
38560 drwxr-xr-x 2 BPXROOT BPXGRP 8192 Oct 3 2017 lib
5149 drwxrwxrwx 2 BPXROOT BPXGRP 8192 Apr 3 2019 log
38934 drwxr-xr-x 3 BPXROOT BPXGRP 8192 Apr 17 2019 opt
5147 drwxr-xr-x 4 BPXROOT BPXGRP 8192 Jan 26 2023 rsusr
38829 drwxr-xr-x 4 BPXROOT BPXGRP 8192 Sep 23 2017 samples
38958 drwxr-xr-x 2 BPXROOT BPXGRP 0 Feb 13 2018 serverpac
38938 lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 tmp -> $SYSNAME/tmp
1 drwxr-xr-x 28 BPXROOT SYS1 8192 Apr 25 2023 u
3 drwxr-xr-x 10 BPXROOT BPXGRP 8192 Mar 8 2023 usr
7 lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 var -> $SYSNAME/var
18213 drwxr-xr-x 2 BPXROOT BPXGRP 0 Feb 15 14:14 ���Ā:���%�
bash-4.3# find . -inum 18213 -level 0
./���Ā:���%�
bash-4.3#
inode 指定で削除対象のディレクトリーのみが選択されたことを確認できましたので、xargs rm
で削除を行います(削除前の確認は大切)。
bash-4.3# find . -inum 18213 -level 0 | xargs rm -fr
bash-4.3# ls -l
total 192
-rw-r--r-- 1 BPXROOT BPXGRP 0 Jan 5 2023 *
drwxr-xr-x 6 BPXROOT BPXGRP 8192 Sep 22 2017 SYSTEM
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Dec 28 2022 Service
drwxr-xr-x 4 BPXROOT BPXGRP 16384 Feb 21 2023 bin
drwxr-xr-x 2 BPXROOT BPXGRP 0 Aug 19 2021 bk
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 dev -> $SYSNAME/dev
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 etc -> $SYSNAME/etc
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Sep 22 2017 global
drwxr-xr-x 2 BPXROOT BPXGRP 8192 Oct 3 2017 lib
drwxrwxrwx 2 BPXROOT BPXGRP 8192 Apr 3 2019 log
drwxr-xr-x 3 BPXROOT BPXGRP 8192 Apr 17 2019 opt
drwxr-xr-x 4 BPXROOT BPXGRP 8192 Jan 26 2023 rsusr
drwxr-xr-x 4 BPXROOT BPXGRP 8192 Sep 23 2017 samples
drwxr-xr-x 2 BPXROOT BPXGRP 0 Feb 13 2018 serverpac
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 tmp -> $SYSNAME/tmp
drwxr-xr-x 28 BPXROOT SYS1 8192 Apr 25 2023 u
drwxr-xr-x 10 BPXROOT BPXGRP 8192 Mar 8 2023 usr
lrwxrwxrwx 1 BPXROOT BPXGRP 12 Oct 24 2017 var -> $SYSNAME/var
bash-4.3#
削除完了!
おわりに
OMVS 上で実行可能なコマンドは、あまりリッチではなく、通常の Linux では「使えて当たり前」なものもサポートしていないことがしばしばありますが、文字化けしたディレクトリー/ファイルの削除については、一般的な手順でできることが確認できました。