Skip to content

rockorager/lsr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lsr

ls(1) but with io_uring

screenshot

Installation

lsr uses the zig build system. To install, you will need zig 0.14.0. To install for the local user (assuming $HOME/.local/bin is in $PATH), run:

zig build -Doptimize=ReleaseSmall --prefix $HOME/.local

which will install lsr and the associated manpage appropriately. Replace $HOME/.local with your preferred installation directory.

Usage

lsr [options] [path]

  --help                           Print this message and exit
  --version                        Print the version string

DISPLAY OPTIONS
  -1, --oneline                    Print entries one per line
  -a, --all                        Show files that start with a dot (ASCII 0x2E)
  -A, --almost-all                 Like --all, but skips implicit "." and ".." directories
  -C, --columns                    Print the output in columns
      --color=WHEN                 When to use colors (always, auto, never)
      --group-directories-first    Print all directories before printing regular files
      --hyperlinks=WHEN            When to use OSC 8 hyperlinks (always, auto, never)
      --icons=WHEN                 When to display icons (always, auto, never)
  -l, --long                       Display extended file metadata
  -r, --reverse                    Reverse the sort order
  -t, --time                       Sort the entries by modification time, most recent first

Benchmarks

Benchmarks were all gathered on the same set of directories, using the latest releases of each program (versions are shown below). All benchmarks run on Linux (because io_uring). lsr does work on macOS/BSD as well, but will not see the syscall batching benefits that are available with io_uring.

Program Version
lsr 0.1.0
ls 9.7
eza 0.21.3
lsd 1.1.5
uutils 0.0.30
busybox 1.36.1

Time

Data gathered with hyperfine on a directory of n plain files.

Program n=10 n=100 n=1,000 n=10,000
lsr -al 372.6 µs 634.3 µs 2.7 ms 22.1 ms
busybox ls -al 403.8 µs 1.1 ms 3.5 ms 32.5 ms
ls -al 1.4 ms 1.7 ms 4.7 ms 38.0 ms
eza -al 2.9 ms 3.3 ms 6.6 ms 40.2 ms
lsd -al 2.1 ms 3.5 ms 17.0 ms 153.4 ms
uutils ls -al 2.9 ms 3.6 ms 11.3 ms 89.6 ms

Syscalls

Data gathered with strace -c on a directory of n plain files. (Lower is better)

Program n=10 n=100 n=1,000 n=10,000
lsr -al 20 28 105 848
busybox ls -al 84 410 2,128 20,383
ls -al 405 675 3,377 30,396
eza -al 319 411 1,320 10,364
lsd -al 508 1,408 10,423 100,512
uutils ls -al 445 986 6,397 10,005

About

ls but with io_uring

Resources

License

Stars

Watchers

Forks

Contributors 7