Inhalt von /sys/bus/pci/devices kann nicht bearbeitet werden

Inhalt von /sys/bus/pci/devices kann nicht bearbeitet werden

beim Versuch zu rennen

#!/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

(als sh-Datei) Ich habe die Ausgabe

./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

beim Betrachten dieser Dateispeicherorte habe ich festgestellt, dass /sys/bus/pci/devices/0000:17:00.0/driver_override und /sys/bus/pci/devices/0000:17:00.1/driver_override bereits vorhanden waren und deren Inhalt „(null)“ ist.

Antwort1

Dieses Problem liegt wahrscheinlich daran, dass Sie das Skript nicht mit Root-Berechtigungen ausführen. Das /sysVerzeichnis in Linux ist Teil des virtuellen Dateisystems und geschützt. Das Ändern von Dateien hier erfordert häufig Root- (oder Superuser-)Berechtigungen.

In Ihrem Fall versuchen Sie, driver_overrideDateien zu ändern, die höhere Berechtigungen erfordern.

Versuchen Sie, das Skript mit sudo wie folgt auszuführen:

sudo ./a.sh

Dieser Befehl führt das Skript mit Root-Rechten aus und der Fehler „Zugriff verweigert“ sollte nicht mehr angezeigt werden.

Seien Sie jedoch vorsichtig, wenn Sie Skripte mit Root-Berechtigungen ausführen, insbesondere wenn sie Systemdateien ändern, da Fehler Ihr System möglicherweise beschädigen könnten. Stellen Sie immer sicher, dass Sie verstehen, was das Skript tut, bevor Sie es als Root-Benutzer ausführen.

Der Inhalt „(null)“ in der driver_overrideDatei kann darauf zurückzuführen sein, dass kein Treiber angegeben wurde, um den aktuellen zu überschreiben. Über die driver_overrideSchnittstelle können Sie einen bestimmten Treiber angeben, der an ein Gerät gebunden werden soll, wenn die automatische Gerätetreiberprüfung durchgeführt wird. Dies ist eine erweiterte Funktion und sollte mit Vorsicht verwendet werden.

verwandte Informationen