В этой команде:
echo foo
echo
- бинарная (или встроенная команда), а foo
- первый аргумент.
Здесь:
/bin/sh -c echo foo
/bin/sh
- двоичный файл, первым аргументом которого является -c
, который сам принимает "командную строку" в качестве параметра. Это echo
в приведенном выше примере. Затем есть третий аргумент: foo
, который является аргументом для /bin/sh
, а не для echo
. Вот почему в вашем третьем примере:
/bin/sh -c 'echo foo; echo bar'
... печатаются оба аргумента. Вы процитировали аргумент. Итак: первый аргумент - -c
, а параметр к этому аргументу - 'echo foo; echo bar'
, который интерпретируется целиком как один аргумент; как "командная строка".
Утилиты резервного копирования, такие как rsnapshot, dirvish и Time Machine для MacOS, экономят место, создавая жесткие ссылки в каталогах резервных копий между файлами, которые не изменились с момента последнего резервного копирования. Таким образом, последние каталоги резервных копий кажутся больше, чем старые, но последние резервные копии повторно используют многие из одних и тех же файлов и, таким образом, экономят место.