私は望んでいないのでこれを達成したいと思いますtabcomplete
。
コマンドを入力すると、次のようになります。
cd `find . -name test -type d`
次のエラーが発生します。
find: ./usr/sbin/authserver: Permission denied
fzfとrangerでcd'ingを試しました。しかし、すべてがめちゃくちゃです。
また、エラーが発生する理由は、フォルダが隠されているが表示されるフォルダでも機能しないためだと思います。
答え1
このエラーは、find
ディレクトリに対する読み取りまたは入力権限がないため、ディレクトリ内のファイルが見つからないことを示します。
それ
cd `find . -name test -type d`
find
とにかく構文は間違っています。出力を改行文字$IFS
だけでなくすべての文字に分割し(ファイルパスに改行文字が含まれるのを防ぐ方法はありません)、最終的に複数の引数をcd
。
zshでは、次のことをお勧めします。
cd ./**/test(/[1])
隠しサブディレクトリは無視され、cd
名前のあるサブディレクトリのすべてのレベルの下にある最初の(アルファベット順)ディレクトリに移動します。test
Glob拡張はディレクトリツリーをクロールするときにエラーを無視しますが、zshはシェル$ERRNO
で最後に失敗したシステムコールのエラー番号値を保持する特殊変数を使用してエラーを確認できます。
とにかく、sudo cd
あなたの意見で述べたようにすることは意味がありません。cd
シェルプロセスの作業ディレクトリを変更するために使用されるシェル組み込みコマンド。sudo
他のユーザー(魔女ser)でコマンドを実行するために使用される外部コマンド。s
u
do
cd
一部のシステムには別々のユーティリティがあります。(POSIXでも必要です)しかし、実行する作業は、独自のプロセスの現在のディレクトリを変更してからそのプロセスを終了するだけであるため、現在のシェルプロセスの現在の作業ディレクトリを変更するのには役立ちません。
zsh
有効なユーザーID変更のサポートが組み込まれていますが、それでもシステムが設定した制限内にあります。たとえば、zsh
実行中のプロセスは、root
有効なuidを何でも変更して、ルートに戻すことができます。
# id -un
root
# EUID=1000
$ id -un
chazelas
$ EUID=0
# id -un
root
$UID
ただし、or(uid、gid、および他のgidも設定します)を設定した$USERNAME
後はそうではありません。
理論的には、プロセスの現在の作業ディレクトリをアクセスできないいくつかのディレクトリに変更するには、setuidヘルパー(たとえば)を介して特殊なファイル記述子配信メカニズムを使用できる必要がありますが、わかりませsudo
ん。これをサポートするすべてのシェル。とにかく、そこに着いたら、cd
そこにあるファイルで何もできないので、何の助けもありません。
$ cd /var/spool/cron/crontabs
cd: permission denied: /var/spool/cron/crontabs
$ sudo zsh
/home/chazelas# cd /var/spool/cron/crontabs
/var/spool/cron/crontabs# USERNAME=chazelas
/var/spool/cron/crontabs$
現在/var/spool/cron/crontabs
、作業ディレクトリが制限されたディレクトリである権限のないシェルがあります。
/var/spool/cron/crontabs$ pwd
/var/spool/cron/crontabs
/var/spool/cron/crontabs$ ls
ls: cannot open directory '.': Permission denied
制限されたディレクトリのシェルで操作を実行する必要がある場合は、そのディレクトリへのアクセス権を持つユーザーとしてシェルを起動できます。たとえば、
sudo sh -c 'cd /restricted/dir && do-something-there'
このコマンドの一部の実装では、コマンドを実行する前にディレクトリに到達する可能性があるため、env
シェルを呼び出す必要はありません。chdir()
sudo env -C /restricted/dir do-something-there
sudo
(上記では、(通常)デフォルトのターゲットユーザーにroot
アクセス権があるとします。/restricted/dir
この-u
オプションを使用してユーザーを指定します。