【Linux】「ll」はコマンドじゃないよ
目次
皆様こんにちは。
暑い日でもお腹に布団がないと安心できない、システムソリューション部所属のなかです。
インフラ環境を構築・運用する方はLinuxを触る機会が高いかと思います。
※勿論、UnixやWindowsオンリーの環境も当然ながら存在しております。
その中で、一番使うコマンドはやはりファイルを一覧確認する「ls」コマンドじゃないかなと思うのですが、
「ls」コマンドの上位互換的な用途として「ll」を使う方も多いと思います。
今回の記事は、
「ll」はコマンドじゃないよ、使えない事もあるからある程度これが何なのかは知っておくほうが良いよ!」
という「割りと大した話ではないけど、たまに知らない人がいる事なので説明したい」というスタンスの記事となります。
実行環境
【解説用】
●Linux環境群
「OS:Ubuntu 20.04.5 LTS (WSL2環境)」
・Shell:Bash
・ロケールを日本語に変更
「OS:CentOS7.9(2009) (WSL2環境)」
・Shell:Bash
【余談用】
●Windows環境
・OS:Windows11 (バージョン:21H2)
・Shell:コマンドプロンプト
・言語設定を日本語に変更
「ll」は”一般的には”「ls -l」の「alias」
「ll」はコマンドではなく、特定コマンドの別名として登録・定義された「alias」という物で、例えるならショートカットです。
一般的に「ls -l」の短縮版として認識・利用されているものかと存じます。
aliasコマンドで確認する
alias コマンドについて軽く説明します。
これは「alias」を一時的に登録するための物で、シェルであるBashの組み込みコマンドです。
Linuxのコマンドではないため、違うシェルの場合では同名の物が存在しなかったり挙動が違う場合があるので注意しましょう。
※あくまで一時的、再起動を行うと消えますので永続的に登録する場合はシェルの設定ファイルに書き込む必要があります。
引数なしでこのコマンドを入力すると、現在設定されている「alias」が確認できます。
●CentOS7.9(2009) $ alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
このようにCentOS7のデフォルトの状態では「ll」とは「ls -l --color=auto」のことを指している事がわかります。
最近の一般的なディストリビューションのデフォルトだと、「ll」が最初から設定されている事が多いです。
そのために勘違いされる事がありますが「コマンド」ではなく「alias」ということは認識しておくと良い思います。
そんな細かい事を認識した方が良い理由
A1.本番環境によっては「alias」が設定されていない事がある
「alias」が設定されていることで、作業者の想定しないコマンドが実行されることを危惧しているのか
「alias」が一切登録されていない環境が存在している事があります。
※そもそも、ディストリビューションやバージョンによってデフォルトで登録されていない事もあります。
その際に普段使っているコマンドとオプションを把握していないので手間取るのは問題ですし、
「ll」が「alias」である事を知らずに使えない事で困惑する人はたまにいるようですので覚えておくと良いでしょう。
A2.作業手順書には書けない事がある
作業手順書におけるお作法は各企業の文化や現場での運用ルールによって様々ではあるかと思いますが、
一般的には相対パスでの記述を避けたりするのと同様に、「alias」で設定した別名は使わないことが多いかと思います。
特に相対パスは「rm」コマンド使用時に大きな事故の元になりやすいので言わずもがなではありますが、
「alias」は環境によって設定の有無が違いますしディストリビューションによってもデフォルトの内容が違うので、共通言語として手順書に使用するのは避けるのが無難です。
A3.ルールはなくても注意される事はある
A2.の回答と似た内容ですが、筆者は超新人の頃に「ll」を手順書に書いて「それは alias なので手順書に使うのはやめよう」と当時の上長から注意された事があります。
文化や慣習的に「それはないだろ」という考えの方もいらっしゃいます。
ただ、この記事では絶対に使用するなという訳ではなく「環境によって意味合いの変わる alias だと認識しておきましょう」というスタンスです。
ディストリビューションによっては登録された定義が違う
「共通言語として手順書に使用するのは避けるのが無難です。」と書きましたが、これは文字通り定義が違う場合が存在するからです。
●Ubuntu 20.04.5 LTS $ alias | grep ll alias ll='ls -alF'
●CentOS7.9(2009) $ alias | grep ll alias ll='ls -l --color=auto'
筆者も記事を書くにあたっての調べるまで知らなかったことですが、
上記のようにubuntu 20.04.5 LTSでは「ls -alF」であり、「-a」隠しファイルと「-F」タイプ識別子を表示するようになっています。
なので、このディストリビューションしか使っていない環境で、例えばaliasだと知らずに「ll」に馴染みすぎていると
別のサーバーを触ったときに「-a」と「-F」のオプションがない「ll」を使って「隠しファイルがでない……」と悩んでしまうこともあるかもしれません。
実際「ll」そのものに大きな影響力がある訳ではないのですが、「不確定な物を手順書に使わないほうが良い」といえそうな例え話です。
余談:WindowsのPowerShellでのalias
Linuxだけでなく、WindowsのPowerShellにもaliasは存在しており、しかもデフォルトで一般的なUNIX系コマンドが使えるように設定されています。
UNIX コマンド/PowerShell コマンドレット
cd → Set-Location
ls → Get-ChildItem参考文献:https://learn.microsoft.com/ja-jp/powershell/scripting/learn/shell/using-aliases?view=powershell-7.4
上記のような形で、cdを打つとPowerShellで対応するコマンドレットである「Set-Location」が実行されます。
※PowerShellにおいては「コマンド」ではなく「コマンドレット(Cmdlet)」と呼びますのでご注意ください。
まとめ
以上となります。
筆者は「ll」警察という訳ではなく「普段から使用していると、気が付かないことがある」「普段から使うものについて考えよう」
と己を振り返った際に思いついたのが今回の内容です。
あらゆるコマンドは意外と便利なオプションがあったり、
意外な使い方ができたりする物なので皆様も「ll」をキッカケに色々と見直してみると面白いかもしれませんね。
長文となりましたが、ここまで読んで頂きありがとうございました!
参考資料
alias(1p) - Arch manual pages (Archwiki)
https://man.archlinux.org/man/core/man-pages/alias.1p.en
エイリアスの使用(Microsoft:PowerShell 公式ドキュメント)
https://learn.microsoft.com/ja-jp/powershell/scripting/learn/shell/using-aliases?view=powershell-7.4