Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.

Autor Téma: oprávnění k zápisu do souboru - operace zamítnuta  (Přečteno 2978 krát)

MatesAN

  • Návštěvník
  • *
  • Příspěvků: 1
    • Zobrazit profil
oprávnění k zápisu do souboru - operace zamítnuta
« kdy: 02 Leden 2020, 15:00:04 »
Ahoj, jakžto zelenáč mám problém i s hloupým zápisem do jednoho souboru.

matej@matej-MS-7A12:~$
sudo echo "1" > /sys/class/drm/card0/device/hwmon/hwmon3/pwm1_enable
bash: /sys/class/drm/card0/device/hwmon/hwmon3/pwm1_enable: Operace zamítnuta


Snažil jsem se na foru najít řešení, nicméně marně, jistě zde bude někdo vědět, co dělám špatně?

juwa2

  • Závislák
  • ****
  • Příspěvků: 3905
    • Zobrazit profil
Re:oprávnění k zápisu do souboru - operace zamítnuta
« Odpověď #1 kdy: 02 Leden 2020, 15:34:47 »
Ahoj, jakžto zelenáč mám problém i s hloupým zápisem do jednoho souboru.

matej@matej-MS-7A12:~$
sudo echo 1  > /sys/class/drm/card0/device/hwmon/hwmon3/pwm1_enable
bash: /sys/class/drm/card0/device/hwmon/hwmon3/pwm1_enable: Operace zamítnuta


Snažil jsem se na foru najít řešení, nicméně marně, jistě zde bude někdo vědět, co dělám špatně?

Děláš to v podstatě správně. Ale speciálně příkaz echo nelze současně se sudo použít.
Musíš to proto udělat jinak, řeší se to takto:
Kód: [Vybrat]
sudo -i
echo 1 > /sys/class/drm/card0/device/hwmon/hwmon3/pwm1_enable

nebo takto:
Kód: [Vybrat]
sudo bash -c "echo 1 > /sys/class/drm/card0/device/hwmon/hwmon3/pwm1_enable"

případně takto:
Kód: [Vybrat]
sudo tee /sys/class/drm/card0/device/hwmon/hwmon3/pwm1_enable <<<1
či takto:
Kód: [Vybrat]
echo 1 | sudo tee /sys/class/drm/card0/device/hwmon/hwmon3/pwm1_enable
Poznámka:
1. Uvozovky kolem té jedničky se psát nemusí (jedná se o výraz bez mezer). Pokud ale mají v cílovém souboru být, je potřeba použít této syntaxe:
Kód: [Vybrat]
echo \"1\" > /soubor
2. Pokud už něco cílový soubor obsahuje a jednička se k tomu má přidat (na konec souboru), tak místo 
echo 1 > /soubor
se použije
echo 1 >> /soubor
--------------------------------------------------------------------------------
A příště hledej líp - stačí do běžného Google vyhledávání zadat výraz "sudo echo". Zobrazí se ti tohle.
« Poslední změna: 02 Leden 2020, 17:40:24 od juwa2 »

singularis

  • Člen
  • **
  • Příspěvků: 115
    • Zobrazit profil
Re:oprávnění k zápisu do souboru - operace zamítnuta
« Odpověď #2 kdy: 02 Leden 2020, 19:57:58 »
Ale speciálně příkaz echo nelze současně se sudo použít.

Promiň, ale s touto formulací nemohu souhlasit. Problém je jinde, než píšeš. To, co píšeš, by platilo třeba pro příkaz „cd“, protože k němu neexistuje odpovídající program − „sudo cd“ tak vypíše „sudo: cd: příkaz nenalezen“, ale echo existuje i jako /bin/echo a sudo zrovna toto echo najde a bez problémů spustí (i když pochybuji, že je to to, co MatesAN chtěl).

Ve skutečnosti vůbec není problém se sudo; problém je v přesměrování výstupu − sudo je program, který (nejčastěji) funguje tak, že svůj první parametr spustí jako nový proces s právy superuživatele a všechny ostatní parametry spuštěnému procesu předá. Jenže přesměrování značkou > nebo >> není parametr, to přesměrování zařizuje už volající bash, takže přesměrovává výstup příkazu sudo, ne příkazu echo! A protože volající bash nemá právo ten soubor otevřít pro zápis, nedokáže tam pro sudo přesměrovat výstup, a tedy selže ještě dřív, než se sudo vůbec spustí!

S řešeními přesměrovaní, která uvádíš, souhlasím. Ale to vysvětlení s uvozovkami mě mate. Já znám na vypsání "1" pomocí příkazu echo čtyři různé smysluplné syntaxe:

Kód: [Vybrat]
echo \"1\"
echo "\"1\""
echo '"1"'
echo $'"1"'

Všechny jsou správně a fungují a záleží jen na uživateli, která se mu líbí nejvíc. Speciálně pro „zelenáče“ bych asi doporučil/a apostrofy, protože pokud člověk zrovna nepotřebuje vypsat apostrof, je s nimi nejméně starostí.

juwa2

  • Závislák
  • ****
  • Příspěvků: 3905
    • Zobrazit profil
Re:oprávnění k zápisu do souboru - operace zamítnuta
« Odpověď #3 kdy: 02 Leden 2020, 20:37:43 »
Ale speciálně příkaz echo nelze současně se sudo použít.

Promiň, ale s touto formulací nemohu souhlasit. Problém je jinde, než píšeš. To, co píšeš, by platilo třeba pro příkaz „cd“, protože k němu neexistuje odpovídající program − „sudo cd“ tak vypíše „sudo: cd: příkaz nenalezen“, ale echo existuje i jako /bin/echo a sudo zrovna toto echo najde a bez problémů spustí (i když pochybuji, že je to to, co MatesAN chtěl).

Ve skutečnosti vůbec není problém se sudo; problém je v přesměrování výstupu − sudo je program, který (nejčastěji) funguje tak, že svůj první parametr spustí jako nový proces s právy superuživatele a všechny ostatní parametry spuštěnému procesu předá. Jenže přesměrování značkou > nebo >> není parametr, to přesměrování zařizuje už volající bash, takže přesměrovává výstup příkazu sudo, ne příkazu echo! A protože volající bash nemá právo ten soubor otevřít pro zápis, nedokáže tam pro sudo přesměrovat výstup, a tedy selže ještě dřív, než se sudo vůbec spustí!

Jasně, je to tak, ale zrovna tohle všechno jsem do své odpovědi psát nechtěl - a zbytečně tím začátečníkovi "zamotat šišku".  ;)
« Poslední změna: 02 Leden 2020, 21:20:07 od juwa2 »

Gmisiycs

  • Člen
  • **
  • Příspěvků: 323
    • Zobrazit profil
    • Helltracker
Re:oprávnění k zápisu do souboru - operace zamítnuta
« Odpověď #4 kdy: 04 Leden 2020, 01:56:32 »
Odpovědi byly pro "začátečníka". Souhlasím, že nemají být složité.

Já za reakci od singularis moc děkuji. Je to přesně to, co na programování miluji. Ty jemné syntaxe.
R.I.P. Trusty Tahr - nezapomenu...