Løs "command not found" med sudo i Linux: Sådan søger systemet efter kommandoer og opdaterer PATH

Hvordan søger Linux efter "my-command", når kommandoen udstedes med sudo, og hvordan løses problemet med "command not found", selvom "my-command" er i PATH?

Når du bruger sudo i Linux, anvendes root-brugerens PATH, hvilket kan føre til "command not found"; løs problemet ved at bruge fuld sti, opdatere root's PATH i /etc/sudoers, bevare brugerens miljø med sudo -E, eller specificere PATH med sudo env.

Hvordan søger Linux efter "my-command", når kommandoen udstedes med sudo, og hvordan løses problemet med "command not found", selvom "my-command" er i PATH?

Når du udsteder en kommando med sudo i Linux, sker der en række ting, der kan påvirke, hvordan systemet søger efter og udfører kommandoen. Her er en detaljeret forklaring:

Søgeprocessen for "my-command" med sudo

  • Brugerens PATH: Når du kører en kommando uden sudo, bruger systemet den aktuelle brugers PATH miljøvariabel til at finde kommandoen.
  • Root's PATH: Når du bruger sudo, skifter systemet til root-brugeren, og det er root-brugerens PATH der anvendes til at finde kommandoen.
  • Miljøvariabler: sudo kan ændre miljøvariabler, herunder PATH, afhængigt af konfigurationen i /etc/sudoers filen.

Årsager til "command not found" med sudo

  • Forskellige PATH værdier: Root-brugerens PATH kan være forskellig fra den aktuelle brugers PATH, hvilket kan føre til, at kommandoen ikke findes.
  • Begrænsede miljøvariabler: sudo kan være konfigureret til at bruge et begrænset sæt miljøvariabler, hvilket kan ekskludere brugerens PATH.
  • Ikke-standard installation: Kommandoen kan være installeret i en brugerdefineret sti, som ikke er inkluderet i root-brugerens PATH.

Løsning på "command not found" problemet

  • Brug fuld sti: Kør kommandoen med den fulde sti, f.eks. sudo /usr/local/bin/my-command.
  • Opdater root's PATH: Tilføj den nødvendige sti til root-brugerens PATH ved at redigere /etc/sudoers filen:
    Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  • Bevar brugerens miljø: Brug sudo -E for at bevare den aktuelle brugers miljøvariabler, herunder PATH:
    sudo -E my-command
  • Specifik kommando: Brug sudo env til at specificere PATH for en enkelt kommando:
    sudo env PATH=$PATH my-command

Ved at forstå, hvordan sudo håndterer miljøvariabler og PATH, kan du effektivt løse problemer med "command not found" og sikre, at dine kommandoer udføres korrekt.