Это похоже на аппаратную проблему - или диски или контроллер. С тех пор существуют ошибки на обоих ad4
и ad6
, это может быть контроллер. Я рекомендую создать резервную копию любых важных данных как можно скорее.
Вы могли бы попытаться установить sysutils/smartmontools
видеть, сообщают ли о каких-либо УМНЫХ ошибках.
Относительно Вашего Использования оперативной памяти, которое кажется странным. Даже если бы Вы используете дедупликацию v28 ZFS, я не ожидал бы, что файловая система на 1.5 ТБ поднимет так много RAM. Вы могли бы попытаться работать top -S -osize
видеть, что использует память.
От man grep
страница (на Debian):
ОПИСАНИЕ
grep searches the named input FILEs (or standard input if no files are named, or if a single hyphen-minus (-) is given as file name) for lines containing a match to the given PATTERN. By default, grep prints the matching lines.
В первом случае, grep
открывает файл; во втором оболочка открывает файл и присваивает его стандартному входу grep
, и grep
не будучи переданным никакой аргумент имени файла предполагает, что ему нужен к grep его стандартный вход.
grep
может grep больше чем один файл ¹.grep
может отобразить имя файла где каждое возникновение line
найден.grep
открывает его. И если файл не может быть открыт, grep
даже не назван (который для некоторых команд - возможно, нет grep
- может иметь большое значение).grep line < in > out
, если in
не может быть открыт, out
не будет создан или не усеченный.-
или имена файлов, запускающиеся с -
) ².<file
где угодно на командной строке для показа команды текут более естественно, как <in grep line >out
если Вы предпочитаете.косметический: с GNU grep
, можно выбрать что маркировку использовать перед согласующим отрезком длинной линии вместо просто имени файла как в:
<file grep --label='Found in file at line' -Hn line
С точки зрения производительности, если файл не может быть открыт, Вы сохраняете выполнение grep
при использовании перенаправления, но иначе для grep
Я не ожидаю большого различия.
С перенаправлением Вы сохраняете необходимость передать дополнительный аргумент grep
, Вы делаете grep
аргумент, анализирующий немного легче. С другой стороны, оболочке будет нужен (по крайней мере), дополнительный системный вызов dup2()
дескриптор файла на дескриптор файла 0.
В { grep -m1 line; next command; } < file
, grep
(здесь GNU grep
) захочет seek()
назад к сразу после согласующего отрезка длинной линии так next command
видит остальную часть файла (это должно будет также определить, seekable ли файл или не). Другими словами, положение в stdin - другой grep
вывод. С grep -m1 line file
, это может оптимизировать это, это - то меньше вещи для grep
заботиться о.
¹ С zsh
, можно сделать:
grep line < file1 < file2
но это делает эквивалент cat file1 file2 | grep line
(не вызывая cat
утилита), и так менее эффективно, может вызвать беспорядок, если первый файл не заканчивается в символе новой строки и не сообщит, в котором регистрируют шаблон, найден.
² В случае ksh93
и bash
хотя, существуют файлы как /dev/tcp/host/port
(и /dev/fd/x
в некоторых системах в bash
) который при использовании в цели перенаправлений прерывания оболочки для особых целей вместо того, чтобы действительно открыть файл в файловой системе (хотя обычно, те файлы не существуют в файловой системе). /dev/stdin
служит той же цели как -
распознанный grep
, но по крайней мере, здесь это более правильно namespaced (кто-либо может создать названный файл -
в любом каталоге, в то время как только администраторы могут создать названный файл /dev/tcp/host/port
и администраторы должны знать лучше).
Ответ покрытиями StephaneChazelas grep(1)
, и большинство команд происхождения Unix прокладывает себе путь, но не все. Это стандартно для чтения любого из стандартного входа (с клавиатуры, из файла, перенаправленного через < file
, или от вывода, переданного по каналу другой командой, глупым примером ls * | grep '^ab*c$'
), или из файла (файлов), данного как аргументы, как grep comment file1 file2 file3
. Некоторые команды используют конвенцию там, которую назвал файл -
стандартный вход, таким образом, можно сказать make-middle | cat head - tail
получить поток с head
, безотносительно gen-middle
генерирует, сопровождаемый tail
. Это дизайном, для предоставления гибкости в использовании команд.
Который лучше? Пока это работает, cmd file
короче, чем cmd < file
; могла быть крошечная разница во времени между оболочкой, делающей файл frobbing (<
) и команда, делающая его отдельно, но вероятно непримечательный, если Вы целый день не делаете ничего иного. Это будет зависеть от соображений как профессионалы, упомянутые в ответе Stephane.