ls
commandは、シェルを検出するときに最初に学習するコマンドの1つです。そしてその後、あなたのスキルレベルが何であれ、それは最も頻繁に使用されるものの1つであり続けます。
その人気にもかかわらず、 -l
を超えることはめったにありません 、 -d
および-a
オプション。典型的なls
なので、残念です 実装には数十のオプションがあります!したがって、 ls
の検索で私をフォローすることをお勧めします。 隠された宝石を指揮する。
問題の核心に入る前に、少し準備が必要です。 ls
を研究するのは難しいでしょう。 作業するディレクトリがないコマンド。この記事に記載されているコマンドをコンピューターで試すことができるように、すべての例で使用するサンプルファイル階層を作成する方法を次に示します。コマンドのリストをコピーして端末に貼り付けるだけで、準備が整います。
mkdir ls
cd ls
# Create a hidden file:
echo You can not see me > .hidden
# Create a couple of 2MiB files:
dd if=/dev/zero of=a bs=1M count=2
dd if=/dev/zero of=b bs=1M seek=1 count=1
# Create few sub-directories
mkdir -p dir/subdir dir/subdir2
# Create a bunch of empty files
touch c dir/{d,e,f} dir/subdir/{g,h,i} dir/subdir2/{j,k,l}
# Create few links (hard and symbolic)
ln dir/e hardlink-to-file
ln -s dir/f symlink-to-file
ln -s dir/subdir symlink-to-subdir
これらのコマンドで問題が発生した場合は、コメントセクションを使用して助けを求めることを躊躇しないでください。これですべてが順調に進んだと仮定して、メイントピックに飛び込む時が来ました。
lsコマンドのよく知られたユースケース
すべての旅は最初のステップから始まるので、最初に ls
の非常に基本的なユースケースを確認しましょう。 指図。もちろん、自分が専門家だと思っている場合は、すぐに高度なセクションにジャンプしてください。しかし、今のところ私と一緒にいることを好むなら、素晴らしいです。あなたは1つか2つのことを学ぶかもしれません!
<オプションなし>
:デフォルトの動作
ls
コマンドは、コマンドラインで指定されたパスによって示される各ファイルのようなオブジェクトに関する情報を提供します。オプションなしで使用した場合:
- 表示される情報は、パスが指すファイルのようなオブジェクトの名前だけです。
- そのパスがディレクトリ(またはディレクトリへのシンボリックリンク)を指している場合、
ls
コマンドは、そのディレクトリのコンテンツも一覧表示します; - 複数のエントリが表示されている場合は、ファイル名のアルファベット順に並べ替えられます。
最後に、コマンドラインでパスが指定されていない場合、 ls
コマンドは./
を想定しています –それが現在のディレクトリです。
実行中のすべてのルールを見てみましょう:
# display the content of the current directory
sh:~/ls$ ls ./
a c e hardlink-to-file symlink-to-file
b dir f link-to-subdir symlink-to-subdir
# without any option, `ls` is equivalent
# to `ls ./`
sh:~/ls$ ls
a c e hardlink-to-file symlink-to-file
b dir f link-to-subdir symlink-to-subdir
# entries are sorted alphabetically
# ("dir/f" starts with a "d" so it is before "e")
sh:~/ls$ ls c b e dir/f a
a b c dir/f e
# when a command line argument is a directory
# (or a symbolic link to a directory)
# displays its content
sh:~/ls$ ls a b c link-to-subdir dir
a b c
dir:
d e f subdir subdir2
link-to-subdir:
g h i
-d
:ディレクトリの内容を一覧表示しない
-d
を使用 オプション、 ls
コマンドラインで指定されたディレクトリの内容を表示しなくなりましたが、代わりにディレクトリエントリをファイルエントリと同じように扱います。比較してみましょう:
# Default behavior: display the content of the `dir` directory
sh:~/ls$ ls a dir b
a b
dir:
d e f subdir subdir2
# `-d` option: directories are handled like files
sh:~/ls$ ls -d a dir b
a b dir
-d
を使用する場合 オプションだけでは、 ls
の間に大きな違いはありません プレーンなecho
コマンド:
# In both case, the `*` glob pattern is expanded by
# the shell, which also takes care of
# sorting entries in the alphabetical order
sh:~/ls$ ls -d *
a b c dir hardlink-to-file symlink-to-file symlink-to-subdir
sh:~/ls$ echo *
a b c dir hardlink-to-file symlink-to-file symlink-to-subdir
しかし、 -d
-l </ code>を使用する場合など、追加情報を表示する別のオプションに関連付けると、オプションがより便利になります。 今すぐ表示されるフラグ。
-l </ code> :ロングフォーマットオプション
ls
で オプション人気コンテスト、 -l </ code> (小文字のell文字)オプションがおそらく勝者です。多くのシステムが
ll
を提供するほど便利です ls -l
のエイリアス (または ls -l <something>
)
-l </ code> ロングフォーマットの略です。そのオプションを使用すると、
ls
コマンドは、次の情報を含む各エントリを独自の行に表示します。*ファイルモード*リンク数*所有者名*グループ名*ファイル内のバイト数*日付と時刻*パス名
また、 -l
を使用します オプション、 ls
シンボリックリンクをたどりません。そのため、リンク先ではなく、リンク自体に関する情報(ファイルモード、リンク数など)が表示されます。同じ理由で、 ls
コマンドは、シンボリックリンクが指すディレクトリの内容を表示しません:
# Default behavior: displays only the filename and
# follows symbolic links:
sh:~/ls$ ls *
a b c e f hardlink-to-file symlink-to-file
dir:
d e f subdir subdir2
link-to-subdir:
g h i
symlink-to-subdir:
g h i
# `-l` option: displays extended informations and
# no longer follows symbolic links
sh:~/ls$ ls -l *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b
-rw-r--r-- 1 sylvain sylvain 0 Sep 19 22:18 c
-rw-r--r-- 3 sylvain sylvain 0 Sep 19 22:18 e
lrwxrwxrwx 1 sylvain sylvain 5 Sep 19 12:09 f -> dir/f
-rw-r--r-- 3 sylvain sylvain 0 Sep 19 22:18 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain 10 Sep 19 12:09 link-to-subdir -> dir/subdir
lrwxrwxrwx 1 sylvain sylvain 5 Sep 19 22:18 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain 10 Sep 19 22:18 symlink-to-subdir -> dir/subdir
dir:
total 8
-rw-r--r-- 1 sylvain sylvain 0 Sep 19 22:18 d
-rw-r--r-- 3 sylvain sylvain 0 Sep 19 22:18 e
-rw-r--r-- 1 sylvain sylvain 0 Sep 19 22:18 f
drwxr-xr-x 2 sylvain sylvain 4096 Sep 19 12:09 subdir
drwxr-xr-x 2 sylvain sylvain 4096 Sep 19 12:09 subdir2
このセクションを締めくくるために、 -l
の両方を組み合わせて得られる出力を調べてみましょう。 および-d
オプション:
sh:~/ls$ ls -ld *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b
-rw-r--r-- 1 sylvain sylvain 0 Sep 19 22:18 c
drwxr-xr-x 4 sylvain sylvain 4096 Sep 19 12:09 dir
-rw-r--r-- 3 sylvain sylvain 0 Sep 19 22:18 e
lrwxrwxrwx 1 sylvain sylvain 5 Sep 19 12:09 f -> dir/f
-rw-r--r-- 3 sylvain sylvain 0 Sep 19 22:18 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain 10 Sep 19 12:09 link-to-subdir -> dir/subdir
lrwxrwxrwx 1 sylvain sylvain 5 Sep 19 22:18 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain 10 Sep 19 22:18 symlink-to-subdir -> dir/subdir
-a
:すべてのファイルを表示
-a
を使用 オプション、 ls
ディレクトリのコンテンツを表示するときに非表示のファイルが含まれます。しかし、隠しファイルとは何ですか?
慣例により、Unixライクなシステムでは、名前がドットで始まるファイルは非表示と見なされます。さらに、各ディレクトリには、通常は非表示の2つの特別なエントリ。
も含まれています。 および..
各ディレクトリ:
。コード> エントリはディレクトリ自体を指します。そのような自己参照は奇妙に思えるかもしれません。ただし、スマートフォンのレパートリーに自分の電話番号を入れるのと同じように、便利な場合もあります。
..
エントリは親ディレクトリを指します。 Unixライクなシステムのファイル階層は厳密にツリーとして編成されているため、各ディレクトリには1つだけの親があります。ルートディレクトリ/
を除く 多分?そうではありません。ルートディレクトリの親は…ルートディレクトリ自体です。
# Default behavior: do not display hidden entries
# (including . and ..)
sh:~/ls$ ls
a c e hardlink-to-file symlink-to-file
b dir f link-to-subdir symlink-to-subdir
# `-a` option: show hidden files and directories
sh:~/ls$ ls -a
. a c e hardlink-to-file link-to-subdir symlink-to-subdir
.. b dir f .hidden symlink-to-file
lsコマンドの便利なオプション
よく知られている-l
を確認した後 、 -d
および-a
オプションについては、私が特に役立つと思うあまり知られていないオプションのいくつかに注目しましょう。
-s
:割り当てられたサイズを表示
-l
を覚えているかもしれません オプションはファイルのバイト数を表示しました。 -s
オプションは、割り当てられたサイズをブロック単位で表示します。ブロックとは何ですか?さて、サイズが実装に依存するバイトのグループ。通常、BSDでは512バイト、Linuxでは1024バイトです。
すでにバイト単位のサイズにアクセスできるのに、ブロック単位のサイズに煩わされるのはなぜですか?さて、 -s
オプションは、割り当てられたを表示します サイズ。 論理的ではありません ファイルのサイズ。これらは、スパースファイルの場合はまったく異なる2つのものである可能性があります。スパースファイルは、「穴」を含むファイルです。読み取ると、これらの穴はゼロのみを含む通常のファイルブロックのように動作します。しかし、それらはディスク上に実質的にスペースを取りません。 dd
を使用できます seek
を使用したコマンド b
で行ったようにスパースファイルを作成するオプション サンプル階層のファイル:
sh:~/ls$ ls -ls a b
2052 -rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
1028 -rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b
ご覧のとおり、私の a
およびb
ファイルの長さは2メビバイトのようです。しかし、 b
ファイルがまばらであるため、ディスク上で必要なブロックはわずか1028ブロック(約1メビバイト)です。
-h
人間が読めるサイズを表示する
-h
を使用 オプション、 ls
単位サフィックスを使用してファイルサイズを表示し、よりユーザーフレンドリーにします。このオプションは、 -l
と組み合わせて使用した場合にのみ意味があります オプション(Linux、BSD)または -s
(Linux):
sh:~/ls$ ls -lsh a b
2.1M -rw-r--r-- 1 sylvain sylvain 2.0M Sep 19 22:18 a
1.1M -rw-r--r-- 1 sylvain sylvain 2.0M Sep 19 22:18 b
openbsd-6.3$ ls -lsh a b
4128 -rw-r--r-- 1 sylvain sylvain 2.0M Sep 19 23:49 a
2112 -rw-r--r-- 1 sylvain sylvain 2.0M Sep 19 23:49 b
サイズが1024単位の累乗を使用して表示されていることに気付いたかもしれません。ここで、Kは2 ^ 10 =1024バイトを表し、Mは1024 ^ 2=1048576バイトを表します。ここで言及する価値があるls
GNU Coreutilsの一部として提供される実装には、追加の-si
があります。 1024の累乗の代わりに1000の累乗を使用するオプション:
sh:~/ls$ ls -lsh --si a b
2.2M -rw-r--r-- 1 sylvain sylvain 2.1M Sep 19 22:18 a
1.1M -rw-r--r-- 1 sylvain sylvain 2.1M Sep 19 22:18 b
-i
iノード番号を表示
Unixスタイルのファイルシステムでは、iノード番号(またはファイルのシリアル番号 POSIX用語では)は、ファイルシステムオブジェクト(ファイル、ディレクトリ、名前付きパイプなど)を一意に識別する番号です。 -i
を使用 オプション、 ls
コマンドは、各パスの横にiノード番号を表示します。
少しエキゾチックに見えても、 -i
を使っていることに気づきます 特に同じファイルシステムオブジェクトを参照しているディレクトリエントリを識別するためのオプション。このオプションは、主にハードリンクまたはバインドマウントを調査するときに使用します。実用的な例については、そのビデオをご覧ください:https://youtu.be/Jp58Osb1uFo?t=140
sh:~/ls$ ls -i *
8222 a 8243 b 8262 c 8264 hardlink-to-file 8272 symlink-to-file
dir:
8263 d 8264 e 8265 f 8245 subdir 8261 subdir2
symlink-to-subdir:
8266 g 8267 h 8268 i
上記の例では、各ファイル名の前に、そのパスに関連付けられたiノード番号が付いていることがわかります。あなたのシステムでは、数字は確かに異なります。とにかく、 hardlink-to-file
をよく見てください。 およびdir/ e
エントリ。両方のiノード番号は同じです(私の場合は8264)。つまり、これらは同じ基になるファイルシステムオブジェクトを参照する2つのエントリであり、実際には、ハードリンクとは何かを正確に定義しています。
ルートディレクトリの親はルートディレクトリ自体であると前に言ったことを覚えているかもしれません。 -i
を使用する オプションの場合、そのアサーションを確認するのは非常に簡単です:
openbsd-6$ ls -id /
2 /
openbsd-6$ ls -ia /
2 . 25985 bin 5 dev 77954 sbin
2 .. 1235 boot 51969 etc 10 sys
8 .cshrc 1240 bsd 2 home 7 tmp
9 .profile 1241 bsd.booted 77953 mnt 2 usr
51968 altroot 4 bsd.rd 26016 root 78016 var
ご覧のとおり、私のシステムでは、ルートディレクトリはその親のiノードでもあるiノード番号2に関連付けられています。これは、ルートディレクトリが であることを証明します。 自分の親。
めったに使用されないlsコマンドのオプション
私は前のセクションで説明したオプションを定期的に使用しますが、これから説明するオプションは…まあ…それらが存在することはわかっています。しかし、私はそれらが必要なときに認めなければなりません、私はしばしば man
を見なければなりません 記憶をリフレッシュします。
-L
:シンボリックリンクのターゲットに関する情報を表示する
このオプションは、 ls
の動作を変更します シンボリックリンクに適用する場合のコマンド。 -L
を使用 オプション、 ls
ターゲットに関する情報が表示されます シンボリックリンク自体に関連するものを表示する代わりに、シンボリックリンクの。次の例を調べると、違いが明らかになります。
# Pay special attention to the permission
# and file size for symbolic links with and without
# the `-L` option:
sh:~/ls$ ls -ld *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r-- 1 sylvain sylvain 0 Sep 20 00:09 c
drwxr-xr-x 4 sylvain sylvain 4096 Sep 20 00:09 dir
-rw-r--r-- 2 sylvain sylvain 0 Sep 20 00:09 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain 5 Sep 20 00:09 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain 10 Sep 20 00:09 symlink-to-subdir -> dir/subdir
[email protected]:/tmp/ls/ls/ls$ ls -lLd *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r-- 1 sylvain sylvain 0 Sep 20 00:09 c
drwxr-xr-x 4 sylvain sylvain 4096 Sep 20 00:09 dir
-rw-r--r-- 2 sylvain sylvain 0 Sep 20 00:09 hardlink-to-file
-rw-r--r-- 1 sylvain sylvain 0 Sep 20 00:09 symlink-to-file
drwxr-xr-x 2 sylvain sylvain 4096 Sep 20 00:09 symlink-to-subdir
-F
:ファイル名に分類文字を追加します
-F
オプションは、ファイルシステムオブジェクトの一部のカテゴリのパス名の後に余分な文字を追加して、それらを識別します。追加されます:
-
\
ディレクトリである各パス名の後に -
@
シンボリックリンクである各パス名の後に -
*
各実行可能ファイルの後、 - および
|
各FIFOの後(mkfifo
を参照) 詳細については)
Unixの初期の頃、私はそのオプションをよく使用していました。しかし、 ls
以降 その出力を色付けすることができます(そして私たちはカラーモニターを持っているので!)、私はめったにそれを必要としません。しかし、私はそれを覚えています。そして時々、リモート端末でそれを使う機会を見つけます:
sh:~/ls$ ls -F
a b c dir/ hardlink-to-file [email protected] [email protected]
t
:変更時間でエントリを並べ替える
-t
を使用 オプション、 ls
名前で並べ替えるのではなく、変更時刻(最新のものが最初)で並べ替えられたディレクトリエントリを表示するコマンド:
# Default sort order (by filename)
sh:~/ls$ ls
a b c dir hardlink-to-file symlink-to-file symlink-to-subdir
# Sort by modification date
sh:~/ls$ ls -t
symlink-to-subdir symlink-to-file c dir hardlink-to-file b a
ファイルを変更すると、リストの最初の(つまり、最近変更された)エントリとして表示されます:
sh:~/ls$ echo >> a
sh:~/ls$ ls -t
a symlink-to-subdir symlink-to-file c dir hardlink-to-file b
-S
:エントリをサイズで並べ替える
-S
を使用 オプション、 ls
サイズでソートされたエントリを表示します。最大のファイルが最初に表示されます。同点の場合、エントリはパス名に従ってソートされます:
sh:~/ls$ ls -lS
total 6244
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 23:49 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 23:49 b
drwxr-xr-x 4 sylvain sylvain 512 Sep 19 23:49 dir
lrwxr-xr-x 1 sylvain sylvain 10 Sep 19 23:49 symlink-to-subdir -> dir/subdir
lrwxr-xr-x 1 sylvain sylvain 5 Sep 19 23:49 symlink-to-file -> dir/f
-rw-r--r-- 1 sylvain sylvain 0 Sep 19 23:49 c
-rw-r--r-- 2 sylvain sylvain 0 Sep 19 23:49 hardlink-to-file
-r
:逆の並べ替え順序
このオプションは、ソート順を逆にします。 -t
に関連付けると最も便利だと思います 最も最近変更されていないファイルを最初に表示するか、 -S
を使用するオプション 最小のファイルを最初に表示するオプション。ただし、パス名、並べ替え順序によるデフォルトでも機能します:
# Display the least recently modified file first
sh:~/ls$ ls -rt
b hardlink-to-file dir c symlink-to-file symlink-to-subdir a
# Display the smallest file first
sh:~/ls$ ls -rS
hardlink-to-file c symlink-to-file symlink-to-subdir dir b a
# Display path names in reversed alphabetical order
sh:~/ls$ ls -r
symlink-to-subdir symlink-to-file hardlink-to-file dir c b a
-n
:数値のUID/GIDを表示
このオプションは、 -l
とまったく同じです。 オプション--n
を除く 所有者のグループID(GID)とユーザーID(UID)は、関連付けられた名前を使用するのではなく、数字として表示されます:
sh:~/ls$ ls -ld a b c /
drwxr-xr-x 28 root root 4096 May 6 00:28 /
-rw-r--r-- 1 sylvain sylvain 2097153 Sep 20 00:45 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r-- 1 sylvain sylvain 0 Sep 20 00:09 c
sh:~/ls$ ls -nd a b c /
drwxr-xr-x 28 0 0 4096 May 6 00:28 /
-rw-r--r-- 1 1000 1000 2097153 Sep 20 00:45 a
-rw-r--r-- 1 1000 1000 2097152 Sep 20 00:09 b
-rw-r--r-- 1 1000 1000 0 Sep 20 00:09 c
lsコマンドの本当にエキゾチックな使用法
誰もがすべてを知っていると主張することはできません。そして、この記事を書いている間に、私はいくつかの ls
を(再)発見しました オプション。自分で使ったのを覚えていませんが、多分使ったのですか?もしそうなら、あなたがそれらが役に立つと思う状況でコメントセクションを読んでみたいと思います。とにかく、ここにあなたが面白いと思うかもしれない選択があります。
-R
:サブディレクトリを再帰的にリストします
デフォルトでは、 ls
コマンドは、コマンドラインで明示的に指定されたディレクトリの内容のみを表示します。 -R
を使用 オプションの場合、検出されたディレクトリの内容も再帰的に表示されます:
sh:~/ls$ ls -R
.:
a b c dir hardlink-to-file symlink-to-file symlink-to-subdir
./dir:
d e f subdir subdir2
./dir/subdir:
g h i
./dir/subdir2:
j k l
理論的には、find。
によって生成された出力を(しゃれを意図して)見つけます。 その目的のためにより読みやすいコマンド。もちろん、マイレージは異なる場合があります:
sh:~/ls$ find .
.
./c
./.hidden
./hardlink-to-file
./b
./symlink-to-subdir
./dir
./dir/d
./dir/e
./dir/subdir2
./dir/subdir2/l
./dir/subdir2/j
./dir/subdir2/k
./dir/subdir
./dir/subdir/g
./dir/subdir/i
./dir/subdir/h
./dir/f
./symlink-to-file
./a
-A
:ほぼすべてのファイルを表示
POSIX標準では定義されていませんが、 -A
オプションは、GNUとBSDの両方の世界で表示されます。どちらの場合も、 -a
のように機能します 、ただし。
を除く および..
エントリ。 BSDシステムで言及する価値がある-A
スーパーユーザーには暗示されます:
sh:~/ls$ ls -a
. a c hardlink-to-file symlink-to-file
.. b dir .hidden symlink-to-subdir
sh:~/ls$ ls -A
a b c dir hardlink-to-file .hidden symlink-to-file symlink-to-subdir
openbsd-6.3$ su root
openbsd-6.3# ls
.hidden a b c dir hardlink-to-file symlink-to-file symlink-to-subdir
-f
:並べ替えない
-f
を使用 オプション、 ls
ディレクトリに表示される順序でエントリを表示します。その順序は基盤となるファイルシステムに依存し、順序ファイルが作成されたため、ほとんど予測できません。 -f
オプションは、 -a
も意味します オプション:
sh:~/ls$ ls -f
.. .hidden b dir a
c hardlink-to-file symlink-to-subdir symlink-to-file .
openbsd-6$ ls -f
. a c symlink-to-subdir
.. b hardlink-to-file
.hidden dir symlink-to-file
面白いことに、GNU Coreutils 8.26 ls
実装では、 -l
の両方を使用できます および-f
-fl
と綴る場合のオプション –ただし、 -lf
と記述した場合はそうではありません 。 OpenBSDでは、両方とも期待どおりに機能しています:
sh:~/ls$ ls -lf
.. .hidden b dir a
c hardlink-to-file symlink-to-subdir symlink-to-file .
sh:~/ls$ ls -fl
total 3100
drwxr-xr-x 3 sylvain sylvain 4096 Sep 19 12:09 ..
-rw-r--r-- 1 sylvain sylvain 0 Sep 20 00:09 c
-rw-r--r-- 1 sylvain sylvain 19 Sep 20 00:09 .hidden
-rw-r--r-- 2 sylvain sylvain 0 Sep 20 00:09 hardlink-to-file
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
lrwxrwxrwx 1 sylvain sylvain 10 Sep 20 00:09 symlink-to-subdir -> dir/subdir
drwxr-xr-x 4 sylvain sylvain 4096 Sep 20 00:09 dir
lrwxrwxrwx 1 sylvain sylvain 5 Sep 20 00:09 symlink-to-file -> dir/f
-rw-r--r-- 1 sylvain sylvain 2097153 Sep 20 00:45 a
drwxr-xr-x 3 sylvain sylvain 4096 Sep 20 00:09 .
openbsd-6$ ls -lf
total 6256
drwxr-xr-x 3 sylvain sylvain 512 Sep 19 23:49 .
drwxr-xr-x 5 sylvain sylvain 512 Sep 19 23:49 ..
-rw-r--r-- 1 sylvain sylvain 19 Sep 19 23:49 .hidden
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 23:49 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 23:49 b
drwxr-xr-x 4 sylvain sylvain 512 Sep 19 23:49 dir
-rw-r--r-- 1 sylvain sylvain 0 Sep 19 23:49 c
-rw-r--r-- 2 sylvain sylvain 0 Sep 19 23:49 hardlink-to-file
lrwxr-xr-x 1 sylvain sylvain 5 Sep 19 23:49 symlink-to-file -> dir/f
lrwxr-xr-x 1 sylvain sylvain 10 Sep 19 23:49 symlink-to-subdir -> dir/subdir
openbsd-6$ ls -fl
total 6256
drwxr-xr-x 3 sylvain sylvain 512 Sep 19 23:49 .
drwxr-xr-x 5 sylvain sylvain 512 Sep 19 23:49 ..
-rw-r--r-- 1 sylvain sylvain 19 Sep 19 23:49 .hidden
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 23:49 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 23:49 b
drwxr-xr-x 4 sylvain sylvain 512 Sep 19 23:49 dir
-rw-r--r-- 1 sylvain sylvain 0 Sep 19 23:49 c
-rw-r--r-- 2 sylvain sylvain 0 Sep 19 23:49 hardlink-to-file
lrwxr-xr-x 1 sylvain sylvain 5 Sep 19 23:49 symlink-to-file -> dir/f
lrwxr-xr-x 1 sylvain sylvain 10 Sep 19 23:49 symlink-to-subdir -> dir/subdir
-q
:印刷できないファイル名文字を?
として表示します
Unixスタイルのファイルシステムでは、ファイル名に \
以外の任意の文字を含めることができます とNUL文字。これは、ファイル名に印刷できない文字が含まれている可能性があること、または端末に干渉する可能性のある制御シーケンスが含まれている可能性があることを意味します。面白いことを試してみましょう:
touch "$(echo -e '\x1B[7mBOO\x1B[0m')"
明らかに、そのファイル名には印刷できない文字が含まれています。 ls
の最新の実装について 、 -q
潜在的な悪影響を回避するために、出力が端末である場合はオプションが暗黙指定されます。したがって、印刷できない文字は疑問符に置き換えられます:
sh:~/ls$ ls *BOO*
?[7mBOO?[0m
ただし、代わりにそれを書くと状況は異なります:
# I let you try that by yourself
# to not spoil the fun;)
sh:~/ls$ ls *BOO* | cat
|猫
役に立たないが、副作用として、 ls
コマンドは、tty(「ターミナル」)ではなく、標準出力にパイプを表示するようになりました。出力は端末ではなくなったため、 -q
オプションはもう暗示されておらず、 ls
ファイル名を逐語的に表示します。その場合、すべてが期待どおりに機能する場合は、ファイル名にファンキーなビデオ効果を表示します。
-q
を明示的に使用する オプションはそれを修正します。自分で試してみましょう(そして最終的には他のANSIエスケープシーケンスで遊んでみます)。しかし、私はその機会に ls
を使用しないように警告します シェルスクリプトのコマンド。実際には、 ls
「人間の消費」のために設計されています。特別に細工されたファイル名に関しては、適切に処理するのが非常に難しい多くのサイドケースがあります。ファイルのリストを確認する必要がある場合は、代わりにfindコマンドを使用することを強くお勧めします。最も単純なケースでは、単純な for
ループで十分ですが、それは別の話になります。
for f in *; do echo "$f"; done
終わり?
これで、 ls
のツアーは終了です。 コマンドオプション。言うまでもなく、それが網羅的であるとはほど遠いので、ここでは最も便利で最もポータブルなオプションに焦点を当てようとしました。ただし、各 ls
実装には優れた機能があります。この記事で見逃した優れたオプションをご存知の場合は、コメントセクションを使用して遠慮なく共有してください。十分なフィードバックがあれば、それらを編集してフォローアップ記事に公開することもできます!
lsコマンドと言えば、lsofコマンドを知っていますか? lsとは関係ありませんが、特定のファイルにアクセスしているユーザーを示します。