Ich habe versucht zu verwenden sudo cd name_of_dir
, erhalte jedoch die Fehlermeldung:
sudo: cd: command not found
Gibt es eine andere Möglichkeit, ein Verzeichnis eines anderen Benutzers mit 700 Berechtigungen einzugeben?
command-line
permissions
sudo
cd-command
Bakhtiyor
quelle
quelle
ls -l
des Verzeichnisses selbst hinzu.sudo chmod 0755 name_of_dir; do you business; cd ../; sudo chmod 0700 name_of_dir
Scheint die einzige Antwort zu sein, mit der Sie zufrieden sein werden.sudo cd
arbeiten, aber er stimmt Lösungen mit sudo oder su ab. Er sagt, er möchte nicht als Root arbeiten, möchte aber trotzdem direkt auf einen zugreifen, den er nicht besitzt. Klingt für mich wie ein Troll ...Antworten:
sudo cd
funktioniert nicht, da dercd
Befehl in die Shell integriert ist. Du sagst also, werde root und führe diesen Befehl aus. Sie werden root und dann der Befehl, nachdem nach sudo gesucht wurde, aber es ist keincd
Befehl zu finden.Die zu verwendende Methode besteht darin, zu dem Benutzer zu wechseln, dem das Verzeichnis gehört. Die Erlaubnis
700
ist gemeint als "der Besitzer kann lesen, schreiben und ausführen".Wenn root das Verzeichnis besitzt
sudo -i
, ist password und danncd {dir}
die einzig richtige Methode. Wenn jemand anderes das Verzeichnis besitzt, können Sie weiterhin die 1. Methode verwenden, aber auch mit diesem Benutzer zu diesem Benutzer wechselnsu {username}
und ihn danncd
als diesen Benutzer verwenden.quelle
sudo echo
: Sie benötigen etwasecho 'deb {text}' | sudo tee --append {file}
, um Echo mit sudo zu verwenden und eine Datei zu ändern.cd
die Befehle, die für verfügbar sindsudo
, jedoch nicht integriert?sudo -i
um "root console" zu öffnen und dann
cd /path/to/directory
(
cd
Ist ein Shell-eingebauter Befehl, daher kann er nicht das Sudo-Ziel sein.)quelle
Um ein Root-Verzeichnis zu öffnen, können wir eine Root-Shell ausführen, zB:
quelle
sudo su
ing (oder eine andere Methode) die einzig praktikable oder sogar mögliche Methode. "Experten" raten Ihnen nur, root nicht als Gewohnheit zu benutzen - es ist in Ordnung, wenn Sie es tatsächlich brauchen. Und @Vojtech, nichts ist unmöglich ...Wie andere betonten - es ist Shell eingebaut:
Also, warum sudo Sie nicht die Shell selbst?
quelle
which
. Es ist lediglich ein Skript, und es werden nicht alle Möglichkeiten (binär, eingebaut, Aliase usw.) behandelt. Verwenden Sietype
stattdessen. Viel sicherer, leistungsstark und portabel. Undtype -p
für den Pfad einer ausführbaren Datei.type [ -wfpams ] name ... Equivalent to whence -v.
,which [ -wpams ] name ... Equivalent to whence -c.
(Mann zshbuiltins)whence
istzsh
-nur ... es funktioniert nicht in Bash, es ist nicht einmal standardmäßig in Ubuntu installiert. Whiletype
ist POSIX , was bedeutet, dass es in jeder modernen Shell funktioniert ... bash, csh, ksh .. und sogar zsh.type
da beide Aliase für denselben Befehl sind.zsh
. In bash, der Standard (und normalerweise nur) Terminal-Shell in Ubuntu,which
ist kein eingebautes ... also wirdtype
(odertype -p
) bevorzugt.Sie können sich auch zum Root-Benutzer erheben, indem Sie:
Dann können Sie in ein beliebiges Verzeichnis wechseln, in dem kein normaler Benutzer erlaubt ist:
Oder
Wenn Sie fertig sind, geben Sie Folgendes ein:
Zum Abmelden der Root-Benutzerrechte.
Um sich als root zu erheben, können Sie die beiden Befehle auch nach
&&
Operator kombinieren , da dieser Operator auch die Ausführungsreihenfolge beibehält, wenn der aktuelle Befehl erfolgreich ausgeführt wird und nur dann der nächste Befehl ausgeführt werden darf:Oder
quelle
Wenn Sie wirklich arbeiten möchten , können Sie eine Shell-Funktion definieren , die eine neue Root-Shell ausführt, wenn Sie auf diese Weise ausgeführt wird . Andernfalls wird nur der reguläre Befehl ausgeführt.
sudo cd directory
bash
sudo
sudo
Wie in anderen Antworten dargestellt, möchten die meisten Benutzer dies nicht tun, sondern stattdessen:
sudo -s
, odersudo -i
wenn Sie eine Anmeldeshell verwenden möchten (denken Sie daran, dass ein Effekt darinsudo -i
besteht, Sie im Stammverzeichnis des Stammverzeichnisses zu starten), odersudo bash
wenn Siebash
Optionen erzwingen oder an die Shell übergeben möchten .cd directory
exit
den Befehl aus, um die neue Shell zu verlassen. Es ist wichtig, dies nicht zu vergessen, da Sie nicht mehr Aktionen als root ausführen möchten, als Sie beabsichtigen!Wenn Sie möchten, können Sie eine Shell-Funktion (oder ein Skript) schreiben, die die ersten beiden dieser Aktionen ausführt, wenn sie
sudo
gefolgt werdencd
, undsudo
ansonsten normal ausgeführt wird. Verwenden Sie dies nicht als Alternative zum Lernen, warumsudo cd
dies sonst nicht gelingt . Wenn Sie nicht verstehen, was gerade passiert , werden Sie wahrscheinlich sehr verwirrt sein , wenn Sie sich in einer neuen Shell befinden (und möglicherweise verstehen Sie keine Fehlermeldungen) die auftreten).Hier ist eine Möglichkeit, eine solche Shell-Funktion zu schreiben, die Sie auch daran erinnert, dass Sie sich in einer neuen Shell befinden und dass Sie diese beenden sollten
exit
, wenn Sie fertig sind. (Das Erinnerung ist wahrscheinlich für die Nutzer nützlich sein jedem Skill - Level, da man im Allgemeinen nicht gewohnt ist , in eine neue Schale zu sein , wenn man läuftsudo
ohne-s
,-i
oder den Namen eines tatsächlichen Shell als Argument.)Sie können dies in Ihre einfügen
~/.bashrc
, obwohl dies eine merkwürdige Methode ist,sudo
die Sie möglicherweise nur gelegentlich aktivieren möchten. In diesem Fall ist es besser, es in einer eigenen Datei abzulegen. Wenn Sie eine Datei erstellen, diesudo.bash
in Ihrem Ausgangsverzeichnis mit diesen Inhalten aufgerufen wird , können Sie diesudo
Funktion verfügbar machen, sodass sie anstelle des regulärensudo
Befehls ausgeführt wird. ~/sudo.bash
. Dies wirkt sich auf die aktuelle Shell und ihre untergeordneten Shells aus, jedoch nicht auf andere. Aus dem gleichen Grund, aus dem Dateien wie.bashrc
nicht ausführbar sind, markieren Siesudo.bash
ausführbar nicht mitchmod
. Dies ist wirklich eine Bibliothek und kein eigenständiges Shell-Skript. Wenn du es getan hastFühre es als Shell-Skript aus, es würde die Funktion definieren ... aber nur in der Shell, in der das Skript ausgeführt wurde, nicht für dich als Aufrufer. (Natürlich können Sie können ein Skript für diesen schreiben, die einfach nicht sein geschehen der Ansatz , den ich hier getroffen habe.)sudo
Führen Sie Folgendes aus, um zu überprüfen, ob eine Shell-Funktion definiert ist, und um zu überprüfen, ob eine Shell-Funktion definiert isttype sudo
. Führen Sie die folgende Anweisung aus, um die Funktion nach ihrer Definition zu deaktivieren (dh ihre Definition aufzuheben)unset -f sudo
. Führen Sie Folgendes aus, um den regulärensudo
Befehl direkt manuell auszuführen, auch wenn die Shell-Funktion definiert istcommand sudo
. Beachten Sie jedoch, dass Sie nicht haben , dass zu tun, denn diesesudo
Funktion , dass sich tatsächlich tut , wenn es mehr oder weniger als zwei an sie übergebenen Argumente oder das erste Argument übergeben , um es alles andere als istcd
. Aus diesem Grund können Sie es weiterhin wie gewohnt verwendensudo
.Beachten Sie auch, dass Sie mit der oben gezeigten Shell-Funktion noch andere Argumente übergeben können
sudo
, diese jedoch nichtcd
speziell behandeln können . Insbesondere das Ausführen wird nicht unterstützt, obwohl Sie die Shell-Funktion erweitern können, um diesen Fall zu unterstützen. Ist es auch nicht . Die Shell, die es erstellt, ähnelt dem, was Sie mit bekommen . Der Code wird nicht ausgeführt , sondern verwendet , sodass die Option ordnungsgemäß funktioniert. Es wird tatsächlich zweimal ausgeführt, wenn Sie ein Verzeichnisargument übergeben (und ansonsten nullmal). Beim Ausführen wird zuerst eine andere Bash-Shell als die, in der Sie die Funktion ausführen , entfernt und das Verzeichnis geändert. Wenn das gelingt, ersetzt essudo -u user cd directory
sudo -i cd directory
sudo -s
sudo -s
sudo bash
-c
bash
cd
sudo cd directory
sudo
diese Bash-Shell mit einer neuen, interaktiven, die Sie verwenden können.Hier ist ein Beispiel, wie diese Shell-Funktion automatisch "das Richtige tut". Beachten Sie, dass
sudo ls -A /root
sich das normal verhält. Erst wenn ich dann versuche,cd
ein Verzeichnis mitsudo
einer neuen Shell anzulegen, werde ich explizit daran erinnert, was los ist.Wenn Sie versuchen,
sudo cd
in ein Verzeichnis zu wechseln, in das Sie nicht einmal als Root wechseln können, erhalten Sie nur eine Fehlermeldung:sudo -k
In den obigen Beispielen habe ich zwischen zwei Aufrufen gezeigt, dass Sie als Root authentifiziert werden, bevor Sie versuchen, das Verzeichnis zu ändern. Aber du musst eigentlich nichtsudo -k
selbst rennen . Da die Shell-Funktion nur ein dünner Wrapper für den eigentlichensudo
Befehl ist , funktionieren die Zwischenspeicherung Ihrer Anmeldeinformationen und anderer gängigersudo
Verhaltensweisen weiterhin normal.Obwohl es gut funktioniert und irgendwie ordentlich ist, gebe ich zu, dass
sudo
es super seltsam ist , den echten Befehl mit einer gleichnamigen Funktion zu beschatten . Die meisten Benutzer werden wahrscheinlich wollen nur die Schritte ausführensudo -s
, selbst. Aber falls jemand dies will - und auch demonstrieren will, dass es möglich ist - dann ist es da.cd directory
quelle
Was das Zu
su
oder Nicht-Diskutierensu
angeht, finde ich es albern.su
ist gegen die Religion von Ubuntu und es ist nichts, was man nachlässig macht. Es ist erstaunlich, wasrm -rf *
man tun kann, wenn man root ist. Wenn Sie jedoch mit der Befehlszeilenschnittstelle (Command Line Interface, CLI) vertraut sind und Aufgaben auf Systemebene ausführen müssen, gibt es keinen Grund, diese nicht zu verwendensu
. Ich habe mehrere Distributionen benutzt, von denen noch niemand erwähnt hat, dass sie benutzt werdensudo
. Es ist nur eine Frage der Art der Arbeit, die Sie tun und mit welcher Methode Sie sich am wohlsten fühlen. Ich benutze beides.quelle
sudo
kubuntu habe ich mit lucidsudo cd
jetzt gearbeitet - ohne irgendwelche Workarounds." Abgesehen von so etwas , von dem ich mir ziemlich sicher bin, dass es noch nie in Ubuntu war, verstehe ich nicht, wie. (Außerdem habe ich 10.04 verwendet; das hat es nicht getan.) Es ist Jahre her, seit du das gepostet hast, aber erinnerst du dich an die Details? Funktioniert dassudo cd
noch bei dir? Was ist die Ausgabetype -a sudo
in einer Shell, in der es funktioniert? Möglicherweise wissen Sie es nicht - und der zweite Teil Ihrer Antwort bleibt relevant -, aber wenn Sie dies tun, können Sie es bearbeiten .