72124


**現象**  
Vimでテキストファイル（`/opt/script/clam-full.sh`）を作って書き込もうとしたのですが、「E212:
書込み用にファイルを開けません」と出力されます

**期待値**  
`:w`でテキストファイルを作成・書き込みをすることができるようにする

**再現手順**  
`$ sudo vim /opt/script/clam-full.sh`を実行し、下記のテキストを入力して書き込み

[code]

    #!/bin/sh
    echo =========================================
    date
    hostname
    clamscan / \
         --infected \
         --recursive \
         --log=/var/log/clamav/clamscan.log \
         --move=/var/log/clamav/virus \
         --exclude-dir=^/boot \
         --exclude-dir=^/sys \
         --exclude-dir=^/proc \
         --exclude-dir=^/dev \
         --exclude-dir=^/var/log/clamav/virus
    
    # --infected 感染を検出したファイルのみを結果に出力
    # --recursive 指定ディレクトリ以下を再帰的に検査 圧縮ファイルは解凍して検査
    # --log=FILE ログファイル
    # --move=DIR 感染を検出したファイルの隔離先
    # --remove 感染を検出したファイルを削除
    # --exclude=FILE 　　検査除外ファイル（パターンで指定）
    # --exclude-dir=DIR　検査除外ディレクトリ（パターンで指定）
    
    if [ $? = 0 ]; then
      echo "ウイルス未検出."
    else
      echo "ウイルス検出!!"
    fi
    
[/code]

**今まで試した・調べたこと**  
`$ ls -l /opt`を実行したところ、`drwxr-xr-x 3 root root 4096 8月 20 20:49 pigpio`となっていた  
root権限がある状態では`rwx`とあるように読み取り・書き込み・実行権限が存在するので、パーミッションの問題ではなさそうです


CC BY-SA 4.0
2020-11-21T08:43:11.513
72120
2020-11-21T11:33:19.143
36906
question
vim
Vimでテキストファイルを作って書き込もうとしたのですが、「E212: 書込み用にファイルを開けません」と出力されます


「書込み用にファイルを開けません」というのですから、clam-full.shというファイルのパーミッションの問題(読み取り専用になっている)だと思います。

・ ":w !sudo tee %" というコマンドで強制保存してから、"q!"でvimを終了。  
・ clam-full.shのパーミッションを書き込み可能に変更する。  
というのを試してみてください。


CC BY-SA 4.0
2020-11-21T09:43:01.963
72121
2020-11-21T09:43:01.963
217
72120
answer


実際の環境でも試してみましたが、コメントにも書いた通り指定したパスに含まれる中間のディレクトリ(`/opt/script/`)
が存在しないのが原因だと思われます。

保存先のディレクトリを予め作成してから Vim でファイルを編集・保存してみてください。

[code]

    $ sudo mkdir /opt/script
    $ sudo vi /opt/script/clam-full.sh
    
[/code]

Vim での保存時にエラーが表示されて、「ディレクトリを作成していなかった」事に気づいた場合には、Vim の画面から以下のコマンドで (Vim を抜けずに)
コマンドを実行することもできます。

[code]

    :!sudo mkdir /opt/script
    
[/code]


CC BY-SA 4.0
2020-11-21T11:33:19.143
72124
2020-11-21T11:33:19.143
3060
72120
answer