Рекомендации и подсказки командной строки Linux?

Я хотел бы открыть дискуссию, в которой будут накапливаться рекомендации и подсказки командной строки командной строки (CLI).

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

Надеюсь, мы все могли бы научиться этому.

Приглашаем вас поделиться своими советами по Bash, grep, sed, AWK, /proc и всем другим связанным с ним системному администрированию Linux /Unix, передовым технологиям оболочки для всех нас.

112 голосов | спросил 4 revs, 4 users 69%
Maxim Veksler
1 Jam1000000amThu, 01 Jan 1970 03:00:00 +030070 1970, 03:00:00

30 ответов


111

Используйте экран , бесплатный терминальный мультиплексор, разработанный проектом GNU, который позволит вам имеют несколько терминалов в одном.

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

ответил Jeffrey 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 12 Sep 2011 17:59:03 +0400 2011, 17:59:03
101

<сильный> SSH!
SSH - это божественная команда - я думаю, что это самая ценная общая команда для изучения. Параметры могут быть довольно сложными, но похоже, что я постоянно участвую в использовании новых параметров командной строки для SSH, которые я никогда не думал, что это необходимо. Возможно, я использовал их все в данный момент.

Чем больше вы его используете, тем больше вы узнаете об этом. Вы можете использовать его, чтобы сделать некоторые УДИВИТЕЛЬНЫЕ вещи.

Примечание. Все эти вещи выполняются удаленно без настройки на вашем сервере, за исключением того, что сервер ssh работает.

Установить файловую систему через Интернет

искать сеть для SSHFS

Переслать команды .

Протокол SVN + SSH - это Subversion от удаленного клиента к серверу, на котором работает NO DEAMON! Команда SVN запускает сервер через оболочку ssh и передает информацию обратно и вперед через существующий канал. Программа rsync делает то же самое, работает против сервера без rsync deamon, запуская его самостоятельно через SSH. Легко писать собственные файлы bash, чтобы делать подобные трюки.

Цепочка для доступа через брандмауэры

Я использую это все время, чтобы перепрыгнуть через мой Linux-сервер дома к моему mac.

Передовые порты:
Кажется, только умеренно полезно, пока вы не поймете, что можете отскакивать через домашний брандмауэр и настраивать свой маршрутизатор дома с работы, как если бы вы делали это из своей домашней сети).

Запросы вперед X:

Это еще один потрясающий. С или без сервера X, работающего на вашей удаленной системе, вы можете запустить программу x-windows, и окно появится на вашем локальном экране. Просто используйте переключатель -X, вот и все!

Поскольку вам не нужно иметь X-сервер, работающий на вашем удаленном сервере, влияние процессора на ваш сервер минимально, у вас может быть сервер TINY Linux, который обслуживает огромные приложения на вашем мощном игровом ПК под управлением Windows и cygwin /Х.

Конечно, VI и EMACS работают над SSH, но когда я бегу дома, иногда я хочу больше. Я использую ssh -X для запуска копии Eclipse! Если ваш сервер более мощный, чем ваш ноутбук, у вас есть GUI, сидящий прямо на вашем ноутбуке, но компиляции выполняются на вашем сервере, поэтому не беспокойтесь о загрузке системы.

Запуск в пакетных файлах

(что означает запуск локального командного файла, который «делает материал» в других системах):

Две вещи объединяются, чтобы сделать это круто. Во-первых, вы можете исключить подсказки для пароля, используя (более безопасные) ключи шифрования. Во-вторых, вы можете указать команду в SSH CLI. Я использовал это несколькими интересными способами. Например, когда компиляция не удалась на удаленном сервере, я бы получил ее SSH на свой компьютер и воспроизвел звуковой файл).

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

Встроенный в Mac

Оба сервера и клиент встроены в Mac и Linux. В случае с Mac и Ubuntu включение сервера так же просто, как найти правильный флажок.

На компьютере установите cygwin или cygwin /X (cygwin /X позволит вам переслать ваш файл x-window с вашего компьютера Linux на ваш ПК с ОС Windows - он установит сервер X)

Важные советы /файл конфигурации

Никогда не используйте порт 22 на вашем брандмауэре. Вы получите много попыток взлома, это просто не стоит. Просто попросите свой брандмауэр переслать другой порт на ваш сервер.

Существуют обширные параметры конфигурации, которые позволяют значительно упростить ваши команды ssh. Вот пример моей работы:

  Host home
    имя хоста billshome.hopto.org
    Port = 12345
    Пользователь = банкнота
    LocalForward = localhost: 1025 mac: 22
 

Когда я набираю «ssh home» (ничего больше), он действует так, как будто я набрал:

  ssh -p 12345 [email protected]
 

, а затем перенаправляет мой локальный порт 1025 на мою систему «mac» дома. Причина этого в том, что у меня есть еще одна запись в моем файле:

  Host mac
    hostname localhost
    Порт = +1025
 

, чтобы после того, как я сделал «ssh home» и все еще открываю окно, я могу набрать «ssh mac», а работающий на компьютере компьютер попытается подключиться к своему порту 1025, который был отправлен «mac: 22» другой командой, поэтому он подключится к моему Mac дома через брандмауэр.

Изменить - классный скрипт

Я выкопал старый сценарий, который мне просто нравится, - должен был вернуться и опубликовать его для всех, кто может быть заинтересован. Сценарий называется «authMe»

  #! /Bin /Баш
если [ ! -f ~ /.ssh /id_dsa.pub]
тогда
    echo 'id_dsa.pub не существует, создавая'
    ssh-keygen -tdsa
фи
ssh $ 1 'cat> .ssh /authorized_keys' <~ /.ssh /id_dsa.pub
 

Если у вас есть этот скрипт в вашем домашнем каталоге, и есть хост, с которым вы можете подключиться (через ssh), вы можете ввести «./authMe hostName».

Еслинеобходимо, чтобы он создал для вас открытую /закрытую пару ключей, затем он перейдет на другую машину и скопирует ваш открытый ключ (команда ssh предложит вам ввести пароль ...)

После этого команда SSH больше не должна запрашивать пароль при подключении к этой удаленной системе, она будет использовать открытую /закрытую пару ключей.

Если ваш удаленный компьютер не всегда безопасен, вам следует рассмотреть возможность установки «кодовой фразы» при появлении запроса.

Вы также можете настроить ssh-сервер на дальнем конце, чтобы не допускать текстовые пароли (только ключи) для дополнительной безопасности.

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
73

Мне нравится использовать

  cd -
 

, чтобы перейти к предыдущему каталогу. Очень полезно!

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
69

Недавно я обнаружил команду pv (просмотрщик каналов), которая похожа на кошку, но с данными о передаче.

Итак, вместо

  $ gzip -c access.log> access.log.gz
 

Вы можете использовать

  $ pv access.log | gzip> access.log.gz
611 МБ 0:00:11 [58,3 МБ /с] [=> ] 15% ETA 0:00:59
 

Поэтому, вместо того, чтобы не знать, когда закончится ваша операция, теперь вы узнаете!

Предоставлено Петерисом Крумином

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
53
  sudo !!
 

Повторите предыдущую команду как root.

[Текущая верхняя команда на сайте http://www.commandlinefu.com , тематический сайт в соответствии с этим вопросом.]

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
46

Нажмите Ctrl-R и начните вводить команду (или любую ее часть) - она ​​ищет историю команд. Повторное нажатие Ctrl-R переместится к следующему совпадению, enter выполнит текущую отображаемую команду, а стрелка вправо (по крайней мере) позволит вам сначала отредактировать ее.

  $ (reverse-i-search) `svn ': svn status
 

Я использовал Linux для чего-то вроде 7 лет моей основной ОС, прежде чем узнавать об этом, но теперь, когда я это знаю, это очень удобно.

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
45

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

Я использовал оболочку в течение многих лет, тщательно набирая имена каталогов вручную. Однажды я смотрел, как друг дружит в системе, и он продолжал нажимать клавишу табуляции. Я спросил: «Почему вы нажимаете вкладку?». Ответ: он пытается заполнить каталог или имя файла. Кто бы мог подумать - завершение табуляции! Наберите бит файла или каталога, нажмите вкладку, и он попытается закончить то, что вы набрали (поведение зависит от какой оболочки, хотя).

Однажды мой друг наблюдал за мной в командной строке и наблюдал, как я набираю что-то вроде:

  coryking @ cory ~ /trunk /mozi $ pushd /etc
/etc ~ /trunk /mozi
coryking @ cory /etc $ popd
~ /Багажник /Mozi
coryking @ cory ~ /trunk /mozi $
 

Кто бы мог догадаться !? Он никогда не знал о popd / pushd . Думаю, мы даже ...

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
41

Узнать Vim.

Это (возможно) лучший редактор, но, безусловно, лучший редактор, доступный на голой Linux-сервере.

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
38

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

  $ your_command_here & amp; отрекаться
 

Вы также можете отсоединить запущенную программу:

  $ your_command_here
# Нажмите <Control-Z> для остановки программы и вывода ее на задний план:
$ bg
$ disown
 
ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
38

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

  \ rm -rf ~ /tmp
 
ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
38

Этот совет сделает ваш CLI более комфортным (по крайней мере, для меня):

создать файл ~ /.inputrc со следующим содержимым:

  "\ e [A": история-поиск-назад
"\ e [B": история поиска
 

Перезапустите bash (например, набрав «exec bash»). Когда вы вводите префикс команды и нажимаете стрелку вверх, вы будете просматривать команды, начинающиеся с вашего префикса, например, если вы набрали ssh, он покажет ваши прежние соединения с удаленными оболочками. Если ваш запрос пуст, стрелка вверх будет просматривать историю обычным способом.

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
36

Используйте & amp; & amp; вместо ; при одновременном выполнении нескольких команд. Он останавливается при возникновении ошибки и не выполняет другие команды.

Классический пример:

  ./configure & amp; & amp; & amp; make & amp; & amp; сделать установку
 
ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
32

При написании циклов в командной строке в bash я часто префикс рискованных команд командой «эхо».

  для элемента в элементах; делать эхо-что-то рискованное; сделанный
 

Таким образом, я могу полностью увидеть «что-то-рискованное», прежде чем совершить его. Помогает, когда ваша рискованная команда включает в себя переменные расширения и глобусы. И «set -x» очень полезен при написании сценариев bash.

'set -x' позволяет отлаживать. См. http://tldp.org/LDP/Bash-Beginners-Guide /html/sect_02_03.html для получения информации об отладке bash.

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
31

Требование

Вам нужно протестировать максимальную пропускную способность между двумя серверами.


Решение

В SERVER1 выполните:

  nc -u -l 54321> /DEV /нуль
 

В SERVER2 выполните:

  dd if = /dev /zero bs = 1MB | nc -u SERVER1 54321 & amp;
pid = $ (pidof dd)
в то время как ((1)); do kill -USR1 $ pid; сон 2; сделанный
 

Вы увидите вывод, например:

  182682000000 байт (183 ГБ) скопировано, 1555,74 секунд, 117 МБ /с
182920 + 0 записей в
182919 + 0 записей
 

117 МБ /с - интересный фактор, который показывает фактическую пропускную способность сети.

<сильный> Объяснение

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

Копирование по UDP (для предотвращения накладных расходов TCP).

Копирование из памяти (/dev /zero) в SERVER1 в память (/dev /null) на SERVER2, что предотвращает попадание дискового ввода-вывода .

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
23

Прозрачность структуры каталогов цветов проще.

  alias ls = "ls --color = tty"
 

<сильный> Edit

  alias ls = "ls --color = auto"
 
ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
20

Некоторые небольшие указатели на просмотр журнала:

  1. Вы можете использовать tail -F , чтобы продолжать просмотр журнала после его усечения (в примере log4j).
  2. Вы можете использовать меньше: Open less, нажмите SHIFT + F , чтобы подражать управлению хвостом. Также полезно использовать -S , чтобы отключить перенос строк. меньше позволит вам выполнять поиск в журналах.
ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
20

Я долгое время изучал трюк из друга назад, чтобы легко изменить расширение файла:

  mv my_filename. {old, new}
 

Расширение оболочки расширит его до:

  mv my_filename.old my_filename.new
 

Это также можно использовать, чтобы переименовать файл другими способами, например, добавить что-то в:

  mv my _ {, cool_} имя_файла
 
ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
19

Используйте «tar xf» для извлечения сжатых архивов. J для bzip2 и z для gzip не нужны, поскольку tar будет определять тип файла вашего архива. Ни один знак «-» перед аргументами. Вы сэкономите много времени (за миллион, -)).

Еще лучше использовать unoo для извлечения любого архива с помощью одной команды без лишних аргументов.

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
17

Установите пакет завершения bash. Он содержит ряд предопределенных правил завершения для оболочки. Включите его, набрав «source /etc /bash_completion», если вы не сделали это для вас. Затем, например, когда вы закончите после kpdf, вы увидите список каталогов и файлов PDF. Это так же умно, как и для завершения удаленных файлов после scp ssh: //server /XXX (если вы включили логирование без пароля).

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
17

Я постоянно использую эти

ALT-. (ESC +. В некоторых терминалах) копирует последний использованный аргумент (супер-полезный)

CTRL-W удаляет слово

CTRL-L очистить терминал (например, очистить команду, но быстрее)

ALT-B (ESC + B в некоторых терминалах) переместить назад слово

ALT-F (ESC + F в некоторых терминалах) переместите слово

CTRL-E перейти к EOL

CTRL-A переход к BOL

Поиск CTRL-R в истории

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
16

В bash я использую ! $ много. Он повторяет последний аргумент последней команды:

  ls /really/long/command/argument/that/you/dont/want/to/repeat.txt
vi! $
 

Он запустит ls, а затем, если вы хотите его отредактировать, вам не нужно его переименовывать, просто используйте! $. Это действительно полезно для длинного пути /имени файла. Кроме того, ! * повторяет все аргументы предыдущей команды. Я не использую это столько, но это выглядит полезно.

Я знал, что они были упомянуты, но я использую vim, screen и cd - много.

Я забыл noclobber:

  set -o noclobber
 

Из man bash :

  

Если установлено, bash не перезаписывает   существующий файл с & gt ;,> & amp ;, <& gt;   операторов перенаправления. Это может быть   переопределяется при создании выходных файлов   с использованием оператора перенаправления> |   вместо>.

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
14

Переключитесь с bash на zsh и улучшите свою производительность:

  • На самом деле интеллектуальное заполнение вкладки для скриптов. Он заполняет не только командные строки, но и все параметры, имена справочных страниц, имена пакетов (для apt-get /emerge и т. Д.) И что у вас есть. И дает полезное объяснение вариантов во время завершения. Все это без использования пробела прокрутки после того, как команда была выпущена.
  • Закладка табуляции подстановочных знаков; напишите cat * .txt, нажмите вкладку и выберите между любыми файлами, которые соответствуют выражению.
  • Переключайте каталоги, просто набрав их имена.
  • Несколько режимов редактора строк. Может вести себя как vi или emacs, если вы этого хотите.
  • Настраиваемые привязки клавиш для выполнения любых действий.
  • Тематические подсказки, в том числе возможность размещать оперативную информацию в правой части экрана и автоматически ее скрывать при вводе длинной команды

Google скажет вам еще много преимуществ.

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
13

Старая школа, перемещая дерево каталогов из одного места в другое, сохраняя символические ссылки, разрешения и все эти полезные вещи:

  tar cBf -. | (cd /destination; tar xvBpf -)
 

или через сеть

  tar cBf -. | rsh foo.com "cd /destination; tar xvBpf -)
 

Новая школа:

  rsync -urltv. /место назначения
 

или через сеть

  rsync -urltv -e ssh. foo.com:/destination
 
ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
13

Требование . У вас есть каталог, содержащий большой список файлов, которые вы хотите удалить. rm -r не сработает!

<сильный> Пример

  find /var /spool /mqueue /| wc -l
191545
rm -f /var /spool /mqueue /*
-bash: /bin /rm: слишком длинный список аргументов
 

<сильный> Решение

  find /var /spool /mqueue /-xdev -exec команда rm -f '{}' +
 

<сильный> Объяснение

Изменить: Исправление объяснения после комментария @ephemient.

find будет предоставлять аргументы rm максимально допустимыми аргументами. Это позволит rm удалять файлы в пакетах, который является самым быстрым методом, о котором я знаю, без использования операции -delete. Это эквивалентно

  find /var /spool /mqueue -xdev -print0 | xargs -0 rm -f
 

, который может оказаться полезным, если ваш find не поддерживает -exec ... + .

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
11

Я использую эти два совета так часто, что я думал, что было бы неплохо поделиться:

 ! Foo
 

Запустит последнюю команду в файле истории, начинающуюся с «foo» (я часто использую ее при компиляции, например, ! gcc ).

Другой - это сочетание клавиш (Ctrl + O вместо Return), это приведет к выполнению команды AND и отображает следующую команду в файле истории. Например, когда я компилирую и тестирую файл, я всегда делаю 3 или 4 команды, делаю, cd в dir теста, запускайте тест, cd, в директорию make-файла. Использование Ctrl + O делает эту задачу намного проще:)

Надеюсь на эту помощь!

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
10

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

  svn co <repo-url> , # Отслеживает проект в текущей папке

svn update # Получить последние изменения с сервера

Статус svn # Показывает, какие файлы были изменены локально

svn add <path /filename> # Добавить файл в репо

svn commit # Зафиксировать изменения в репо
 

Это заставляет многих разработчиков использовать Linux, как ни странно.

ответил Bill K 3 MaramTue, 03 Mar 2009 00:23:04 +03002009-03-03T00:23:04+03:0012 2009, 00:23:04
10

Самая забытая команда старой школы: find

Вчера я исправил ошибку с большими разрешениями:

  для u в nr dias simonpj; делать
   sudo -u $ u find. -type d -exec chmod g + s '{}' ';'
сделанный
 
ответил Norman Ramsey 3 MaramTue, 03 Mar 2009 01:52:24 +03002009-03-03T01:52:24+03:0001 2009, 01:52:24
8

Для таких оболочек, как bash и ksh , вы можете заставить командную строку отвечать на команды навигации, такие как текстовый редактор:

  set -o emacs
 

или

  set -o vi
 

позволит вам выполнять поиск в своей истории и перемещаться по командной строке так, как вы привыкли делать в текстовых файлах (например, в режиме vi, нажимая ESC ), затем введите /string будет искать ваши предыдущие команды для «string» - вы можете использовать n и N для перемещения между совпадениями)

ответил Norman Ramsey 3 MaramTue, 03 Mar 2009 01:52:24 +03002009-03-03T01:52:24+03:0001 2009, 01:52:24
8

grep - мой друг. Серьезно.

Список .rb файлов, содержащих текст class foo :

  grep -l "class foo" .rb
 

Список .rb файлов, которые не содержат , содержат текст class foo :

  grep -L "class foo" * .rb
 

Список .rb файлов, которые не содержат содержат foo или bar (вы можете использовать любое regexp с -e, но вам нужно убежать от операторов):

  grep -L -e "foo \ | bar" * .rb
 
ответил Norman Ramsey 3 MaramTue, 03 Mar 2009 01:52:24 +03002009-03-03T01:52:24+03:0001 2009, 01:52:24
8

Подстановка оболочки выполняется с помощью ^ :

  /home /eugene $ ls foo.txt
foo.txt
/home /eugene $ ^ ls ^ rm
rm foo.txt
/home /eugene $ ls foo.txt
ls: невозможно получить доступ к файлу foo.txt: нет такого файла или каталога
 
ответил Norman Ramsey 3 MaramTue, 03 Mar 2009 01:52:24 +03002009-03-03T01:52:24+03:0001 2009, 01:52:24

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132