что делает хвост + число? Как насчет головы

1175
Andrei Chikatilo

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

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

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

0
Что говорит ваша `man` страница? Когда вы набираете 'man tail', какой ответ вы получаете? Какую часть этого вам нужна помощь понимания? 14 лет назад 10

3 ответа на вопрос

6
Carl Norum

Со 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 выход:

-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
Alexander Torstling

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

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

Избитый Карлом, но мне больше понравилась формулировка на моей странице руководства, поэтому оставил все как есть. 14 лет назад 0
2
Jonathan Leffler

Ответ на:

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

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

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

Похожие вопросы