Как вы помните параметры команды? [закрыто]

13

Мне интересно узнать, какой трюк вы используете, чтобы запомнить параметры для различных команд? Поиск man-страниц все время занимает много времени и не такой крутой!

Атула
источник
2
Среди прочего: unix.stackexchange.com/questions/138720/… удобен для создания индивидуальной сводки вещей, которые я обычно облажаю или забываю. Кстати, чем больше вы читаете справочные страницы, тем больше вы цените их.
Златовласка
Некоторое время я чувствую, что все забываю. Мне было интересно, если я единственный, кому трудно вспомнить все полезные опции на макушке головы ... Ваше предложение кажется хорошим решением ... Спасибо!
Атул
3
Чтение manстраниц очень круто ... :)
jasonwryan
1
Q: Как вы добираетесь до Карнеги-холла ? A: Практика!
evilsoup
4
Я думаю, что это заслуживает некоторого XKCD: xkcd.com/1168
Darkhogg

Ответы:

39

Хитрость проста: просто нет. Это пустая трата времени и просто не нужно. Запоминание опций команд не является особенно полезным навыком. Гораздо важнее понять, как все работает в целом, и иметь смутное представление о том, какие инструменты существуют в первую очередь и для чего вы их используете. Очень важным навыком здесь является умение узнавать о вещах, которые вы еще не знаете.

Страницы руководства занимают много времени? Не так. Вы не должны их читать - по крайней мере, не каждый раз - есть функция поиска. Так что, если я не помню, какая загадочная опция была для hdparmотключения таймера простоя на некоторых дисках WD, я делаю, man hdparmи /idle3да, и это было -J. Подобные вещи выглядят так быстро, что я даже не помню, как делал это потом.

Представьте, что кто-то запоминает все hdparmварианты. Что за трата времени.

Хорошо, если вы просто запомнили опции, потому что часто используете их. Это происходит автоматически, даже не задумываясь об этом. Но на самом деле сознательно тратить время на их запоминание ... для чего это должно быть хорошо? Бумажный тест?

frostschutz
источник
4
Upvoted: навык находит то, что вам нужно, а не лишнюю память. man hdparm | less -p idle3это также удобный способ перейти к желаемому сроку ...
jasonwryan
Я полностью согласен с этим ответом, хотя думаю, что стоит подчеркнуть, что нормально запомнить несколько наиболее распространенных вариантов обычных программ только потому, что вы используете их так часто. Как rm -i -f -r, ln -s, df -s -h, cp -r -i, ls -l -h -aи т.д. (список варьируется от человека к человеку).
Дэвид Z
8

У Zsh есть функция run-help , по умолчанию связанная с Alth. С помощью этой функции вы можете начать ввод команды со многими или сложными опциями, которые трудно запомнить, rsyncнапример, например, и затем manоткрыть страницу этой команды . Так:

 rsync Alth

прочитайте manстраницу и определите, какие переключатели вам нужны, нажмите, qа затем вы вернетесь в командную строку, где именно остановились, и готовы выполнить команду с необходимыми параметрами:

rysnc -azP file dir/

Как отмечает вики:

Эта функция может быть дополнительно настроена путем определения вспомогательных функций формы run-help-command. В стандартном выпуске доступно три таких функции: run-help-git, run-help-svk и run-help-svn.
jasonwryan
источник
Точно так же bashимеет, bash-completeкоторый предоставит много параметров параметров для большого количества команд.
ericx
2
@ericx "Аналогично" может быть немного преувеличено ... Zsh также имеет завершение, это шаг вперед по сравнению с этим.
jasonwryan
эй ... я слышал, как люди хвастаются, но я никогда не пробовалzsh
ericx
Кроме того, bashзавершение @ericx не поддерживает добавление описаний в список завершения или группирование записей ( --classify -F -- append file type indicatorsнапример, в завершении GNU ls в zsh), поэтому оно не так полезно, как в zsh.
Стефан Шазелас
** root @ milicent ** ~ / tmp ** Вт, авг 05 09:24:55 # pkg info (-e -d -f -l -o -p -D) -r [Отображает обратные зависимости] (-e -d -r -f -o -p -D) -l [Отображает все файлы] (-e -d -r -l -f -p -D) -o [Отображает источник] (-e -d -r - l -o -f -D) -p [Отображает префикс] (-e -d -r -l -o -p -D) -f [Отображает полную информацию] (-e -d -r -l -o -p -f) -D [Отображает сообщение] (-e -f -r -l -o -p -D) -d [Отображает зависимости] (-f -d -r -l -o -p -D) -e [Возвращает 0, если установлено <pkg-name>] (-g -X -a -F) -x [Обрабатывать пакеты, соответствующие шаблону регулярного выражения] (-g -x -X -F) -a [Обрабатывать весь пакет
ericx
4

Использование очень длинной истории команд и прохождение через нее очень полезно.

Я в основном собираю все файлы истории оболочки и прохожу через них.

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

Volker Siegel
источник
4

Большинство команд имеют --help для быстрого ознакомления, и обычно этого достаточно, чтобы напомнить, что я когда-то знал.

Тем не менее, есть привычка писать --help вместо -h или даже - ?. Вы никогда не знаете, что такое -h, прежде чем смотреть вывод об использовании или страницу руководства. В худшем случае -h может быть короткой рукой для --hazardous-автоматического-уничтожения.

kerolasa
источник
2
... Большинство команд в системах GNU . Команды в системах Unix обычно не имеют --help. -?потребности ссылки с zsh, csh, tcshили , fishили , если есть файлы, имена которых будут -следует один символ в текущей директории. -:может быть предпочтительнее там.
Стефан Шазелас
Ну ... многие системы без GNU имеют настолько ужасающие результаты использования, что даже смотреть бессмысленно. В этом случае смотрите справочные страницы и удачи в запоминании, потому что больше ничего не будет работать.
Kerolasa
«Тем не менее, имеют привычку писать». Пропущенное слово?
Фахим Митха
1

Один из вариантов, который мне нравится, - создавать псевдонимы с одинаковыми или похожими параметрами, например

alias rmi='rm -i'
alias rmiv='rm -iv'
alias rmv='rm -v'
alias cpr='cp -r'
alias cprv='cp -rv'

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

Другой подход с псевдонимами состоит в том, чтобы выбрать наиболее распространенные параметры и создать супер короткий псевдоним, который их использует. Например, lsя почти всегда так делаю, lи это потому, что у меня есть:

alias l='ls -alFtrG'

Другой вариант - просто ввести нужные вам опции в базовую команду, например:

alias ls='ls -F --color=always'

Наконец практика, практика, практика и терпение. Продолжайте вводить общие параметры, и вы в конечном итоге выучите их. Обычные в днях, другие в неделях, и да, некоторые становятся годами, чтобы стать вам известными. Думайте об этом как о удовольствии в том программировании Unix, которое будет продолжать развлекать вас в течение долгого времени.

Другой вариант, который мне нравится, - это псевдоним, который облегчает поиск в моей истории, и для этого у меня есть два похожих псевдонима:

alias hg='history | tail -200 | grep -i'
alias hga='history | grep -i'

Это позволяет мне искать использование команды, например:

hg lsпокажет все недавние случаи использования ls из истории
hga ls, покажет все случаи использования ls из всей моей истории.

Я разработал HG, обнаружив, что HGA имеет тенденцию показывать слишком много.

Майкл Даррант
источник
4
Если ОП не может вспомнить, что rm -ivделает, ОП, вероятно, также не вспомнит, что rmivделает. Я не думаю, что проблема в дефисе.
tobyink
Я бы лично псевдоним , rm -ivчтобы safe_deleteилиrm_prompt
slebetman
Спасибо вам, ребята! Думаю, я много беспокоился о том, что вспомнил больше, чем узнал больше ... Я научусь, когда использовать оружие, а не узнавать, каковы размеры и скорость пули! К счастью, здесь так много хороших людей из Linux .. Приветствия Unix / Linux!
Атул
1

Я обычно делаю:

man ${CMD} | grep 'what was I thinking about?'

Или какой-то их вариант. С некоторыми greps вы можете указать -C / A / B для контекста , после и до соответственно. Если нет, nlи sedможет быть довольно хорошо подобраны:

man hdparm |                      #hard to forget
nl -bp'idle3' -nln -w1 |          #I had to grep man to put this together
sed -n '/^[0-9]/{N;N;N;s///p}'    #no print until line begins w/ number, next,next,next

           Drive's "idle3" timeout value.  This timeout
            controls how often the drive parks its heads
            and  enters  a  low power consumption state.
            The factory default is  eight  (8)  seconds,
           zero (0) to disable the WD idle3 timer  com‐
            pletely (NOT RECOMMENDED!).

     -k     Get/set  the "keep_settings_over_reset" flag

Те же самые приемы работают с --helpменю, если они у вас есть, но вам может понадобиться сделать это, ${CMD} --help 2>&1 | ..filter..потому что это довольно стандартная практика для печати таких вещей stderr.

Во всяком случае, я думаю, мораль этой истории, помните, по крайней мере, man и grep. Может, не парься по остальным.

mikeserv
источник
1
+1. Я часто обращаюсь к grepстраницам при поиске конкретной функции, это довольно удобно.
Джон У. С. Смит,
-A -B -CОпции grep тоже могут быть полезны, напримерman bash | grep -A 25 PROMPTING$