Saya sudah mencoba untuk menemukan perbedaan antara menggunakan perintah dir
dan ls
di terminal. Saya tahu ls adalah metode UNIX tradisional untuk melihat file dalam direktori, dan itu dir
adalah setara dengan command prompt windows, tetapi kedua perintah bekerja di terminal.
Jika saya mengetiknya dir
akan menampilkan file dan folder di direktori, dan jika saya mengetiknya ls
melakukan hal yang sama, kecuali dengan penyorotan konten. Kedua perintah menerima opsi (yaitu ls -a
dan dir -a
mengembalikan semua file dan folder serta file tersembunyi.
Jadi tidak ada yang tahu apa perbedaan dan mengapa kedua dir
dan ls
digunakan?
command-line
directory
ls
coreutils
BretD
sumber
sumber
dir --color
;)Jawaban:
dir
danls
merupakan bagian daricoreutils
dandir
hampir sama denganls
, hanya dengan opsi default yang berbeda.info dir
mengatakan:Oh dan ada juga
vdir
!info vdir
mengatakan:Kemungkinan besar
dir
ada untuk kompatibilitas ke belakang atau karena alasan historis.sumber
alias dir
untuk melihat apa itu sebenarnya. ketikalias
untuk melihat semua alias.type dir
untuk melihat apa itu (alias, perintah, fungsi bash ...)Hubungan Antara
ls
dandir
ls
dandir
merupakan program terpisah yang berperilaku sama. Seperti dijelaskan dan direferensikan di bawah, tujuan daridir
adalah untuk memberikan perintah sepertils
yang outputnya tidak bervariasi tergantung pada apakah itu akan ke terminal atau tidak . Untuk mencapai ini sangat membantu,dir
harus memformat outputnya dengan cara yang masuk akal dan berguna baik untuk dilihat di terminal maupun untuk menulis ke file atau pipa.Ada dua kesalahpahaman umum tentang
dir
:dir
itu aliasls
, tetapi bukan itu masalahnya. Tidak ada perintah yang merupakan alias dari yang lain, dan secara default di Ubuntu,dir
bukan alias sama sekali.ls
dandir
disediakan oleh executable yang terpisah dan tidak identik.dir
ada karena alasan historis yang tidak jelas atau untuk memberikan kompatibilitas dengan beberapa standar atau OS lainnya. Bukan itu masalahnya.ls
berperilaku seperti itu untuk kompatibilitas.dir
, yang tidak harus kompatibel karena itu bukan perintah Unix standar, berperilaku dengan cara alternatif yang dianggap berharga oleh pengembang sendiri dan bahkan mungkin lebih disukai.OK, tapi bagaimana persisnya
ls
dandir
berbeda?Keduanya
ls
dandir
daftar isi direktori. Dua perbedaan spesifik dalam perilaku default mereka membedakan mereka.Ketika output standarnya adalah terminal,
ls
daftar nama file dalam kolom yang diurutkan secara vertikal (sepertils -C
). Ketika output standarnya bukan terminal (misalnya, file atau pipa ),ls
daftarkan nama file satu per baris (sepertils -1
).Apakah output standarnya adalah terminal atau tidak,
dir
daftar nama file dalam kolom yang diurutkan secara vertikal (sepertils -C
).Untuk kedua
ls
dandir
, default ini dapat diganti dengan--format=
bendera dan oleh-1
,-C
,-m
, dan-x
bendera, yang menyingkat tertentu--format=
pilihan. Lihat 10.1.4 Pemformatan keluaran umum dalam manual referensi GNU coreutils untuk perinciannya.Ketika output standarnya adalah terminal dan nama file yang akan dicantumkan berisi karakter kontrol ,
ls
cetak?
alih-alih setiap karakter kontrol (sepertils -q
). Ketika output standarnya bukan terminal,ls
mencetak karakter kontrol apa adanya (sepertils --show-control-chars
).Apakah output standarnya adalah terminal, ketika
dir
bertemu dengan karakter kontrol atau karakter lain yang akan ditafsirkan secara khusus jika dimasukkan ke dalam shell, ia mencetak urutan garis miring terbalik untuk karakter. Ini termasuk bahkan karakter yang relatif umum seperti spasi. Misalnya,dir
akan mencantumkan entri yang disebutDocuments backups
sebagaiDocuments\ backups
. Ini sepertils -b
.Untuk keduanya
ls
dandir
, default-default ini mungkin ditimpa oleh flag-flag yang tercantum dalam 10.1.7 Memformat nama file dalam manual referensi GNU coreutils . Ini termasuk-b
,-q
,--quoting-style=
, dan beberapa orang lain.Sumber : ls invokasi dan dir invokasi , dalam manual referensi GNU coreutils .
Mengapa harus
dir
?Dasar pemikiran untuk
dir
utilitas terpisah diberikan dalam 4,5 Standar untuk Antarmuka Umumnya dari standar pengkodean GNU . Saya sarankan membaca seluruh bagian itu untuk memahami alasan pengembang, tetapi berikut adalah hal-hal penting yang berlaku untukls
/dir
:Proyek GNU menganggapnya tidak diinginkan, dari perspektif teknis, untuk utilitas untuk menghasilkan output yang berbeda tergantung pada jenis perangkat yang ditulisnya (setidaknya dalam konfigurasi default utilitas). Untuk beberapa utilitas, termasuk
ls
, output yang bergantung pada perangkat diperlukan untuk kompatibilitas dan berfungsi seperti yang diharapkan pengguna. Beberapa pengguna juga lebih suka perilaku bergantung pada perangkat ini.Meskipun
ls
tidak dapat ditulis secara wajar untuk berperilaku perangkat secara mandiri,dir
utilitas terpisah dibuat untuk mencapai ini. Dengan demikiandir
bukan utilitas yang berperilaku aneh karena alasan kompatibilitas historis -ls
adalah .Untuk melihat bagaimana
ls
,dir
dan terkaitvdir
utilitas diimplementasikan dalam kode coreutils sumber tanpa duplikasi kode perlu, lihatls-dir.c
,ls-ls.c
,ls-vdir.c
,ls.h
, danls.c
.Benarkah
dir
bermanfaat?Jika Anda pernah ingin
ls
menghasilkan output multi-kolom bahkan ketika Anda memipangnya keless
(ls | less
) atau mengarahkannya ke file (ls > out.txt
), Anda dapat menggunakandir
atauls -C
.Jika Anda pernah berharap Anda bisa langsung menyalin nama file yang ditunjukkan oleh
ls
dan menggunakannya sebagai bagian dari perintah tanpa khawatir tentang penawaran , Anda dapat menggunakandir
atauls -b
.dir
setara denganls -Cb
, jadi dalam pengertian itu Anda tidak perludir
. Tetapidir
memberikan kombinasi opsi yang dalam praktiknya sering berguna (meskipun tidak banyak diketahui).Mengapa saya mendapatkan keluaran berwarna dari
ls
(datarls -Cb
) tetapi tidakdir
?!Sebagian besar pengguna Ubuntu memiliki alias yang disebut
ls
menjalankanls --color=auto
. Ketikals
ada baik sebagai alias maupun perintah eksternal, alias didahulukan dalam perintah interaktif sederhana.Definisi alias tidak diperluas secara rekursif - itu adalah
ls
perintah eksternal yangls
dipanggil oleh alias--color=auto
. Lihat 6.6 Alias di manual referensi Bash untuk informasi lebih lanjut tentang cara kerja alias.Ketika diteruskan ke
ls
,,dir
atauvdir
(dan beberapa perintah lain, sepertigrep
),--color=auto
menggunakan warna ketika outputnya adalah terminal, tetapi tidak sebaliknya.Secara default di Ubuntu, akun pengguna dibuat dengan ini di
~/.bashrc
:Anda akan melihat
ls
alias (alias ls='ls --color=auto'
) tidak dihapus, sementara itu untukdir
danvdir
dikomentari#
sehingga mereka tidak berpengaruh. Artinya, sementaradir
bukan alias,ls
adalah (tetapi tidak untukdir
) .Bagaimana cara membuat
dir
hasil berwarna?Untuk mengaktifkan keluaran berwarna
dir
, cukup edit.bashrc
di direktori home Anda dan batalkan komentar pada#alias dir='dir --color=auto'
baris dengan menghapus yang memimpin#
. Dalam cangkang dimulai setelah perubahan,dir
akan menjadi alias.Jika Anda menginginkan perubahan di shell saat ini, Anda dapat menjalankan definisi alias sebagai perintah, atau Anda dapat sumber
.bashrc
dengan menjalankan. ~/.bashrc
.Ini bisa dibilang bertentangan dengan poin utama
dir
- bahwa itu harus menghasilkan jenis output yang sama terlepas dari perangkat output. Namun:dir
alias ini , Anda tentu harus melakukannya.\dir
ataucommand dir
,dir
masih akan menghasilkan output yang bebas perangkat. Hal ini untuk mengatakan bahwa aliasingdir
untukdir --color=auto
tidak benar-benar istirahatdir
.sumber
Sumber: Renan 's jawaban untuk Apa perbedaan antara ‘dir’ dan ‘ls’ ?
sumber
dir
ini tidak disediakan untuk kompatibilitas mundur --danls
sebenarnya adalah --this jawabannya (dan jawaban itu mengutip dari) tidak benar menyatakan perbedaan teknis antara kedua perintah serta menjelaskan perbedaan pewarnaan umumnya diamati. Jadi +1.Jika ragu, bandingkan
type ls
vstype dir
(lihat juga Perbedaan antara ls dan la ):Perbedaannya bermuara pada opsi yang berbeda untuk
ls
, dalam kasus saya--color=tty
akan menjadi yang paling terlihat, sistem Anda mungkin berbeda.sumber
ls
sebagai alias untuk fungsi yang disebut_ls
- bahkan sebagai baris komentar di.bashrc
. Tampaknya seperti default untuk (setidaknya beberapa versi) openSuSE, meskipun, dilihat dari percakapan ini , file ini (ditautkan dari sana), dan memori saya (yang mungkin salah) saat saya terakhir menggunakan openSUSE.Jawaban Singkat: Tidak ada, yang
dir
merupakan kode sumber yang sama darils
,ls
biner miliki--color
secara default. (1 baris kode berbeda)sumber
dir
adalah tidak aliasls
. Mereka binari terpisah/usr/bin
yang berperilaku berbeda, seperti yang dijelaskan dalam Rinzwind 's jawaban . Anda bisa mencapai ini dengan alias, tetapi bukan itu yang dicapai. Terpisahdir
danls
binari muncul di semua sistem yang menggunakan GNU Coreutils . Jika Anda perlu bukti, jalankancmp /bin/ls /bin/dir
.alias
, sekarang biner baru dikompilasi untuk dir. Anda dapat men-download kode dengan:git clone git://git.sv.gnu.org/coreutils
. Hanya satu baris kode berubah dalam ls-dir.c dan ini:int ls_mode = LS_MULTI_COL;
. Secara teknis bukan alias, tetapi praktis itu adalah LS tetapi dengan opsi default yang berbeda (1 baris kode).dir
inils
namun dengan pilihan default yang berbeda .dir
danls
selalu menjadi binari terpisah dalam distribusi yang menggunakan GNU Coreutils. Beberapa distribusi mungkin, atau mungkin, juga mendefinisikan alias yang disebutdir
(mendefinisikan alias yang nama yang sama dengan perintah yang ada cukup umum). Tetapi mereka adalah executable terpisah. Untuk membedakan antara alias shell (yang bukan file sama sekali) dan dieksekusi terpisah dengan kode sumber yang sama, bukan perbedaan yang mencolok. Mengatakan bahwa itudir
adalah aliasls
di Ubuntu adalah salah dan menyesatkan .alias
maka tentu saja bukan alias.