Bash Index : M - The 'M' Bash commands : description, flags and examples




man is the utility displaying on-line reference manuals


Flag Usage
-P pager use pager to display pages and scroll up / down / page forward-backward / search / ...


Hack allowing to refer to any location within a manpage (source) :




Add and remove modules from the Linux kernel


Flag Usage
-a pattern load all modules matching the pattern conditions
-c display current configuration not equivalent to lsmod
-r moduleName remove (=unload) the module moduleName
-t type affect modules of the corresponding type
Example, to list all i2c modules : modprobe -l -t i2c



MD5 (Message-Digest algorithm 5) was created for encryption purposes, but now, it's mostly used to check file integrity.
To compute the MD5 hash of myFile :
md5sum myFile


Check file integrity :

When downloading a large file (file.iso), you're also offered to retrieve a short plain text file usually named MD5SUM. This file contains the calculated md5 hashes of the file.iso in order to let you check its integrity after the download. To do so :
  1. download both MD5SUM and file.iso into the same directory
  2. check file integrity : md5sum -c MD5SUM
  3. if the downloaded file.iso is an exact copy of the remote file.iso, it will display : file.iso: OK

Get the MD5 hash of an arbitrary string from the command line :

Single line string :

echo -n hello | md5sum
will return :
5d41402abc4b2a76b9719d911017c592 -

-n is required because echo appends a newline character to the output. Without this flag, the encoded string wouldn't be hello but hello\n, resulting in a different hash (source).

Multiple line string :

  1. md5sum -
  2. blablabla
  3. bliblibli
  4. blobloblo
  5. CTRL-d
  6. Should return : c3567beab1ff181e1d7b07d189437361 -



Make a directory


Flag Usage
-m octalMask --mode=octalMask Set file mode (as in chmod) using the mask octal notation format (i.e. : 644).
  • Do not use the mask symbolic notation format (i.e. : u=rw,g=r,o=r), this may have undesired effects.
  • There is no incompatibility between -m and -p, BUT if the target directory already exists :
    1. its mode will not be updated
    2. this will happen silently
-p --parents Make parent directories as needed, return no error if existing
If mkdir -p is intended to be followed by chown + chmod, have a look at install.



move and rename files


Flag Usage Details
-i --interactive prompt before overwrite
-f --force do not prompt before overwriting
Looks like this is the default. See -i
echo LEAD > lead; echo GOLD > gold; mv lead gold; cat lead gold; rm gold
cat: lead: No such file or directory	missing because renamed
LEAD					this is gold, overwritten without prompting
do not overwrite an existing file
When this applies, no UNIX_FAILURE is generated
echo LEAD > lead; echo GOLD > gold; mv -n lead gold; echo $?; cat lead gold; rm lead gold
LEAD	no file was altered


mv errors :

cannot move thisDirectory : Device or resource busy :

  1. With lsof and fuser, make sure no process is actually accessing thisDirectory :
    • It's likely there is an open shell which current directory is thisDirectory (in such situation, you'll find a Bash process using thisDirectory). Just cd somewhere else or terminate this process.
    • Kill blocking processes (fuser -k ) then retry.
  2. If no process is found but the error is still there, make sure the target directory is not a mount point.

mv: failed to preserve ownership for 'someFile': Permission denied (source) :

mv does its best to preserve metadata (permissions + owner/group information) when moving files around. But when the destination is not on the same filesystem than the source, this sometimes becomes impossible for reasons that are beyond mv (destination filesystem type, mount options, local vs remote user accounts, ...)
  • this is caused by the context, this is not a bug / limitation of mv
  • there is no command flag / hack / workaround
  • to move stuff to a different filesystem, use cp + rm instead



Create a safe temporary file or directory and display its name :

mktemp [options] template

template must contain at least 3 consecutive X in last component.

What is a symlink exploit ?

If an attacker knows in advance the name of a temporary file —e.g. root has a script that creates /tmp/tempFileForRoot— he can create a symlink with that name beforehand :
/tmp/tempFileForRoot -> any/other/file
so that, while root writes into /tmp/tempFileForRoot, any/other/file is actually overwritten with root privileges.
This can be used to break / mess up things and workaround security measures.


Flag Usage
-d --directory create a directory, not a file
-u --dry-run do not create anything, just print the name of the would-be-created file/directory
This option is marked as unsafe because it leaves the possibility of a symlink exploit : in the time lapse between
  1. when the name of the temporary file/directory is displayed
  2. when this temporary file/directory is actually created
an attacker could create a symlink named like this temporary file/directory.
Workaround : make a temporary directory with -d, and use names of your choice within that directory (source).
--suff=suffix append suffix to template. The same happens if template does not end with an X
-p dir
  • create the temporary file into dir
  • If dir is omitted, use $TMPDIR instead
  • If $TMPDIR is not set, use /tmp

Depending on the context, it _may_ be more appropriate to create temporary files into a RAM disk.

This option doesn't exist in Bash 3.x. Use mktemp /path/to/dir/tmpFile.XXXX instead.


Create a temporary file in ... Command Creates Notes
the current directory mktemp tmpFile.XXXX ./tmpFile.4zxA
tmpFile=$(mktemp XXXXXXXX.tmp)
use temp file
rm "$tmpFile"
any specified directory mktemp --tmpdir=./testDir/ test_File_XXXXXXXXXXX ./testDir/test_File_XTRr0VPklFg
the "temporary directory"
  • mktemp --tmpdir thisIsATempFile.XXXXXXXX
  • mktemp
  • /tmp/thisIsATempFile.9vEZbi0t
  • /tmp/tmp.fHBAF5mFbN
the "temporary directory", by a script
  • tmpFile=$(mktemp --tmpdir theNameOfMyTempFile.XXXXXXXX)
  • tmpFile=$(mktemp --tmpdir $(basename $0).XXXXXXXXXXXXXXXXX)
  • tmpFile=$(mktemp --tmpdir='/run/shm' $(basename $0).tmp.XXXXXXXXXXXX)
  • /tmp/theNameOfMyTempFile.Ts5yP2F6
  • /tmp/
  • /run/shm/scriptName.tmp.eBpsQUZCrDO4



mtr (My traceroute, originally called Matt's traceroute) is a computer program which combines the functionality of the traceroute and ping programs in a single network diagnostic tool.

mtr probes routers on the route path by limiting the number of hops individual packets may traverse, and listening to responses of their expiry. It will regularly repeat this process, usually once per second, and keep track of the response times of the hops along the path.




Send or read emails from the shell.


Flag Usage
-s specify mail subject


Send a simple mail (source) :

  1. mail -s "subject"

    When sending a mail to a localhost user, specifying, recipient@localhost or just recipient has the same result.

  2. If you didn't enter the mail subject in the command line, type it now after the prompt : Subject: Enlarge your tennis
  3. Type mail body :
    Roses are #FF0000
    Violets are #0000FF
    All of my base
    Are belong to you
  4. Terminate the mail body with : . then , or with CTRL-d.
  5. At the Cc: prompt, just hit CTRL-d again.

When mailing a localhost recipient, the /var/mail/recipient file must exist and be writable by the sender.

Send the content of a file as the mail body :

  • cat file | mail -s 'subject'
  • mail -s 'subject' < file

Be notified of a new mail in the terminal :

To receive "New mail" notifications in the terminal, you just have to set some variables in ~/.bashrc :
For details on MAILCHECK : man bash, then search : / MAILCHECK



make a filesystem

The Internetz are full of discussions like : What is the best filesystem ?

See Comparison of file systems.


Flag Usage
-b block-size Specify the size of blocks in bytes. Valid block-size values are 1024, 2048 and 4096 bytes per block. If omitted, the block size will be determined from the filesystem size and usage (see -T)
-I set the Inode size
IFS Drive doesn't support inodes larger than 128 bytes (source)
-L set the volume Label
-m Specify the percentage of the filesystem blocks reserved for the super-user (default is 5%)
-T usageType Specify how the filesystem will be used so that optimal parameters can be applied. Supported usageType values are listed in /etc/mke2fs.conf



  • mkfs.ext4 -I 128 -L ConPow -m 0 /dev/ConPow
  • mkfs.ext4 -L ConPow -m 0 -T ext4 /dev/sde1


mkfs.vfat -L ConPow /dev/ConPow
This command is not verbose, but don't worry