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


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

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

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

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


112
2018-03-02 21:23


Источник


Почему Linux только? Многие советы могут быть полезны практически во всех вариантах Unix. - mouviciel
Этот вопрос может быть немного широк - для Linux-Unix достаточно использовать лучшие методы командной строки для заполнения целых книг ... - Jonik
Я согласен с тем, что советы unix, которые могут быть применены к Linux, также очень приветствуются, я написал linux, потому что A. Это то, с чем мы работаем здесь. Б., потому что в последние годы он получает более широкую общественную экспозицию, чем unix. - Maxim Veksler
Я думаю, что это отличная идея объединить список самых полезных и интересных команд, которые люди используют.
Являются ли они важными? refspecs.freestandards.org


Ответы:


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

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


111
2018-03-02 22:52



Наиболее распространенными переключателями, которые я использую, являются «screen -D -R» для отсоединения и возобновления моего последнего сеанса экрана и «screen -x» для просмотра того же сеанса сеанса из нескольких логинов. Кроме того, получите себе хороший .screenrc из dotfiles.org/.screenrc - Nick Devereaux
Еще одна приятная особенность экрана - вы можете поделиться терминалом с другими людьми, когда хотите что-то сотрудничать, используя экран -x - gareth_bowles


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 / X.

Конечно, 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
    hostname billshome.hopto.org
    Port=12345
    user=bill
    LocalForward=localhost:1025 mac:22

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

ssh -p 12345 bill@billshome.hopto.org

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

Host mac
    hostname localhost
    port=1025

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

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

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

#!/bin/bash
if [ ! -f ~/.ssh/id_dsa.pub ]
then
    echo 'id_dsa.pub does not exist, creating'
    ssh-keygen -tdsa
fi
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub

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

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

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

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

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


101



+1 очень приятный и компактный пост - Karsten
Небольшая заметка о SSH по порту 22: при условии, что у вас есть хороший пароль root, и у ваших пользователей нет ужасных паролей, просто запустить fail2ban (или что-то подобное) достаточно, чтобы избежать попыток взлома. Мне было очень досадно держать SSH в другом порту. - David Wolever
Иногда это может раздражать, но объем подключений был просто пугающим. Я знаю, что они не должны проходить, но это похоже на то, что если кто-то подходил к вам домой и каждый день возился с дверной ручкой - просто нервировал.
В большинстве версий ssh ​​сейчас есть встроенная версия вашей последней команды, она называется ssh-copy-id, и это так же просто, как ssh-copy-id user@someserver - JamesHannah
Другой способ сделать трюк «ssh mac» - использовать директиву ProxyCommand в вашем файле .ssh / config. Host mac ProxyCommand ssh -q home "nc% h% p" Это приведет к запуску netcat (nc) на дому и перенаправит ваше ssh-соединение прямо на mac. Я нахожу их более легкими в цепочке (например, если вам нужно подключиться к «дому», чтобы добраться до «рабочего бастиона», чтобы перейти на «работать с веб-сервером». - toppledwagon


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

cd -

для перехода к предыдущему каталогу. Очень полезно!


73



Я этого никогда не знал! Благодаря! В соответствующей заметке pushd и popd делают что-то подобное, создавая стек dirs. Эти трюки помогают при навигации по глубокой структуре.
Это чистое просветление. - Manuel Ferreria


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

Поэтому вместо

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

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

$ pv access.log | gzip > access.log.gz
611MB 0:00:11 [58.3MB/s] [=>      ] 15% ETA 0:00:59

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

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


69



$ gzip -c access.log> access.log.gz Почему не просто: $ gzip access.log
О, это работает :) Я просто взял пример с веб-сайта Петериса. - Nick Devereaux
Это похоже на старый добрый tee(1), - Daniel C. Sobral
Чрезвычайно полезная утилита, которую я всегда забываю о :-( - Patrick


sudo !!

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

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


53



Раскрытие информации - я запускаю commandlinefu.com - codeinthehole
Это спасло бы этого парня 16 символов: xkcd.com/149


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

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

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


46



Благодарю. Я использовал обратный поиск, но не смог понять, как перейти к следующему матчу. - Adam
Ctrl-S переходит к следующему совпадению. Возможно, вам придется stty -ixon сначала отключить значение управления потоком XON / XOFF (это также делает доступным Ctrl-Q, по умолчанию оно отображается так же, как Ctrl-V, кат-вставка, но вы можете изменить его на что-то еще). Видеть man stty а также man readline для получения дополнительной информации. stty команда может быть добавлена ​​в вашу ~/.bashrc - Dennis Williamson


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

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

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

coryking@cory ~/trunk/mozi $ pushd /etc
/etc ~/trunk/mozi
coryking@cory /etc $ popd
~/trunk/mozi
coryking@cory ~/trunk/mozi $

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


45



Для меня завершение вкладок кажется чем-то «очевидным», очень простым, но я никогда не знал о popd / pushd. Забавно. :) - Jonik
Также см. Этот ответ, чтобы иметь возможность вводить вкладку намного больше, чем команды, файлы и каталоги: stackoverflow.com/questions/603696//603919#603919 - Jonik
Это правда. Я узнал о предыстории поиска bash (ctrl-r), наблюдая за кем-то. Позже я понял, что это функция чтения и работает то же самое в других программах, которые включают readline (mysql, gdb, python -i, clisp и т. Д.). - sigjuice
Как вы могли использовать «оболочку» в течение многих лет и не знали о завершении табуляции? - prestomation
При работе с pushd / popd не забывайте упоминать команду каталоги, Он показывает, что находится в стеке pushd / popd. - slm