sudoでllコマンドを実行する【alias】

大抵のディストリビューションでは、llコマンドは

$ alias ll='ls -alF'

という感じのエイリアスが設定されているけど

 

sudoで実行すると以下のように「そんなコマンド見つからないよ」的なエラーが出て動かない。

$ sudo   ll /usr
sudo: ll: コマンドが見つかりません

 

これはsudoersファイルで環境変数がリセットされているためだけど

そんなときは

$ alias sudo='sudo '

というエイリアスを事前に設定しておくと、sudo llコマンドが動くようになる↓。

$ sudo ll /usr
合計 60
drwxr-xr-x 10 root root 4096 7月 23 00:53 ./
drwxr-xr-x 24 root root 4096 12月 16 06:11 ../
drwxr-xr-x 2 root root 24576 12月 20 11:46 bin/
drwxr-xr-x 2 root root 4096 4月 24 2018 games/
drwxr-xr-x 31 root root 4096 12月 10 23:35 include/
drwxr-xr-x 69 root root 4096 12月 20 11:46 lib/
drwxr-xr-x 10 root root 4096 7月 23 00:53 local/
drwxr-xr-x 2 root root 4096 12月 20 11:46 sbin/
drwxr-xr-x 131 root root 4096 12月 20 11:46 share/
drwxr-xr-x 6 root root 4096 12月 17 06:03 src/

 

なぜこのエイリアスを実行すると動くようになるかというと、どうやらbashには以下のような仕様があるかららしい。

エイリアス値の最後の文字が 空白(半角スペース)の場合、エイリアスに続く次のコマンドワードもエイリアス拡張についてチェックされます。

引用:alias-sudoを使用している場合はエイリアスを使用できません

これがどういうことかというと

そもそもエイリアスというのは「あだ名」のような機能で、「最初に指定されたコマンドにあだ名がついているか?」をチェックする機能。

ここでキモなのは、チェックするには”最初に指定されたコマンド”だけで、”2番目に指定されたコマンド”のあだ名はチェックしないという点。

だけど、エイリアスの最後に空白(半角スペース)を指定すると、「”2番目に指定されたコマンド”もあだ名かどうかチェックしろ」みたいな指示ができるらしい。

 

なので、sudoでもエイリアスを常時使いたい場合は、~/.bashrcなどに

$ alias sudo='sudo '

を追記しておくと良いかもしれない。

 

おわり

Linux
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました