Комментарии 224
man, cd, sudo — малоизвестные команды?! Либо у автора дурацкий юмор такой — либо он сам плохо Линукс знает…
Ну, я с линуксом работаю с начала двухтысячных, а о варианте «cd -» и «sudo !!» не знал. Так что вполне себе интересные команды.
Еще трюк с cd: если вы в директории ~/dev/project/production/app/controllers и вам нужно в ~/dev/project/development/app/controllers, можно написать
cd production development
. Другими словами, с двумя параметрами cd работает как replace.хм. А какой шелл? В debian не работает.
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
zsh 5.0.5 (x86_64-apple-darwin14.0), но у меня работало всегда и везде.
"!!" вообще полезная штука. Если вдруг забыл набрать cd перед путем до директории, можно сделать такой же трюк, как и с sudo, т.е. «cd !!» :)
Например:
Например:
[user@comp /]$ /home/user/projects
bash: /home/user/projects: Is a directory
[user@comp /]$ cd !!
cd /home/user/projects
[user@comp projects]$
В качестве альтернативы можно использовать zsh и вообще не писать cd =)
ещё можно использовать Esc, Dot (.), для подстановки последнего аргумента последней команды, иногда удобней чем !!:
$ ls -al /path/to/directory
$ cd <ESC> <.> # преобразуется в cd /path/to/directory
Ну так!!! это фишка bash, а не sudo… так что ее можно с любой командой использовать… или вообще без команды (просто вызов второй раз запущенной до этого команды)
Это фишка zsh. Ещё Вы можете написать cd ~/d/p/p/a/c и точно так же попадёте в ~/dev/project/production/app/controllers
Но sh и bash так не умеют ;)
Но sh и bash так не умеют ;)
Это только для zsh.
Спасибо, не знал.
Очень часто необходима данная команда при работе с сайтом =)
Очень часто необходима данная команда при работе с сайтом =)
Еще есть pushd/popd для работы со стеком директорий:
humbug@pc ~ $ pushd /usr/
/usr ~
humbug@pc /usr $ popd
~
humbug@pc ~ $
Ну хорошо.
Но
А man-то, man? Как вообще он мог попасть в статью под заголовком «15 малоизвестных команд unix»?
cd -
знают не все.Но
sudo !!
— это же не отдельная команда! Это комбинация общеизвестного sudo
— и символа повтора предыдущей команды !!
. Малоизвестным является именно второй — но он не является командой.А man-то, man? Как вообще он мог попасть в статью под заголовком «15 малоизвестных команд unix»?
man — не малоизвестная команда, ее вы найдете в любом учебнике Unix'а, однако я бы хотел обратить ваше внимание на некоторые ее особенности.
В общем, дело не в самом man-е, а в паре необычных man-страниц.
Кроме
!^ — первый аргумент предыдущей команды;
!$ — последний аргумент предыдущей команды;
!* — все аргументы предыдущей команды;
!-2 — вторая с конца команда.
!!
есть и другие, не менее полезные, команды для работы с историей!^ — первый аргумент предыдущей команды;
!$ — последний аргумент предыдущей команды;
!* — все аргументы предыдущей команды;
!-2 — вторая с конца команда.
ещё можно открыть
history
а потом !номер_комманды_в_истории
. Удобно искать иногда через history | grep
вроде бы последний аргумент предыдущей команды $_ или это только в bash?
!:A-B – аргументы с A по B в предидущей команде
Вы придираетесь. Считайте «man man» за команду, а «man» за утилиту.
Немногие знают, что man-страницы можно читать и без команды man:
Соответственно, в man, как и в less, можно пользоваться w и z для пролистывания страниц, / для поиска текста и т.д.
zcat /usr/share/man/man1/man.1.gz | nroff -man | less
Соответственно, в man, как и в less, можно пользоваться w и z для пролистывания страниц, / для поиска текста и т.д.
Вспомнил — можно в процессе набора команды нажать Alt+h (stands for help) и попасть и man этой команды. А потом, когда выйдете из man'а, ваша набранная строка останется нетронутой. Удобно, когда забыли какие-то ключи, например. Рекомендую попробовать
git log Alt+h
Вы в каком терминале так делаете? У меня в стандартном терминале MATE не работает Alt+H
Оказалось, это только в ZSH. Переходите, не пожалеете. Рекомендую вот этот «фреймворк», как они себя называют. github.com/sorin-ionescu/prezto
Ещё меньше людей знают, что все три команды настраиваются в /etc/man.conf, и в качестве второй у меня вместо nroff скрипт для обхода какого‐то бага с русскими руководствами при установке пакета в paludis.
Если быть более точным, то вместо первой может быть несколько распаковщиков (выбираются по расширениям, не по mime‐типу от
И, кстати, less вполне может сделать всё за вас:
Если быть более точным, то вместо первой может быть несколько распаковщиков (выбираются по расширениям, не по mime‐типу от
file
).И, кстати, less вполне может сделать всё за вас:
less /usr/share/man/ru.UTF-8/man1/rview.1.xz
показывает читаемую страницу. Зависит от каких‐то настроек (которые в Gentoo по‐умолчанию, а где‐то ещё нет) и является одной из причин, по которой я практически никогда не использую less filename
(вторая — suffix alias cat file L
удобнее, если вы хотите заменить L
на что‐то ещё).Ну это именно и есть less, именно он отрабатывает w,z,/ и прочее. Достаточно в баше написать export PAGER=less а можно даже cat
ximaera@endeavour:50:~#515$ LC_ALL=C PAGER=less man man | col | grep -A2 -- --pager=
-P pager, --pager=pager
Specify which output pager to use. By default, man uses pager -s. This option overrides the $MANPAGER environment variable, which in turn overrides the $PAGER environment variable. It is not used in conjunction with
-f or -k.
ximaera@endeavour:50:~#516$
Вот вам сразу три способа читать man без стандартного пейджера :-)
В качестве бонуса: вот так можно использовать vim со всеми его плюшками в качестве MANPAGER:
export MANPAGER="/bin/sh -c \"unset MANPAGER;col -b -x | \
view -R \
-c 'set ft=man nomod nolist' \
-c 'set nonumber' \
-c 'map q :q<CR>' \
-c 'map <SPACE> <C-F>' -c 'map b <C-U>' \
-c 'nmap K :Man <C-R>=expand(\\\"<cword>\\\")<CR><CR>' -\""
> sudo!!!
Имхо, так лучше вообще не делать. Причин две — логирование в хистори конкретно того, что было выполнено (а это может иногда пригодиться), и вторая — имхо, важно видеть, что именно собираешься выполнить под рутом _перед выполнением этого_.
Имхо, так лучше вообще не делать. Причин две — логирование в хистори конкретно того, что было выполнено (а это может иногда пригодиться), и вторая — имхо, важно видеть, что именно собираешься выполнить под рутом _перед выполнением этого_.
sudo часто забываешь написать, но при этом понимаешь, что будет выполняться из-под администратора. А в логах будет и предыдущая строка.
У меня лично был один раз случай, когда из-за недосыпа подобным образом выполнил совсем не то, что было нужно. Благо были бэкапы, но все это стоило мне много нервов.
С тех пор я четко придерживаюсь правила — на боевых серверах (либо у клиентов) под рутом — всегда перед нажатием enter визуально проверять то, что сейчас будет сделано.
С тех пор я четко придерживаюсь правила — на боевых серверах (либо у клиентов) под рутом — всегда перед нажатием enter визуально проверять то, что сейчас будет сделано.
По моему тут безопасней из хистори отмотать нужную команду и начало sudo прописат) А то вдруг, вы случайно перед прошлой командой пробел поставили;)
mva ~ whoami # Enter
mva
mva ~ sudo!!! # Enter
mva ~ sudo whoami # (т.е. сначала подставилось для проверки)
root
mva ~ echo $0 # :)
zsh
В history запишется именно полная команда.
В zsh есть опция HIST_VERIFY, которая решает обе проблемы. Если она включена, по enter команда на исполнится, а появится в развернутом виде.
$ rm -rf /
$ sudo !! <RETURN>
$ sudo rm -rf /
В комиксе про sudo!!! картинка не та.
Еще в секцию про man очень бы стоило добавить, просто как good practice, читать маны на «опасные» команды. именно man, а не -h/--help
Сейчас вроде этот «баг» исправили, но вот в начале 2000 кажется, я очень повеселился, когда хотел сделать отложенный ребут, посмотреть ключики для него и моментально отправил сервак в ребут командой reboot --help. куищще тогда был написан так, что вне зависимости от ключей тупо моментально ребутал машину :-)
вы уверены, что ключик -h у команды rm не означает «удалить все хардлинки с диска»? а у fdisk — «прописать какую-нибудь дефолтную таблицу разделов на всех хард-диски»?
Сейчас вроде этот «баг» исправили, но вот в начале 2000 кажется, я очень повеселился, когда хотел сделать отложенный ребут, посмотреть ключики для него и моментально отправил сервак в ребут командой reboot --help. куищще тогда был написан так, что вне зависимости от ключей тупо моментально ребутал машину :-)
вы уверены, что ключик -h у команды rm не означает «удалить все хардлинки с диска»? а у fdisk — «прописать какую-нибудь дефолтную таблицу разделов на всех хард-диски»?
Alt+. это последний аргумент предыдущей комманды. Например:
vim /usr/local/etc/nginx/nging.conf # Decided to make a backup
cp Alt+. Alt+..backup
вот это полезная штука, да и вообще, выучить хоткеи, и работа с терминалом в разы просто ускоряется
Спасибо, не знал.
Или «Ecs .».
Блин, круто, спасибо.
Кстати в макос не работает хоткей, но работает «Esc .», как выше преложили.
Кстати в макос не работает хоткей, но работает «Esc .», как выше преложили.
Если у вас iTerm2, нужно включить Settings — Profiles — Keys — Left option acts as +Esc.
В стандартном Terminal тоже можно: Preferences -> Settings, выбрать Keyboard tab. Поставить галочку «Use Option Key as Meta».
А еще есть ^R для поиска в истории.
Затупил и жал Alt+ (по сути получается Alt + =) — оказывается, аналог двойного нажатия tab (показывает варианты продолжения).
Есть же $_?
s1:~$ echo a
a
s1:~$ echo $_
a
$_
я уже упомянул. А ещё раньше — ivanko (http://habrahabr.ru/post/228999/#comment_7756763). Повторю здесь: с !$
и <A-.>
в истории сохранится тот аргумент, с которым вы запустили команду. С $_
в истории сохранится $_
. Иногда это именно то, что вы хотите, иногда нет.НЛО прилетело и опубликовало эту надпись здесь
поправил, но в оригинале именно Unix был
справедливости ради, mtr есть в портах: www.freshports.org/net/mtr
У меня и Gentoo Linux их нету. :)
С pkill надо бы поаккуратнее, потому что она принимает не имя приложения, а паттерн, и пытается замочить все процессы которые под этот паттерн подходят.
Специально для админов-новичков есть команда killall5, которая так соблазнительно выглядит, когда нет установленного killall… Впрочем, оставим эту детскую граблю для личного удовольствия каждого.
когда нет установленного killallИ так тоже бывает?.. Черт, это же хуже, чем когда в «семерке» телнета не стало!
На бездисковых системах часто экономят на всём (даже man'ов нет) — каждый установленный пакет — отожранная память у сервера.
В busybox же команда killall есть… Или для бездисковых систем еще и busybox компилируют, выкидывая лишние аплеты?
Особенно когда пытаешься уместить openwrt в 4мб флеш-памяти) А если всего 2мб)
Правда выкидывать куски бизибокса — все равно экономия на спичках
Правда выкидывать куски бизибокса — все равно экономия на спичках
Нет, в нормальных бездисковых серверах (я про крупных товарищей, до 128Гб памяти на борту) таким не занимаются. Но и лишнего в загружаемый image тоже не ставят — надо — можно добавить.
память
думаю, что немного найдется линуксоидов, которые не наступили на эту граблю в первый раз усевшись поадминить солярку.
Мне повезло, у меня это оказался workstation. Но впечатления незабываемые.
Мне повезло, у меня это оказался workstation. Но впечатления незабываемые.
Только не пользуйте killall в Solaris — там он полностью соответствует своему переводу.
yes обычно нужна, чтобы подтверждать выполнение каких-то операций, если мне память не изменяет? т.е. что-то вроде
yes | <команда, запрашивающая ввод yes>
Половина команд — мусор. Кого волнует ddate? Да и, честно, кого в шелле волнует факторизация чисел?
nl не нужен, cat -n отлично его заменяет. Более того, -n умеет и grep, что покрывает само по себе 90% случаев, когда нужна нумерация.
nl не нужен, cat -n отлично его заменяет. Более того, -n умеет и grep, что покрывает само по себе 90% случаев, когда нужна нумерация.
Потому-то команды и являются малоизвестными, очевидно же…
Согласен с вами, за исключением команды factor. Она бывает очень полезна, например, при программировании, потому что другой возможности быстро разложить число на множители или проверить его на простоту, не пользуясь внешними программами, я не знаю.
Задачи безумно далёкие от шелла. Шелл — ДСЛ под задачи юникса. Понятно, что конкретная программа может делать что угодно — хоть Коран цитировать, но это будет явно за областью нормального применения шелла и точно за пределами coreutls/fileutils.
Ctrl+u удаляет текущий текст в командной строке в специальный буффер. Ctrl+y вставляет из него. Удобно когда вы что-нибудь забыли. Например:
git commit -m 'Initial commit' # Here we remembered that we didn't add files to staging
Ctrl+u
git add .
Ctrl+y # Now we have our git commit message again.
Всегда пользовался ^U, но про буфер — не знал. Спасибо!
НЛО прилетело и опубликовало эту надпись здесь
Будет справедливо напомнить, что это фича не командной строки, а библиотеки readline, которую и использует командная строка. Вот еще немного возможностей её использования.
Кстати, сама библиотека проста для встраивания, есть возможность повесить свой обработчик для автодополнения по табу и еще 100500 фич.
Кстати, сама библиотека проста для встраивания, есть возможность повесить свой обработчик для автодополнения по табу и еще 100500 фич.
Readline по возможностям не сравнима с zle — я, например, могу написать эмуляцию
Жалко только, что zle нельзя никуда встроить.
К чему это я: утверждение, что командная строка использует readline в общем случае не верно. Бо́льшая часть того, что я ввожу, вводится в zle. Все возможности readline там есть, а раскладка по‐умолчанию содержит практически всё (некоторые клавиатурные сочетания определены несколько по‐другому), что есть в раскладке emacs из readline.
<C-o>
из Vim (<C-o>
запускает одну команду нормального режима из режима вставки, и потом возвращается в режим вставки) (собственно, и написал). Причём бо́льшая часть работы переложена на уже имеющуюся раскладку vicmd
. Здесь есть подсветка синтаксиса (жаль только что не встроенная — встроен только API для подсветки регионов), возможность переопределить всё и вся (один человек ради интереса написал аналог ipython как надстройку над zsh: github.com/Valodim/zsh-python-mode (перед тем как жаловаться, прочтите README)), множество раскладок (по‐умолчанию обычные три и как минимум одна специальная: viins и vicmd для поддержки vi режима, emacs для соответствующего режима и специальная isearch, используемая для <C-r>
).Жалко только, что zle нельзя никуда встроить.
К чему это я: утверждение, что командная строка использует readline в общем случае не верно. Бо́льшая часть того, что я ввожу, вводится в zle. Все возможности readline там есть, а раскладка по‐умолчанию содержит практически всё (некоторые клавиатурные сочетания определены несколько по‐другому), что есть в раскладке emacs из readline.
часто пользуюсь фиксом "^src^dst" при опечатках:
ещё, когда всё пропало(какая-нибудь утилита загадила консоль бинарными символами): reset
Два в одном, посмотреть смонтированные файловые системы, и улучшить вывод табами:
arth@arth:~$ lq /
lq: команда не найдена
arth@arth:~$ ^lq^ls
ls /
bin dev home ...
ещё, когда всё пропало(какая-нибудь утилита загадила консоль бинарными символами): reset
Два в одном, посмотреть смонтированные файловые системы, и улучшить вывод табами:
arth@arth:~$ mount | column -t
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/cgroup type tmpfs (rw)
...
Чтобы вернуться к предыдущей или следующей команде, используйте Ctrl+p и Ctrl+n вместо стрелочек. Так вы сможете не отрывать руки от клавиатуры. И не забывайте о поиске по Ctrl+r.
Чуть не поставила автору минус :)) Но потом прочитала про factor, yes, и man units. Спасибо :)
1) Не все почему то знают что можно сказать просто «cd» и попасть в свой хомяк, а можно сказать «cd ~username» и попасть в хомяк username'а.
2) rev — переворачивает строчку задом на перед.
3) Команду exit\logout можно заменить на Ctrl+D (в большинстве современных шелов).
4) Ctrl+Shift+3 — ставит в начало строки знак комментария и нажимает Enter. Удобно когда пишем какую то длинную команду и тут возникает вопрос — вам нужно обработать условно "/home/username/www" или "/home/username/public_html". Обычное решение: открыть вторую вкладку в терминале, снова зайти на сервер, посмотреть, вернуться в первую, дописать. Неудобно потому что снова коннектится надо, а ключа нет, потому что вы вошли по паролю, который у вас в почте, которая на другом экране, и все стирать (жать Ctrl+C) не хочется потому что уже почти всю команду вписали, осталось совсем чуть чуть. А тут жмем Ctrl+Shift+3, смотрим путь, нажимаем вверх, дописываем команду, Enter, удивляемся почему не сработало, наживаем вверх, Home, Del (удаляем символ комментария в начале строки) Enter, радуемся.
2) rev — переворачивает строчку задом на перед.
$ echo abc | rev
cba
$
3) Команду exit\logout можно заменить на Ctrl+D (в большинстве современных шелов).
4) Ctrl+Shift+3 — ставит в начало строки знак комментария и нажимает Enter. Удобно когда пишем какую то длинную команду и тут возникает вопрос — вам нужно обработать условно "/home/username/www" или "/home/username/public_html". Обычное решение: открыть вторую вкладку в терминале, снова зайти на сервер, посмотреть, вернуться в первую, дописать. Неудобно потому что снова коннектится надо, а ключа нет, потому что вы вошли по паролю, который у вас в почте, которая на другом экране, и все стирать (жать Ctrl+C) не хочется потому что уже почти всю команду вписали, осталось совсем чуть чуть. А тут жмем Ctrl+Shift+3, смотрим путь, нажимаем вверх, дописываем команду, Enter, удивляемся почему не сработало, наживаем вверх, Home, Del (удаляем символ комментария в начале строки) Enter, радуемся.
спасибо за Ctrl + Shift +3 :)
Ctrl + Shift +3 не работает почему-то. ubuntu+bash+putty
Более лучшее решение вашего четвертого случая. habrahabr.ru/post/228999/#comment_7754985
возможно, но мой вариант останется в history, а ваш нет.
Как говорится привычка — вторая натура.
Как говорится привычка — вторая натура.
Привычка это да, но мой вариант тоже останется в истории после того, как вы его исполните. Или вам нужен в истории тот, что закомментирован?
естественно тот что закомментирован. Понятно что выполненная команда и так останется в истории (кроме некоторых случаев, частично оговоренных в посте.
Кстати про "[space]command". В этих Ваших интернетах говорят про HISTCONTROL, описанный в мане, который отвечает за сохранять али нет команды, введенные с пробелом в начале :)
Кстати про "[space]command". В этих Ваших интернетах говорят про HISTCONTROL, описанный в мане, который отвечает за сохранять али нет команды, введенные с пробелом в начале :)
Вау. Вот это реально полезно. Уже 20 лет юниксами занимаюсь, а такой полезной комбинации не знал. Премного благодарен.
В Убунтах всяких есть такая вот бесполезная штука, как apt-get moo
картинка
Пишите «Часть 2» с конспектом комментов)
Тот случай, когда узнаешь, сколько бесполезных вещей у тебя установлено дистрибутивом из коробки в посте, а в комментариях узнаешь сколько полезностей умеют постоянно используемые инструменты.
Кому как, а мне понравилось.
>>> «Начнем с простого, команда man, что означает manual. Если хотите прочитать о какой-либо команде, просто наберите: „
Не смешно. Лучше бы про info написали. Про неё почему-то почти никто не знает.
Не смешно. Лучше бы про info написали. Про неё почему-то почти никто не знает.
Да. Нигде о ней ещё не слышал.
P.S. Прошу прощения за случайный минус (тачпад) и возвращаю в карму.
P.S. Прошу прощения за случайный минус (тачпад) и возвращаю в карму.
info — отвратительное порождение GNU, которое решило, что оно not unix. Никто им в нормальном состоянии не пользуется, оно неудобно, с ужасной навигацией и форматированием. Если бы не уверенность gnu, что мануалы к coreutils/fileutils должны идти в первую очередь в info, а в man — только короткие выжимки, то про неё бы давно забыли как про страшный сон.
jot
Прямо неуловимый Джо
Так можно подборку из 100500 малоизвестных команд сделать. Нужно писать про те, которые есть в LSB (и следовательно в каждом дистрибутиве) хотя бы.
Спасибо. Даже если я и знал часть, то всё равно было познавательно и забавно. Особенно таблица аски. Всегда ради неё гуглил, а тут оказывается она всегда под рукой.
А брюзги есть в любом линукс посте. У нас если автор рассказывает по линуксу то что ты знаешь, то значит автор не прав и его надо сжечь на священном костре холивара. Так что всё это ерунда.
А брюзги есть в любом линукс посте. У нас если автор рассказывает по линуксу то что ты знаешь, то значит автор не прав и его надо сжечь на священном костре холивара. Так что всё это ерунда.
seq x [y] печатает последовательность чисел. Удобно в виде
for i in `seq 10`; do echo $i; done
Еще можно:
step не обязательно целое
$ seq start [[step] finish]
step не обязательно целое
Мне недавно показали такой башизм, я удивился, но использую:
for a in {1..10}; do echo $a; done
for a in {1..10}; do echo $a; done
интересно
но у seq свои удобства: ему можно сказать, чтоб заполнял нуликами слева (удобно, если вставлять в имена файлов, лучше сортировка):
но у seq свои удобства: ему можно сказать, чтоб заполнял нуликами слева (удобно, если вставлять в имена файлов, лучше сортировка):
$ seq -w 1 10
01
02
03
04
05
06
07
08
09
10
for a in {01..10}; do echo $a; done
У меня работает даже так:
Т.е. указать один нулик, если не знаешь точно второй аргумент. Добавит нужное количество нуликов сам.
$ for a in {01..100}; do echo $a; done
Т.е. указать один нулик, если не знаешь точно второй аргумент. Добавит нужное количество нуликов сам.
В zsh этот вариант генерирует
01 02 …
, а не 001 002 …
. Не думаю, что такое поведение некорректно: в вашем случае вы лишаетесь возможности генерировать именно то, что генерирует zsh (я несколько раз видел номера серий в стиле 01 02 … 99 100 101 …
).Полезно. А то я всегда через a=`printf %02d $a` нули добавлял :)
Конкретно для переменных в zsh есть
Первое добьёт строку нулями до данной ширины. В качестве ширины можно использовать
С
${(l:2::0:)a}
и typeset -i -Z2 a
.Первое добьёт строку нулями до данной ширины. В качестве ширины можно использовать
$#max
и вообще любое выражение, не содержащее разделители (в примере у меня и в документации — двоеточие, но разделители могут и не быть двоеточиями). Второе объявит, что, во‐первых, данная переменная является целочисленной, а, во‐вторых, что при подстановке её следует дополнять нулями до данной ширины.С
typeset
дополнять можно только нулями или пробелами, с ${(l)}
вы можете дополнять чем угодно, включая нулевые байты (используйте формат ${(pl:2::\0:)VAR}
— обратить внимание на p
).А еще есть программа по имени vrms, — виртуальный Столлман.
Есть программа sl — вызывает паровозик.
Есть программа sl — вызывает паровозик.
Я часто использую такие вещи:
[ESC] +. (точка) — аргумент из предыдущей команды. Допустим смотрим содержимое какого-либо файла:
потом понимаем, что нужно отредактировать. Чтобы еще раз не вводить полный путь делаем просто:
Переход по директориям не учитываю регистр символов:
в файле /etc/inputrc дописываем следующее:
Еще пример, получаем вывод ошибок, что в каком-то файле, в такой-то строке (допустим 78) — ошибка, делаю так:
и редактор открывает файл сразу на указанной строке.
[ESC] +. (точка) — аргумент из предыдущей команды. Допустим смотрим содержимое какого-либо файла:
cat /etc/samba/smb.conf
потом понимаем, что нужно отредактировать. Чтобы еще раз не вводить полный путь делаем просто:
vim [ESC] + .
— bash сам подставит аргумент.Переход по директориям не учитываю регистр символов:
в файле /etc/inputrc дописываем следующее:
set completion-ignore-case On
Еще пример, получаем вывод ошибок, что в каком-то файле, в такой-то строке (допустим 78) — ошибка, делаю так:
vim +78 file
и редактор открывает файл сразу на указанной строке.
в файле /etc/inputrc дописываем следующее
Но зачем? Ведь есть ~/.inputrc. Как уже упоминалось в комментах, многие фичи реализует библиотека readline, она же читает файл inputrc. В REPL, которые используют readline, будут работать всё те же горячие клавиши. К примеру, интерпретатор Python подхватывает настройки и работает аналогично shell.
Мой результат — 8/5. А персональный хит-парад любимых команд выглядит так:
1. tar -cf — dir1 dir2 dir3 | tar -C /dest/directory -xvf — — скопировать каталоги вместе с именами пользователей и правами доступа
2. df -h — ключ -h означает показывать результат в человеко-читаемом виде
3. `` — подстановка результата команды в командную строку. Например, grep -li CONST `find. -name *.h` найдет строки, содержащие CONST во всех файлах *.h от текущего каталога и ниже по иерархии.
4. () — группировка. Например, команду из первого примера можно переписать так: tar -cf dir1 dir2 dir3 | (cd /dest/directory; tar -xvf -)
5. Нежно люблю пакет ImageMagick, и особенно команду mogrify для работы с изображениями. Например, mogrify -resize 1920x1080 *.jpg сделает именно то, что ожидается — подгонит размер всех картинок под заданный размер, не меняя aspect ratio.
1. tar -cf — dir1 dir2 dir3 | tar -C /dest/directory -xvf — — скопировать каталоги вместе с именами пользователей и правами доступа
2. df -h — ключ -h означает показывать результат в человеко-читаемом виде
3. `` — подстановка результата команды в командную строку. Например, grep -li CONST `find. -name *.h` найдет строки, содержащие CONST во всех файлах *.h от текущего каталога и ниже по иерархии.
4. () — группировка. Например, команду из первого примера можно переписать так: tar -cf dir1 dir2 dir3 | (cd /dest/directory; tar -xvf -)
5. Нежно люблю пакет ImageMagick, и особенно команду mogrify для работы с изображениями. Например, mogrify -resize 1920x1080 *.jpg сделает именно то, что ожидается — подгонит размер всех картинок под заданный размер, не меняя aspect ratio.
3. Здесь надо помнить, что в случае с find ваше утверждение верно только до тех пор, пока в именах файлов нет пробелов, табуляции и новых строк (в именах файлов может быть всё, кроме нулевого байта). По этой причине я буду использовать
4. Для группировки лучше использовать
5. Я использую ImageMagick, чтобы создавать скриншоты (
**/*.h
, find|xargs
(новую строку в имени файла в «диком виде» я видел ровно один раз и то только потому, что konqueror позволил мне её туда закопипастить — во всех остальных случаях она помещалась туда намеренно с целью тестирования) или что‐нибудь ещё, но никак не $(find)
. $(что‐то ещё) я использую, но только когда точно знаю, что это «что‐то ещё» выведет.4. Для группировки лучше использовать
{}
. ()
ценна тем, что создаёт новый shell, соответственно окружение (текущий каталог, переменные окружения, ограничения на потребления ресурсов (ulimit)) не изменится, что бы вы там не делали. {}
новый shell не создаёт. Конкретно в вашем примере из‐за cd нужен новый shell, а не группировка.5. Я использую ImageMagick, чтобы создавать скриншоты (
import
): во‐первых, в моём fluxbox для его использования созданы клавиатурные сочетания, во‐вторых, ImageMagick присутствует на многих системах, что значит, что если он там, то мне не придётся думать, как сделать скриншот здесь. import
умеет брать скриншоты всего экрана (указанного в командной строке или тыкнутого мышкой), конкретного окна или даже области, которую вы выделяете мышкой и сохранять сразу в запрошенном формате.1. timeout — выполняет команду, по истечению времени убивает;
2. numfmt --from=si 1M — форматирует число. Например из 1M сделает 1000000, из 1K — 1000. Умеет и в обратную сторону
3. shred — перезаписывает файл случайными данными заданное число раз
4. nproc — печатает число процессоров
5. tailf — синоним tail -f, печатает только новые строки, появившиеся в файле с момента запуска команды
6. users — печатает имена всех залогиненный пользователей
7. fsfreeze — блокирует запись на файловую систему до момента unfreeze(системные вызовы записи не завершаются до анфриза). Удобно для надёжного чекпойтинга подмонтированной ФС. (лучше не делать на /, а то потом не сможем разморозить)
8. findfs --LABEL=«windows» — находит файловую систему по метке или по UUID, blkid — выводит список меток и UUID'ов всех ФС, lsblk — выводит блочные устройства в виде дерева
9. look — ищет строки начинающиеся с подстроки в отсортированном файле(бинарным поиском)
10. lslocks — показывает файловые локи
11. ipcs — показывает объекты ipc(shared memory, message queues и семафоры), они иногда утекают, т.к не привязаны к процессам. ipcrm — удалить объекты ipc
12. script — записывает сессию в файл, умеет записывать информацию о задержках в нажатии клавиш, scriptreplay — воспроизводит записанный файл, например, script --timing=file.tm script.out; scriptreplay --timing file.tm --typescript script.out
13. dmidecode — информация о системе, lscpu — информация о cpu, lshw — ещё одна информация о системе, lspci, lsusb
14. getent passwd — список пользователей, работает и в системах где пользователи не хранятся в /etc/passwd, а, например, в ldap
15. losetup -f — найти все разделы в образе диска из файла и сделать их доступными, как /dev/loop*
2. numfmt --from=si 1M — форматирует число. Например из 1M сделает 1000000, из 1K — 1000. Умеет и в обратную сторону
3. shred — перезаписывает файл случайными данными заданное число раз
4. nproc — печатает число процессоров
5. tailf — синоним tail -f, печатает только новые строки, появившиеся в файле с момента запуска команды
6. users — печатает имена всех залогиненный пользователей
7. fsfreeze — блокирует запись на файловую систему до момента unfreeze(системные вызовы записи не завершаются до анфриза). Удобно для надёжного чекпойтинга подмонтированной ФС. (лучше не делать на /, а то потом не сможем разморозить)
8. findfs --LABEL=«windows» — находит файловую систему по метке или по UUID, blkid — выводит список меток и UUID'ов всех ФС, lsblk — выводит блочные устройства в виде дерева
9. look — ищет строки начинающиеся с подстроки в отсортированном файле(бинарным поиском)
10. lslocks — показывает файловые локи
11. ipcs — показывает объекты ipc(shared memory, message queues и семафоры), они иногда утекают, т.к не привязаны к процессам. ipcrm — удалить объекты ipc
12. script — записывает сессию в файл, умеет записывать информацию о задержках в нажатии клавиш, scriptreplay — воспроизводит записанный файл, например, script --timing=file.tm script.out; scriptreplay --timing file.tm --typescript script.out
13. dmidecode — информация о системе, lscpu — информация о cpu, lshw — ещё одна информация о системе, lspci, lsusb
14. getent passwd — список пользователей, работает и в системах где пользователи не хранятся в /etc/passwd, а, например, в ldap
15. losetup -f — найти все разделы в образе диска из файла и сделать их доступными, как /dev/loop*
Проверил что кто-то уже запостил ссылку на commandlinefu — можно и спать пойти.
З.Ы. для полного счастья не хватает только линка на explainshell.com/
З.Ы. для полного счастья не хватает только линка на explainshell.com/
tailf — это чуть лучше чем просто синоним «tail -f», особенно для ноутбуков:
It is similar to tail -f but does not access the file when it is not growing. This has the side effect of not updating the access time for the file, so a filesystem flush does not occur periodically when no log activity is happening.
tailf is extremely useful for monitoring log files on a laptop when logging is infrequent and the user desires that the hard disk spin down to conserve battery life.
Ctrl+R — поиск по истории команд, наверное самая удобнейшая штука.
time — время, потраченное на выполнение команды
аргумент -h для многих стандартных утилит(coreutils) выводит числа с приставками. например для df или ls выведет размер в кило/мега/гигабайтах
time — время, потраченное на выполнение команды
аргумент -h для многих стандартных утилит(coreutils) выводит числа с приставками. например для df или ls выведет размер в кило/мега/гигабайтах
Мнемоника для аргумента -h: --human-readable
Поиск по ^R в баше (вернее, readline) сразу меркнет на фоне поиска «стрелочками».
Лучше использовать
<C-p>
/<C-n>
, а не стрелочки. До стрелочек долго тянуться. А <C-r>
незаменим в сложных случаях (я помню, что что‐то такое писал, но что именно — вопрос).Вполне возможно; просто такое поведение стрелочек характерно для
Забавно, что ^P/^N в
tcsh(1)
, который шелл по умолчанию во FreeBSD. Въедливая привычка, быстро подсаживаешься. :-)Забавно, что ^P/^N в
tcsh(1)
как раз просто перебирают команды (без учета первых символов). Про сложные случаи и ^R согласен.Вроде нигде
Для проверки используйте
<C-n>
/<C-p>
по‐умолчанию не производят поиск команды. У меня и в tcsh ни стрелочки, ни <C-n>
/<C-p>
не учитывают первые символы, в zsh по‐умолчанию так же, то же и в bash — нигде и ни стрелочки, ни <C-n>
/<C-p>
.Для проверки используйте
zsh -f
и tcsh -f
. Для bash уберите ~/.inputrc. Возможно вам придётся явно указать zsh, что вы хотите раскладку emacs («If one of the VISUAL or EDITOR environment variables contain the string `vi' when the shell starts up then it will be `viins', otherwise it will be `emacs'»). Вполне возможно, что вы используете умолчания FreeBSD (системный файл настроек), а не tcsh.Jot и ddate на Федоре отсустствуют.
И снова мало кто знает, но time это встроенная команда bash, а еще бывает внешняя программа time которая умеет показывать много всякого.
Ну и что бы 2 раза не вставать:
\команда выполняет именно внешнюю команду, а не алиас или строенную переменную.
$ /usr/bin/time -f %M ls
852
$ \time -f %e ls -R /
...
Command exited with non-zero status 2
3.09
$
Ну и что бы 2 раза не вставать:
\команда выполняет именно внешнюю команду, а не алиас или строенную переменную.
$ ll
итого 36
drwxr-xr-x 2 yukra yukra 4096 июля 7 21:46 .
drwx------ 87 yukra yukra 28672 июля 7 16:43 ..
$ \ll
ll: команда не найдена
$ if
Ctrl+C
> ^C
$ \if
if: команда не найдена
$
Не знаю насчёт встроенной переменной, но
Также он не отменит использование встроенных команд:
Кстати, если речь идёт про bash, то
\ll
спокойно выполнит функцию оболочки с именем ll
или алиас \\ll
(которого, скорее всего, нет). Это просто хак для парсера, основывающийся на том, что shell сначала заменяет alias’ы, а потом уже производит различные подстановки. В man zshmisc
прямо указано, почему \ll
работает («Alias expansion is done on the shell input before any other expansion except history expansion. Therefore…»).Также он не отменит использование встроенных команд:
\echo
— это не /bin/echo, а echo, встроенная в оболочку.Кстати, если речь идёт про bash, то
\ll
не отменит исполнения функции, определённой в переменной окружения (зато bash не даст определить alias \\ll
). Если речь идёт про zsh, то не отменит исполнения command_not_found_handler
(при желании можно использовать для того же, только с меньшим приоритетом — с command_not_found_handler, выполняющего функции из переменных окружения (смотреть export -f
в bash), вы не переопределите sudo).А для того, чтобы запустить именно команду, а не shell builtin, alias, функцию или что‐то ещё есть
command
: command echo 'Not a built-in echo'
.все кроме 6 и 2 в этом посте описано. 6 у меня не работает (mint + guake + bash), второе — ну как бы так сказать, с одной стороны оно конечно команда, а с другой программа из одной строчки на perl — такая же команда.
4тый я уже не первый раз вижу, но не хочу этим пользоваться дабы случайно не выполнить то, чего я на самом деле не имел ввиду.
4тый я уже не первый раз вижу, но не хочу этим пользоваться дабы случайно не выполнить то, чего я на самом деле не имел ввиду.
Всегда удивляло, почему в man-страницах разработчики не при приводят примеров. Неужели трудно привести пяток самых распространённых случаев применения команды? Ведь один пример может сэкономить кучу времени…
Большое спасибо за mtr!
cd не является «командой Линукса».
Во, а это интересно. С одной стороны cd это не внешний бинарник, а с другой стороны "\cd" обрабатывается именно так, как и обычный «cd»
yukra@yukra-ThinkPad ~ $ cd /
yukra@yukra-ThinkPad / $ \cd
yukra@yukra-ThinkPad ~ $ which cd
yukra@yukra-ThinkPad ~ $
Посмотрите мой ответ.
\if
не работает, потому что if
— это «reserved word» (и по‐особому обрабатывается парсером), а cd
— это «shell builtin» и особая обработка (которой вы мешаете своим слэшем) не нужна. Для определения что есть что используйте type
, а не which
.Первое Спасибо за статью Автор!
Второе спасибо всем кто поделился очень интересными комментариями
Огромный вклад в мой мозг!
Второе спасибо всем кто поделился очень интересными комментариями
Огромный вклад в мой мозг!
Фокус с !! работает и с man тоже. То есть если набрали какую-то команду, а она непонятно чего делает или сделала, то man !! выдаст мануал по предыдущей набранной команде.
Когда вы внутри man, то можно искать по регулярным выражениям просто набрав /
Все искомые строки будут подсвечены, переход между ними по n — вперед, N (Shift+n) — назад
Для просмотра файла можно использовать и команду less, либо подставлять ее как пайп (через |), в ней так же работает поиск как и в man
Для просмотра логов есть отличная команда tail, которая покажет вам конец лога, а если задать tail -f то новые строки будут выводиться по мере добавления их в логфайл.
Когда вы внутри man, то можно искать по регулярным выражениям просто набрав /
Все искомые строки будут подсвечены, переход между ними по n — вперед, N (Shift+n) — назад
Для просмотра файла можно использовать и команду less, либо подставлять ее как пайп (через |), в ней так же работает поиск как и в man
Для просмотра логов есть отличная команда tail, которая покажет вам конец лога, а если задать tail -f то новые строки будут выводиться по мере добавления их в логфайл.
В большинстве дистрибутивов man использует less для вывода. Какой pager используется можно посмотреть написав
Команды less похожи на команды vi, жаль только инкрементального поиска нету (есть форк какого-то чувака на github'е, который это реализует.)
echo $MANPAGER
Команды less похожи на команды vi, жаль только инкрементального поиска нету (есть форк какого-то чувака на github'е, который это реализует.)
спасибо за mtr
Я добавлю своих команд:
watch — запуск команды каждые n секунд и вывод результата на экран. К примеру, watch lsusb будет каждые 2 секунды (по дефолту) исполнять lsusb и выводить на экран. Удобно!
apt-file search — поиск файлов в пакетах активных репозиториев. К примеру, очень надо узнать, какой пакет из репозитория установить, чтобы достать бинарник installwatch. Запускаешь apt-file search installwatch, находишь в пакете checkinstall.
checkinstall — сборка из исходников в Debian-пакет. Must have, если не хочешь превратить Debian в Slackware. Теперь собранные из сорцов программы наконец-то можно нормально удалять и обновлять!
uptime — аптайм+количество сессий+loadavg
screendump — берёт содержимое терминала и выпихивает его через stdout. Если перенаправить в файл, получим скриншот терминала текстом =)
amixer — консольная утилита, которая меняет параметры alsa — к примеру, громкость, mute и тому подобное. Именно ей можно менять громкость в bash скрипте, к примеру, вешать на функциональные клавиши ноута — или мультимедийные клавиши клавиатуры =)
update-alternatives — меняет приложения для выполнения действий по умолчанию. К примеру, если при нажатии кнопочки «Браузер» в графическом меню WM у вас запускается не браузер, а довольно-таки глючный и тормозной Iceweasel, то заменить его Chromium-ом можно именно этой командой =)
Ещё немного алиасов:
А теперь критика статьи:
Ваша статья ну явно не рассчитана на тех пользователей, которые не знают про Ctrl+C.
Таких статей можно написать очень и очень много. Думаю, именно поэтому ценность переводов таких статей довольно низкая — на каждом английском околоайтишном сайте есть индус, который пишет 5 штук таких статей в день, запихивая туда всякие очевидности и бесполезности… Вот если выпустить качественный курс статей, типа по 20 тщательно отобранных и реально полезных в работе команд каждую среду, то будет очень и очень хорошо =)
watch — запуск команды каждые n секунд и вывод результата на экран. К примеру, watch lsusb будет каждые 2 секунды (по дефолту) исполнять lsusb и выводить на экран. Удобно!
apt-file search — поиск файлов в пакетах активных репозиториев. К примеру, очень надо узнать, какой пакет из репозитория установить, чтобы достать бинарник installwatch. Запускаешь apt-file search installwatch, находишь в пакете checkinstall.
checkinstall — сборка из исходников в Debian-пакет. Must have, если не хочешь превратить Debian в Slackware. Теперь собранные из сорцов программы наконец-то можно нормально удалять и обновлять!
uptime — аптайм+количество сессий+loadavg
screendump — берёт содержимое терминала и выпихивает его через stdout. Если перенаправить в файл, получим скриншот терминала текстом =)
amixer — консольная утилита, которая меняет параметры alsa — к примеру, громкость, mute и тому подобное. Именно ей можно менять громкость в bash скрипте, к примеру, вешать на функциональные клавиши ноута — или мультимедийные клавиши клавиатуры =)
update-alternatives — меняет приложения для выполнения действий по умолчанию. К примеру, если при нажатии кнопочки «Браузер» в графическом меню WM у вас запускается не браузер, а довольно-таки глючный и тормозной Iceweasel, то заменить его Chromium-ом можно именно этой командой =)
Ещё немного алиасов:
alias dirsize="du -hd 0" #Измеряет размер директории, в которой находитесь
alias contsize="du -hd 1" #Измеряет размер всех директорий в директории, в которой находитесь
alias cd..="cd .." #Не могу искоренить эту привычку, постоянно набираю cd.. =)
alias man="man -a" #Показывает ВСЕ мануалы по названию, попробуйте, к примеру, man -a signal, узнаете, что в Линуксе есть документация по сигналам, которые можно посылать программам
alias dhclient="dhclient -v" #Делает вывод dhclient намного информативнее - показывает запросы и ответы сервера, если есть. Короче, ждать получения IP-адреса уже не так скучно =)
alias toinstall="aptitude --schedule-only install" #Маркирует указанный пакет как помеченный к установке, удобно, когда система обновляется, а ты внезапно нашёл клёвую программу и хочешь не забыть её установить.
alias remove="aptitude --schedule-only remove" #То же самое, только скорее к случаю, когда ты внезапно нашёл в своей системе клёвую программу и хочешь её удалить
#Использование - toinstall sysvinit / toremove systemd, ну или наоборот =)
#Применяется, когда в следующий раз запустите aptitude install без указания пакета - просто "aptitude install".
alias watch="watch -n 1" #Обновление watch раз в 1 секунду, а не 2.
alias wpc="watch usr/local/bin/watch.sh" # Скриптик, в котором выводится acpi, date, ifconfig... короче, всё, что бы хотелось держать в отдельной консоли, постоянно обновлять и иметь возможность в любую минуту посмотреть =)
А теперь критика статьи:
Внимание, единственный способ остановить ее — CTRL + C
Внимание, единственный способ остановить ее
Внимание
CTRL + C
Ваша статья ну явно не рассчитана на тех пользователей, которые не знают про Ctrl+C.
Таких статей можно написать очень и очень много. Думаю, именно поэтому ценность переводов таких статей довольно низкая — на каждом английском околоайтишном сайте есть индус, который пишет 5 штук таких статей в день, запихивая туда всякие очевидности и бесполезности… Вот если выпустить качественный курс статей, типа по 20 тщательно отобранных и реально полезных в работе команд каждую среду, то будет очень и очень хорошо =)
Для dirsize есть
du -hs
. Я обычно именно так и набираю."
du -sh
" гармоничнее звучит/выглядитВ конце должно быть то, что вам, скорее всего, захочется изменить. Я не раз менял
-s
на --max-depth=1
(почему‐то -s
я легко запомнил, а -d
— нет).checkinstall — сборка из исходников в Debian-пакет
однако это внешний пакет (на самом деле это bash-скрипт над build-essentials или что-то в этом роде)
Кстати про CTRL + C и единственный способ. Ещё со времен UNIX'ов и по сей день есть замечательное сочетание клавиш CTRL + \. Оно посылает SIGQUIT активной группе процессов. Помогает быстро прибить процесс, который не завершается по CTRL + C. Ещё полезно для создания coredump'а процесса.
Ещё многие почему-то думают, что при нажатии CTRL + C всегда один процесс получает SIGINT. Это не всегда так.
Ещё многие почему-то думают, что при нажатии CTRL + C всегда один процесс получает SIGINT. Это не всегда так.
Так хорошо начали, а закончилось, как обычно, простым перечислением команд (:
1. А ещё лёгким движением клавиатурый дать человеку ссылку на определённый кусок man'a примерно вот так:
Ну или использовать man не для чтения man'ов, а, внезапно, для форматирования текста: dmesg | man -p t -l — :)
5. Ещё более опытные пользователи знают, что это фича не всегда включена и чаще всего по умолчанию оно сидит в $HISTCONTROL, который по умолчанию равен ignoreboth, что в полном виде означает ignoredups (который не сохраняет две подряд одинаковые команды) и (БИНГО!) заветный ignorespace. Я достаточно часто видел системы, где эта фича была отключена.
Тут в комментах все с таким упоением расскзывают про всевозможные Ctrl+? хоткеи. Все они работают по одной просто причине: обычно шелл по умолчанию работает в emacs mode, отсюда и всевозможные хоткеи. Для любителей vim'а можно взять и переключиться в vim mode ( set -o vim ) и наслаждаться ^ вместо Ctrl+A, $ вместо Ctrl+E, db вместо Alt+Bcksp и так далее.
зы. Только вот некоторые совсем вещи при таком переключении могут поломаться. Тот же поиск стрелками вверх/вниз по хистори или очистка экрана по Ctrl+l (невероятно привык именно к этой комбинации, по другому жить не могу). Но это всё легко исправляется небольшой правкой ~/.inputrc примерно в такой вид:
1. А ещё лёгким движением клавиатурый дать человеку ссылку на определённый кусок man'a примерно вот так:
man -P 'less -p "-P pager,"' man
Ну или использовать man не для чтения man'ов, а, внезапно, для форматирования текста: dmesg | man -p t -l — :)
5. Ещё более опытные пользователи знают, что это фича не всегда включена и чаще всего по умолчанию оно сидит в $HISTCONTROL, который по умолчанию равен ignoreboth, что в полном виде означает ignoredups (который не сохраняет две подряд одинаковые команды) и (БИНГО!) заветный ignorespace. Я достаточно часто видел системы, где эта фича была отключена.
Тут в комментах все с таким упоением расскзывают про всевозможные Ctrl+? хоткеи. Все они работают по одной просто причине: обычно шелл по умолчанию работает в emacs mode, отсюда и всевозможные хоткеи. Для любителей vim'а можно взять и переключиться в vim mode ( set -o vim ) и наслаждаться ^ вместо Ctrl+A, $ вместо Ctrl+E, db вместо Alt+Bcksp и так далее.
зы. Только вот некоторые совсем вещи при таком переключении могут поломаться. Тот же поиск стрелками вверх/вниз по хистори или очистка экрана по Ctrl+l (невероятно привык именно к этой комбинации, по другому жить не могу). Но это всё легко исправляется небольшой правкой ~/.inputrc примерно в такой вид:
set editing-mode vi
$if mode=vi
set keymap vi-command
# # these are for vi-command mode
"\e[A": history-search-backward # arrow up
"\e[B": history-search-forward # arrow down
"\ep": yank-last-arg # bind to Alt-p
Control-l: clear-screen
set keymap vi-insert
# # these are for vi-insert mode
"\e[A": history-search-backward
"\e[B": history-search-forward
"\ep": yank-last-arg
Control-l: clear-screen
$endif
Те, кто не знает про
Конечно же, команды приведенные в статье далеко не малоизвестные, но за
Ах да, в список man страниц, так же можно добавить
cd -
, скорее всего не знают и про pushd
и popd
.Конечно же, команды приведенные в статье далеко не малоизвестные, но за
sudo !!
спасибо!Ах да, в список man страниц, так же можно добавить
man hier
, в которой рассказывается о том, где что лежит.Ещё очень удобно использовать mkdir с опцией -p:
mkdir -p Photos/2004/Summer/August/
Это чтобы не создавать вручную Photos, потом 2004, потом Summer, и, наконец, August.
mkdir -p Photos/2004/Summer/August/
Это чтобы не создавать вручную Photos, потом 2004, потом Summer, и, наконец, August.
>> sudo!!!
s,u,d,o, Пробел, Shift+1, Shift+1
vs
Вверх, Home, s,u,d,o, Пробел
Итого в первом варианте нажимать на 2 клавиши больше.
s,u,d,o, Пробел, Shift+1, Shift+1
vs
Вверх, Home, s,u,d,o, Пробел
Итого в первом варианте нажимать на 2 клавиши больше.
В первом варианте вы не убираете руки с основного блока клавиатуры — это долго. Не надо сравнивать просто нажатия клавиш.
ok.
нажатий столько же, только перед Enter есть возможность посмотреть на команду
C-p C-a sudo <space>
нажатий столько же, только перед Enter есть возможность посмотреть на команду
зато первый вариант будет лучше работать по медленному коннекту а-ля GPRS / перегруженный вайфай
очепятка Григорианкий
Добавлю свои 5 копеек.
cat /dev/urandom | od -h
— имитируем фильмы про хакеров, ну или как застравка с видимостью процесса.fuser -c /etc
— посмотреть кто из программ использует текущий каталогgrep -rl 'server-status' /etc/
— поиск текста внутри файлов в указанной директорииДобавлю по поводу последней команды: grep шерстит любые файлы, в том числе бинарные. Чтобы этого избежать (особенно для проекта с километром картинок), было бы неплохо совместить его с find и отрицанием на «ненужные» расширения, примерно так:
find /var/www -type f ! -name *.jpg -exec grep -rl "text" {} \;
Согласен, но для поиска по конфигам на чужом сервере мой вариант коротче.
grep(1)
и сам умеет пропускать бинарные файлы:-I Process a binary file as if it did not contain matching data; this is equivalent to the --binary-files=without-match
option.
Зачем find? grep и сам умеет искать только в нужных типах файлов ( ну или исключать ненужные ). Читай man grep на предмет опций --include и --exclude.
Ну и даже если вы очень хотите именно find ( вдруг вам ещё и конкретный диапазон даты изменения нужен ), то используйте \+ вместо \; для grep. Оно будет работать заметно быстрее.
Ну и даже если вы очень хотите именно find ( вдруг вам ещё и конкретный диапазон даты изменения нужен ), то используйте \+ вместо \; для grep. Оно будет работать заметно быстрее.
grep 'text' /var/www/**/*^*.jpg(.)
— zsh, с setopt extendedglob
. В 99% случаях zsh позволяет записать то же быстрее. Только не используйте такой вариант если вам нужно быстро найти файлы или найти очень много файлов. Во втором случае если for
или echo
такой список сожрут как встроенные команды, получающие своё внутреннее представление списка аргументов, то внешние команды упрутся в ограничение на длину командной строки.В первом случае учтите две вещи: во‐первых, zsh не настолько оптимизирован как
find
и при этом имеет много возможностей, которые пришлось учесть в коде. Во‐вторых, zsh сначала найдёт все файлы, а потом уже запустит что‐либо, а find будет выдавать результат по мере нахождения в соответствии со своим вводом (это я про рекомендованный +
в конце — он не даст find запустить команду, пока не будет сформирован максимально длинный список аргументов).копирование/переименование файла c изменением названия по маске (чтобы не писать его 2 раза)
результат — /path/to/file.txt и /path/to/file.txt.backup
результат — /path/to/file.log
$ cp /path/to/file.txt{,.backup}
результат — /path/to/file.txt и /path/to/file.txt.backup
$ mv /path/to/file.{txt,log}
результат — /path/to/file.log
Недавно использовал команду\утилиту sed.
редактирует html-файлы заменяя true на false.
sed -i '/s/true/false/' *.html
редактирует html-файлы заменяя true на false.
Раз в год такой топик обязательно появляется на Хабре.
pgrep — про эту команду тоже мало кто знает, как оказалось.
Ещё — для тех, кто работает в виртуальной консоли (те, которые вызываются по Ctrl+Alt+F1/2/3/4/5/6), может понадобиться удобный способ вставлять и копировать текст мышью. Просто установите gpm, и тачпад больше не будет просто неудобным пространством над клавиатурой, а длинные пути для cp/mv/dd/whatever не придётся набирать 2 раза.
/s/над клавиатурой/под клавиатурой/
И да:
Не стоит забывать и про столь полезную команду, как dpkg-reconfigure. Она переконфигурирует установленные в системе пакеты, таким образом, можно добиться изменения поведения частей системы на желаемое ;-)
К примеру, в виртуальной консоли русские буквы отображаются ромбиками, а по высоте влезает мало букв. Как настроить кодировку, шрифт, размер шрифта и набор символов в виртуальной консоли? dpkg-reconfigure console-setup.
И да:
apt-get install bsdgames
/usr/games/tetris-bsd
… И много часов потерянного времени =)Не стоит забывать и про столь полезную команду, как dpkg-reconfigure. Она переконфигурирует установленные в системе пакеты, таким образом, можно добиться изменения поведения частей системы на желаемое ;-)
К примеру, в виртуальной консоли русские буквы отображаются ромбиками, а по высоте влезает мало букв. Как настроить кодировку, шрифт, размер шрифта и набор символов в виртуальной консоли? dpkg-reconfigure console-setup.
> gpm
Ух ты, оно еще живо. Я с ним еще в конце 90-х под FBSD развлекался.
UPD: память подвела, это в RH я с ним развлекался.
Ух ты, оно еще живо. Я с ним еще в конце 90-х под FBSD развлекался.
UPD: память подвела, это в RH я с ним развлекался.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
15 малоизвестных команд Linux