MC, 2012
Ilustracja do artykułu: Linux

Linux "sudo: cd: command not found". Przyczyny i rozwiązanie

Problem, który ostatnio napotkałem, jest bardzo prosty do obejścia i dlatego, to nie podanie jego rozwiązania jest głównym przyczynkiem do powstania tej notatki, a raczej nauka (choć dla wielu pewnie elementarna) z tego problemu płynąca. Ściślej mówiąc, chodzi i błąd zwieńczony komunikatem: "sudo: cd: command not found".

W jakich okolicznościach napotkałem ten problem?

Zapragnęło mi się wejść w konsoli do katalogu /root. Oczywiście nie możemy zrobić tego na uprawnieniach zwykłego użytkownika, więc przyszło mi do głowy użycie polecenia sudo:
$ cd /root
bash: cd: /root: Brak dostępu
$ sudo cd /root
[sudo] password for user:
sudo: cd: command not found
Obejść ten problem można pewnie na kilka sposobów, i nie w tym leży trudność. Pytanie jednak, dlaczego taka konstrukcja łącząca sudo z cd zawiodła?

Co jest przyczyną problemu?

Może trochę wstyd się przyznawać, ale odpowiedź nie przyszła mi od razu do głowy, a musiałem dopiero jej poszukać u innych źródeł. Otóż zasadnicza różnica pomiędzy poleceniem sudo a poleceniem cd, pomijając oczywiście różnicę ich przeznaczeń, leży w ich naturze. Polecenie sudo jest programem, czyli wykonywalnym plikiem binarnym, zaś polecenie cd, jest poleceniem wbudowanym w shell'a, czyli nieposiadające materialnej postaci pliku. Dlatego więc otrzymujemy komunikat, o tym, że dla sudo komenda cd nie może zostać odnaleziona, ponieważ sudo próbuje wykonać plik binarny będący programem, a w tym wypadku taki nie istnieje.

Sądzę, że na uświadomienie sobie tej różnicy, nigdy nie jest za wcześnie, bo daje ona bardziej świadomy ogląd na to czym się posługujemy.

A jak obejść ten problem?

Najprościej oczywiście po prostu zalogować się na root'a i dopiero potem przejść do katalogu wymagającego takich uprawnień. Użyjemy do tego polecenie sudo su:
$ sudo su
# cd /root
~#

Komentarze (1)

Imię:
Treść:
krzychu 2020-08-01 08:14:05
super, dzięki :)