« чтобы их можно было рассматривать как обычные символы в echoкоманде. Кроме того, вы можете создать временный пакетный файл с помощью текстового редактора, такого как Блокнот.

Затем используйте startдля запуска командного файла:

start "" foobar.cmd
  -or-
start "" "temporary foobar.cmd"

Примечание . Пустая пара двойных кавычек предназначена для того, "Title"что будет показано в строке заголовка командного окна, startкоторое откроется. Этот "Title"аргумент технически является необязательным аргументом для start, но на самом деле он необходим , если команда, которая startбудет выполняться , заключена в двойные кавычки. Например, во втором примере:

start "" "temporary foobar.cmd"

если вы пропустите пустую пару двойных кавычек, как это:

start "temporary foobar. " чтобы их можно было рассматривать как обычные символы в команде echo .  Кроме того, вы можете создать временный пакетный файл с помощью текстового редактора, такого как Блокнот.

Затем используйте start для запуска командного файла:

start "" foobar.cmd
  -or-
start "" "temporary foobar.cmd"

Примечание: Пустая пара двойных кавычек для "Title" , который будет показан в заглавной строке окна командной строки , которые start откроются. Этот аргумент

"Title" технически является необязательным аргументом для start , но на самом деле он необходим , если команда, которая start , запускается в двойных кавычках. Например, во втором примере:

start "" "temporary foobar.cmd"

если вы пропустите пустую пару двойных кавычек, как это:

start "temporary foobar. & exit>foobar.cmd & start "" /w foobar.cmd & del foobar.cmd

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

start с ключом /w , в противном случае временный пакетный файл, вероятно, будет удален, прежде чем он сможет запустить.

Содержание

cmd несколько команд в одной строке

На чтение 5 мин. Просмотров 25 Опубликовано

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

команда1 & команда2 — Используется для разделения нескольких команд в одной командной строке. В cmd.exe выполняется первая команда, затем вторая команда.

команда1 && команда2 — Запускает команду, стоящую за символом &&, только если команда, стоящая перед этим символом была выполнена успешно.

В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.

команда1 || команда2 — Запускает команду, стоящую за символом ||, только если команда, стоящая перед символом || не была выполнена. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая не была выполнена (полученный код ошибки превышает ноль).

Пример:

С файла file.txt будет снят атрибут «Скрытый» и если команда attrib при этом не вернёт ошибку, файл будет переименован в file.tmp.

Комментарии

Большое спасибо за статью! Именно то, что мне было нужно.

Офигеть! Полезные советы! Спасибо!

Спасибо большое. Давно искал.

Крутяк, добавлю в закладки.

пфффффффффффф вот это лайфхак епт, я тут тыркаю по 6 команд в гите поштучно, а тут вон оно че Михалыч. спасибо большое!

одна вертикальная черта | используется когда нужно выполнить одновременно несколько команд, не зависимо от результата и завершения предыдущей команды

Одна вертикальная черта | перенаправляет вывод предыдущей команды следующей.

Например type «file1.txt» | find »string1″ ищет в файле строку содержащую «string1» и выводит ее. Этот вывод можно отправить через | на следующую команду. Или, используя пример: (type «file1.txt» | find »string1″ >nul) && (команды если строка найдена) || (команды если строка не найдена)

При одной вертикальной линии команды выполняются всё равно последовательно.

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

Выполнение команд последовательно

Например, мы хотим выполнить сначала одну команду. Затем, когда она отработает (вернет управление в командную строку), нам нужно запустить вторую команду. Для этого служит символ «;». Таким образом, если набрать в терминале:

то сначала запустится первая команда command1 , а когда управление вернется в терминал, то запустится вторая и так далее.

Зависимое выполнение команд

Символы && и || означают не что иное, как логическое И и ИЛИ . Поэтому когда мы пишем:

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

то команда command2 будет выполнена только в том случает, если command1 вернула ошибку (не нулевой код завершения). Каждая следующая команда запускается только если предыдущая вернула ошибку.

Такое поведение объясняется очень просто: интерпретируя И нет смысла выполнять вторую команду, если первая вернула ошибку. А интерпретируя ИЛИ нет смысла выполнять вторую команду если первая выполнилась с успехом.

Этот же результат будет получен в результате выполнения кода:

Операторы && и || можно объединять в одной командной строке:

Первая команда echo выполняется при удачном выполнении команды grep , а вторая — при неудачном.

Эти операторы часто используются в условиях if :

Обе команды должны возвратить нулевой код завершения (логическая операция И ), чтобы выполнилась команда command3 . Этот фрагмент кода можно записать и так:

Еще одни пример использования:

Хотя бы одна команда должна возвратить нулевой код завершения (логическая операция ИЛИ ), чтобы выполнилась команда command3 . Этот фрагмент кода можно записать и так:

Как выполнить несколько команд в командной строке Windows только с одной строкой?

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

Это не работает. Есть ли символ или разделитель типа ‘;’ выполнить что-то подобное?

7 ответов

&& выполнит команду 2, когда команда 1 будет завершена, если она не сработает.

& будет выполняться независимо.

Как минимум в MS-DOS 6.22 я использовал ключ Ctrl + T , чтобы получить символ абзаца. Это работало так же, как и & amp; , упомянутое Phoshi.

» чтобы они могли рассматриваться как обычные символы в команде echo . Кроме того, вы можете создать временный пакетный файл с помощью текстового редактора, например «Блокнот».

Затем используйте start для запуска командного файла:

Note: The empty pair of double-quote marks is for the «Title» that will be shown in the title-bar of the command window that start will open. This «Title» argument is technically an optional argument to start , but it is actually required, if the command that start will run is double-quoted. For instance, in the second example:

start «» «temporary foobar.cmd»

if you leave out the empty pair of double quote marks like this:

start «temporary foobar.cmd»

then start will open a new command window, and use «temporary foobar.cmd» as the new command window «Title» , and nothing will be executed in the new command window. )

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

Вы можете поместить все это вместе на одну строку и даже удалить (удалить) временный пакетный файл ( foobar.cmd ):

Обратите внимание, что если вы собираетесь удалить временный пакетный файл, вам нужно запустить start с помощью переключателя /w , в противном случае временный командный файл, вероятно, будет удален до того, как он сможет запустить.

bat несколько команд в одной строке

На чтение 6 мин. Просмотров 36 Опубликовано

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

команда1 & команда2 — Используется для разделения нескольких команд в одной командной строке. В cmd.exe выполняется первая команда, затем вторая команда.

команда1 && команда2 — Запускает команду, стоящую за символом &&, только если команда, стоящая перед этим символом была выполнена успешно. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.

команда1 || команда2 — Запускает команду, стоящую за символом ||, только если команда, стоящая перед символом || не была выполнена. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая не была выполнена (полученный код ошибки превышает ноль).

Пример:

С файла file.txt будет снят атрибут «Скрытый» и если команда attrib при этом не вернёт ошибку, файл будет переименован в file.tmp.

Комментарии

Большое спасибо за статью! Именно то, что мне было нужно.

Офигеть! Полезные советы! Спасибо!

Спасибо большое. Давно искал.

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

будет записываться как:

Правило для каретки:

Каретка на конце строки добавляет следующую строку, первый символ присоединяемой строки будет экранирован.

Вы можете использовать каретку несколько раз, но полная строка не должна превышать максимальную длину строки

8192 символов (Windows XP, Windows Vista и Windows 7).

Чтобы подавить экранирование следующего символа, вы можете использовать перенаправление.

Перенаправление должно быть непосредственно перед кареткой. Но есть одно любопытство с перенаправлением перед кареткой.

Если вы поместите маркер в карете, маркер будет удален.

Также можно вставлять строки в строку:

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

Как выполнить несколько команд в командной строке Windows только с одной строкой?

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

Это не работает. Есть ли символ или разделитель типа ‘;’ выполнить что-то подобное?

7 ответов

&& выполнит команду 2, когда команда 1 будет завершена, если она не сработает.

& будет выполняться независимо.

Как минимум в MS-DOS 6.22 я использовал ключ Ctrl + T , чтобы получить символ абзаца. Это работало так же, как и & amp; , упомянутое Phoshi. Это будет работать, однако, если у вас работает doskey.exe.

Если вы хотите выполнить несколько команд с 1 строкой, где вы, например, запускаете команды с start , если вы хотите выполнить команду следующим образом:

Затем вам нужно сделать это за 2 шага (однострочное решение находится в конце этого ответа). » чтобы они могли рассматриваться как обычные символы в команде echo . Кроме того, вы можете создать временный пакетный файл с помощью текстового редактора, например «Блокнот».

Затем используйте start для запуска командного файла:

Note: The empty pair of double-quote marks is for the «Title» that will be shown in the title-bar of the command window that start will open. This «Title» argument is technically an optional argument to start , but it is actually required, if the command that start will run is double-quoted. For instance, in the second example:

start «» «temporary foobar.cmd»

if you leave out the empty pair of double quote marks like this:

start «temporary foobar.cmd»

then start will open a new command window, and use «temporary foobar.cmd» as the new command window «Title» , and nothing will be executed in the new command window. )

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

Вы можете поместить все это вместе на одну строку и даже удалить (удалить) временный пакетный файл ( foobar.cmd ):

Обратите внимание, что если вы собираетесь удалить временный пакетный файл, вам нужно запустить start с помощью переключателя /w , в противном случае временный командный файл, вероятно, будет удален до того, как он сможет запустить.

W2K — работа с командной строкой (cmd.exe) | windows

Перевод документации Microsoft TechNet, где описаны основные принципы работы с командной строкой.

Командная оболочка — это отдельный программный продукт, который обеспечивает прямую связь между пользователем и операционной системой. Текстовый пользовательский интерфейс командной строки предоставляет среду, в которой выполняются приложения и служебные программы с текстовым интерфейсом. В командной оболочке выполняются программы и результат выполнения отображается на экране в виде, сходном с интерпретатором Command.com MS-DOS. Командная оболочка операционной системы W2K использует для перевода введенной команды в формат, понятный системе, интерпретатор команд Cmd.exe, который загружает приложения и распределяет поток данных между приложениями.

Имеется возможность использовать командную оболочку для создания и редактирования пакетных файлов (также называемых сценариями, обычно пишутся на Basic, расширение файла vbs), что позволит автоматизировать выполнение обычных задач. Например, сценарии можно использовать для автоматизации управления учетными записями пользователей и ежедневной архивацией в нерабочие часы. Также можно использовать вариант сервера сценариев Windows, запускаемый из командной строки — CScript.exe (или GUI-версия wscript.exe), чтобы выполнить в командной оболочке более сложные сценарии.

Если запустить файл сценария (например, двойным щелчком или из командной строки), то по умолчанию используется wscript. exe (это поведение по умолчанию можно изменить, см. подсказку по команде CScript.exe, она выводится, если запустить CScript.exe без параметров).
Выполнение операций с помощью пакетных файлов является более эффективным, чем с помощью интерфейса пользователя. Пакетные файлы принимают все команды, доступные из командной строки.

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

1. Запуск командной строки — Пуск\Выполнить…\cmd
2. Выход из командной строки — exit.
3. Если набрать в командной строке cmd и нажать Enter, то запускается вложенный интерпретатор cmd, т. е. теперь для выхода надо дважды набрать команду exit.
4. Можно использовать операторы перенаправления команд (см. далее).

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

В следующей таблице представлены доступные дескрипторы.

Дескриптор Числовой эквивалент дескриптора Описание
STDIN 0 Ввод с клавиатуры.
STDOUT 1 Вывод в окно командной строки.
STDERR 2 Вывод ошибок в окно командной строки.
UNDEFINED 3 .. 9 Дескрипторы определяются индивидуально для каждой прикладной программы.

Номера от 0 до 9 представляют первые 10 дескрипторов. Для запуска программы и перенаправления любого из 10 дескрипторов используется интерпретатор команд Cmd.exe. Для задания требуемого дескриптора перед оператором перенаправления введите его номер. Если дескриптор не определен, то по умолчанию оператором перенаправления ввода «<» будет ноль (0), а оператором перенаправления вывода «>» будет единица (1). После ввода оператора «<» или «>» необходимо определить, откуда нужно читать или куда нужно записывать данные. Можно задать имя файла или любой из существующих дескрипторов.

Чтобы определить перенаправление для существующих дескрипторов, используйте знак амперсанд (&), за которым идет номер перенаправляемого дескриптора (то есть, &номер_дескриптора). Например, для перенаправления дескриптора 2 (STDERR) в дескриптор 1 (STDOUT) введите:
2>&1

В следующей таблице описаны операторы перенаправления потоков ввода и вывода.

Оператор перенаправления Описание
> Записывает данные на выходе команды вместо окна командной строки или дескриптора в файл или на устройство, например, на принтер.
< Читает поток входных данных команды из файла, а не с клавиатуры или дескриптора.
>> Добавляет выходные данные команды в конец файла, не удаляя при этом существующие данные файла.
>& Считывает данные на выходе одного дескриптора как входные данные для другого дескриптора.
<& Считывает входные данные одного дескриптора как выходные данные другого дескриптора.
| Считывает выходные данные одной команды и записывает их на вход другой команды. Эта процедура известна под названием «канал».

По умолчанию входные данные команды (дескриптор STDIN) отсылаются с клавиатуры интерпретатору команд Cmd.exe, и Cmd.exe отправляет выходные данные команды (дескриптор STDOUT) в окно командной строки.

Перенаправление ввода (<). Чтобы перенаправить вход с клавиатуры в файл или на устройство, используйте оператор «<». Например, для ввода данных в команду sort из файла File.txt введите:
sort Содержимое файла File.txt появится в командной строке в виде списка в алфавитном порядке.
Оператор «<» открывает файл с заданным именем только для чтения. Поэтому с его помощью нельзя записывать в файл. Например, при запуске программы с помощью перенаправления <&2 все попытки прочитать дескриптор 0 заканчиваются неудачей, так как дескриптор 2 первоначально открыт с доступом только для чтения.

Примечание: 0 это дескриптор по умолчанию для оператора перенаправления ввода <.

Перенаправления вывода (>). Выходные данные практически всех команд высвечиваются в окне командной строки. Даже команды, выводящие данные на диск или принтер, выдают сообщения и запросы в окне командной строки. Чтобы перенаправить вывод из окна командной строки в файл или на устройство, используется оператор «>». Этот оператор используется с большинством команд. Например, для перенаправления вывода команды dir в файл dirlist. txt введите:

Если файл dirlist.txt не существует, интерпретатор команд Cmd.exe создаст его. Если файл существует, Cmd.exe заменит информацию в файле на данные, полученные от команды dir.

Для запуска команды netsh routing dump и отправки результатов ее работы в файл Route.cfg введите:

netsh routing dump>c:\route.cfg

Оператор > открывает указанный файл только для записи. Поэтому с помощью данного оператора файл прочитать нельзя. Например, при запуске программы с перенаправлением >&0 все попытки записать дескриптор 1 заканчиваются неудачей, так как дескриптор 0 первоначально открыт с доступом только для чтения.

Примечание: 1 является дескриптором по умолчанию для оператора перенаправления вывода >.

Дублирование дескрипторов. Оператор перенаправления & дублирует выходные или входные данные с одного заданного дескриптора на другой заданный дескриптор. Например, для отправки выводимых данных команды dir в файл File. txt и отправки ошибки вывода в файл File.txt введите:

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

Использование оператора & для перенаправления ввода и дублирования. Чтобы использовать оператор перенаправления ввода (<) с оператором дублирования (&), указанный файл должен существовать. Если входной файл существует, Cmd.exe открывает его только для чтения и отправляет его содержимое в файл, как если бы ввод выполнялся с клавиатуры. При задании дескриптора интерпретатор команд Cmd.exe дублирует его в дескриптор, существующий в системе.

Например, для считывания файла File.txt на вход в дескриптор 0 (STDIN) введите:

Для открытия файла File.txt, сортировки его содержимого и последующей отправки в окно командной строки (т. е. в поток STDOUT) введите:

Для того чтобы найти файл file.txt и перенаправить дескриптор 1 (STDOUT) и дескриптор 2 (STDERR) в search.txt введите:

findfile file.txt > search.txt 2 < &1

Для дублирования определенного пользователем дескриптора 3 в качестве входной информации для дескриптора 0 (STDIN) введите:

Использование оператора & для перенаправления вывода и дублирования. При перенаправлении вывода в файл и задании существующего имени файла интерпретатор команд Cmd.exe открывает файл с доступом только для записи и переписывает его содержимое. Если дескриптор задан, интерпретатор команд Cmd.exe дублирует файл в существующий дескриптор. Для дублирования определенного пользователем дескриптора 3 в дескриптор 1 введите:

Для перенаправления всех выходных данных, включая выходные данные дескриптора 2 (поток STDERR), из команды ipconfig в дескриптор 1 (поток STDOUT) и последующего перенаправления выходных данных в файл Output.log, введите:

ipconfig.exe >> output.log 2 > &1

Использование оператора >> для добавления вывода. Для добавления вывода в файл без потери содержащихся в нем данных используется двойной символ «больше» (то есть >>). Например, следующая команда добавляет список каталогов, созданный командой dir, в файл dirlist.txt:

Для добавления выходных данных команды netstat в конец файла tcpinfo.txt введите:

Использование оператора канала (|) — pipe. Оператор канала «вертикальная линия» (|) забирает выходные данные одной команды (по умолчанию STDOUT) и направляет их на вход другой команды (по умолчанию STDIN). Например, следующая команда сортирует каталог:

В данном примере обе команды запускаются одновременно, но команда sort приостанавливает работу до получения выходных данных команды dir. Команда sort использует выходные данные команды dir в качестве своих входных данных, а затем свои выходные данные отправляет в дескриптор 1 (STDOUT).

Комбинирование команд с операторами перенаправления. Комбинируя команды-фильтры с другими командами и именами файлов, можно создавать команды на заказ. Например, для сохранения имен файлов, содержащих строку «log», используется следующая команда:

dir /b | find "log" loglist.txt

Выход команды dir отсылается в команду-фильтр find. Имена файлов, содержащие строку «LOG», хранятся в файле loglist.txt в виде списка (например, NetshConfig.log, Logdat.svd и Mylog.bat).

При использовании более одного фильтра в одной команде их необходимо отделять с помощью канала (|). Например, следующая команда ищет в каждом каталоге диска C файлы, в названии которых присутствует строка «Log», и выводит их постранично на экран:

dir c:\ /s /b | find "log" | more

Наличие канала (|) указывает Cmd.exe, что выход команды dir нужно отправить команде-фильтру find. Команда find выбирает только те имена файлов, в которых содержится строка «LOG». Команда more выводит на экран имена файлов, полученные командой find с паузой после заполнения каждого экрана.

5. Для командной строки возможно использование фильтров, что позволяет управлять выводом информации. Всего есть 3 команды-фильтра:

More     Отображает содержимое файла или вывода команды в одном окне командной строки за раз.
Find     Поиск указанных символов в файлах и выходе команды.
Sort     Сортировка файлов и выхода команды по алфавиту.
 
6. Использование нескольких команд и символов условной обработки.

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

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

Символ Синтаксис Определение
& […] команда1 & команда2 Используется для разделения нескольких команд в одной командной строке. В Cmd.exe выполняется первая команда, затем вторая команда.
&& […] команда1 && команда2 Запускает команду, стоящую за символом &&, только если команда, стоящая перед этим символом, была выполнена успешно (вернула значение 0). В Cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.) или кавычки, если эти символы передаются в качестве аргументов.
• Если команда завершает операцию успешно, возвращается нулевой (0) код ошибки или не возвращается никакого кода. Дополнительные сведения о кодах завершения см. в разделе Использование пакетов Windows Deployment Kit и Windows Resource Kit.

7. Использование оператора канала (|) в скрипте vbs. Создайте файл test.vbs с таким содержимым:

Наберите в командной строке:

cscript test.vbs //Nologo | cmd

После нажатия Enter запустится калькулятор.

Консоль Windows — связывание команд

Использование нескольких команд и символов условной обработки

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

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

& […]

команда1 & команда2

Используется для разделения нескольких команд в одной командной строке. В Cmd.exe выполняется первая команда, затем вторая команда.

&& […]

команда1 && команда2

Запускает команду, стоящую за символом &&, только если команда, стоящая перед этим символом была выполнена успешно. В Cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.

|| […]

команда1 || команда2

Запускает команду, стоящую за символом ||, только если команда, стоящая перед символом || не была выполнена. В Cmd.exe выполняется первая команда.) или кавычки, если эти символы передаются в качестве аргументов.

Если команда завершает операцию успешно, возвращается нулевой (0) код ошибки или не возвращается никакого кода.

Команды командной строки, которые должен знать каждый пользователь Windows

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


Если вы никогда не использовали командную строку, это руководство поможет вам освоить ее и расскажет о некоторых CMD командах, которые вы должны знать на случай возникновения чрезвычайных ситуаций.

Для доступа к ней в Windows 7 или выше вы можете набрать в панели поиска меню «Пуск» «cmd» или «командная строка». Также можно найти ее здесь: Меню «Пуск»- Все программы –Стандартные — Командная строка. Полный список параметров каждой из приведенных ниже команд вы можете найти на сайте Microsoft.

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

Основные команды командной строки

DIR — сокращение от Directory, эта CMD команда для новичка выводит список всех файлов и папок в определенном каталоге. А также их размер, расширение и свободное пространство, оставшееся на диске. Команда dir в командной строке может быть изменена с помощью дополнительных параметров, таких как DIR /р (выводит список по страницам), DIR /q (выводит информацию о владельце сайта), DIR /w (выводит список в расширенном формате с максимальным количеством файлов в одной строке), DIR / d (выводит список в расширенном формате с разбивкой на столбцы), DIR /n (выводит длинный список одной строкой), DIR /l (выводит несортированный список имен каталогов и файлов в нижнем регистре), DIR /b (выводит список файлов без дополнительной информации). DIR /s выводит список файлов и директорий данного каталога, а также всех подкаталогов. Введя DIR/?, вы увидите список всех доступных параметров.

Команда CD командной строки или CHDIR (Change Directory) предназначена для того, чтобы сменить каталог. Команда выполняет несколько операций. CD перемещает вас на самый верх дерева каталогов. CD .. перемещает вас в родительский каталог по отношению к текущему. CD имя-каталога перемещает вас в этот каталог. Введите CD, чтобы вывести на экран имя текущего каталога.

MD или MKDIR (Make Directory) позволяет создать каталог (папку). Чтобы создать каталог, используйте следующий синтаксис: MD имя-каталога.

CLS очищает экран. Эта команда CMD в Windows применяется, если эмулятор командной строки заполнен перечнем команд и их операций.

EDIT имя-файла позволяет изменять содержимое файла.

Команда DEL позволяет удалить один или несколько файлов. В качестве альтернативы можно использовать команду ERASE. Для удаления файла используйте синтаксис DEL имя-файла.

Если вы хотите удалить все файлы с определенным расширением, то введите DEL *.doc, и из текущего каталога будут удалены все файлы с расширением doc. DEL *.* удаляет все файлы из текущего каталога, поэтому будьте осторожны с этой командой.

RD или RMDIR — вы можете использовать эту команду, чтобы удалить папку, но папка должна быть пустой. Синтаксис довольно прост. Введите RD имя-папки. Если вы хотите удалить папку, которая не является пустой, вы можете использовать RD / S имя-папки. Будьте осторожны с этой командой, так как она удаляет папку и все ее содержимое без возможности восстановления.

RENAME, или REN переименовывает файл или каталог. Синтаксис этой команды CMD управления компьютером следующий: RENAME текущее-имя новое-имя. Например, если вы хотите переименовать файл с именем iPhone.txt в iPad.txt, введите RENAME iPhone.txt iPad.txt.

MOVE позволяет переместить один или несколько файлов из одного каталога в другой. Например, если вы хотите переместить файл 1.txt размещенный в текущей директории в папку с именем Numericals внутри текущего каталога, введите MOVE 1.txt Numericals.
Если вы пытались переименовать директорию (папку) с помощью команды RENAME приведенным выше способом, то знаете, что это не работает. В этом нам поможет команда MOVE, так как она также может быть использована для переименования каталогов. Введите MOVE текущее-имя новое-имя, где текущее имя — это имя директории в текущей папке.

Команда COPY позволяет скопировать один или несколько файлов из одного места в другое. Команда позволяет объединять файлы одного и того же типа. Давайте посмотрим на различные примеры применения команды COPY:

  • COPY имя-файла имя-папки скопирует файл имя-файла в уже существующую папку;
  • COPY имя-файла новое-имя-файла создает копию файла с новым именем;
  • COPY *.doc Word копирует все файлы с расширением .doc в папку с именем Word.

CMD основная команда XCOPY предназначена для файлов и каталогов, включая подкаталоги. Простейший вариант ее использования — скопировать все файлы с одного диска на другой. Синтаксис: XCOPY Исходный-диск: Диск-назначения: /e, где параметр /е позволяет копировать все подкаталоги, даже если они пусты. Используйте /s, чтобы запретить копирование пустых директорий. Вы можете использовать имена папок исходного диска или диска назначения, чтобы просто скопировать все содержимое одной папки в другую.

Дополнительные команды

Команда FORMAT в CMD позволяет стереть информацию с винчестера или подготовить его для копирования данных, если вы установили новый диск. Синтаксис для использования команды: FORMAT диск:. Если вы хотите переформатировать конкретный диск под конкретную файловую систему, вы можете сделать это с помощью команды: FORMAT диск: / FS: файловая-система, где файловая-система может быть: FAT, FAT32 или NTFS. После применения команды все данные с диска будут бесследно стерты.

FC — используется для сравнения двух файлов друг с другом. Предположим, у вас есть два файла gadgets360_1.txt и gadgets360_2.txt. Чтобы сравнить их, нужно ввести следующую команду: FC gadgets360_1.txt gadgets360_2.txt.

IPCONFIG выводит подробную информацию о сетевых настройках: IP-адрес, а также сообщает тип сетевого соединения вашего компьютера (с помощью Wi-Fi или Ethernet). Введите IPCONFIG / ALL, чтобы получить обзор всех сетевых настроек, включая то, какие DNS-серверы вы используете. Введите IPCONFIG / RENEW, чтобы получить новый IP-адрес с сервера DHCP. Это может помочь, если у вас возникли проблемы с подключением к интернету.

CMD ping команда — если вы не уверены, доступен ли сайт, который вы хотите посетить, введите PING, за которым следует IP-адрес или доменное имя. Например, PING google.com. Если на экране появится надпись Destination Net Unreachable, возможно, у вас отсутствует подключение к интернету. Если появятся сообщения Host is down или Request timeout, сайт может быть недоступен. Если все в порядке, вы должны увидеть что-то похожее на это: 64 bytes from 173.194.36.73: icmp_seq=0 ttl=56 time=118.355 ms.

Команда SHUTDOWN может пригодиться вам, если кнопка «Завершение работы» в меню «Пуск» не работает из-за действия вредоносных программ. Для завершения работы компьютера (для Windows) введите Shutdown / S. Чтобы перезапустить компьютер — Shutdown / R.

CHKDSK — CMD команда используется для того, чтобы проверить, может ли ваша операционная система правильно прочитать жесткий диск или любой другой носитель. Синтаксис команды: CHKDSK C: — замените C буквой диска, который нужно проверить. Введите CHKDKS /? чтобы посмотреть другие варианты.

Одна строка с несколькими командами с использованием командного файла Windows

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

&& приводит к условному выполнению второй команды.Вторая команда выполняется только в том случае, если первая команда была успешной, что означает выход с кодом возврата 0.

Альтернативное объяснение см. В разделе «Условное выполнение».

  dir & md folder1 и переименовать папку folder1 mainfolder
  

, следовательно, равно

  реж
md folder1
переименовать папку1 в основную папку
  

Многострочная замена для

  dir && md folder1 && переименовать папку1 mainfolder
  

будет

  реж
если не ошибка уровень 1 (
   md folder1
   если не ошибка уровень 1 (
      переименовать папку1 в основную папку
   )
)
  

, если не уровень ошибки 1 означает, что предыдущая команда не , а не завершилась с кодом выхода больше 0 .Поскольку команды dir и md никогда не выходят с отрицательным значением, просто с 0 или больше (как почти все команды и консольные приложения), а значение 0 является кодом выхода для успеха, это правильный метод тестирования при успешном исполнении dir и md .

Другие полезные темы о переполнении стека о errorlevel :

Следует проявлять осторожность при смешивании безусловных операторов и с условными операторами, такими как && и || из-за порядка выполнения не обязательно является порядком команд в командной строке.

Пример:

  каталог "C: \ Users \% UserName%" / AD 2> nul || dir "% UserProfile%" / AD & echo Путь к профилю пользователя: "% UserProfile%"
  

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

  каталог "C: \ Users \% UserName%" / AD 2> nul
если errorlevel 1 каталог "% UserProfile%" / AD
echo Путь к профилю пользователя: "% UserProfile%"
  

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

Необходимо использовать ( и ) при выполнении ECHO только в том случае, если первый DIR не работает после второго DIR независимо от результата второго DIR .

  каталог "C: \ Users \% UserName%" / AD 2> nul || (каталог "% UserProfile%" / AD & echo Путь к профилю пользователя: "% UserProfile%")
  

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

  каталог "C: \ Users \% UserName%" / AD 2> nul
если ошибка уровня 1 (
    каталог "% UserProfile%" / AD
    echo Путь к профилю пользователя: "% UserProfile%"
)
  

Ответ на третий вопрос см. В моем ответе на вопрос Как вызвать командный файл в родительской папке текущего командного файла? где я объяснил различия при запуске командного файла с помощью команды call или команды start или ни одной из этих двух команд из командного файла.

Выполнить несколько команд с одной строкой в ​​командной строке Windows?

Если вы хотите выполнить несколько команд в одной строке, где вы начинаете команды с , начните , например, если вы хотите выполнить такую ​​команду:

  start "" netsh dump && pause
  

Затем вам нужно сделать это в 2 этапа (однострочное решение находится в конце этого ответа). & exit> foobar.« чтобы их можно было рассматривать как обычные символы в команде echo . Кроме того, вы можете создать временный командный файл с помощью текстового редактора, например Блокнота.

Затем используйте start для запуска командного файла:

  start "" foobar.cmd
  -или же-
start "" "временный foobar.cmd"
  

Примечание: Пустая пара двойных кавычек предназначена для «Заголовок» , который будет отображаться в строке заголовка командного окна, которое откроется start .Этот аргумент «Заголовок» технически является необязательным аргументом для start , но на самом деле это требуемый , если команда, запускаемая start , заключена в двойные кавычки. Например, во втором примере:

start "" "временный foobar.cmd"

, если вы оставите пустую пару двойных кавычек, например:

начать "временный foobar.cmd"

, затем start откроет новое командное окно и будет использовать временный foobar дюймов.cmd " как новое командное окно " Заголовок ", и ничего не будет выполнено в новом командном окне.)

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

  start "" / w foobar.cmd
  

Вы можете поместить все это в одну строку и даже удалить (удалить) временный командный файл ( foobar.& exit> foobar.cmd & start "" / w foobar.cmd & del foobar.cmd

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

bash — объединить две команды в одну команду

Вы указали, что хотите запустить

  text2file  имя-отсканированного-документа   

для выполнения двух команд:

  конвертировать Тесс.jpg tess.tif
tesseract tess.tif tess
  

В этом случае вы хотите написать простой сценарий или определить функцию оболочки. Вы упомянули, что думали, что написанное вами может содержать % 1 . Вот как пакетный файл Windows (а до этого — DOS) будет использовать первый переданный ему аргумент командной строки, но в Bash вместо этого позиционные параметры равны $ {1} , $ {2} и т. Д. 1 (с дополнительными скобами { } ниже $ {10} ).Таким образом, вы должны написать $ 1 , а не % 1 .


Чтобы создать сценарий оболочки, создайте файл с именем, которое вы хотите для команды ( text2file ), со следующим содержимым:

  #! / Bin / bash
convert "$ 1.jpg" "$ 1.tiff"
tesseract "$ 1.tiff" "$ 1"
  

$ 1 заменяется первым аргументом командной строки, переданным сценарию. Он может содержать пробелы, просто не забудьте заключить его в кавычки при запуске скрипта. Двойные кавычки около $ 1 в самом скрипте предназначены для предотвращения нежелательного разбиения и подстановки слов (которые являются дополнительными расширениями, которые в противном случае были бы выполнены в результате расширения параметра).

Если вы хотите, чтобы команда tesseract запускалась только в случае успеха convert , вы можете поместить && после команды convert :

  #! / Bin / bash
convert "$ 1.jpg" "$ 1.tiff" &&
tesseract "$ 1.tiff" "$ 1"
  

&& не должно быть перед новой строкой, но за ним может следовать один , если вам нравится , или вы можете удалить новую строку сразу после него, как показано в ответе Giiba.То есть показанная там техника полностью верна (хотя она не представлена ​​в контексте написания сценария).

( && — один из двух самых популярных способов достижения этого. Другой — set -e , который в данном случае будет работать нормально, но может быть в значительной степени не интуитивно понятным в некоторых своих эффектах.)

Затем отметьте исполняемый файл сценария, запустив:

  chmod + x text2file
  

Затем вы можете запустить сценарий, используя путь к нему, содержащий хотя бы один /.Итак, из того же каталога, в котором находится скрипт:

  ./text2file  имя-отсканированного-документа   

Чтобы иметь возможность запускать его как text2file и откуда угодно, поместите файл в каталог, указанный в вашей переменной среды $ PATH . Я рекомендую ~ / bin (т.е. каталог bin , расположенный непосредственно внутри вашего домашнего каталога). Если этого каталога не существует, вы можете его создать. При всех последующих входах он будет автоматически добавлен в $ PATH , так как ~ /.профиль содержит код, который проверяет, существует ли ~ / bin , и добавляет его к $ PATH , если это так.

Тогда вы должны запустить:

  text2file  имя-отсканированного-документа   

В приведенном вами примере это всего лишь:

  text2file tess
  

$ 1 расширяется до tess , когда он запускается таким образом, поэтому вы не должны (и фактически не должны) записывать суффикс типа файла после tess при его запуске.Вот пример того, как вы запустите его, когда имя из двух слов содержит пробелы:

  text2file 'два слова'
  

Если вместо этого вы предпочитаете реализовать text2file как функцию оболочки, вы можете поместить это определение в конец ~ / .bashrc :

  text2file () {
    convert "$ 1.jpg" "$ 1.tiff"
    tesseract "$ 1.tiff" "$ 1"
}
  

или:

  text2file () {
    convert "$ 1.jpg" "$ 1.tiff "&&
    tesseract "$ 1.tiff" "$ 1"
}
  

Тогда он будет доступен во всех ваших запускаемых впоследствии интерактивных оболочках Bash. Если вы хотите использовать его в уже запущенной оболочке, вы можете указать источник ~ / .bashrc (. ~ / .Bashrc ), или вы можете напрямую запустить это определение функции (т.е. код, показанный выше) в ракушка.

При использовании интерактивной оболочки Bash вы должны запустить ее точно так же, как если бы вы написали ее как сценарий и поместили в каталог в вашем $ PATH .


1 Технически позиционные параметры сами по себе 1 (не $ 1 или $ {1} ), 2 (не $ 2 или $ {2} ) и т. Д. . Точно так же технически у вас нет переменной среды $ PATH , поскольку переменная среды называется PATH . В отличие от некоторых языков (например, Perl, PowerShell), первые $ (и последующие включающие { } , если они есть) на самом деле не являются частью имени параметра или переменной, а вместо этого являются синтаксисом, используемым для запуска расширение параметра.

Продолжение линейки Linux

Объявление Множественное Команды в одной строке

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

$ ORACLE_SID = TEST; экспорт ORACLE_SID

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

Продолжение длинной команды в другой строке

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

$ cp /home/jemmons/notes/chapter1.txt \
> /home/areader/notes/backup/chapter1.txt

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

Получите полную информацию об управлении системой Linux
для администраторов баз данных Oracle

Знаковая книга «Linux для администраторов баз данных Oracle: Окончательная ссылка » предоставляет исчерпывающий, но конкретный знание администрирования Oracle в Linux.А обязательный справочник для каждого работающего или планируемого администратора баз данных Oracle на платформе Linux.

Купить со скидкой 30% напрямую от издателя.


Burleson — американская команда

Примечание: Этот оракул документация была создана как справочник по поддержке и обучению Oracle для использования нашими Специалисты-консультанты по настройке производительности администраторов баз данных. Не стесняйтесь задавать вопросы на нашем Форум Oracle.

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

Опечатка? Технологии Oracle меняются, и мы стремимся обновлять нашу информацию о поддержке Oracle BC.Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего содержания, мы будем признательны за ваше Обратная связь. Только электронное письмо:

и укажите URL-адрес страницы.


Авторские права © 1996-2020

Все права защищены Бурлесон

Oracle

® является зарегистрированным товарным знаком Oracle Corporation.

Как выполнить несколько строк в одной строке Python из командной строки?

Резюме : Чтобы сделать однострочным Python из любого многострочного скрипта Python, замените новые строки символом новой строки '\ n' и передайте результат в файл exec (...) функция. Вы можете запустить этот сценарий извне (из командной строки, оболочки, терминала) с помощью команды python -c "exec (...)" .

Проблема : Дан сценарий с многострочным кодом на Python. Как выполнить этот многострочный скрипт в одной строке кода Python? Как это сделать из командной строки?

Пример : Допустим, у вас есть следующий цикл for с вложенным оператором if в теле цикла for.Вы хотите запустить это в одной строке из командной строки?

 х = 10
для i в диапазоне (5):
    если x% 2 == 0:
        печать (я)
    еще:
        печать (х)
    х = х - 1

'' '
0
9
2
7
4
'

Код выводит в оболочку пять чисел. Он печатает только нечетные значения x . Если x принимает четное значение, он печатает переменную цикла i .

Давайте рассмотрим три метода решения этой проблемы!

Метод 1: exec ()

Вы можете записать любой исходный код в строку и запустить строку с помощью встроенной функции exec () в Python.Об этом мало что известно, но хакеры часто используют это, чтобы упаковать вредоносный код в одну строку, которая, казалось бы, безвредна.

Если у вас есть код, который занимает несколько строк, вы можете упаковать его в однострочную строку, используя в строке символ новой строки '\ n' :

 # Метод 1
exec ('x = 10 \ nдля i в диапазоне (5): \ n, если x% 2 == 0: print (i) \ n else: print (x) \ n x = x-1')
 

Этот однострочный фрагмент кода семантически эквивалентен приведенному выше вложенному циклу for, для которого требуется семь строк кода! Результат тот же:

 ''
0
9
2
7
4
'

Попробуйте сами в нашей интерактивной кодовой оболочке:

Упражнение : Удалите ветвь else этого кода.Что на выходе? Запустите код, чтобы проверить, были ли вы правы!

Метод 2: из командной строки | Python -c + exec ()

Конечно, вы также можете запустить этот код из командной строки или оболочки Win / Linux / Mac.

Просто убедитесь, что используете префикс python -c , а затем упакуйте однострочную многострочную строку в строковое значение, которое передается в качестве аргумента программе python .

Вот как это выглядит в моей Win 10 powershell:

 PS C: \ Users \ xcent> python -c "exec ('x = 10 \ nдля i в диапазоне (5): \ n, если x% 2 == 0: print (i) \ n else: print (x) \ nx = x-1 ') "
0
9
2
7
4 

Метод 3. Использование тернарного оператора для однострочности кода

Конечно, вы также можете создать свой собственный семантически эквивалентный однострочник, используя немного творчества и навыки Python One-Liner (например,g., приобретенный при чтении моей книги «Python One-Liners» от NoStarch)!

В этом коде вы используете тернарный оператор:

 # Метод 3
for i in range (5): print (10-i) if i% 2 else print (i) 

Вы легко можете убедить себя, что код делает то же самое в одной строке!

Однострочная книга Python

Программисты Python улучшат свои навыки в области компьютерных наук с помощью этих полезных однострочников.

Python One-Liners научит вас читать и писать «однострочные»: краткие описания полезных функций, упакованные в одну строку кода.Вы узнаете, как систематически распаковывать и понимать любую строку кода Python, а также писать красноречивый, мощно сжатый Python, как эксперт.

Пять глав книги охватывают советы и рекомендации, регулярные выражения, машинное обучение, основные темы науки о данных и полезные алгоритмы. Подробные объяснения однострочного текста знакомят с ключевыми концепциями информатики и улучшают ваши навыки программирования и анализа. Вы узнаете о расширенных функциях Python, таких как понимание списков, срезы, лямбда-функции, регулярные выражения, функции сопоставления и сокращения, а также назначения срезов.Вы также узнаете, как:

Используйте структуры данных для решения реальных проблем, например, использование логической индексации для поиска городов с уровнем загрязнения выше среднего
Используйте основы NumPy, такие как массив, форма, ось, тип, широковещательная передача, расширенное индексирование, нарезка и т. Д. сортировка, поиск, агрегирование и статистика
Вычисление базовой статистики многомерных массивов данных и алгоритмов K-средних для неконтролируемого обучения
Создание более сложных регулярных выражений с использованием группировки и именованных групп, отрицательного просмотра вперед, экранированных символов, пробелов , наборы символов (и наборы отрицательных символов) и жадные / нелегкие операторы
Понимание широкого круга тем информатики, включая анаграммы, палиндромы, надмножества, перестановки, факториалы, простые числа, числа Фибоначчи, обфускация, поиск и алгоритмическая сортировка

К концу книги вы будете знать, как писать Python в его наиболее совершенном виде и создавать лаконичные и красивые фрагменты «искусства Python» всего в одной строчке.

Получите однострочники Python прямо сейчас!

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

Чтобы помочь студентам достичь более высокого уровня успеха в Python, он основал веб-сайт по обучению программированию Finxter.com. Он автор популярной книги по программированию Python One-Liners (NoStarch 2020), соавтор серии самоизданных книг по Python для кофе-брейков, энтузиаст информатики, фрилансер и владелец одного из 10 крупнейших блогов Python по всему миру.

Его страстями являются письмо, чтение и кодирование. Но его самая большая страсть — служить начинающим программистам через Finxter и помогать им повышать свои навыки. Вы можете присоединиться к его бесплатной электронной академии здесь.

Как запустить несколько команд параллельно в Linux

Традиционно компьютеры могут выполнять только одну задачу за раз. Обычно он не выполняет многозадачность. Что ж, в большинстве случаев (с одноядерными компьютерами — то есть компьютерами с одним процессором) компьютер дает вам иллюзию, что несколько вещей происходят одновременно.

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

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

Это переключение обычно называется переключением контекста. Когда у вас слишком много задач, ожидающих в очереди для ЦП, мы говорим, что «машина находится под нагрузкой». В этой статье мы собираемся обсудить методы, доступные для параллельного выполнения нескольких процессов в системе Linux.

Лучший пример — выполнить команду на 10 серверах с машины.Если вы пойдете один за другим, это займет много времени. Но если у нас есть способ запускать команду одновременно на всех серверах параллельно, это экономит много времени. Опять же, с точки зрения компьютера / процессора, он в основном занимается одной задачей за раз, но продолжает переключаться между задачами, что происходит слишком быстро, и у нас все в порядке, поскольку несколько задач выполняются одновременно.

Давайте рассмотрим различные методы, доступные в Linux, для одновременного выполнения команд (в параллельном режиме).Самый первый из них использует механизм управления заданиями оболочки bash. Мы просто выполняем команду, а затем просим оболочку поместить ее в фоновый режим и перейти к следующей команде (в то время как первая команда уже выполняется в фоновом режиме), а затем к следующей и так далее.

Чтобы продемонстрировать это, у меня есть несколько ненужных файлов, находящихся в хранилище объектов. Загрузку всех этих файлов на машину Linux можно выполнить одновременно, чтобы проверить и увидеть, как работает эта параллельная работа.

Параллельное выполнение команд с использованием Bash Shell

Мне в основном нужно выполнить 3 команды wget и заставить их работать параллельно. Лучший способ — поместить все команды wget в один сценарий и выполнить его. Единственное, что здесь следует отметить, — это поместить все эти команды wget в фоновый режим (фон оболочки). См. Наш простой файл сценария ниже.

 корень @ instance-10: / tmp # cat test_parallel.sh
#! / bin / bash
wget https: // хранилище.googleapis.com/test-bucket-sarath/junkfile1 &
wget https://storage.googleapis.com/test-bucket-sarath/junkfile2 &
wget https://storage.googleapis.com/test-bucket-sarath/junkfile3 &
 

Обратите внимание на & в конце каждой команды. Это поместит команду в фоновый режим и выполнит следующую (поместит ее в фоновый режим) и перейдет к следующей и так далее.

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

 корень @ instance-10: ~ # ps aux | grep wget
корень 4985 16.2 0.1 27732 5080 очков / 0 D + 07:05 0:00 wget https://storage.googleapis.com/test-bucket-sarath/junkfile1
корень 4986 15,8 0,1 27732 5164 очков / 0 D + 07:05 0:00 wget https://storage.googleapis.com/test-bucket-sarath/junkfile2
корень 4987 16.6 0.1 27732 5228 очков / 0 D + 07:05 0:00 wget https://storage.googleapis.com/test-bucket-sarath/junkfile3
корень 4994 0,0 0,0 10480 2140 точек / 1 S + 07:05 0:00 grep --color = auto wget 

Из вышеприведенного вывода ясно видно, что наши три команды wget выполняются параллельно.

В случае, если вам нужно выполнить несколько процессов партиями или порциями, вы можете использовать встроенную команду оболочки под названием «wait». Смотри ниже.

 #! / Bin / bash
wget https://storage.googleapis.com/test-bucket-sarath/junkfile1 &
wget https://storage.googleapis.com/test-bucket-sarath/junkfile2 &
wget https://storage.googleapis.com/test-bucket-sarath/junkfile3 &
ждать
wget https://storage.googleapis.com/test-bucket-sarath/junkfile1 &
wget https: // хранилище.googleapis.com/test-bucket-sarath/junkfile2 &
wget https://storage.googleapis.com/test-bucket-sarath/junkfile3 &
wget https://storage.googleapis.com/test-bucket-sarath/junkfile1 &
wget https://storage.googleapis.com/test-bucket-sarath/junkfile2 &
wget https://storage.googleapis.com/test-bucket-sarath/junkfile3 &
подождите 

Первые три команды команды wget будут выполняться параллельно. «wait» заставит скрипт ждать, пока эти 3 не закончатся.По завершении сценарий одновременно выполнит следующие 6 команд, дождется завершения и так далее.

Мы можем изменить наш сценарий и сделать его более общим, как показано ниже.

 корень @ instance-10: / tmp # cat test_parallel.sh
#! / bin / bash
для задачи в "$ @"; делать {
$ задача &
} сделано
 

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

 ./test_parallel.sh "cmd1 arg1 arg2 arg3" "cmd2 arg1" "cmd3 arg1 arg2" 

Как одновременно запускать несколько процессов с помощью Xargs?

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

 seq 1 3 | xargs -I {} -n 1 -P 3 wget https://storage.googleapis.com/test-bucket-sarath/junkfile {} 

Команда seq просто выдаст 1, 2 и 3 в качестве вывода в трех строках.Который затем передается в xargs в качестве входных данных с помощью стандартного канала Linux. Мы использовали параметр -I в xargs, чтобы удалить пробел, который обычно добавляется в конце нашей команды.

Без -I {} и последнего junkfile {} команда xargs будет строить нашу команду с именем файла «junkfile 1, junkfile 2 и т. Д.» (Нам нужно было удалить пробел), а не junkfile1, junkfile2 и так далее.

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

 корень @ экземпляр-10: / tmp # ps aux | grep wget
корень 2197 0,0 0,0 6376 772 точек / 0 S + 04:42 0:00 xargs -I {} -n 1 -P 3 wget https://storage.googleapis.com/test-bucket-sarath/junkfile {}
корень 2198 11.0 0.1 27732 5160 очков / 0 D + 04:42 0:01 wget https://storage.googleapis.com/test-bucket-sarath/junkfile1
корень 2199 7.6 0.1 27732 5232 очков / 0 D + 04:42 0:01 wget https://storage.googleapis.com/test-bucket-sarath/junkfile2
корень 2200 6.4 0,1 27732 5040 баллов / 0 D + 04:42 0:00 wget https://storage.googleapis.com/test-bucket-sarath/junkfile3
корень 2209 0,0 0,0 10480 2180 точек / 1 S + 04:42 0:00 grep --color = auto wget 

wget — это просто пример, который мы используем здесь в нашем руководстве. Одна из причин использования wget с этими тремя ненужными файлами — поддерживать процесс в течение нескольких минут, чтобы мы могли подтвердить параллельное выполнение (поскольку файлы довольно большие, эти процессы будут завершены через несколько минут).Вы можете заменить wget на все, что применимо в вашем случае использования.

Как использовать параллельный GNU для одновременного выполнения команд?

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

Для систем на базе RedHat:

 ням установить параллельно 

Для систем на основе Debian (Ubuntu):

 apt-get install parallel 

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

  • Список файлов, которые можно передать в качестве входных данных в параллельную команду, чтобы выполнять некоторые операции параллельно со всеми из них
  • Вы можете указать список IP-адресов / имен хостов, для которых вам нужно запустить команду в parallel
  • Список ссылок / URL-адресов (аналогично нашему примеру wget, который мы видели с xargs и оболочкой выше)

GNU Parallel был разработан с учетом xargs, поэтому большинство параметров и параметров командной строки могут совпадать с xargs команда.Давайте сначала выполним пример wget, который мы видели с использованием параллельного GNU.

 seq 1 3 | параллельный -j 5 -I {} wget https://storage.googleapis.com/test-bucket-sarath/junkfile {} 

Если вы видите приведенную выше команду, то в параллельном режиме используется опция -j (очень похожая на xargs, для указания количества процессов, запускаемых параллельно), и опция -I (для удаления символа пробела по умолчанию). И, без сомнения, он будет запускать все наши 3 команды wget одновременно.

Вы хотите сжать все файлы в текущем каталоге (параллельно и одновременно)? Это очень легко сделать с помощью parallel.Ниже показан пример для достижения этой цели.

 ls | параллельный -j 10 gzip 

В приведенном выше примере одновременно произойдет не более 10 сжатий. Аналогично, чтобы распаковать / распаковать все файлы одновременно, выполните следующую команду.

 ls | параллельный -j 10 gunzip 

Вы можете сжать все файлы в текущем каталоге, используя метод ниже (параллельно). В нашем примере ниже мы ограничили количество заданий до 10, которые будут выполняться параллельно.

 параллельно -j 10 gzip ::: * 

Parallel имеет возможность передать файл в качестве аргумента, чтобы он мог запускать команду для записей в файле. Например, у вас может быть файл со списком URL-адресов для загрузки.

 корень @ instance-10: / tmp # cat list-of-urls.txt
https://storage.googleapis.com/test-bucket-sarath/junkfile1
https://storage.googleapis.com/test-bucket-sarath/junkfile2
https://storage.googleapis.com/test-bucket-sarath/junkfile3 

 parallel -j 10 -a список-адресов.txt wget 

Приведенное выше должно загружать URL-адреса, перечисленные в файле «list-of-urls.txt» параллельно.

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

 cat job.txt
спать 100; эхо "первый"
спать 100; эхо "второй"
спать 100; эхо "третье" 

Теперь давайте попросим параллельно выполнить все команды в этом файле одновременно.Это можно сделать, как показано ниже.

 параллельно -j 10 :::: job.txt 

Как управлять выводом в GNU Parallel?

Распространенная проблема при параллельном выполнении нескольких команд. Вывод разных команд не должен путаться. Если вы используете самый первый метод, который мы видели в этой статье (то есть: использование механизма управления заданиями оболочки), на самом деле нет никакой гарантии порядка вывода. Например, давайте попробуем команду ping для нескольких хостов, используя метод оболочки &.

 root @ testserver: ~ # ping -c 3 10.12.2.40 & ping -c 3 172.17.0.1 & ping -c 3 127.0.0.1 &
PING 10.12.2.40 (10.12.2.40) 56 (84) байтов данных.
64 байта от 10.12.2.40: icmp_seq = 1 ttl = 64 time = 0,027 мс
PING 127.0.0.1 (127.0.0.1) 56 (84) байтов данных.
64 байта из 127.0.0.1: icmp_seq = 1 ttl = 64 time = 0,018 мс
PING 172.17.0.1 (172.17.0.1) 56 (84) байтов данных.
64 байта из 172.17.0.1: icmp_seq = 1 ttl = 64 time = 0,020 мс
64 байта от 10.12.2.40: icmp_seq = 2 ttl = 64 time = 0.029 мс 

Вы можете ясно видеть, что вывод полностью испорчен (выводы этих трех эхо-запросов смешаны). Теперь давайте попробуем использовать параллель, чтобы не допустить испорченного вывода. Смотри ниже.

 root @ testserver: ~ # parallel -j 4 ping -c 3 ::: 10.12.2.40 172.17.0.1 127.0.0.1
PING 10.12.2.40 (10.12.2.40) 56 (84) байтов данных.
64 байта от 10.12.2.40: icmp_seq = 1 ttl = 64 time = 0,026 мс
64 байта от 10.12.2.40: icmp_seq = 2 ttl = 64 time = 0.041 мс
64 байта от 10.12.2.40: icmp_seq = 3 ttl = 64 time = 0,025 мс

--- 10.12.2.40 статистика пинга ---
3 пакета переданы, 3 получены, потеря пакетов 0%, время 2000 мс
rtt min / avg / max / mdev = 0,025 / 0,030 / 0,041 / 0,009 мс
PING 172.17.0.1 (172.17.0.1) 56 (84) байтов данных.
64 байта из 172.17.0.1: icmp_seq = 1 ttl = 64 time = 0,021 мс
64 байта из 172.17.0.1: icmp_seq = 2 ttl = 64 time = 0,018 мс
64 байта из 172.17.0.1: icmp_seq = 3 ttl = 64 time = 0,019 мс

--- 172.17.0.1 статистика пинга ---
3 пакета переданы, 3 получены, потеря пакетов 0%, время 2000 мс
rtt min / avg / max / mdev = 0.018 / 0,019 / 0,021 / 0,003 мс
PING 127.0.0.1 (127.0.0.1) 56 (84) байтов данных.
64 байта из 127.0.0.1: icmp_seq = 1 ttl = 64 time = 0,016 мс
64 байта из 127.0.0.1: icmp_seq = 2 ttl = 64 time = 0,019 мс
64 байта из 127.0.0.1: icmp_seq = 3 ttl = 64 time = 0,023 мс

--- 127.0.0.1 статистика пинга ---
3 пакета переданы, 3 получены, потеря пакетов 0%, время 1998 мс
rtt min / avg / max / mdev = 0,016 / 0,019 / 0,023 / 0,004 мс
 

Обычно параллельный показывает полный вывод одного процесса, только когда он завершается.Имеет ли значение для вас порядок вывода? Если вы хотите, чтобы вывод был в том же порядке, что и ваш ввод, вы можете использовать параметр -k параллельно, как показано ниже.

 параллельно -k -j 4 ping -c 3 ::: 10.12.2.23 172.17.0.13 127.0.0.1 

Имейте в виду, что GNU Parallel определит количество ядер ЦП, доступных в системе, и будет выполнять только одно задание на каждое ядро. В наших примерах мы использовали параметр -j, чтобы переопределить это поведение по умолчанию.Если у вас есть 100 команд для выполнения с использованием параллельного GNU, задания будут выполняться меньшими порциями. Размер блока снова определяется параметром -j.

Если вы хотите быстро завершить параллельную работу GNU, вы можете запустить следующую команду. Получив этот сигнал, GNU parallel завершит выполнение текущего фрагмента и завершит работу.

 killall -TERM параллельно 

Параллельное выполнение команд в списке удаленных машин

Честно говоря, я не нашел GNU Parallel, настолько удобного для пользователя, когда дело доходит до удаленного выполнения команд на списке серверов одновременно.Для этой цели есть такие инструменты, как кластерная оболочка и pdsh (согласился, что GNU parallel имеет параметры, такие как sshlogin и sshloginfile ), но я не нашел этого прямо. В моих тестовых примерах некоторые из этих команд были недостаточно стабильными, чтобы их можно было рекомендовать для параллельного выполнения на нескольких серверах.

Я собираюсь начать это с кластерной оболочки, а затем с pdsh.

Clustershell можно легко установить с помощью команды, применимой к вашей платформе.

Системы на базе RedHat:

 ням установить кластершелл 

Системы на базе Ubuntu:

 apt-get install кластерная оболочка 

Как видно из названия, он используется для администрирования кластера серверов.В основном выполнять что-то / получать информацию со всех машин в кластере. Как и другие утилиты Linux, файл конфигурации для кластерной оболочки находится в /etc/clustershell/clush.conf. В этом файле у меня есть нижеприведенное.

 #cat /etc/clustershell/clush.conf
[Главный]
разветвление: 64
connect_timeout: 15
command_timeout: 0
цвет: авто
fd_max: 16384
history_size: 100
node_count: да
многословие: 1
ssh_user: убунту
ssh_path: / usr / bin / ssh
ssh_options: -oStrictHostKeyChecking = no 

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

 #clush -l ubuntu -w 10.12.2.40,10.12.2.114 uname -r
10.12.2.114: 4.4.0-1041-aws
10.12.2.40: 3.13.0-48-общий 

Обратите внимание, что clush использует закрытый ключ SSH внутри файла /home/$user/.ssh/id_rsa. Например, если я выполняю эту команду как пользователь «ubuntu», то используемый закрытый ключ будет /home/ubuntu/.ssh/id_rsa. Ожидается, что соответствующий открытый ключ будет присутствовать на всех серверах, на которых вы выполняете команду с помощью кластерной оболочки.

Связано: Объяснение работы SSH

Вы можете использовать ярлыки и регулярные выражения, если у вас есть серверы в формате node1.example.com или что-то в этом роде. Смотри ниже.

 #clush -l ubuntu -w узел [1-2] .example.com uname -r
node2.example.com: 4.4.0-1041-aws
node1.example.com: 3.13.0-48-общий 

Вы можете копировать файлы параллельно на несколько серверов, используя clsutershell, используя параметр —copy.

 clush -w node [1-2] .example.com --copy / home / ubuntu / testfile
 

Приведенная выше команда скопирует файл / home / ubuntu / testfile в одно и то же место на всех серверах

Вы также можете создать группу серверов с помощью файла / etc / clustertershell / groups (если файл не существует, а затем создайте его). Ниже показан пример файла групп.

 # кот / и т. Д. / Кластершелл / группы
web: узел [1,2] .example.com
db: узел [3-4] .example.ком
 

Теперь вы можете выполнять команды для этих групп, вызывая имя группы (в нашем случае web и db).

 #clush -l ubuntu -w @web uname -r
node2.example.com: 4.4.0-1041-aws
node1.example.com: 3.13.0-48-общий 

 # clush -l ubuntu -w @db uname -r
node4.example.com: 4.4.0-1041-aws
node3.example.com: 4.4.0-1041-aws
 

Clustershell поддерживает интерактивный режим для выполнения команд на нескольких машинах.Это довольно интересно. Мы просто передаем опцию -b для команды clush для одной из наших групп, и мы можем интерактивно запускать команды для этой группы. Пример ниже.

 # clush -l ubuntu -w @web -b
Введите quit, чтобы выйти из этого интерактивного режима.
Работа с узлами: node [1-2] .example.com
clush> время безотказной работы
---------------
node1.example.com
---------------
00:09:09 до 709 дней, 18:19, 1 пользователь, средняя нагрузка: 0,11, 0,05, 0,05
---------------
node2.example.com
---------------
00:09:09 до 47 дней, 21:18, пользователей 0, средняя нагрузка: 0.00, 0,00, 0,00
clush> бросить
 

Аналогична кластерной оболочке другая утилита с именем pdsh . Идея для pdsh аналогична утилите rsh, , которую можно использовать для выполнения чего-либо на одном удаленном хосте. Однако pdsh можно использовать для параллельного выполнения команд на нескольких хостах.

Подобно кластерной оболочке, установка довольно проста (одна команда apt-get или yum в зависимости от вашего дистрибутива).

Системы на базе RedHat:

 ням установить pdsh 

Системы на основе Debian / Ubuntu:

 apt-get install pdsh 

Самое первое, что нужно сделать, — это сообщить pdsh, что мы хотели бы использовать SSH для удаленных подключений.Это можно сделать с помощью переменной окружения.

 экспорт PDSH_RCMD_TYPE = ssh 

Чтобы сделать его постоянным, вы также можете добавить его в пользовательский файл .bashrc. После выполнения приведенной ниже команды вы можете выйти из системы и войти в систему, чтобы подтвердить, что переменная среды установлена ​​и доступна для пользователя.

 echo "экспорт PDSH_RCMD_TYPE = ssh" >> ~ / .bashrc 

Давайте запустим команду для нашего узла [1-2] .example.com с помощью pdsh.Смотри ниже.

 # pdsh -l ubuntu -w node [1-2] .example.com uname -r
узел2: 4.4.0-1041-aws
node1: 3.13.0-48-общий 

Без указания переменной среды RCMD вы также можете запускать команды, подобные показанной ниже.

 root @ jenkins: ~ # pdsh -w ssh: ubuntu @ node [1-2] .example.com время безотказной работы
node2: 00:32:34 до 47 дней, 21:42, 0 пользователей, средняя загрузка: 0,00, 0,00, 0,00
node1: 00:32:34 до 709 дней, 18:43, 1 пользователь, средняя загрузка: 0.08, 0,07, 0,05
 

Еще одна интересная переменная среды, которую мы можем использовать с pdsh, — это WCOLL. Это определит файл, содержащий список серверов.

 нодлист кошки
node1.example.com
node2.example.com 

 экспорт WCOLL = / root / nodelist
 

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

 # pdsh -l время работы Ubuntu
node2: 00:36:46 до 47 дней, 21:46, пользователей 0, средняя нагрузка: 0.00, 0,00, 0,00
node1: 00:36:47 до 709 дней, 18:47, 1 пользователь, средняя загрузка: 0,09, 0,06, 0,05
 

4.3. Выполнение нескольких команд в последовательности

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

Есть три решения этой проблемы, но первое — довольно тривиально: просто продолжайте печатать. Система Linux или Unix является продвинутой достаточно, чтобы позволить вам печатать, пока он работает с вашим предыдущим команд, так что вы можете просто продолжать вводить одну команду после еще один.

Еще одно довольно простое решение — ввести эти команды в файл, а затем скажите bash выполнить команды в файл, то есть простой сценарий оболочки.

Предположим, что мы хотим запустить три команды: long, средний и короткий , каждый из которых время исполнения отражено в его названии. Нам нужно запустить их в этом заказ, но не хочу ждать, пока длинный до закончить перед запуском других команд.D # Ctrl-D, не отображается $ bash ./simple.script

Третье и, возможно, лучшее решение — запускать каждую команду в последовательность. Если вы хотите запускать каждую программу, независимо от того, одни терпят неудачу, разделите их точкой с запятой:

 $ long; средний ; короткий 

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

 $ long && medium && short 

Пример cat был просто очень примитивным способом ввода текста в файл.Мы перенаправляем вывод команды в файл с именем simple.script (подробнее о перенаправлении вывода см. Глава 3). Лучше использовать настоящий редактор, но такие вещи сложнее показать на подобных примерах. Впредь, когда мы хотим показать сценарий, мы просто показываем текст как бестелесный текст не в командной строке, или мы начнем пример с помощью команды типа cat filename to выводить содержимое файла на экран (а не перенаправлять вывод из нашего ввода в файл), и, таким образом, отобразить его в пример.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *