ls
command adalah salah satu perintah pertama yang kita pelajari saat menemukan shell. Dan setelah itu, berapa pun tingkat keahlian Anda, itu akan tetap menjadi salah satu yang paling sering digunakan.
Terlepas dari popularitas itu, kami jarang melampaui -l
, -d
dan -a
pilihan. Sangat disayangkan karena tipikal ls
implementasi memiliki puluhan opsi yang tersedia! Oleh karena itu, saya mengusulkan Anda untuk mengikuti saya dalam pencarian saya untuk ls
perintah permata tersembunyi.
Contoh hierarki file yang kami gunakan dalam panduan perintah ls ini
Sebelum masuk ke inti masalah, kita perlu sedikit persiapan:akan sulit untuk mempelajari ls
perintah tanpa beberapa direktori untuk dikerjakan. Agar Anda dapat mencoba di komputer Anda perintah yang diberikan dalam artikel ini, berikut adalah cara membuat hierarki file sampel yang akan saya gunakan di semua contoh saya. Cukup salin-tempel daftar perintah itu ke terminal Anda, dan Anda akan siap:
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
Jika Anda memiliki masalah dengan perintah ini, jangan ragu untuk menggunakan bagian komentar untuk meminta bantuan. Dengan asumsi sekarang semuanya beres, sekarang saatnya untuk masuk ke topik utama kita.
Kasus penggunaan perintah ls yang terkenal
Karena setiap perjalanan dimulai dengan langkah pertama, mari kita tinjau terlebih dahulu kasus penggunaan yang paling mendasar untuk ls
memerintah. Tentu saja, jika Anda menganggap diri Anda sebagai seorang ahli, jangan ragu untuk langsung melompat ke bagian yang lebih lanjut. Tetapi jika Anda lebih suka tinggal bersama saya untuk saat ini, bagus:Anda mungkin belajar satu atau dua hal!
<no option>
:perilaku default
ls
command memberikan informasi tentang setiap objek seperti file yang ditunjukkan oleh jalur yang diberikan pada baris perintah. Saat digunakan tanpa opsi apa pun:
- satu-satunya informasi yang ditampilkan adalah nama objek seperti file yang ditunjukkan oleh jalur;
- jika jalur tersebut mengarah ke direktori (atau tautan simbolis ke direktori),
ls
perintah juga mencantumkan konten direktori itu; - jika beberapa entri ditampilkan, entri tersebut diurutkan menurut abjad dari nama filenya.
Akhirnya, ketika tidak ada jalur yang diberikan pada baris perintah, ls
perintah mengasumsikan ./
–itu adalah direktori saat ini.
Mari kita lihat sekarang semua aturan itu beraksi:
# 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
:jangan mencantumkan konten direktori
Dengan -d
pilihan, ls
tidak lagi menampilkan konten direktori yang diberikan pada baris perintah tetapi sebaliknya akan memperlakukan entri direktori seperti entri file. Mari kita bandingkan:
# 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
Saat menggunakan -d
opsi saja, tidak ada banyak perbedaan antara ls
dan echo
plain biasa perintah:
# 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
Tapi -d
opsi menjadi lebih berguna jika dikaitkan dengan opsi lain untuk menampilkan informasi tambahan, seperti saat menggunakan -l
bendera yang akan kita lihat sekarang.
-l
:opsi format panjang
Dalam ls
kontes popularitas pilihan, -l
(huruf kecil ell) opsi mungkin akan menjadi pemenangnya. Ini sangat berguna sehingga banyak sistem menawarkan ll
alias untuk ls -l
(atau ls -l<something>
)
-l
singkatan dari format panjang. Dengan opsi itu, ls
perintah akan menampilkan setiap entri pada barisnya sendiri yang berisi informasi berikut:* mode file * jumlah tautan * nama pemilik * nama grup * jumlah byte dalam file * tanggal dan waktu * nama jalur
Juga, dengan -l
pilihan, ls
tidak akan lagi mengikuti tautan simbolik. Jadi, itu akan menampilkan informasi (mode file, jumlah tautan, dan sebagainya) tentang tautan itu sendiri, dan bukan tentang tujuannya. Untuk alasan yang sama, ls
perintah tidak akan menampilkan konten direktori yang ditunjuk oleh tautan simbolik:
# 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
Untuk mengakhiri bagian ini, saya membiarkan Anda memeriksa output yang kita peroleh dengan menggabungkan keduanya -l
dan -d
pilihan:
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
:menampilkan semua file
Dengan -a
pilihan, ls
menyertakan file tersembunyi saat menampilkan konten direktori. Tapi apa itu file tersembunyi?
Menurut konvensi, pada sistem mirip Unix, file yang namanya dimulai dengan titik dianggap tersembunyi. Selain itu, setiap direktori juga berisi dua entri khusus yang biasanya tersembunyi:.
dan ..
Di setiap direktori:
.
titik masuk ke direktori itu sendiri. Referensi diri semacam itu mungkin tampak aneh. Namun terkadang hal ini berguna, seperti memasukkan nomor telepon Anda sendiri ke dalam perbendaharaan ponsel cerdas Anda...
titik masuk ke direktori induk. Karena hierarki file pada sistem mirip Unix diatur secara ketat sebagai pohon, setiap direktori memiliki satu dan hanya satu induk. Kecuali direktori root/
mungkin? Sebenarnya tidak:induk dari direktori root adalah ... direktori root itu sendiri.
# 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
Opsi yang berguna dari perintah ls
Setelah meninjau -l
yang terkenal , -d
dan -a
opsi, mari kita alihkan perhatian kita pada beberapa opsi yang kurang dikenal yang menurut saya sangat berguna.
-s
:menampilkan ukuran yang dialokasikan
Anda mungkin ingat -l
opsi menampilkan jumlah byte dalam file. -s
opsi menampilkan ukuran yang dialokasikan dalam blok. Apa itu blok? Nah, sekelompok byte yang ukurannya bergantung pada implementasi. Biasanya 512 byte di BSD dan 1024 byte di Linux.
Mengapa saya harus repot dengan ukuran dalam blok ketika saya sudah memiliki akses ke ukuran dalam byte? Nah, -s
opsi menampilkan dialokasikan ukuran. Bukan yang logis ukuran file. Itu mungkin dua hal yang sangat berbeda untuk file yang jarang. File jarang adalah file yang berisi "lubang". Saat dibaca, lubang tersebut berperilaku seperti blok file normal yang hanya berisi nol. Tapi mereka hampir tidak mengambil ruang pada disk. Kita dapat menggunakan dd
perintah dengan seek
opsi untuk membuat file jarang seperti yang saya lakukan untuk b
file dalam hierarki sampel saya:
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
Seperti yang Anda lihat, keduanya a
dan b
file tampaknya berukuran dua mebibytes. Tapi b
file yang jarang, dibutuhkan hanya 1028 blok pada disk (kira-kira satu mebibyte).
-h
menampilkan ukuran yang dapat dibaca manusia
Dengan -h
pilihan, ls
akan menampilkan ukuran file menggunakan akhiran unit untuk membuatnya lebih ramah pengguna. Opsi ini hanya bermakna bila digunakan dalam kombinasi dengan -l
opsi (Linux, BSD) atau -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
Anda mungkin telah memperhatikan ukuran ditampilkan menggunakan kekuatan 1024 unit, di mana K adalah singkatan dari 2^10=1024 byte, M untuk 1024^2=1048576 byte dan seterusnya. Layak disebutkan di sini ls
implementasi yang disediakan sebagai bagian dari GNU Coreutils memiliki --si
extra tambahan opsi untuk menggunakan kekuatan 1000 alih-alih kekuatan 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
tampilkan nomor inode
Pada sistem file gaya Unix, nomor inode (atau nomor seri file dalam terminologi POSIX) adalah angka yang secara unik mengidentifikasi objek sistem file (file, direktori, pipa bernama, ...). Dengan -i
opsi, ls
perintah akan menampilkan nomor inodenya di samping setiap jalur.
Meskipun kelihatannya agak eksotis, saya menemukan diri saya menggunakan -i
opsi dari waktu ke waktu, terutama untuk mengidentifikasi entri direktori yang mereferensikan objek sistem file yang sama. Anda akan menggunakan opsi itu sebagian besar saat menyelidiki tautan keras atau pengikatan mount. Lihat video itu untuk contoh praktis: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
Pada contoh di atas, Anda dapat melihat setiap nama file diawali dengan nomor inode yang terkait dengan jalur tersebut. Di sistem Anda, jumlahnya pasti akan berbeda. Bagaimanapun, lihat lebih dekat hardlink-to-file
dan dir/e
entri. Keduanya memiliki nomor inode yang sama (8264 dalam kasus saya). Itu berarti mereka adalah dua entri yang mereferensikan objek sistem file dasar yang sama— yang sebenarnya merupakan definisi yang tepat dari apa itu tautan keras.
Anda mungkin ingat saya katakan sebelumnya bahwa induk dari direktori root adalah direktori root itu sendiri. Dengan menggunakan -i
pilihan, cukup mudah untuk memverifikasi pernyataan itu:
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
Seperti yang Anda lihat, di sistem saya, direktori root dikaitkan dengan inode nomor 2, yang juga merupakan inode induknya. Jadi itu membuktikan direktori root adalah induknya sendiri.
Opsi perintah ls yang jarang digunakan
Saya secara teratur menggunakan opsi yang dijelaskan di bagian sebelumnya, tetapi yang akan saya bicarakan sekarang… yah… saya tahu itu ada. Namun harus saya akui ketika saya membutuhkannya, saya sering harus melihat ke man
untuk menyegarkan ingatan saya.
-L
:menampilkan informasi tentang target tautan simbolik
Opsi ini mengubah perilaku ls
perintah ketika diterapkan ke tautan simbolik. Dengan -L
pilihan, ls
akan menampilkan informasi tentang ke target dari tautan simbolik alih-alih menampilkan yang terkait dengan tautan simbolik itu sendiri. Dengan memeriksa contoh berikut, perbedaannya akan terlihat jelas:
# 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
:menambahkan karakter klasifikasi ke nama file
-F
option menambahkan karakter tambahan setelah nama path dari beberapa kategori objek sistem file untuk mengidentifikasinya. Ini akan menambahkan:
- sebuah
\
setelah setiap nama path yang merupakan direktori, - sebuah
@
setelah setiap nama jalur yang merupakan tautan simbolis, - sebuah
*
setelah setiap file yang dapat dieksekusi, - dan sebuah
|
setelah setiap FIFO (lihatmkfifo
untuk informasi lebih lanjut tentang itu)
Pada hari-hari awal Unix saya, saya sering menggunakan opsi itu. Tapi karena ls
dapat mewarnai outputnya (dan karena kami memiliki monitor berwarna!), saya jarang membutuhkannya. Tapi aku mengingatnya. Dan dari waktu ke waktu, pada terminal jarak jauh, saya menemukan kesempatan untuk menggunakannya:
sh:~/ls$ ls -F
a b c dir/ hardlink-to-file [email protected] [email protected]
t
:mengurutkan entri berdasarkan waktu modifikasi
Dengan -t
opsi, ls
perintah dengan entri direktori tampilan yang diurutkan berdasarkan waktu modifikasi (terbaru lebih dulu) alih-alih mengurutkannya berdasarkan namanya:
# 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
Jika saya mengubah file, sekarang akan muncul sebagai entri pertama (yaitu:paling baru diubah) dalam daftar:
sh:~/ls$ echo >> a
sh:~/ls$ ls -t
a symlink-to-subdir symlink-to-file c dir hardlink-to-file b
-S
:mengurutkan entri menurut ukuran
Dengan -S
pilihan, ls
akan menampilkan entri yang diurutkan berdasarkan ukuran, file terbesar terlebih dahulu. Dalam kasus seri, entri diurutkan menurut nama jalurnya:
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
:urutan pengurutan terbalik
Opsi ini membalikkan urutan pengurutan. Saya merasa paling berguna jika dikaitkan dengan -t
opsi agar file yang paling terakhir dimodifikasi ditampilkan terlebih dahulu atau dengan -S
pilihan untuk menampilkan file terkecil terlebih dahulu. Tetapi ini juga berfungsi dengan default, berdasarkan nama jalur, urutkan urutan:
# 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
:Menampilkan UID/GID numerik
Opsi ini sama persis dengan -l
opsi— kecuali dengan -n
id grup pemilik (GID) dan id pengguna (UID) ditampilkan sebagai angka daripada menggunakan nama yang terkait:
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
Penggunaan perintah ls yang sangat eksotis
Tidak ada yang bisa mengklaim tahu segalanya. Dan saat menulis artikel ini, saya (kembali) menemukan beberapa ls
pilihan. Saya tidak ingat pernah menggunakannya sendiri, tetapi mungkinkah Anda? Jika demikian, saya akan penasaran untuk membaca di bagian komentar dalam keadaan apa Anda menganggapnya berguna. Bagaimanapun, inilah pilihan yang mungkin menarik bagi Anda.
-R
:daftar subdirektori secara rekursif
Secara default, ls
perintah hanya menampilkan konten direktori yang diberikan secara eksplisit pada baris perintah. Dengan -R
opsi, itu juga akan menampilkan konten direktori yang ditemukan secara rekursif:
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
Sementara menarik secara teori, saya menemukan (pun intended) output yang dihasilkan oleh find .
perintah lebih mudah dibaca untuk tujuan itu. Tetapi jarak tempuh Anda mungkin berbeda, tentu saja:
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
:menampilkan hampir semua file
Meskipun tidak didefinisikan dalam standar POSIX, -A
pilihan muncul baik di dunia GNU dan BSD. Dalam kedua kasus, ini berfungsi seperti -a
, tetapi mengecualikan .
dan ..
entri. Layak disebutkan pada sistem BSD, -A
tersirat untuk pengguna super:
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
:jangan diurutkan
Dengan -f
pilihan, ls
akan menampilkan entri sesuai urutan kemunculannya di direktori. Urutan itu tergantung pada sistem file yang mendasarinya, dan file pesanan dibuat, sehingga hampir tidak dapat diprediksi. -f
opsi juga menyiratkan -a
pilihan:
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
Cukup lucu, dengan GNU Coreutils 8.26 ls
implementasi, Anda dapat menggunakan keduanya -l
dan -f
pilihan jika Anda mengejanya -fl
–tetapi tidak jika Anda menulis -lf
. Di OpenBSD keduanya berfungsi seperti yang diharapkan:
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
:Menampilkan karakter nama file yang tidak dapat dicetak sebagai ?
Pada sistem file bergaya Unix, nama file dapat berisi karakter apa pun kecuali \
dan karakter NUL. Ini berarti nama file mungkin berisi karakter yang tidak dapat dicetak atau bahkan urutan kontrol yang dapat mengganggu terminal Anda. Mari kita coba sesuatu yang lucu:
touch "$(echo -e '\x1B[7mBOO\x1B[0m')"
Jelas, nama file itu berisi karakter yang tidak dapat dicetak. Pada implementasi modern ls
, -q
opsi tersirat ketika output adalah terminal, untuk menghindari potensi efek jahat. Jadi karakter yang tidak bisa dicetak akan diganti dengan tanda tanya:
sh:~/ls$ ls *BOO*
?[7mBOO?[0m
Namun, semuanya akan berbeda jika Anda menulisnya sebagai gantinya:
# I let you try that by yourself
# to not spoil the fun;)
sh:~/ls$ ls *BOO* | cat
| cat
tidak berguna, tetapi sebagai efek samping, ls
command sekarang melihat pipa pada output standarnya alih-alih tty ("terminal"). Karena keluaran bukan lagi terminal, -q
opsi tidak lagi tersirat, dan ls
akan menampilkan nama file verbatim. Dalam hal ini, jika semuanya berfungsi seperti yang diharapkan, untuk menampilkan nama file dengan efek video yang funky.
Secara eksplisit menggunakan -q
pilihan akan memperbaikinya. Saya akan membiarkan Anda mencobanya sendiri (dan akhirnya bermain dengan urutan pelarian ANSI lainnya). Tapi saya mengambil kesempatan itu untuk memperingatkan Anda agar tidak menggunakan ls
perintah dalam skrip shell. Dalam praktiknya, ls
dirancang untuk "konsumsi manusia". Ada banyak kasus sampingan mengenai nama file yang dibuat khusus yang sangat sulit untuk ditangani dengan benar. Jika Anda perlu menelusuri daftar file, saya sangat menganjurkan Anda untuk menggunakan perintah find sebagai gantinya. Dalam kasus yang paling sederhana, for
simple sederhana loop bahkan cukup— tapi itu akan menjadi cerita lain.
for f in *; do echo "$f"; done
Akhirnya?
Jadi itu menyimpulkan tur kami di ls
opsi perintah. Tidak perlu disebutkan itu jauh dari lengkap dan saya mencoba untuk fokus di sini pada opsi yang paling berguna dan paling portabel. Tetapi setiap ls
implementasi memiliki fitur-fitur keren, jadi jika Anda tahu beberapa opsi bagus yang saya lewatkan di artikel ini, jangan ragu untuk membagikannya kepada kami menggunakan bagian komentar. Jika kami memiliki umpan balik yang cukup, kami bahkan dapat menyusun dan menerbitkannya dalam artikel lanjutan!
Berbicara tentang perintah ls, apakah Anda tahu perintah lsof? Ini tidak terkait dengan ls tetapi memberi tahu Anda pengguna mana yang mengakses file tertentu.