![/sys/bus/pci/devices の内容を編集できません](https://rvso.com/image/1073518/%2Fsys%2Fbus%2Fpci%2Fdevices%20%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E7%B7%A8%E9%9B%86%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93.png)
実行しようとすると
#!/bin/sh
for i in /sys/bus/pci/devices/*/boot_vga; do
if [ $(cat "$i") -eq 0 ]; then
GPU="${i%/boot_vga}"
AUDIO="$(echo "$GPU" | sed -e "s/0$/1/")"
USB="$(echo "$GPU" | sed -e "s/0$/2/")"
echo "vfio-pci" > "$GPU/driver_override"
if [ -d "$AUDIO" ]; then
echo "vfio-pci" > "$AUDIO/driver_override"
fi
if [ -d "$USB" ]; then
echo "vfio-pci" > "$USB/driver_override"
fi
fi
done
modprobe -i vfio-pci
(shファイルとして)出力は次のようになりました
./a.sh: 8: cannot create /sys/bus/pci/devices/0000:17:00.0/driver_override: Permission denied
./a.sh: 10: cannot create /sys/bus/pci/devices/0000:17:00.1/driver_override: Permission denied
これらのファイルの場所を確認すると、/sys/bus/pci/devices/0000:17:00.0/driver_override と /sys/bus/pci/devices/0000:17:00.1/driver_override がすでに存在しており、その内容は「(null)」であることがわかりました。
答え1
この問題は、スクリプトをルート権限で実行していないために発生する可能性があります。Linux/sys
のディレクトリは仮想ファイルシステムの一部であり、保護されています。ここでファイルを変更するには、多くの場合、ルート (またはスーパーユーザー) 権限が必要です。
あなたの場合、driver_override
より高い権限が必要なファイルを変更しようとしています。
次のように、sudo を使用してスクリプトを実行してみてください。
sudo ./a.sh
このコマンドはスクリプトをルート権限で実行し、「アクセスが拒否されました」というエラーが表示されなくなります。
ただし、スクリプトをルート権限で実行する場合、特にシステム ファイルを変更する場合は、ミスによってシステムに損害を与える可能性があるため、注意が必要です。スクリプトをルート ユーザーとして実行する前に、必ずスクリプトが何を実行しているかを理解しておいてください。
ファイル内の「(null)」コンテンツは、driver_override
現在のドライバーを上書きするドライバーが指定されていないことが原因である可能性があります。driver_override
インターフェイスを使用すると、デバイス ドライバーの自動プローブが実行されるときに、デバイスにバインドする特定のドライバーを指定できます。これは高度な機能であるため、慎重に使用する必要があります。