A prog by any other name
tedunangst.com
tedunangst.com
(Mtools is a collection of tools to allow Unix systems to manipulate MS-DOS files: read, write, and move around files on an MS-DOS filesystem, typically a floppy disk.)
Something is contradictory here. Perhaps rm is such a program?
;)
Not everywhere:
$ ls -li /bin/grep /bin/egrep /bin/fgrep
37748784 -rwxr-xr-x 1 root root 183696 Jan 18 2014 /bin/egrep
37748788 -rwxr-xr-x 1 root root 138352 Jan 18 2014 /bin/fgrep
37748794 -rwxr-xr-x 1 root root 191952 Jan 18 2014 /bin/grep
(That's on Ubuntu 14.04.) $ ls -li /usr/bin/{grep,egrep,fgrep}
1728040 -rwxr-xr-x 1 root root 28 Apr 23 12:12 /usr/bin/egrep*
1728041 -rwxr-xr-x 1 root root 28 Apr 23 12:12 /usr/bin/fgrep*
1728042 -rwxr-xr-x 1 root root 159024 Apr 23 12:12 /usr/bin/grep*
$ cat /usr/bin/egrep
#!/bin/sh
exec grep -E "$@"
$ cat /usr/bin/fgrep
#!/bin/sh
exec grep -F "$@"
The general point of them being implemented by the same executable still stands.Ubuntu 14.04 uses GNU grep 2.16. When I install it from source (grep-2.16.tar.xz), I get the three distinct executables. When I install the latest version (2.25) from source, egrep and fgrep are shell script that invoke "grep". (Which could be a problem if you happen to have another "grep" command in an earlier directory in your $PATH. Symlinks would avoid that problem.)
Here's the Changelog entry for the change to shell scripts:
2014-03-23 Paul Eggert <eggert@cs.ucla.edu>
egrep, fgrep: go back to shell scripts
Although egrep's and fgrep's switch from shell scripts to
executables may have made sense in 2005, it complicated
maintenance and recently has caused subtle performance bugs.
Go back to the old way of doing things, as it's simpler and more
easily separated from the mainstream implementation. This should
be good enough nowadays, as POSIX has withdrawn egrep/fgrep and
portable applications should be using -E/-F anyway. $ file -i /usr/bin/*grep|sort -k2,2 [17:59:42]
/usr/bin/grep: application/x-executable; charset=binary
/usr/bin/igrep: application/x-executable; charset=binary
/usr/bin/pgrep: application/x-executable; charset=binary
/usr/bin/msggrep: application/x-executable; charset=binary
/usr/bin/deepgrep: application/x-executable; charset=binary
/usr/bin/pcregrep: application/x-executable; charset=binary
/usr/bin/lzgrep: inode/symlink; charset=binary
/usr/bin/lzegrep: inode/symlink; charset=binary
/usr/bin/lzfgrep: inode/symlink; charset=binary
/usr/bin/xzegrep: inode/symlink; charset=binary
/usr/bin/xzfgrep: inode/symlink; charset=binary
/usr/bin/egrep: text/x-shellscript; charset=us-ascii
/usr/bin/fgrep: text/x-shellscript; charset=us-ascii
/usr/bin/zgrep: text/x-shellscript; charset=us-ascii
/usr/bin/bzgrep: text/x-shellscript; charset=us-ascii
/usr/bin/xzgrep: text/x-shellscript; charset=us-ascii
/usr/bin/zegrep: text/x-shellscript; charset=us-ascii
/usr/bin/zfgrep: text/x-shellscript; charset=us-ascii
/usr/bin/zipgrep: text/x-shellscript; charset=us-asciiHow's this possible? `ps` has to work somehow.
ps(1) examines other processes and again uses a system-specific interface to the kernel to retrieve all information about other processes (using kvm(3) on OpenBSD/FreeBSD).
These days there is usually a getter for proctitle in the form of the /proc filesystem, sysctls, etc.