助け合いフォーラム

LPIC

LPIC Lv1-102(Ver5.0)
問題ID : 5012
問題を開く
バックアップをとった日付を記録する目的で、以下の環境を構築した。 backup.shを実行した結果はどうなるか。

この問題はプレミアムコンテンツです。

上に戻る

エラーにならない場合というのはどういう状態なのか?

公開日 2023/04/28

解説に「「date > backup」の行が実行されますが、ディレクトリに対してリダイレクトによる書き込みを行う事になるため、エラーとなります。」とあります。
この場合、どういう状態ならエラーにならないのでしょうか?
ご教示のほどよろしく願いいたします。

2023/04/28 19:54

backup がディレクトリではなくファイル(かつ書き込み可能)ならエラーになりません。
問題文でls -l の結果が

drwxr-xr-x. (…中略…) backup

のようになっていますが、先頭の文字がd であることからbackup がディレクトリであることに気づくことが必要です。
もし

-rwxr-xr-x. (…中略…) backup

のように先頭の文字が-になっていればbackup はディレクトリではなく通常ファイルなので、あとはスクリプトを実行したユーザーにこのファイルへの書き込み権があればエラーになりません。


コメント

j jeronimmo521

2023/04/29 03:57

ご回答ありがとうございます。 詳細な解説でとてもよくわかりました。

この返信に対して
コメントを記入できます

2023/04/28 19:54

リダイレクト先に"backup"が指定されているため、
エラーになっています。

$ls -l の実行結果からわかるようにbashスクリプト"backup.sh"以外に同じ階層には
"backup"というディレクトリが存在しています。
(蛇足かもしれませんがdrwxr-xr-x の部分でdから開始していることからbackupはファイルではなく、ディレクトリです。)

もしも"backup"がファイルであればリダイレクトにより書き込みが出来てエラーにはならなかったはずですが
(catが実行できているためbashを実行しているのはstaffユーザとみられるため)、
前述の通り、ディレクトリなので書き込みは出来ません。
恐らくエラーメッセージの内容はこんな感じだと思います↓

-bash: backup: Is a directory

以上より「どうすればエラーにならないのか」ですが、
リダイレクト先に"backup"という名称を避けたファイルを指定すれば良いと思われます。
それによってリダイレクトの指定先がディレクトリであることに起因するエラーを回避出来ます。
■■■■■■■■■■■■■
#!/bin/bash

if test -e backup; then
date > (※ここでbackup以外の文字列を指定する)
fi
■■■■■■■■■■■■■
ご参考となれば幸いです。


コメント

c chisto28

2023/04/28 19:58

すみません。一部修正です。①と②は同じ文字列となります。 ■■■■■■■■■■■■■ #!/bin/bash if test -e (※ここでbackup以外の文字列を指定する①); then date > (※ここでbackup以外の文字列を指定する②) fi ■■■■■■■■■■■■■

j jeronimmo521

2023/04/29 03:57

ご回答ありがとうございます。 詳しく解説いただき理解が進みました。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?