助け合いフォーラム

LinuC

LinuC Lv1-101(Ver10.0)
問題ID : 14476
問題を開く
cpコマンドを使用してファイルをコピーする際、コピー先に既存のファイルがあり上書きできない場合は、そのファイルを削除してからコピーしたい。適切なcpコマンドのオプションは次のうちどれか。

正解

-f

解説

cpコマンドの書式と主なオプションは以下のとおりです。

cp [オプション] コピー元のファイル(ディレクトリ) コピー先ファイル(ディレクトリ)


上表より正解は「-f」です。

cpコマンドはデフォルトでファイルを上書きしますが、権限などの理由で書き込み先のファイルが書き込みオープンできない場合、「-f」オプションはそのファイルを削除してからコピーします。

以下は実行例です。


その他の選択肢については上表をご確認ください。
上に戻る

cpのオプション(-f)

投稿日 2025/01/10

cpのオプションの表で
-fはコピー先の既存のファイルやディレクトリが上書きできない場合、削除してからコピーする
とありますが、
-fは確認も行わず、強制的に上書きする
とありました。

実際例でも
削除された形跡は一切なく上書きされているように見られます。

ですのでcpのオプションの表の-fの表記を修正してください。

2025/01/10 20:50

man をみてみたのですが表の通りの記載ですね。

$ man cp
<略>
-f, --force
if an existing destination file cannot be opened, remove it and try again (this
option is ignored when the -n option is also used)

ソースコード追うのはちょっと面倒だったのでシステムコールを追って確認しましたが、unlink() (ファイルを削除する Linux カーネルの機能。 https://manpages.ubuntu.com/manpages/focal/ja/man2/unlink.2.html をご参照ください)が呼ばれてることが確認できたので、ちゃんと man やオプションの表の通りですね。

$ id > src
$ date > dst
$ chmod 400 dst
$ ls -l
total 8
-r--------. 1 user user  29 Jan 10 20:45 dst
-rw-rw-r--. 1 user user 129 Jan 10 20:44 src
$ cp src dst
cp: cannot create regular file ‘dst’: Permission denied
$ strace cp -f src dst 2>&1 | grep unlink
unlink("dst") ←ここ

ちなみに

-fは確認も行わず、強制的に上書きする
とありました。

これはどこにあった記載でしょうか?


コメント

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

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