sudoが別名を誤って理解しました。

sudoが別名を誤って理解しました。

私のシェルセッションには~/.bashrcセットがあり、alias link='ln -sf'私のシェルセッションでそれに応じて動作します。

sudoただし、コマンドの先頭に使用する必要があるルート保護場所の場合、次のエラーが発生します。link: cannot create link '<$2>' to '<$1>': Operation not permitted

どうしたの?どのようにバイパスできますか?

答え1

sudo外部コマンドなので、エイリアスがわかりません。あなたのシェルだけがあなたのエイリアスを知っていますが、エイリアスsudoの一部ではありません。

この場合、バイナリをsudo実行してみたいと思います。 Linuxシステムでは、これは単純なコマンドであり、常に/usr/bin/link硬いlink(2)接続はシステムコールを呼び出すことによって行われます。

$ link --help
Usage: link FILE1 FILE2
  or:  link OPTION
Call the link function to create a link named FILE2 to an existing FILE1.

      --help     display this help and exit
      --version  output version information and exit

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Full documentation at: <https://www.gnu.org/software/coreutils/link>
or available locally via: info '(coreutils) link invocation'

答え2

ここでの問題は、bashがaliasコマンドの最初の単語のみを計算し、そのテキストをそのエイリアスのテキストに置き換えることです。

これにより、bashはaliasコマンドを拡張せず、sudo <your_alias>最初の単語自体のみを評価します。sudo

解決策は、sudo自体のエイリアスを作成することです。

次のようなエイリアスを作成すると、alias='sudo '(sudoコマンドの後のスペースに注意してください)必要なコマンドを完了できます。

関連情報