Strange but useful shell trick with the bash shell.

Posted: March 3, 2014. At: 9:20 PM. This was 3 years ago. Post ID: 7024

This is a very strange shell trick that allows you to have a set of parameters to a Linux command that are separated by single quotes.

[homer@localhost ~]$ df -h'l'a'T'
Filesystem     Type             Size  Used Avail Use% Mounted on
rootfs         rootfs           216G   75G  130G  37% /
proc           proc                0     0     0    - /proc
sysfs          sysfs               0     0     0    - /sys
devtmpfs       devtmpfs         2.9G     0  2.9G   0% /dev
securityfs     securityfs          0     0     0    - /sys/kernel/security
selinuxfs      selinuxfs           0     0     0    - /sys/fs/selinux
tmpfs          tmpfs            2.9G  1.7M  2.9G   1% /dev/shm
devpts         devpts              0     0     0    - /dev/pts
tmpfs          tmpfs            2.9G  9.2M  2.9G   1% /run
tmpfs          tmpfs            2.9G     0  2.9G   0% /sys/fs/cgroup
cgroup         cgroup              0     0     0    - /sys/fs/cgroup/systemd
pstore         pstore              0     0     0    - /sys/fs/pstore
cgroup         cgroup              0     0     0    - /sys/fs/cgroup/cpuset
cgroup         cgroup              0     0     0    - /sys/fs/cgroup/cpu,cpuacct
cgroup         cgroup              0     0     0    - /sys/fs/cgroup/memory
cgroup         cgroup              0     0     0    - /sys/fs/cgroup/devices
cgroup         cgroup              0     0     0    - /sys/fs/cgroup/freezer
cgroup         cgroup              0     0     0    - /sys/fs/cgroup/net_cls
cgroup         cgroup              0     0     0    - /sys/fs/cgroup/blkio
cgroup         cgroup              0     0     0    - /sys/fs/cgroup/perf_event
cgroup         cgroup              0     0     0    - /sys/fs/cgroup/hugetlb
/dev/sda3      ext4             216G   75G  130G  37% /
systemd-1      autofs              0     0     0    - /proc/sys/fs/binfmt_misc
debugfs        debugfs             0     0     0    - /sys/kernel/debug
hugetlbfs      hugetlbfs           0     0     0    - /dev/hugepages
mqueue         mqueue              0     0     0    - /dev/mqueue
tmpfs          tmpfs            2.9G   80K  2.9G   1% /tmp
configfs       configfs            0     0     0    - /sys/kernel/config
fusectl        fusectl             0     0     0    - /sys/fs/fuse/connections
/dev/sr0       iso9660          3.0G  3.0G     0 100% /run/media/homer/Kali Live
/dev/sdi1      fuseblk          1.9T  218G  1.7T  12% /run/media/homer/Seagate Backup Plus Drive
gvfsd-fuse     fuse.gvfsd-fuse     0     0     0    - /run/user/1000/gvfs
binfmt_misc    binfmt_misc         0     0     0    - /proc/sys/fs/binfmt_misc

Here is another example.

[homer@localhost backgrounds]$ ls -h'u'l'a'
total 72K
drwxr-xr-x.  16 root root 4.0K Mar  2 21:07 .
drwxr-xr-x. 282 root root  12K Mar  2 21:03 ..
drwxr-xr-x.   3 root root 4.0K Mar  2 21:07 beefy-miracle
drwxr-xr-x.   2 root root 4.0K Mar  2 21:07 cosmos
lrwxrwxrwx.   1 root root   42 Mar  2 21:02 default.png -> ./heisenbug/default/standard/heisenbug.png
drwxr-xr-x.   2 root root 4.0K Mar  2 21:07 gnome
drwxr-xr-x.   3 root root 4.0K Mar  2 21:07 heisenbug
drwxr-xr-x.   2 root root 4.0K Mar  2 21:07 images
drwxr-xr-x.   2 root root 4.0K Mar  2 21:07 infinity
drwxr-xr-x.   3 root root 4.0K Mar  2 21:07 laughlin
drwxr-xr-x.   3 root root 4.0K Mar  2 21:07 leonidas
drwxr-xr-x.   3 root root 4.0K Mar  2 21:07 lovelock
drwxr-xr-x.   5 root root 4.0K Mar  2 21:07 mate
drwxr-xr-x.   4 root root 4.0K Mar  2 21:07 schroedinger-cat
drwxr-xr-x.   3 root root 4.0K Mar  2 21:07 spherical-cow
drwxr-xr-x.   3 root root 4.0K Mar  2 21:07 verne
drwxr-xr-x.   2 root root 4.0K Mar  2 21:07 xfce

This is actually quite a cool trick.

Here I am using brace expansion to look for two files, Day.jpg and Dune.jpg. Of course, only Dune.jpg is returned in the directory listing.

[homer@localhost nature]$ ls -h'u'l'a' D{un,ay}*.jpg
ls: cannot access Day*.jpg: No such file or directory
-rw-r--r--. 1 root root 998K Feb 28 22:34 Dune.jpg

This is an even more obfuscated and complex version. This will accept any starting letter for the filename and certain strings for the rest of the words.

[homer@localhost nature]$ ls -h'u'l'a' [A-Z]{ard,ood,qua}*.jpg
-rw-r--r--. 1 root root 196K Mar  2 23:48 Aqua.jpg
-rw-r--r--. 1 root root 259K Feb 28 22:34 Garden.jpg
-rw-r--r--. 1 root root 514K Feb 28 22:34 Wood.jpg

This is something cool that I discovered. A very cool Linux command to show off to your friends.

No comments have been made. Use this form to start the conversation :)

Leave a Reply