Я хотел бы открыть дискуссию, в которой будут собраны лучшие практики и советы вашей командной строки Linux (CLI).
Я искал такое обсуждение, чтобы поделиться комментарием ниже, но не нашел ни одного, следовательно, этот пост.
Я надеюсь, что все мы могли бы извлечь уроки из этого.
Вы можете поделиться своими советами по Bash, grep, sed, AWK, / proc и всеми другими связанными системным администрированием Linux / Unix, а также с рекомендациями по программированию оболочки для всех нас.
Ответы:
Используйте экран , бесплатный мультиплексор терминала, разработанный GNU Project, который позволит вам иметь несколько терминалов в одном.
Вы можете начать сеанс, и ваши терминалы будут сохранены, даже если ваше соединение потеряно, поэтому вы можете продолжить позже или из дома.
источник
SSH!
SSH - это команда богов - я думаю, что это самая ценная команда для изучения. Параметры могут быть довольно пугающими, но мне кажется, что я постоянно учусь использовать новые параметры командной строки для SSH, которые я никогда не считал необходимыми. Возможно, я использовал их всех в этот момент.
Чем больше вы его используете, тем больше вы узнаете об этом. Вы можете использовать это, чтобы сделать некоторые изумительные вещи.
Примечание. ВСЕ эти вещи можно выполнять удаленно, без настройки на вашем сервере, за исключением запуска ssh-сервера.
Смонтировать файловую систему через интернет
искать в сети SSHFS
Вперед команды .
Протокол SVN + SSH - это Subversion от удаленного клиента до сервера, на котором не работает ни один DEAMON! Команда SVN запускает сервер через оболочку ssh и передает информацию туда и обратно по существующему каналу. Программа rsync делает то же самое, запускается на сервере без rsync deamon, запуская его через SSH. Легко написать свои собственные файлы bash, чтобы делать подобные трюки.
Цепочка для прохождения через брандмауэры
Я использую это все время, чтобы перепрыгнуть через мой Linux-сервер дома к моему Mac.
Переадресация портов:
кажется лишь умеренно полезной, пока вы не поймете, что можете прыгать через домашний брандмауэр и настраивать маршрутизатор дома с работы, как если бы вы делали это из домашней сети).
Форвард Х запросов:
Это еще один удивительный. Если на удаленной системе запущен X-сервер или нет, вы можете запустить программу X-Windows, и на вашем локальном экране появится окно. Просто используйте переключатель -X, и все!
Поскольку на удаленном сервере не требуется запуск X-сервера, нагрузка на процессор на вашем сервере минимальна, у вас может быть сервер TINY Linux, который обслуживает огромные приложения на вашем мощном игровом ПК под управлением Windows и Cygwin / X.
Конечно, VI и EMACS работают по SSH, но когда я бегу домой, иногда мне хочется большего. Я использую ssh -X для запуска копии Eclipse! Если ваш сервер более мощный, чем ваш ноутбук, у вас прямо на ноутбуке установлен графический интерфейс, но компиляция выполняется на вашем сервере, поэтому не беспокойтесь о загрузке системы.
Запустить в пакетных файлах
(имеется в виду запуск локального командного файла, который «делает вещи» в других системах):
Две вещи объединяются, чтобы сделать это классным. Во-первых, вы можете исключить запросы пароля, используя (более безопасные) ключи шифрования. Во-вторых, вы можете указать команду в интерфейсе командной строки SSH. Я использовал это несколькими интересными способами: например, когда на удаленном сервере происходит сбой компиляции, я вставляю SSH в компьютер и воспроизводю звуковой файл).
Помните, что вы можете перенаправить вывод удаленной команды и использовать его в своем локальном пакетном файле, чтобы вы могли также локально настроить компиляцию, выполняемую на вашем сервере.
Встроенный в Mac
И сервер, и клиент встроены в Mac и Linux. В случае Mac и Ubuntu включить сервер так же просто, как найти нужный флажок.
На ПК установите cygwin или cygwin / X (cygwin / X позволит вам перенаправить вывод x-window с вашего компьютера с Linux на ваш компьютер с Windows - он устанавливает X-сервер)
Важные советы / конфигурационный файл
Никогда не используйте порт 22 на брандмауэре. Вы получите много попыток взлома, но оно того не стоит. Просто сделайте так, чтобы брандмауэр перенаправил другой порт на ваш сервер
Существуют широкие возможности конфигурации, которые позволяют значительно упростить команды ssh. Вот мой пример на работе:
Когда я набираю «ssh home» (больше ничего), он действует так, как будто я набрал:
а затем перенаправляет мой локальный порт 1025 на мой системный «mac» дома. Причина в том, что у меня есть другая запись в моем файле:
так что, как только я сделал «ssh home» и все еще открыл окно, я могу набрать «ssh mac», и компьютер на работе здесь на самом деле попытается подключиться к своему собственному порту 1025, который был перенаправлен на «mac»: 22 "другой командой, поэтому он подключится к моему Mac дома через брандмауэр.
Редактировать - классный скрипт!
Я выкопал старый сценарий, который я просто люблю - должен был вернуться и опубликовать его для всех, кому это может быть интересно. Скрипт называется "authMe"
Если у вас есть этот скрипт в вашем домашнем каталоге и есть хост, к которому вы можете подключиться (через ssh), тогда вы можете набрать «./authMe hostName».
При необходимости он создаст для вас пару открытых / закрытых ключей, затем он перейдет по ssh на другой компьютер и скопирует ваш открытый ключ (команда ssh запросит у вас пароль ...)
После этого команда SSH больше не должна запрашивать ваш пароль при подключении к этой удаленной системе, она будет использовать пару открытых / закрытых ключей.
Если ваш удаленный компьютер не всегда безопасен, вам следует подумать об установке «парольной фразы» при появлении запроса.
Вы также можете настроить сервер ssh на дальнем конце, чтобы запретить использование текстовых паролей (только ключей) для дополнительной безопасности.
источник
ssh-copy-id
, и это так же просто, какssh-copy-id user@someserver
Я люблю использовать
переключиться на предыдущий каталог. Очень полезно!
источник
Я недавно обнаружил
pv
команду (просмотрщик каналов), которая похожа на cat, но с деталями передачи.Так что вместо
Вы можете использовать
Так что вместо того, чтобы знать, когда закончится ваша операция, теперь вы будете знать!
Предоставлено Петерис Круминьш
источник
tee(1)
.Повторите предыдущую команду как root.
[Текущая верхняя команда на сайте http://www.commandlinefu.com , сайт, тематически подобный этому вопросу.]
источник
Нажмите Ctrl-R и начните вводить команду (или любую ее часть) - она ищет историю команд. Повторное нажатие Ctrl-R приведет к переходу к следующему совпадению, Enter выполнит текущую отображаемую команду, и стрелка вправо (по крайней мере) позволит вам сначала отредактировать ее.
Я использовал Linux около 7 лет в качестве основной ОС, прежде чем узнал об этом, но теперь, когда я это знаю, это очень удобно.
источник
stty -ixon
сначала отключить значение управления потоком XON / XOFF (это также делает Ctrl-Q доступным, по умолчанию он сопоставлен с Ctrl-V-цитируемой вставкой, но вы можете изменить его на что-то другое). ). Смотритеman stty
иman readline
для получения дополнительной информации.stty
Команда может быть добавлена в ваш~/.bashrc
Командная строка - забавная вещь. Я думаю, что вы можете многому научиться только самостоятельно, а все остальное вы узнаете случайно, наблюдая за кем-то, использующим командную строку.
Я годами использовал оболочку, кропотливо набирая имена каталогов вручную. Однажды я наблюдал, как друг бездельничал в системе, и он продолжал нажимать клавишу табуляции. Я спросил "почему ты нажимаешь на вкладку?" Ответ: он пытается завершить каталог или имя файла. Кто бы мог догадаться - вкладка пополнения! Введите немного файла или каталога, нажмите вкладку, и он попытается завершить то, что вы ввели (хотя поведение зависит от того, какая оболочка).
Однажды, сказал друг, смотрел на меня в командной строке и смотрел, как я набираю что-то вроде:
Кто бы мог догадаться !? Он никогда не знал о
popd
/pushd
. Думаю, мы даже ...источник
Выучи Vim.
Это (возможно) лучший редактор, но, безусловно, лучший редактор, доступный на голом сервере Linux.
источник
Иногда полезно оставить работающую программу даже после выхода из системы. Я видел некоторые решения, которые используют nohup или даже screen для этой цели. Самое простое из известных мне:
Вы также можете отсоединить запущенную программу:
источник
Когда я хочу убедиться, что я использую фактическую команду, а не псевдоним, я использую начальную обратную косую черту:
источник
builtin
".Этот совет сделает ваш CLI более удобным (по крайней мере, для меня):
создайте файл ~ / .inputrc со следующим содержимым:
Перезагрузите Bash (например, набрав "Exec Bash"). Когда вы набираете префикс команды и нажимаете стрелку вверх, вы просматриваете команды, начиная с вашего префикса, например, если вы набрали ssh, он покажет ваши прежние соединения с удаленными оболочками. Если ваша подсказка пуста, то стрелка вверх будет просматривать историю обычным способом.
источник
exec bash
man readline
bind -f ~/.inputrc
можете перезагрузить inputrc без необходимости запуска нового bash и уничтожения текущей среды.Используйте
&&
вместо;
выполнения нескольких команд одновременно. Он останавливается при возникновении ошибки и не выполняет другие команды.Классический пример:
источник
dosomething && echo "success" || echo "teh fail"
Когда я пишу циклы в командной строке в bash, я часто добавляю рискованные команды к команде 'echo'.
Таким образом, я в полной мере вижу «что-то рискованное», прежде чем запускать его. Помогает, когда ваша рискованная команда включает в себя переменные расширения и глобусы. И 'set -x' очень полезен при написании сценариев bash.
'set -x' включает отладку. См. Http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html для получения информации об отладке bash.
источник
требование
Вам необходимо проверить максимальную пропускную способность между 2 серверами.
Решение
На СЕРВЕРЕ1 делаем:
На СЕРВЕРЕ2 делаем:
Вы увидите вывод, такой как:
Интересным фактором здесь является 117 МБ / с , который показывает фактическую пропускную способность сети.
Пояснение :
Когда пакет начнет передаваться по сети, вы сможете увидеть статистику пропускной способности на сервере SERVER2, которая является довольно хорошей оценкой фактической максимально возможной пропускной способности между двумя серверами.
Копирование по UDP (для предотвращения издержек TCP).
Копирование из памяти (/ DEV / ноль) на SERVER1 в памяти (/ DEV / нуль) на SERVER2, предотвращая таким образом дискового ввода / вывода стать узким местом.
источник
Видеть структуры цветовых каталогов проще.
редактировать
источник
Несколько небольших указателей относительно просмотра журнала:
источник
tail -f
вы можете смотреть несколько журналов одновременно! Например:tail -f log1.txt -f log2.txt
Давным- давно я узнал от друга трюк, чтобы легко изменить расширение файла:
Расширение Shell расширит это до:
Это также может быть использовано для переименования файла другими способами, такими как добавление чего-либо в:
источник
ls -l /bin/c
затем нажать Alt-Shift- {, и это завершит что-то вродеls -l /bin/c{at,h{grp,mod,own,vt},p{,io},sh}
вас.Используйте «tar xf» для распаковки сжатых архивов. J для bzip2 и z для gzip не нужны, так как tar определит тип файла вашего архива. Ни один из них не является знаком «-» перед аргументами. Вы сэкономите много времени (за тысячелетие ;-)).
Еще лучше использовать unfoo для извлечения любого архива одной командой без лишних аргументов.
источник
alias ut="tar xf"
- делает извлечение архивов еще проще.Установите пакет завершения bash. Он содержит ряд предопределенных правил завершения для оболочки. Включите его, введя «source / etc / bash_completion», если ваш дистрибутив не делает этого за вас. Затем, например, когда вы заполняете после kpdf, вы увидите только список каталогов и файлов PDF. Это так же умно, как завершать удаленные файлы после scp ssh: // server / XXX (если вы включили логин без пароля).
источник
Я постоянно использую эти
ALT-. (ESC +. В некоторых терминалах) копирует последний использованный аргумент (супер-полезный)
CTRL-W удаляет слово
CTRL-L очистить терминал (как команда очистки, но быстрее)
ALT-B (ESC + B в некоторых терминалах) переместиться назад на слово
ALT-F (ESC + F в некоторых терминалах) двигаться вперед на слово
CTRL-E перейти к EOL
CTRL-A перейти к BOL
CTRL-R поиск в истории
источник
В bash я много пользуюсь ! $ . Он повторяет последний аргумент последней команды:
Он запустит ls, а затем, если вы захотите отредактировать его, вам не нужно его повторно печатать, просто используйте! $. Это действительно полезно для длинных путей / имен файлов. Также ! * Повторяет все аргументы предыдущей команды. Я не так часто это использую, но это выглядит полезным.
Я знаю, что они упоминались, но я часто использую vim, screen и cd.
Я забыл ноклобер:
От человека Баш :
источник
Alt-.
же самое .Переключитесь с bash на zsh , и вы увидите, как ваша производительность улучшится:
Google скажет вам еще много преимуществ.
источник
Старая школа, перемещение дерева каталогов из одного места в другое, сохранение символических ссылок, разрешений и всего такого хорошего:
или через сеть
Новая школа:
или через сеть
источник
tar xvBpf - -C /destination
==(cd /destination; tar xvBpf -)
Немного меньше печатать и легче использовать поверх ssh.rsync -avh
Лучше всего на одной машине -h
гарантирует, что жесткие ссылки передаются правильно, не превращая каждую ссылку в отдельный файл, хотя, если у вас огромное количество файлов, он может использовать много памяти.rsync -avzh . foo.com/destination
является эквивалентом для сети, и обычно вам не нужен, так-e ssh
как rsync будет знать, как использовать ssh.rsync -aSHuvrx --delete / --link-dest=/backup/$PREV /backup/$HOUR
Требование : у вас есть каталог, содержащий большой список файлов, которые вы хотели бы удалить. rm -r потерпит неудачу!
пример
Решение :
Пояснение :
Изменить: Исправление объяснения после комментария @ephemient.
find предоставит аргументы rm по максимально допустимым аргументам. Это позволит rm удалять файлы партиями, что является самым быстрым из известных мне методов без использования операции -delete самой find. Это эквивалентно
который вы можете найти полезным, если ваш
find
не поддерживает-exec ... +
.источник
\;
на+
: затемfind
будет делать то, чтоxargs
делает по умолчанию, что позволяет группировать аргументы в максимально возможной степени (без превышения предела списка аргументов). Или просто используйте-delete
intead of-exec rm
(GNU Findutils необходим для обоих)find ... -delete
, если ваша находка так наделена.Я так часто пользуюсь этими двумя советами, что подумал, что было бы неплохо поделиться:
Запустит последнюю команду в файле истории, начинающуюся с "foo" (например, я часто использую ее при компиляции
!gcc
.)Другой - это сочетание клавиш (Ctrl + O вместо Return), которое выполнит команду И отобразит следующую команду в файле истории. Например, когда я компилирую и тестирую файл, я всегда делаю 3 или 4 команды, выполняю, cd к каталогу теста, запускаю тест, cd к каталогу make-файла. Использование Ctrl + O делает эту задачу намного проще :)
Надеюсь, это поможет!
источник
Как использовать Subversion в Linux без помощи причудливых графических интерфейсов, которые могут быть недоступны.
Это удерживает многих разработчиков от использования Linux, как ни странно.
источник
Самая упущенная команда старой школы:
find
Вчера я исправил ошибку грубых разрешений:
источник
chmod 644 $(find . -type f)
,chmod 755 $(find . -type d)
-perm
опцию, чтобыfind
найти файлы, которые имеют определенные права доступа.Для таких оболочек, как
bash
иksh
, вы можете заставить командную строку реагировать на команды навигации, такие как ваш текстовый редактор:или же
позволит вам искать в вашей истории и перемещаться по командной строке так, как вы привыкли делать в текстовых файлах (например, в режиме vi нажатие, а
ESC
затем набор текста/string
будет искать в ваших предыдущих командах «строку» - вы можете использоватьn
иN
для перемещения между матчами)источник
grep мой друг Шутки в сторону.
Список
.rb
файлов, которые содержат текстclass foo
:Список
.rb
файлов, которые не содержат текстclass foo
:Перечислите
.rb
файлы, которые не содержат foo или bar (вы можете использовать любое регулярное выражение с -e, но вам нужно экранировать операторы):источник
Замена оболочки выполняется с помощью
^
:источник