GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでのlsコマンド:17の便利な例の説明

ls commandは、シェルを検出するときに最初に学習するコマンドの1つです。そしてその後、あなたのスキルレベルが何であれ、それは最も頻繁に使用されるものの1つであり続けます。

その人気にもかかわらず、 -lを超えることはめったにありません 、 -d および-a オプション。典型的なlsなので、残念です 実装には数十のオプションがあります!したがって、 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を見なければなりません 記憶をリフレッシュします。

このオプションは、 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とは関係ありませんが、特定のファイルにアクセスしているユーザーを示します。


Linux
  1. 7 Linux df コマンドの例

  2. Linux での sa コマンドの例

  3. w Linux でのコマンド例

  1. 8 Linux TR コマンドの例

  2. Linux での rm コマンドの例

  3. Linux での ps コマンドの例

  1. Linux での ac コマンドの例

  2. Linux での df コマンドの例

  3. Linux での du コマンドの例