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生まれ。
2019年くらいからフロントエンドエンジニアを目指している元アフィリエイターです💩

penpenをフォローする
penpenをフォローする
penpenメモ

コメント

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