Постоянно переключаясь между Linux и FreeBSD, я натыкаюсь на это. Когда я делаю:
less something.tgz
Системы Linux (ну ... Ubuntu, если быть точным) показывают мне список файлов, чего я обычно и хочу, в то время как FreeBSD показывает двоичное содержимое. Как такое поведение (отображение содержимого файла) достигается в Linux и можно ли воспроизвести его в системах FreeBSD?
Я собираюсь быть здесь капризным стариком, который кричит: «Эй, ребята, слезайте с моей лужайки!» но...
Вы делаете это неправильно.
Все меньше и больше двух распространенных программ пейджера предназначены для запуска в конце строки передаваемых команд. Эти программы не предназначены для чтения файлов произвольного типа, таких как архив cpio или tar-архив, или зашифрованный gzip tarred или зашифрованный bzip2ed файл.
Изучите способ работы с unix, и вы начнете понимать, что происходит, и с множеством других вещей. Таким образом вы узнаете о таких вещах, как stdin, stdout и stderr.
gzip -d <файл | tar -tvf - | Меньше
Вы меня потом поблагодарите.
Вы можете увидеть что-нибудь полезное с zless somefile.tgz
но я думаю, что вы действительно хотите сделать следующее:
tar ztvf somefile.tgz |less
который будет работать на всех системах. Обратите внимание, что t просто сообщает вам, что есть в отличие от x, который извлекает файлы.
Взгляните на страницу руководства lesspipe
(или lessopen
) в коробке с Ubuntu.
В версии Debian / Ubuntu все, что вам нужно сделать, это добавить
eval "$(lesspipe)"
на ваш .bashrc
.
Во FreeBSD вы найдете lesspipe.sh
скрипт в отдельном порту с именем lesspipe, который использует версию из Sourceforge (однако у него нет удобной настройки, описанной выше - на странице руководства less есть больше информации).
Вот другая версия сценария, который я нашел на свежее мясо: lesspipe, дополнение для браузера less
Это делается с помощью препроцессора lessopen:
michael@challenger:~> echo $LESSOPEN
lessopen.sh %s
michael@challenger:~> which lessopen.sh
/usr/bin/lessopen.sh
michael@challenger:~> less logs.zip
Archive: ./logs.zip
Length Method Size Ratio Date Time CRC-32 Name
-------- ------ ------- ----- ---- ---- ------ ----
17484 Defl:N 2269 87% 03-30-09 22:59 03bf67d6 20090330/Logs-20090330.CSV
...
Удалите переменную среды, и вы увидите, что меньше ведет себя, как в базовой системе:
michael@challenger:~> unset LESSOPEN
michael@challenger:~> less logs.zip
"logs.zip" may be a binary file. See it anyway?
Проверьте свою страницу руководства less (1), чтобы узнать, поддерживает ли она LESSOPEN.
Я никогда не видел эту работу на .tgz
файлы, только .gz
текстовые файлы, но, возможно, это так. Во всяком случае, на многих дистрибутивах Linux less
определит, сжат ли файл с помощью gzip, и распакует поток по мере его отображения. Я не могу говорить о FreeBSD, но, по крайней мере, на OpenBSD вам нужно использовать zless
вместо этого, если вы просматриваете сжатый текстовый файл. Я полагаю, что он также включен во FreeBSD или, по крайней мере, доступен из дерева портов.