Hubungan Antara lsdandir
lsdan dirmerupakan program terpisah yang berperilaku sama. Seperti dijelaskan dan direferensikan di bawah, tujuan dari diradalah untuk memberikan perintah seperti lsyang outputnya tidak bervariasi tergantung pada apakah itu akan ke terminal atau tidak . Untuk mencapai ini sangat membantu, dirharus 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:
- Banyak orang percaya
diritu alias ls, tetapi bukan itu masalahnya. Tidak ada perintah yang merupakan alias dari yang lain, dan secara default di Ubuntu, dirbukan alias sama sekali. lsdan dirdisediakan oleh executable yang terpisah dan tidak identik.
- Banyak orang percaya
dirada karena alasan historis yang tidak jelas atau untuk memberikan kompatibilitas dengan beberapa standar atau OS lainnya. Bukan itu masalahnya. lsberperilaku 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 lsdan dirberbeda?
Keduanya lsdan dirdaftar isi direktori. Dua perbedaan spesifik dalam perilaku default mereka membedakan mereka.
Ketika output standarnya adalah terminal, lsdaftar nama file dalam kolom yang diurutkan secara vertikal (seperti ls -C). Ketika output standarnya bukan terminal (misalnya, file atau pipa ), lsdaftarkan nama file satu per baris (seperti ls -1).
Apakah output standarnya adalah terminal atau tidak, dirdaftar nama file dalam kolom yang diurutkan secara vertikal (seperti ls -C).
Untuk kedua lsdan dir, default ini dapat diganti dengan --format=bendera dan oleh -1, -C, -m, dan -xbendera, 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 , lscetak ?alih-alih setiap karakter kontrol (seperti ls -q). Ketika output standarnya bukan terminal, lsmencetak karakter kontrol apa adanya (seperti ls --show-control-chars).
Apakah output standarnya adalah terminal, ketika dirbertemu 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, dirakan mencantumkan entri yang disebut Documents backupssebagai Documents\ backups. Ini seperti ls -b.
Untuk keduanya lsdan dir, 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 dirutilitas 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 untuk ls/ dir:
Tolong jangan membuat perilaku utilitas tergantung pada nama yang digunakan untuk memintanya ....
Sebaliknya, gunakan opsi run time atau switch kompilasi atau keduanya untuk memilih di antara perilaku alternatif ....
Demikian juga, tolong jangan membuat perilaku program baris perintah tergantung pada jenis perangkat output ....
Kompatibilitas membutuhkan program tertentu untuk bergantung pada jenis perangkat output. Akan menjadi bencana jika lsatau shtidak melakukannya dengan cara yang diharapkan semua pengguna. Dalam beberapa kasus ini, kami melengkapi program dengan versi alternatif pilihan yang tidak bergantung pada jenis perangkat output. Sebagai contoh, kami menyediakan dirprogram seperti halnya
lskecuali bahwa format output standarnya selalu format multi-kolom.
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 lstidak dapat ditulis secara wajar untuk berperilaku perangkat secara mandiri, dirutilitas terpisah dibuat untuk mencapai ini. Dengan demikian dirbukan utilitas yang berperilaku aneh karena alasan kompatibilitas historis - lsadalah .
Untuk melihat bagaimana ls, dirdan terkait vdirutilitas diimplementasikan dalam kode coreutils sumber tanpa duplikasi kode perlu, lihat ls-dir.c, ls-ls.c, ls-vdir.c, ls.h, dan ls.c.
Benarkah dirbermanfaat?
Jika Anda pernah ingin lsmenghasilkan output multi-kolom bahkan ketika Anda memipangnya ke less( ls | less) atau mengarahkannya ke file ( ls > out.txt), Anda dapat menggunakan diratau ls -C.
Jika Anda pernah berharap Anda bisa langsung menyalin nama file yang ditunjukkan oleh lsdan menggunakannya sebagai bagian dari perintah tanpa khawatir tentang penawaran , Anda dapat menggunakan diratau ls -b.
dirsetara dengan ls -Cb, jadi dalam pengertian itu Anda tidak perlu dir. Tetapi dirmemberikan kombinasi opsi yang dalam praktiknya sering berguna (meskipun tidak banyak diketahui).
Mengapa saya mendapatkan keluaran berwarna dari ls(datar ls -Cb) tetapi tidak dir?!
Sebagian besar pengguna Ubuntu memiliki alias yang disebut lsmenjalankan ls --color=auto. Ketika lsada baik sebagai alias maupun perintah eksternal, alias didahulukan dalam perintah interaktif sederhana.
Definisi alias tidak diperluas secara rekursif - itu adalah lsperintah eksternal yang lsdipanggil oleh alias --color=auto. Lihat 6.6 Alias di manual referensi Bash untuk informasi lebih lanjut tentang cara kerja alias.
Ketika diteruskan ke ls,, diratau vdir(dan beberapa perintah lain, seperti grep), --color=automenggunakan warna ketika outputnya adalah terminal, tetapi tidak sebaliknya.
Secara default di Ubuntu, akun pengguna dibuat dengan ini di ~/.bashrc:
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
Anda akan melihat lsalias ( alias ls='ls --color=auto') tidak dihapus, sementara itu untuk dirdan vdirdikomentari #sehingga mereka tidak berpengaruh. Artinya, sementara dirbukan alias, lsadalah (tetapi tidak untuk dir) .
Bagaimana cara membuat dirhasil berwarna?
Untuk mengaktifkan keluaran berwarna dir, cukup edit .bashrcdi direktori home Anda dan batalkan komentar pada #alias dir='dir --color=auto'baris dengan menghapus yang memimpin #. Dalam cangkang dimulai setelah perubahan, dirakan menjadi alias.
Jika Anda menginginkan perubahan di shell saat ini, Anda dapat menjalankan definisi alias sebagai perintah, atau Anda dapat sumber .bashrcdengan menjalankan . ~/.bashrc.
Ini bisa dibilang bertentangan dengan poin utama dir- bahwa itu harus menghasilkan jenis output yang sama terlepas dari perangkat output. Namun:
- Jika Anda merasa berguna untuk membuat
diralias ini , Anda tentu harus melakukannya.
- Ketika dipanggil sebagai perintah eksternal, misalnya dalam skrip atau jika Anda mengganti alias dengan menjalankan
\diratau command dir, dirmasih akan menghasilkan output yang bebas perangkat. Hal ini untuk mengatakan bahwa aliasing diruntuk dir --color=autotidak benar-benar istirahat dir.
dir --color;)