"sudo cd ..." one-liner? [duplikować]

20

Od czasu do czasu chcę cd do katalogu, w którym mój użytkownik nie ma uprawnień, więc uciekam się do sudo .

Oczywiste polecenie sudo cd somedir nie działa:

$ sudo mkdir test
$ sudo chmod go-rxw test
$ ls -l
drwx------ 2 root     root  [...snip...] test
$ cd test
-bash: cd: test: Permission denied
$ sudo cd test
sudo: cd: command not found

Używanie sudo su działa:

$ sudo su
# cd test

Czy można to zrobić w jedno-liniowy? (Nic wielkiego, tylko bezczynna ciekawość:)

Wariacje, które wypróbowałem, nie działały:

$ sudo "cd test"
sudo: cd: command not found
$ sudo -i cd test
-bash: line 0: cd: test: No such file or directory
$ sudo -s cd test

Ostatni nie daje błędu, ale cd jest w nowej powłoce, która kończy się przed końcem linii, więc nigdzie mnie to nie zabiera.

Czy ktoś może mnie oświecić, dlaczego tak się dzieje? Dlaczego nie znaleziono sudo cd , gdy na przykład sudo ls ... działa poprawnie?

    
zadawane j-g-faustus 02.01.2011, 16:36
źródło

2 odpowiedzi

21

Teoretycznie problem polega na tym, że jeśli nie masz uprawnień do wykonywania w katalogu, nie możesz odczytać zawartości katalogu. Załóżmy teraz, że możesz zrobić, co chcesz:

user@desktop:/$ sudo cd restricted-dir
user@desktop:/restricted-dir$ ls
file1 file2

Jak widzisz, wszedłeś do katalogu używając uprawnień sudo, a następnie, gdy sudo wróci, stajesz się znowu użytkownikiem i znajdujesz się w katalogu, w którym normalnie nie powinno być.

Technicznie problem jest następujący.

sudo cd restricted-dir

cd to wbudowana powłoka, a nie polecenie.

sudo cd -i restricted-dir

Prawdopodobnie jesteś w / root, ale miałby ten sam problem, co w następnym.

sudo cd -s restricted-dir

Otwierasz nową powłokę główną, wpiszesz do katalogu, a następnie wyjdziesz z powłoki głównej i powrócisz do miejsca, w którym zacząłeś.

Podsumowując, jedynym rozwiązaniem jest otwarcie powłoki głównej i pozostawienie jej otwartej, gdy znajdujesz się w tym katalogu.

    
odpowiedział petersohn 02.01.2011, 16:52
źródło
5
sudo sh -c "cd restricted-dir; some-other-command"

ie.e / p>

sudo sh -c "cd /root/restricted-dir; ls -l"

Kluczowym elementem jest "sh -c", którego często używam do uruchamiania łańcucha poleceń w tym samym kontekście / procesie powłoki.

    
odpowiedział Tagar 07.11.2015, 06:56
źródło

Przeczytaj inne pytania na temat tagów