Я только что назвал эту команду ls -l | tail +3 . Во-первых, ls -s производит 3 строки, добавляя первую полосу трубопровода, а затем печатает имена каждого файла в отдельной строке. Как оно это делает? Это не имеет смысла.

Кроме того, я думал, что tail filename отображает последние 10 строк. Как + (и минус) играет в этом уравнении?

То же самое о голове? Как это работает?

3 ответа3

6

Из tail страницы хвоста :

Утилита tail отображает содержимое файла или, по умолчанию, его стандартный ввод в стандартный вывод.

Отображение начинается с позиции байта, строки или 512-байтового блока на входе. Числа, имеющие начальный знак плюс («+»), относятся к началу ввода, например, «-c +2» начинает отображение со второго байта ввода. Числа, имеющие начальный знак минус ("-") или не имеющие явного знака, относятся к концу ввода, например, "-n 2" отображает две последние строки ввода. Начальным местоположением по умолчанию является «-n 10» или последние 10 строк ввода.

Таким образом, в вашем случае, tail +3 (подразумевается -n) означает начало с 3-й строки ввода (ls -l) и вывод остальных. Например:

вывод ls -l :

total 0
-rw-r--r--  1 carl  staff  0 Oct 28 13:18 file1
-rw-r--r--  1 carl  staff  0 Oct 28 13:18 file2
-rw-r--r--  1 carl  staff  0 Oct 28 13:18 file3
-rw-r--r--  1 carl  staff  0 Oct 28 13:18 file4
-rw-r--r--  1 carl  staff  0 Oct 28 13:18 file5
-rw-r--r--  1 carl  staff  0 Oct 28 13:18 file6

ls -l | tail +3 выход хвоста +3 :

-rw-r--r--  1 carl  staff  0 Oct 28 13:18 file2
-rw-r--r--  1 carl  staff  0 Oct 28 13:18 file3
-rw-r--r--  1 carl  staff  0 Oct 28 13:18 file4
-rw-r--r--  1 carl  staff  0 Oct 28 13:18 file5
-rw-r--r--  1 carl  staff  0 Oct 28 13:18 file6

Тот же вывод, только с обрезанными первыми двумя строками.

4

Из справочной страницы:

Если первый символ N (число байтов или строк) представляет собой «+», выведите печать, начиная с N-го элемента в начале каждого файла, в противном случае выведите последние N элементов в файле. N может иметь достаточный множитель: b 512, k 1024, m 1024 * 1024.

2

Ответ на:

Во-первых, ls -s производит 3 строки, добавляя первую полосу трубопровода, а затем печатает имена каждого файла в отдельной строке. Как оно это делает? Это не имеет смысла.

Ответ в том, что команда ls просматривает свой стандартный вывод и проверяет, подключен ли он к tty. Если это так, то он форматирует для отображения. Если это не так (например, вывод представляет собой файл или канал), то он печатает одну запись на строку.

  • Опция ' -C ' заставляет вывод нескольких столбцов (как будто идет к терминалу).
  • Опция ' -1 ' вызывает вывод из одного столбца (как если бы он шел в трубу).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .