GNU/Linux >> Znalost Linux >  >> Linux

Příkaz ls v Linuxu:17 vysvětlení užitečných příkladů

ls command je jedním z prvních příkazů, které se učíme při objevování shellu. A poté, ať už je úroveň vaší dovednosti jakákoli, zůstane jednou z nejčastěji používaných.

Navzdory této popularitě zřídka překračujeme -l , -d a -a možnosti. Je to nešťastné, protože typický ls implementace má k dispozici desítky možností! Proto vám navrhuji, abyste mě sledovali při hledání ls příkaz skrytých drahokamů.

Ukázková hierarchie souborů, kterou používáme v této příručce příkazů ls

Než se dostaneme k jádru věci, potřebujeme se trochu připravit:bylo by těžké prostudovat ls příkaz bez nějakého adresáře, se kterým by se dalo pracovat. Abyste si mohli na svém počítači vyzkoušet příkazy uvedené v tomto článku, zde je návod, jak vytvořit hierarchii ukázkových souborů, kterou použiji ve všech svých příkladech. Stačí zkopírovat a vložit tento seznam příkazů do vašeho terminálu a budete připraveni:

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

Pokud máte s těmito příkazy nějaké potíže, neváhejte použít sekci komentářů a požádat o pomoc. Za předpokladu, že je nyní vše v pořádku, je čas ponořit se do našeho hlavního tématu.

Známé případy použití příkazu ls

Protože každá cesta začíná prvním krokem, podívejme se nejprve na velmi základní případy použití ls příkaz. Samozřejmě, pokud se považujete za odborníka, klidně rovnou skočte do pokročilejších sekcí. Ale pokud chceš zatím zůstat se mnou, skvělé:možná se něco naučíš!

<no option> :výchozí chování

ls příkaz poskytuje informace o všech objektech podobných souborům, na které ukazují cesty uvedené na příkazovém řádku. Při použití bez možnosti:

  • jediná zobrazená informace je název objektu podobného souboru, na který ukazuje cesta;
  • pokud tato cesta ukazuje na adresář (nebo symbolický odkaz na adresář), ls příkaz také vypíše obsah tohoto adresáře;
  • je-li zobrazeno několik položek, jsou seřazeny v abecedním pořadí podle názvu souboru.

Nakonec, když na příkazovém řádku není zadána žádná cesta, ls příkazy předpokládá ./ –to je aktuální adresář.

Podívejme se nyní na všechna tato pravidla v akci:

# 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 :neuvádět obsah adresáře

Pomocí -d možnost, ls již nezobrazuje obsah adresáře zadaného na příkazovém řádku, ale místo toho bude s položkami adresáře zacházet stejně jako se záznamy souborů. Porovnejme:

# 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

Při použití -d samotná možnost, mezi ls není velký rozdíl a obyčejné echo příkaz:

# 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

Ale -d volba se stává užitečnější, když je spojena s jinou možností pro zobrazení dalších informací, například při použití -l příznak, který nyní uvidíme.

-l :možnost dlouhého formátu

V ls soutěž popularity voleb, -l (malé písmeno ell) by pravděpodobně vyhrála. Je tak užitečný, že mnoho systémů nabízí ll alias pro ls -l (nebo ls -l<something> )

-l znamená dlouhý formát. S touto volbou ls příkaz zobrazí každou položku na samostatném řádku obsahující následující informace:* režim souboru * počet odkazů * jméno vlastníka * název skupiny * počet bajtů v souboru * datum a čas * název cesty

Také pomocí -l možnost, ls již nebude následovat symbolické odkazy. Zobrazuje tedy informace (režim souboru, počet odkazů atd.) o samotném odkazu, nikoli o jeho cíli. Ze stejného důvodu ls příkaz nezobrazí obsah adresářů označených symbolickými odkazy:

# 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

Na závěr této části vás nechám prozkoumat výstup, který získáme kombinací obou -l a -d možnosti:

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 :zobrazit všechny soubory

Pomocí -a možnost, ls zahrnuje skryté soubory při zobrazení obsahu adresáře. Ale co je skrytý soubor?

Podle konvence je na systémech podobných Unixu soubor, jehož název začíná tečkou, považován za skrytý. Kromě toho každý adresář obsahuje také dvě speciální, obvykle skryté položky:. a ..

V každém adresáři:

  • . vstupní body do samotného adresáře. Takový druh odkazu na sebe se může zdát zvláštní. Ale někdy je to užitečné, trochu jako mít své vlastní telefonní číslo v seznamu smartphonů.
  • .. vstupní body do nadřazeného adresáře. Vzhledem k tomu, že hierarchie souborů na systémech podobných Unixu je přísně organizována jako strom, má každý adresář pouze jednoho rodiče. Kromě kořenového adresáře / možná? Vlastně ne:rodič kořenového adresáře je … samotný kořenový adresář.
# 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

Užitečné možnosti příkazu ls

Po přečtení dobře známého -l , -d a -a možnosti, zaměřme svou pozornost na několik méně známých možností, které považuji za obzvláště užitečné.

-s :zobrazení přidělené velikosti

Možná si pamatujete -l volba zobrazila počet bajtů v souboru. -s zobrazí přidělenou velikost v blocích. co je blok? Skupina bajtů, jejichž velikost je závislá na implementaci. Obvykle je to 512 bajtů na BSD a 1024 bajtů na Linuxu.

Proč bych se měl trápit s velikostí v blocích, když už mám přístup k velikosti v bajtech? No, -s možnosti zobrazují přidělené velikost. Ne logické velikost souboru. U řídkých souborů to mohou být dvě zcela odlišné věci. Řídké soubory jsou soubory, které obsahují „díry“. Při čtení se tyto díry chovají jako normální bloky souborů obsahující pouze nuly. Na disku ale nezaberou prakticky žádné místo. Můžeme použít dd pomocí příkazu seek možnost vytvořit řídké soubory, jak jsem to udělal pro b soubor v mé vzorové hierarchii:

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

Jak můžete vidět, obě moje a a b soubory se zdají být dlouhé dva mebibajty. Ale b Protože je soubor řídký, zabere pouze 1028 bloků na disku (zhruba jeden mebibajt).

-h zobrazit velikosti čitelné pro člověka

Pomocí -h možnost, ls zobrazí velikosti souborů pomocí přípon jednotek, aby byly uživatelsky přívětivější. Tato volba má smysl pouze v kombinaci s -l volba (Linux, BSD) nebo -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

Možná jste si všimli, že velikosti se zobrazují pomocí mocnin 1024 jednotek, kde K znamená 2^10=1024 bajtů, M znamená 1024^2=1048576 bajtů a tak dále. Zde stojí za zmínku ls implementace poskytovaná jako součást GNU Coreutils má navíc --si možnosti použití mocniny 1000 místo mocnin 1024:

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 zobrazit číslo inodu

Na souborovém systému unixového stylu číslo inodu (nebo sériové číslo souboru v terminologii POSIX) je číslo, které jednoznačně identifikuje objekt souborového systému (soubor, adresář, pojmenovaný kanál, …). Pomocí -i možnost, ls příkaz zobrazí své číslo inodu vedle každé cesty.

I když se to zdá poněkud exotické, zjistil jsem, že používám -i čas od času, zejména k identifikaci položek adresáře, které odkazují na stejný objekt souborového systému. Tuto možnost využijete většinou při zkoumání pevných odkazů nebo připojení připojení. Podívejte se na toto video pro praktický příklad: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

Ve výše uvedeném příkladu můžete vidět každý název souboru s předponou číslem inodu přidruženým k této cestě. Ve vašem systému se čísla budou jistě lišit. Každopádně se blíže podívejte na hardlink-to-file a dir/e záznamy. Oba mají stejné číslo inodu (v mém případě 8264). To znamená, že se jedná o dvě položky odkazující na stejný základní objekt souborového systému – což je ve skutečnosti přesná definice toho, co je pevný odkaz.

Možná si pamatujete, jak jsem již dříve řekl, že rodičem kořenového adresáře byl samotný kořenový adresář. Pomocí -i možnost, je docela snadné toto tvrzení ověřit:

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

Jak můžete vidět, v mém systému je kořenový adresář spojen s inodem číslo 2, což je také inode jeho rodiče. To dokazuje, že kořenový adresář je svého vlastního rodiče.

Zřídka používané možnosti příkazu ls

Pravidelně používám možnosti popsané v předchozí části, ale ty, o kterých teď budu mluvit… no… vím, že existují. Nicméně musím přiznat, že když je potřebuji, často se musím podívat na man osvěžit si paměť.

Tato volba upravuje chování ls příkaz při použití na symbolické odkazy. Pomocí -L možnost, ls zobrazí informace o cíli symbolického odkazu namísto zobrazení odkazů souvisejících se samotným symbolickým odkazem. Zkoumáním následujícího příkladu bude rozdíl zřejmý:

# 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 :přidat klasifikační znak k názvu souboru

-F Tato volba přidává další znak za cestu k některým kategoriím objektů systému souborů, aby je bylo možné identifikovat. Přidá:

  • a \ za každou cestu, která je adresářem,
  • a @ za každým názvem cesty, který je symbolickým odkazem,
  • a * po každém spustitelném souboru,
  • a | po každém FIFO (viz mkfifo pro více informací o tom)

V mých raných dobách Unixu jsem tuto možnost hojně využíval. Ale protože ls umí obarvit svůj výstup (a protože máme barevné monitory!), málokdy to potřebuji. Ale pamatuju si to. A čas od času na vzdáleném terminálu najdu příležitost to použít:

sh:~/ls$ ls -F
a  b  c  dir/  hardlink-to-file  [email protected]  [email protected]

t :řazení položek podle času úpravy

Pomocí -t možnost, ls příkaz se zobrazením položek adresáře seřazených podle času změny (nejnovější první) namísto řazení podle jejich názvu:

# 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

Pokud změním soubor, zobrazí se nyní jako první (tj. naposledy upravený) záznam v seznamu:

sh:~/ls$ echo >> a
sh:~/ls$ ls -t
a  symlink-to-subdir  symlink-to-file  c  dir  hardlink-to-file  b

-S :řazení položek podle velikosti

Pomocí -S možnost, ls zobrazí položky seřazené podle velikosti, největší soubor jako první. V případě shody jsou položky seřazeny podle názvu cesty:

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 :obrácené pořadí řazení

Tato možnost obrátí pořadí řazení. Považuji jej za nejužitečnější, když je spojen s -t možnost, aby se jako první zobrazil nejméně naposledy upravený soubor nebo s -S možnost zobrazit nejdříve nejmenší soubor. Ale funguje také s výchozím pořadím řazení podle názvu cesty:

# 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 :Zobrazení číselného UID/GID

Tato volba je přesně stejná jako -l volba — kromě -n ID skupiny vlastníka (GID) a ID uživatele (UID) se zobrazují jako čísla, nikoli jako přidružené jméno:

 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

Opravdu exotické použití příkazu ls

Nikdo nemůže tvrdit, že ví všechno. A při psaní tohoto článku jsem (znovu) objevil pár ls možnosti. Nepamatuji si, že bych je sám používal, ale možná vy ano? Pokud je tomu tak, rád bych si v sekci komentářů přečetl, za jakých okolností je považujete za užitečné. Každopádně zde je výběr, který by vás mohl zajímat.

-R :rekurzivně seznam podadresářů

Ve výchozím nastavení ls příkaz zobrazí pouze obsah adresářů výslovně uvedených na příkazovém řádku. Pomocí -R možnost, bude také rekurzivně zobrazovat obsah nalezených adresářů:

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

Zatímco se zajímám o teorii, nacházím (zamýšlenou slovní hříčkou) výstup vytvořený find . příkaz čitelnější pro tento účel. Ale váš počet najetých kilometrů se může samozřejmě lišit:

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 :zobrazit téměř všechny soubory

I když to není definováno ve standardu POSIX, -A možnosti se objevují jak ve světě GNU, tak ve světě BSD. V obou případech to funguje jako -a , ale s výjimkou . a .. záznamy. Stojí za zmínku o systémech BSD, -A znamená pro superuživatele:

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 :neřadit

Pomocí -f možnost, ls zobrazí položky v pořadí, v jakém se objevují v adresáři. Toto pořadí závisí na základním souborovém systému a soubory pořadí byly vytvořeny, takže je stěží předvídatelné. -f volba také zahrnuje -a možnost:

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

Je zábavné, s GNU Coreutils 8.26 ls implementaci, můžete použít oba -l a -f možnosti, pokud to napíšete -fl –ale ne pokud napíšete -lf . Na OpenBSD oba fungují podle očekávání:

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 :Zobrazit netisknutelné znaky názvu souboru jako ?

Na souborových systémech unixového stylu může název souboru obsahovat jakýkoli znak kromě \ a znaky NUL. To znamená, že název souboru může obsahovat netisknutelné znaky nebo dokonce řídicí sekvence, které mohou rušit váš terminál. Zkusíme něco zábavného:

touch "$(echo -e '\x1B[7mBOO\x1B[0m')"

Je zřejmé, že tento soubor obsahuje netisknutelné znaky. Na moderních implementacích ls , -q Tato možnost se předpokládá, když je výstupem terminál, aby se zabránilo potenciálním škodlivým účinkům. Takže netisknutelné znaky budou nahrazeny otazníkem:

sh:~/ls$ ls *BOO*
?[7mBOO?[0m

Věci však budou jiné, pokud místo toho napíšete toto:

# I let you try that by yourself
# to not spoil the fun;)
sh:~/ls$ ls *BOO* | cat

Kód | cat je k ničemu, ale jako vedlejší efekt je ls příkaz nyní vidí na svém standardním výstupu roura namísto tty („terminál“). Protože výstup již není terminál, -q volba již není implikována a ls zobrazí název souboru doslovně. V takovém případě, pokud vše funguje podle očekávání, prezentovat název souboru s funky video efektem.

Explicitně pomocí -q možnost by to vyřešila. Nechám vás, abyste si to vyzkoušeli sami (a případně si pohráli s dalšími únikovými sekvencemi ANSI). Ale při té příležitosti vás varuji před používáním ls příkaz ve skriptech shellu. V praxi ls je určen pro „lidskou spotřebu“. Existuje mnoho vedlejších případů týkajících se speciálně vytvořených názvů souborů, se kterými je velmi obtížné správně zacházet. Pokud potřebujete projít seznam souborů, důrazně vám doporučuji použít místo toho příkaz find. V nejjednodušších případech jednoduchý for smyčka je dokonce dostačující – ale to by byl jiný příběh.

for f in *; do echo "$f"; done

Konec?

Tím naše prohlídka ls končí možnosti příkazů. Není třeba zmiňovat, že to zdaleka nebylo vyčerpávající a snažil jsem se zde zaměřit na nejužitečnější a nejpřenosnější možnosti. Ale každý ls implementace má svůj podíl skvělých funkcí, takže pokud víte o nějaké pěkné možnosti, kterou jsem v tomto článku postrádal, neváhejte se s námi o ni podělit pomocí sekce komentářů. Pokud budeme mít dostatek zpětné vazby, můžeme je dokonce sestavit a publikovat v navazujícím článku!

Když už mluvíme o příkazu ls, znáte příkaz lsof? Nesouvisí s ls, ale říká vám, který uživatel přistupuje k určitému souboru.


Linux
  1. 7 Příklady příkazů Linux df

  2. 8 Příklady příkazů Linux TR

  3. sa Příklady příkazů v Linuxu

  1. Příklady příkazů ac v Linuxu

  2. Příklady příkazů df v Linuxu

  3. du příklady příkazů v Linuxu

  1. 12 Užitečné příklady příkazů Wget v Linuxu

  2. Příklady příkazů rm v Linuxu

  3. Příklady příkazů ps v Linuxu