cat x y > y
будет таким же, как cp x y
(, потому что y
будет усечено временем cat
начала ), за которым следует cat y >> y
.
cat x >> x
будет бесконечным циклом, пока ваш диск не будет заполнен или вы не достигнете предела размера файла файловой системы -(, потому что он продолжает добавлять в конец файла, а затем считывает его обратно, чтобы добавить снова ).
Обратите внимание, что эта «ошибка» не означает, что cat
ничего не делала -, это просто уведомление о том, что этот конкретный файл был пропущен(в GNU cat
, по крайней мере). Вам «разрешено» запускать его, просто он, вероятно, не делал то, что вы хотели, и дает вам знать.
Проверка в GNU cat
для генерации этого сообщения состоит в том, что:
st_dev
)и поле inode(st_ino
)одинаковы как для выходного fd, так и для исследуемого входного файла; и Если все верно, распечатывается диагностика и выполняется переход к следующему входному файлу.
Некоторые версии команды cat
не выполняют эту проверку, и вы можете сделать это.Я могу представить себе систему, в которой они проверяют и не могут сказать, что это один и тот же файл, хотя я не могу -с руки рассказать вам об одном. В любом случае, это, вероятно, плохо кончится. Вполне возможно, что вместо цикла вы просто удвоите файл до сих пор, если реализация cat
делает только одну запись всего сопоставленного файла памяти -, но это просто меньший вид плохо.
Вы можете сделать это с помощью udev. Вам просто нужно поместить файл в /etc/udev/rules.d/
с соответствующим содержимым, например
KERNEL=="mydriver", OWNER="username", GROUP="groupname", MODE="0640"