Назад | Перейти на главную страницу

Невозможно полностью понять руководства по командам поиска Unix

Мне трудно читать синопсис руководства Find альтернативный текст http://files.getdropbox.com/u/175564/syntax_manual.png

Предположим, вы нашли каталоги с разрешениями 777. Pixelbeatпредложение

find -type d ! -perm -777

Моя OS / X дает следующее

find: illegal option -- t
find: illegal option -- y
find: illegal option -- p
find: illegal option -- e
find: d: No such file or directory

Вещи, в которых я не уверен, когда использую синопсис в качестве помощи

Приведем еще один пример руководства по Grep.

альтернативный текст http://files.getdropbox.com/u/175564/grep_manual.png

В нем есть четкий синопсис, хотя я бы использовал для него всего одну строчку. Я напрямую вижу, что мы можем

grep -r "masi" .

Как вы читаете руководства, аналогичные руководству Find?

Первое, что нужно понять, это то, что не все команды поиска одинаковы. То, что вы найдете в системе Linux, отличается от того, что вы найдете в системе на основе BSD, такой как OSX. Ссылка, которую вы собираетесь использовать, относится к Linux.

Для команды find опция '-type' является выражением и должна стоять после пути. Если вы прочтете страницу руководства, там будет описано, какие опции являются выражениями.

Восклицательный знак означает отрицание. То есть возвращает все, кроме вещей с разрешениями 777.

Команда "find -type d! -пермь -777"недопустимо, потому что вы не включили путь перед выражением. Вы можете использовать путь . если хотите текущий каталог.

Вернемся к основному вопросу. Иногда недостаточно просто прочитать краткую информацию о странице руководства, и вам действительно нужно прочитать остальное. Некоторые команды настолько мощны, что вы не сможете получить хорошее представление о том, как их использовать, если не прочитаете или хотя бы пролистаете весь документ. Также полезно проверить примеры, если они есть, а если их нет, зайдите в Интернет и поищите несколько примеров.

Вы не указали каталог

find . -type d ! -perm -777

На указанной вами странице руководства указано, что путь должен прийти раньше выражение. Так что в данном случае точка "." приходит раньше "-тип d ...". Последние не являются вариантами сами по себе. -тип и -перма являются частями логического выражения, которое find пытается оценить для каждого файла.

невозможно увидеть, где поставить параметр -type

-type не вариант, это выражение. Итак, он находится в конце списка аргументов. Если вы прокрутите страницу руководства вниз, вы найдете раздел под названием «Выражения», в котором подробно описаны все доступные варианты для этого аргумента.

не в состоянии понять, зачем нам нужны две строки для синопсиса: кажется, подчеркивается, что многие ПУТИ являются необязательными

Программа может быть вызвана с любым аргументом pathname или -f pathname. Как правило, любые аргументы в квадратных скобках необязательны. Но те, которых нет, являются обязательными. Вот почему ваша команда find не работает - потому что у нее есть «выражения» перед любым «именем пути». Точки указывают, что при желании можно использовать более одного аргумента имени пути.

почему Pixelbeat использует восклицательный знак в команде?

Я не вижу указанную команду в предоставленной вами ссылке. Но..

Восклицательный знак можно использовать для отмены следующего выражения. Итак, команда find . -type d найдет каталоги и find . ! -type d найдет все, кроме каталогов. Тем не менее, рекомендуется избегать восклицательного знака с помощью предшествующей обратной косой черты, чтобы ваша оболочка не интерпретировала его. Его также можно заменить на -not.

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

Иногда синопсис был слишком сложным, чтобы его можно было свести в одну строку. Кроме того, иногда результат одной версии значительно отличается от другой или является взаимоисключающим. Итак, в вашем примере grep:

grep [ОПЦИИ] ШАБЛОН [ФАЙЛ ...]

grep [ОПЦИИ] [-e ШАБЛОН | -f ФАЙЛ] [ФАЙЛ ...]

OPTIONS и FILE являются необязательными. Первая версия более распространена. Вторая версия предназначена для особых случаев, когда либо (-e) вам необходимо защитить узор, который начинается с минуса или (-f) шаблоны находятся в файле. Как видите, они отличаются от более простой первой версии. Синопсис мог быть таким:

grep [ОПЦИИ] [ШАБЛОН | -e ШАБЛОН | -f ФАЙЛ] [ФАЙЛ ...]

Но тогда это труднее читать, и это просто случай. Представьте себе более сложную, например mount, например. И, конечно, есть man страницы без резюме, потому что это было бы почти невозможно (например, bash).

Когда я прочитал man страницы, я ищу синопсис, который, кажется, наиболее точно соответствует тому, что я ищу. Если что-то очевидно, я просканирую (vgrep) или ищите термины или ключевые слова из синопсиса или исходя из моих знаний о том, чего я пытаюсь достичь. у меня есть less установить как мой man reader, поэтому я использую команду / для запуска поиска. Иногда, Я считаю, что info документация более полная или полезная, и я использую ее аналогичным образом.

Да, справочная страница для find на моей Mac OS X установка немного вводит в заблуждение. В синопсисе указано, что выражения идут в конце, но раздел, который логически будет озаглавлен как «ВЫРАЖЕНИЯ», вместо этого разделен на две части и озаглавлен как «ОСНОВНЫЕ» и «ОПЕРАТОРЫ». Я всегда читаю первые несколько строк «ОПИСАНИЯ», поэтому следует отметить, что они разъясняют здесь этот вопрос:

DESCRIPTION
     The find utility recursively descends the directory tree for each
     pathname listed, evaluating an expression (composed of the ``primaries''
     and ``operands'' listed below) in terms of each file in the tree.

Это должно в конечном итоге подсказать вам, что это странно, потому что его неопциональные параметры, начинающиеся с "-", на самом деле являются выражениями, которым должен предшествовать путь.

Самый полезный совет, который у меня есть для страниц руководства, - это изучить команды пейджера. По умолчанию кажется less и здесь вы можете использовать < идти на старт > идти до конца, и / или ? для поиска шаблона вперед или назад (например, «/ -тип»). Control-f и space перейти на страницу вперед и Control-b создает резервную копию страницы. А также есть xman где бы вы напечатали Control-s для поиска вашей страницы руководства под названием find. Мне также нравится apropos команда.