ls an dir
2 minutes read in LinuxЗанимаясь чисткой .bashrc заметил команду dir:
$ dir
Desktop dev Documents Downloads Music Pictures Public Snapshots Templates Videos
Которая очень напоминает ls:
$ ls
Desktop dev Documents Downloads Music Pictures Public Snapshots Templates Videos
А еще команда vdir:
$ vdir
total 108
drwxr-xr-x. 5 yoda yoda 53248 Apr 27 02:22 Desktop
drwxr-xr-x. 7 yoda yoda 4096 Apr 12 20:12 dev
drwxr-xr-x. 2 yoda yoda 4096 Apr 25 12:05 Documents
drwxr-xr-x. 3 yoda yoda 20480 Apr 23 20:39 Downloads
drwxr-xr-x. 2 yoda yoda 4096 May 11 2019 Music
drwxr-xr-x. 3 yoda yoda 4096 Apr 26 17:01 Pictures
drwxr-xr-x. 2 yoda yoda 4096 May 11 2019 Public
drwxrwxr-x. 2 yoda yoda 4096 Dec 24 12:01 Snapshots
drwxr-xr-x. 2 yoda yoda 4096 May 12 2019 Templates
drwxr-xr-x. 2 yoda yoda 4096 Apr 19 17:35 Videos
На первый взгляд может показаться что это все алиасы к ls, но на самом деле это три разные команды:
$ which vdir
/usr/bin/vdir
$ which dir
/usr/bin/dir
$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
Так в чем же разница, и зачем дистрибутив поставляется со всеми тремя?
Все сложно
Ответ, как обычно, можно найти на StackOverflow, но даже перечитав его пару раз я не понял смысла. Речь шла про устройства вывода, но какие устройства вывода могут быть у простой команды? Оказывается команды могут различать вывод в терминал, и вывод в пайп! И как раз ls ведет себя по разному:
$ ls
'Sample File.txt'
$ ls | cat
Sample File.txt
$ dir
Sample\ File.txt
$ dir | cat
Sample\ File.txt
В этом и заключается принципиальное отличие ls и dir: dir не меняет вывод в зависимости от устройства как и vdir. А vdir это Verbose dir.
На практике dir удобный вариант ls для скриптов, хотя и с ls можно добиться того же поведения, но потребуются дополнительные флаги, так:
- Pipe
ls -Cordirls -C -lorvdir
- Stdout
ls -borvdirls -l -borvdir