1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

z/OS OMVS 上の作成された文字化けしたファイルやディレクトリーを削除する方法

Posted at

はじめに

当記事は、不運にも 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 では「使えて当たり前」なものもサポートしていないことがしばしばありますが、文字化けしたディレクトリー/ファイルの削除については、一般的な手順でできることが確認できました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?