Last Updated :
07 Apr, 2025
To efficiently compile and run C programs, users typically utilize a compiler or the built-in terminal. The command prompt (CMD) on Windows can be employed to process C programs and generate the desired outputs. To create an executable C program, users must compile their C code using the system terminal.
This article will discuss how to compile and run a C program from the Windows command prompt using MinGW, a user-friendly version of the GCC compiler.
How to Compile and Run C Program in Terminal
Users need to type a few levels of commands into the command prompt or in-build terminal to run the C program without a GUI compiler by following the system configuration. The process of converting C language source code into a machine-code binary system is referred to as «compile» to process «run». Because C is a middle-level programming language and not portable, it must first be translated into machine code using a compiler to be executed and run within the environment. We need to follow the below-mentioned steps to compile and run the C program in the in-build system terminal —
Step 1: Download or Install MinGW officially
First, we must install a C compiler in our system to execute and compile the C code into a binary configuration. For Windows, MinGW is the efficient option for the initial process to implement the programs.
- Install MinGW from the official website > Click on the Downloaded File from the page > Follow the on-screen instructions to prepare the installation process and model functions efficiently.
- Go to the MinGW installation manager window > click on the pop-up button > See the packages required to compile C programs for executable output system.
- Check on the driver boxes that show «mingw32-base» and «mingw-gcc-g++» > Select Continue
- Click on Installation menu to install > Select Apply changes option for packages > Click on Apply button
Step 2: Add the compiler’s Path to the system environment via Windows
This is the easiest step to add the compiler’s path to the internal system environment variables and compile to run the C program. By this step, we can run the compiler from the command prompt and we won’t have to enter the full path environment to the GCC program in the system configuration to compile the C program.
- Press the Windows button from the keyboard > Type environment or environment variables > Click on the search result which shows Edit the system environment variables > Process to execute
- Click on the Environment Variables button > Select the path option under the «System variables» section > Select the Edit button
- Click on New > Type «C:\MinGW\bin» > Click Ok (for 3 times) > Go to Homepage
Step 3: Open the cmd environment or Command Prompt window
Now, open a Command Prompt window and run as administrator to compile and run the C program.
- Press the Windows button from the keyboard > Type cmd or Command Prompt
- Right-click on the Command Prompt from the home screen > Select Run as Administrator option > Run «gcc — version» at the prompt option to execute
Step 4: Implement the ‘cd’ Command to run and execute
Now, we need to use the cd command to go to the system directory and compile the code where the pre-structured C program is saved individually.
- Go to «C:\MyPrograms» option > Type «cd C:\MyPrograms» to put the value > Click on the Enter button to execute.
Step 5: Run the ‘gcc’ command to file management
After implementing the above steps, we can run the GCC command to compile the C program in our system for the further process. We use the structured syntax «gcc filename. c -o filename.exe» which compiles and makes the programs executable in the terminal.
- Remember the File name which contains the C code > Replace «filename. the c» with the internal File name
- Compiled structured program name which ends with «.exe» file > file shows a flag «-o» which specifies the output file config.
Step 6: Run the C program and see the output
It’s the final step to compile and run our C program efficiently and see the output in the terminal.
- Type the new program name > Click on the Enter button
C
#include <stdio.h> int main() { int n = 153; int temp = n; int p = 0; while (n > 0) { int rem = n % 10; p = (p) + (rem * rem * rem); n = n / 10; } // Condition to check whether the // value of P equals to user input // or not. if (temp == p) { printf("It is Armstrong No."); } else { printf("It is not an Armstrong No."); } return 0; }
Output
It is Armstrong No.
Conclusion
C programming language is a middle-level procedural programming language. It offers high-level internal system capabilities like functions and structures in addition to low-level features like memory address access features. The process of compiling and executing a C program on the terminal is simple after implementing the proper steps. Understanding this initial method or steps is essential to writing and developing C programs that will help all the possibilities of design and run them more efficiently in any system.
Also Read
- How To Compile And Run a C/C++ Code In Linux
- How to Compile a C++ Program Using GCC
- How to Compile and Run C/C++/Java Programs in Linux
This blog post explains how get Visual Studio to use Windows Terminal to run and debug your projects rather than using the Windows console.
30.October.2021 Update: On a Windows 11 system, in Windows Terminal, click the down arrow to the right of the tabs, then Settings, then Startup, and then set “Default terminal application” to Windows Terminal.
Original post (for Windows 10 and earlier):
- Right-click project and select properties.
- Click the Debug tab.
- Create a new profile.
- Set Launch set to Executable.
- Set Executable to the full path to the Windows Terminal executable (maybe C:\Users\<username>\AppData\Local\Microsoft\WindowsApps\wt.exe).
- Set Application arguments to dotnet.exe run -p <full path to .csproj file>.
- Set Working directory to the full path to the folder that contains the .csproj file.
Update 25.Jan.2022: Value suggestions from a comment on this blog post from frederickjeanguerin:
1. Executable: $(userprofile)\AppData\Local\Microsoft\WindowsApps\wt.exe
2. Arguments: dotnet.exe run –Project $(projectpath)
3. Working Dir: $(projectdir)
End 25.Jan.2022 Update
In the Visual Studio toolbar, select the profile.
Now when you run or debug, Visual Studio opens a command prompt to launch Windows Terminal. To make this command prompt disappear immediately afterwards, click Tools, then Options, then Debugging, and then select Automatically close the console when debugging stops.
Here is an example of the result:
To debug, press Ctrl+Alt+P or click Debug and then Attach to Process, and then select our .NET process and click Attach.
If you need to debug something that occurs at initialization, you can use a different debugging profile temporarily that lets Visual Studio run the .NET process directly and attach the debugger automatically.
Update 4.September.2021:
On this other post, someone commented that this approach might not work if you download Windows Terminal through the Microsoft Store, as which does not use the wt.exe binary:
I responded that based on the following post on one of my other blogs:
I thought that the following might work:
explorer.exe shell:AppsFolder\Microsoft.WindowsTerminal_8wekyb3d8bbwe!App
23 years ago this month, Microsoft announced the initial developer availability (essentially, the “alpha” release) of the .NET Framework and Visual Studio .NET. Being in attendance at the 2000 Microsoft PDC (Professional Developer Conference), I received a set of CDs containing the pre-release bits for .NET, including C#. I’ve been writing C# ever since!
Side Note: While C# has been my primary language for a couple of decades now (wow!), it is not the only language I make use of. C# is a very capable language, but there are many other languages out there that can be a better fit, depending on what your goals are.
Having written C# code for years, I’ve found myself on many occasion wishing I could also use C# in a command shell or terminal – much like how we utilize PowerShell. Not necessarily to manage the directories and files on my PC (though, I suppose you could) but, rather, to work through some quick code experiments or algorithms. For example, maybe I want to test out a new framework class or method I just read about and don’t want to fire up Visual Studio .NET/Code just to run a couple lines of code.
Enter: C# REPL
C# REPL is…
A cross-platform command line REPL for the rapid experimentation and exploration of C#. It supports IntelliSense, installing NuGet packages, and referencing local .NET projects and assemblies.
C# REPL is a .NET 7 global tool that can run on Windows, macOS, and Linux. Installing C# REPL can be achieved with a single command:
dotnet tool install -g csharprepl
Once installed, you can start C# REPL by running the command csharprepl:
At this point, you can start typing C# code and executing it. As you type, IntelliSense will continually provide valid options based on the current context of the code you are writing.
Pressing Enter will execute the code.
To work with multiple lines of code, press Shift + Enter for each line and Enter when you are ready to execute the code.
What Else?
At this point, you know enough to start writing C# code in your Terminal. However, there’s more to C# REPL, such as:
- Configuring Themes and Colors
- Adding References
- Mastering the Keyboard Shortcuts
- And more!
Integration with Windows Terminal
One final step that I’ve found to be super helpful is to setup a C# REPL profile within the Windows Terminal for quick access. To setup a C# REPL profile, follow these steps:
Step 1: Within the Windows Terminal, click on the “down arrow” and then Settings:
Step 2: Click on Add a new profile:
Step 3: Click on New empty profile:
Step 4: Enter a profile name, such as C# REPL, and specify the command line: csharprepl.exe and press Save:
Close the Settings tab.
You can now select the C# REPL profile when you click on the “down arrow” to add a new tab:
For even quicker access, you can also utilize the assigned hotkey to open a new C# REPL tab. In my case, it’s Ctrl+Shift+7 as shown in the screenshot above.
Summary
Wrapping this up, I’ve only been using C# REPL for a short while. That said, it didn’t take me long to get used to being able to quickly open up a C# REPL tab and typing up and executing C# code on the fly. If C# is one of your preferred languages, then I suspect you will find this tool super useful.
For all the nitty-gritty details, check out the C# REPL repo on GitHub.
As always, happy coding!
Интерфейс командной строки для начинающих разработчиков
Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров6.3K
Если вы когда-либо читали инструкции от разработчиков, то наверняка видели фразы вроде: «Откройте консоль», «Выполните эту команду в терминале» или «Для этого потребуется командная строка». Эти инструменты часто называют невероятно мощными и полезными, но что это означает на практике? Почему терминал считается незаменимым инструментом разработчика и какие возможности он предоставляет, выходя за рамки привычных графических интерфейсов?
Меня зовут Евгений Бартенев, и я автор и техлид курса «Python-разработчик» в Яндекс Практикуме. В этой статье я расскажу, что стоит за терминами «терминал», «оболочка» и «командная строка», а также разберу их некоторые отличия и особенности. Вы узнаете, как они связаны друг с другом и почему работа через консоль зачастую оказывается быстрее и эффективнее. Мы также рассмотрим некоторые практические примеры, которые трудно реализовать, полагаясь только на графический интерфейс.
Эта статья не является справочником команд или пошаговой инструкцией. Она написана для тех, кто хочет понять, что же такое командная строка, и разобраться в её ключевых возможностях. Материал будет не столь полезен опытным разработчикам, которые используют терминал ежедневно. Однако я сделал фокус на терминологии и ключевых концепциях, которые часто остаются за кадром или вызывают путаницу даже у некоторых опытных пользователей. Но обо всём по порядку.
Разбор в ролике для тех, кто предпочитает видеоформат.
Терминология
Почти в каждой современной операционной системе есть графический интерфейс — это знакомые многим окна, иконки, кнопки и другие графические элементы. С их помощью можно выполнить практически любое действие. Однако в операционных системах обычно доступны и другие интерфейсы, например интерфейс командной строки.
Через интерфейс командной строки можно выполнять те же задачи, что и через графический, а иногда и значительно больше. Например, представить себе графический интерфейс для управления сотнями команд с множеством параметров — с ключами, подкомандами и опциями — довольно сложно. Если попытаться отобразить их все через кнопки и меню, экран быстро окажется перегружен элементами. Командная строка решает эту проблему: одна строка ввода может заменить целый набор сложных графических элементов.
Когда программисты говорят «откройте терминал» или «откройте консоль», они, как правило, имеют в виду именно интерфейс командной строки.
Терминал — это интерфейс для ввода-вывода текста, через который можно взаимодействовать с операционной системой.
В каждой операционной системе по умолчанию есть один или несколько терминалов, например:
-
в Windows — Windows Terminal, Windows Console Host;
-
в Linux — GNOME Terminal, Konsole;
-
в macOS — Terminal.app.
Хотя в обиходе слова «терминал» и «консоль» часто используют как синонимы, технически эти понятия различаются:
-
терминал — это интерфейс для работы с текстом;
-
консоль может означать как физическое устройство (например, монитор и клавиатуру в старых компьютерах), так и программу для доступа к терминалу.
При работе с терминалом вы на самом деле взаимодействуете с оболочкой (shell).
Оболочка — это программная среда, которая интерпретирует текстовые команды и выводит результаты. Оболочки можно менять или переключаться между ними, но сам терминал остаётся тем же.
Оболочки по умолчанию:
-
Windows: Command Prompt, PowerShell.
-
Linux: большинство дистрибутивов Linux используют bash (Bourne Again SHell) как оболочку по умолчанию. Некоторые новые дистрибутивы начали переходить на zsh (Z shell, произносится как «зет-шелл»).
-
macOS: до macOS Catalina оболочкой по умолчанию была bash. Начиная с macOS Catalina и позже, Apple перешла на использование zsh в качестве оболочки по умолчанию.
Каждая оболочка может обрабатывать команды, поддерживаемые операционной системой и соответствующим терминалом, но многие оболочки добавляют и свои уникальные возможности.
Обычно оболочки поддерживают сотни, а некоторые даже тысячи команд. Чтобы как-то навести порядок в этом многообразии возможностей, стали появляться различные стандарты. Среди таких стандартов особенно выделяется POSIX (Portable Operating System Interface). Он определяет ключевой набор текстовых команд и их ожидаемые результаты. Если оболочка называется POSIX-совместимой, это означает, что она поддерживает этот установленный набор команд.
Точное количество существующих оболочек определить сложно, поскольку их разработано множество, и новые продолжают появляться. Наиболее известные и популярные POSIX-оболочки — это bash (Bourne-Again SHell), Dash (Debian Almquist shell), ksh (Korn shell), ash (Almquist shell), zsh. А вот оболочки Fish (Friendly interactive shell), PowerShell, Command Prompt, Eshell не поддерживают POSIX, поэтому даже для одноимённых команд в каждой из них можно получить различный результат.
В этой статье я сфокусировался на возможностях именно POSIX-совместимых оболочек на примере zsh в операционной системе macOS.
Переключение между оболочками
Запустить интерфейс командной строки в операционной macOS можно по-разному. Чтобы открыть терминал с помощью Spotlight, достаточно нажать сочетание клавиш Command (⌘) + Пробел и в появившейся строке начать вводить слово Terminal. Как только терминал появится в списке предложений, выберите его нажатием клавиши Enter.
По умолчанию в macOS используется оболочка zsh, но вы можете переключиться на другую, например bash. Для этого выполните в терминале команду bash
— заголовок окна изменится, а в самом окне изменится приглашение для ввода команд.
В macOS по умолчанию предустановлена устаревшая версия bash (3.2), что связано с политикой Apple, направленной на использование лицензий, не обременённых условиями GPLv3. Для использования актуальной версии bash необходимо выполнить дополнительные действия, например установить обновление через менеджер пакетов Homebrew.
Чтобы вернуться в оболочку zsh, введите и выполните команду exit
.
На macOS предустановлены и другие оболочки. Чтобы увидеть все оболочки, доступные в вашей системе, выполните команду:
cat /etc/shells
На стандартной macOS вы увидите что-то вроде:
Для большинства пользователей zsh будет наиболее удобной и функциональной оболочкой, поэтому продолжим именно с ней. Начнём с самых базовых возможностей.
Базовые возможности оболочки
Одна из самых удобных функций большинства оболочек — это возможность быстро перебирать и повторно выполнять ранее введённые команды. Для этого достаточно использовать клавиши стрелка вверх и стрелка вниз.
Клавиши стрелка вправо и стрелка влево перемещают курсор на один символ вправо и влево, а при одновременном удержании клавиши Option — вправо и влево можно перемещаться уже по словам.
Оболочка zsh поддерживает удобное автодополнение. Просто начните вводить команду или путь к файлу, а затем нажмите Tab. Оболочка предложит варианты завершения. Если доступно несколько вариантов, zsh отобразит их список.
Если вы не уверены в том, как использовать ту или иную команду, можно обратиться за справкой. Для этого введите команду man
(англ. manual, «руководство»), которая открывает полное описание команды, например: man ls
.
Выйти из режима просмотра можно, нажав на клавишу q.
Если терминал заполнен текстом и вы хотите начать с чистого экрана, достаточно ввести команду clear
или использовать сочетание клавиш Command + K.
Очистка экрана в терминале, например с помощью команды clear
, не удаляет историю введённых команд — она просто очищает текущее отображение в окне терминала, оставляя всё, что вы вводили ранее, доступным для поиска. Это значит, что вы по-прежнему можете использовать клавиши стрелка вверх и стрелка вниз, чтобы пролистать недавно введённые команды.
Если нужная команда была введена давно, искать её вручную стрелками может быть неудобно. В таком случае поможет команда history
. Она выводит список всех команд, которые вы вводили, вместе с их порядковыми номерами. Например, после выполнения команды history
вы увидите что-то вроде этого:
Теперь, зная номер нужной команды, вы можете выполнить её снова, используя сокращённый синтаксис !<номер>
.
Например, команда !73
повторит команду pwd
(англ. print working directory, «напечатай рабочую папку»).
Псевдонимы
Псевдонимы (алиасы) — это удобный способ сократить часто используемые команды или создать короткие версии для длинных и сложных команд в POSIX-совместимых оболочках.
Для создания псевдонима, который будет доступен только в текущей сессии терминала, используется команда alias
:
alias имя='команда'
Например:
alias ll='ls -la'
Теперь при вводе и выполнении команды ll
будет выполняться команда ls -la
.
Чтобы увидеть все активные псевдонимы, выполните команду alias
.
Для удаления псевдонима используйте команду unalias
:
unalias ll
Чтобы псевдоним сохранялся после перезапуска терминала, его нужно добавить в файл конфигурации оболочки:
echo "alias ll='ls -la'" >> ~/.zshrc
После внесения изменений перезапустите оболочку или выполните source ~/.zshrc
Перенаправление потоков
Потоки в UNIX-подобных операционных системах — это способ работы с данными, которые «текут» между программами, файлами и устройствами. Поток можно представить как канал, через который данные перемещаются, например, из файла в программу, из программы в другой процесс или на устройство, такое как принтер.
Основных потоков три:
-
Стандартный ввод (stdin) — это поток, откуда программа получает данные. Обычно это клавиатура.
-
Стандартный вывод (stdout) — это поток, куда программа отправляет свои результаты. Обычно это вывод в окне терминала.
-
Стандартный поток ошибок (stderr) — это поток для сообщений об ошибках. Он отделён от стандартного вывода, чтобы ошибки не смешивались с обычным результатом программы.
Допустим, вы выполняете команду ls
. Выполнение команды ls
создаёт список файлов и выводит его в стандартный вывод (stdout), то есть на экран. Однако это можно изменить.
Допустим, вам требуется сохранить весь вывод в файл. И самый простой способ сделать это — перенаправить поток. Для этого используется команда >
.
ls > output.txt
Поток будет перенаправлен, и теперь список файлов сохраняется в файл с указанным именем, а не выводится на экран.
Подобным же образом стандартный ввод (stdin) программы можно перенаправить с клавиатуры на файл. Для этого используется символ <
.
python3 myscript.py < input.txt
Программа на Python в файле myscript.py написана так, чтобы получать данные с клавиатуры, но теперь она будет построчно читать указанный файл и брать данные из него, а не ждать ввода от пользователя в терминале.
Конвейеры
Когда вы вводите команду в оболочке, она запускается и выполняется. Результат выполнения команды обычно отображается на экране. Однако в POSIX-совместимых оболочках результат выполнения одной команды вместо вывода на экран можно передать другой команде. Это позволяет создавать последовательности команд для обработки данных. Этот механизм носит название конвейеров (иногда их ещё называют пайплайны) и при написании команд обозначается символом |
.
С помощью конвейеров можно выполнять довольно сложные задачи, разбивая их на последовательность более простых шагов.
Например:
cat input.txt | wc -l
Отдельное выполнение команды cat input.txt
выводит содержимое файла input.txt, а команда wc -l
подсчитывает количество строк в выводе.
Запуск конвейера из этих команд даст только финальный результат — количество строк, минуя промежуточные результаты.
Или вот другой пример:
ls -l | sort -k 5 -n
Команда ls -l
выводит список файлов с подробной информацией, а запуск команды sort -k 5 -n
сортирует вывод по пятому столбцу (размеру файлов). В результате выполнения конвейера мы сразу же получим необходимый результат.
А вот более сложный пример. У нас есть текстовый файл log.txt, содержащий список IP-адресов пользователей, подключавшихся к серверу.
192.168.0.1
192.168.0.2
192.168.0.1
192.168.0.3
192.168.0.2
192.168.0.1
Надо найти IP-адрес хакера, который решил загрузить наш сервер подключениями, вывести этот IP-адрес вместе с количеством подключений, попутно сохранить результат в файл top_user.txt. Из инструментов у нас только оболочка zsh.
В качестве решения задачи можно использовать следующий конвейер:
cat log.txt | sort | uniq -c | sort -nr | awk 'NR==1 {print $2, $1}' | tee top_user.txt
Тут каждая команда выполняет свою задачу, разберём их по порядку.
-
cat log.txt
— читает содержимое файла log.txt и передаёт его в конвейер. -
sort
— сортирует IP-адреса, чтобы одинаковые IP-адреса оказались рядом. -
uniq -с
— подсчитывает количество повторений каждой уникальной строки (IP-адреса). Флаг -c добавляет число повторений перед каждым IP. -
sort -nr
— сортирует строки по числовым значениям в порядке убывания (флаг-nr: -n
— числовая сортировка,-r
— обратный порядок). -
awk 'NR==1 {print $2, $1}'
— обрабатывает только первую строку (самый активный IP-адрес) благодаря фильтруNR==1
. Команда{print $2, $1}
выводит второй столбец (IP-адрес) и первый столбец (количество подключений). -
tee top_user.txt
— записывает результат в файл top_user.txt и одновременно выводит его на экран.
Задачу, конечно, можно было бы решить и меньшим количеством шагов, но я специально хотел показать пример длинного конвейера с разными командами.
В теории количество действий (команд) в конвейере оболочки (например, в bash или zsh) практически не ограничено. Однако на практике существуют технические и системные ограничения, которые определяют максимальную длину конвейера. Например, максимальный размер аргументов командной строки можно получить при помощи команды getconf ARG_MAX
.
Логические операторы
В POSIX-совместимых оболочках логические операторы используются для управления выполнением команд в зависимости от их успешности (возвращаемого кода завершения). Эти операторы позволяют создавать не просто сложные последовательности команд, а последовательности с условиями выполнения.
Например, команда справа от &&
выполняется, только если команда слева завершилась успешно (код завершения 0).
mkdir new_dir && cd new_dir
Если mkdir new_dir
выполнится успешно (директория будет создана), тогда выполнится cd new_dir
— переход в созданную директорию. Если первая команда завершится с ошибкой (например, папка уже существует), вторая команда не будет выполнена.
Команда справа от ||
выполняется, только если команда слева завершилась с ошибкой (код завершения не 0).
mkdir new_dir || echo "Directory already exists"
Если mkdir new_dir
завершится с ошибкой, будет выполнена команда echo
. Если директория успешно создалась, то вторая команда не выполняется.
Можно комбинировать операторы, чтобы создать более сложные условия.
mkdir new_dir && echo "Directory created" || echo "Failed to create directory"
Если команда mkdir new_dir
успешно выполнена — выполняется echo «Directory created». Если же выполнение mkdir new_dir
привело к ошибке — выполняется echo "Failed to create directory"
.
Важный момент заключается в том, что здесь выполняется либо одна из двух веток, либо обе, в зависимости от того, как завершится вторая команда. Чтобы это предотвратить, можно использовать скобки:
(mkdir new_dir && echo "Directory created") || echo "Failed to create directory"
Таким образом логические операторы позволяют строить условия, обрабатывать ошибки и упрощать написание скриптов.
Условия
Современные оболочки терминалов давно вышли за рамки простого ввода и выполнения команд. Они предоставляют инструменты, которые позволяют использовать программные конструкции, знакомые каждому разработчику: переменные, циклы, условия, функции, массивы и многое другое.
Это превращает работу в терминале в процесс, близкий к написанию настоящего кода. Например, вы можете использовать циклы для обработки данных в файлах, условные конструкции для управления потоком выполнения или создавать сложные автоматизации прямо в командной строке.
Давайте рассмотрим, как это выглядит на практике.
Итак, конструкция if
проверяет условие и выполняет определённые команды, если это условие истинно (то есть возвращает код завершения 0). Если условие ложно, можно указать команды для выполнения через else
или дополнительные проверки через elif
.
Например, предположим, что вы работаете с сервером, где нужно ежедневно проверять наличие файла с данными (например, отчёта), и если файла нет, то отправить уведомление администратору, ну или просто вывести сообщение в консоль.
Вот как это можно сделать с помощью конструкции if:
if [ -f input.txt ]; then
echo "File exists"
elif [ -d input.txt ]; then
echo "This is a directory"
else
echo "File does not exist"
fi
Здесь [ -f input.txt ]
проверяет, существует ли файл с именем input.txt. Если файла нет, проверяется условие [ -d input.txt ]
, которое проверяет, является ли объект директорией. Если оба условия ложны, выполняется блок else.
Циклы
В оболочках терминалов, как правило, доступно несколько видов циклов, которые позволяют повторять выполнение команд до достижения определённого условия. Среди них наиболее популярны while, until и, конечно же, for, который особенно часто используется для итерации по элементам, строкам файлов или другим наборам данных. Это делает его универсальным инструментом для автоматизации рутинных задач.
Например, представьте, что вам нужно переименовать все изображения в папке, добавив к их именам текущую дату. Если делать это вручную через графический интерфейс, вам придётся тратить время на каждое изображение. С помощью цикла в терминале это можно автоматизировать буквально одной командой:
for file in *.jpg
do
mv "$file" "$(date +%Y-%m-%d)_$file"
done
Этот цикл перебирает все файлы с расширением .jpg в текущей папке и переименовывает их, добавляя текущую дату перед оригинальным именем.
Такой подход экономит массу времени, особенно если изображений десятки или сотни. Кроме того, вы можете модифицировать цикл для других задач, в основе которых лежит перебор чего-либо, например файлов:
for file in *.txt
do
echo "Processing $file"
done
Здесь переменная file принимает поочерёдно имена всех файлов с расширением .txt в текущей директории и для каждого файла выводится сообщение Processing <имя_файла>
.
Как и в большинстве языков программирования, в циклах, используемых в оболочках терминалов, доступны конструкции break
и continue
. С их помощью можно более гибко управлять выполнением цикла: break
позволяет досрочно завершить выполнение цикла при выполнении определённого условия, а continue
пропускает текущую итерацию и сразу переходит к следующей.
Чем ещё интересны POSIX-совместимые оболочки?
Перечислять возможности POSIX-совместимых оболочек можно практически бесконечно, но формат статьи ограничивает меня в количестве и глубине их рассмотрения. Однако если вас заинтересовала эта тема, то вот ещё несколько направлений, которые вы можете изучить самостоятельно.
-
Использование регулярных выражений позволит эффективно искать и править текст, обрабатывать логи и анализировать данные.
-
Создание собственных функций поможет вам персонализировать оболочку и ускорить выполнение часто используемых задач.
-
Модификация окружения оболочки через написание конфигурационных файлов, таких как ~/.bashrc или ~/.zshrc, позволит настроить автодополнение, цветовые схемы и переменные окружения.
-
Использование сторонних плагинов, таких как Oh My Zsh, позволит улучшить автодополнение, добавит красивые подсказки и расширенную интеграцию с Git.
-
Взаимодействие с сетевыми утилитами или с такими инструментами, как curl, wget, ssh и scp, поможет выполнять сетевые операции прямо из командной строки.
-
Управление процессами даст возможность работать с фоновыми и приостановленными процессами и управлять приоритетами процессов.
-
Отладка скриптов позволит использовать инструменты вроде
set -x
иtrap
для пошагового анализа выполнения команд.
Это не обязательный к изучению материал для начинающего специалиста, однако понимание и умение применять знания из перечисленных тем даст гораздо больше возможностей для профессионального роста и поможет вам раскрыть весь потенциал POSIX-совместимых оболочек.
Что в итоге?
Я разобрал лишь некоторые из множества возможностей POSIX-совместимых оболочек, которые, на мой взгляд, важно показать тем, кто только начинает знакомство с разработкой и учится работать в командной строке. Мы коснулись основ: работы с историей команд, вызовом справки, построением конвейеров и другими полезными функциями, которые делают консоль мощным инструментом в руках разработчика.
У меня не было цели создать ещё один справочник по командам — таких ресурсов уже достаточно, и они легко доступны через, например, поиск. Вместо этого я сосредоточился на фундаментальных моментах, которые помогают понять суть и возможности работы через интерфейс командной строки. Освоив эти базовые приёмы, вы сможете с уверенностью двигаться дальше, изучать новые команды, автоматизировать рутину и использовать терминал как полноценный инструмент для решения самых разных задач.
Надеюсь, эта статья вдохновит вас на дальнейшее изучение материала и, начав с малого, вы сможете достичь больших результатов и открыть для себя удобство терминала, которое так ценят опытные разработчики.
Работаем с терминалом. Основные команды терминала для программиста
Терминал — это инструмент, который позволяет нам взаимодействовать с нашей системой через командную строку. С помощью терминала мы можем выполнять различные задачи: от простых, таких как просмотр содержимого папки, до сложных, например, управление веб-сервером. В этой статье мы рассмотрим основы работы с терминалом и узнаем о некоторых ключевых командах, которые должен знать каждый программист.
Начало работы с терминалом
Открытие терминала зависит от вашей операционной системы. В Windows терминал можно открыть, нажав Win+R
и введя cmd
. В macOS и Linux обычно можно найти терминал в меню приложений, поиском «Terminal» или «Konsole».
Когда вы откроете терминал, вы увидите командную строку, где вы можете вводить команды.
Основные команды терминала для перемещения по файлам
Прежде всего, вам нужно научиться перемещаться по файловой системе вашего компьютера. Вот три основные команды:
cd
(change directory) — эта команда позволяет вам перемещаться между папками. Например,cd Documents
перенесет вас в папку Documents.ls
(list) — используйте эту команду, чтобы увидеть содержимое текущей папки.pwd
(print working directory) — эта команда показывает текущую папку, в которой вы находитесь.
Работа с файлами и папками
Вот несколько команд, которые помогут вам работать с файлами и папками:
touch
— создает новый файл. Например,touch example.txt
создаст новый файлexample.txt
.mkdir
— создает новую папку. Например,mkdir NewFolder
создаст новую папкуNewFolder
.cp
— копирует файл. Вы должны указать исходный и целевой файл. Например,cp source.txt destination.txt
создастsource.txt
вdestination.txt
.mv
— перемещает или переименовывает файл.rm
— удаляет файл. Будьте осторожны с этой командой!
Использование программ и пакетных менеджеров
Важной частью работы с терминалом является использование программ и пакетных менеджеров. Пакетные менеджеры, такие как apt для Ubuntu и Debian, yum
для Fedora и CentOS или brew
для macOS, позволяют легко устанавливать, обновлять и удалять программное обеспечение.
Использование команды apt
(Advanced Package Tool) для Ubuntu и Debian
Команда apt
позволяет устанавливать, обновлять и удалять программное обеспечение. Например, если вам нужно установить Python, вы можете использовать команду apt install
:
sudo apt update # Обновить список пакетов
sudo apt install python3.8 # Установить Python версии 3.8
Использование команды yum
(Yellowdog Updater, Modified) для Fedora и CentOS
Команда yum
похожа на apt
, но используется в системах на основе Red Hat, таких как Fedora и CentOS. Например, вы можете установить Node.js следующим образом:
sudo yum update # Обновить список пакетов
sudo yum install nodejs # Установить Node.js
Использование команды brew
(Homebrew) для macOS
brew
— это пакетный менеджер для macOS, который позволяет легко устанавливать программное обеспечение. Например, вы можете установить Git следующим образом:
brew update # Обновить список пакетов
brew install git # Установить Git
Кроме пакетных менеджеров, важной частью работы с терминалом является умение использовать различные программы. Некоторые из наиболее популярных включают Git для контроля версий, SSH для защищенного соединения с удаленными серверами, Curl или Wget для загрузки файлов из интернета, Grep и Awk для анализа текстовых файлов и многие другие.
Использование текстовых редакторов
Текстовые редакторы являются важной составляющей инструментария программиста, особенно при работе в терминале. Их используют для создания и редактирования кода, конфигурационных файлов, документов и т. д. Вот несколько из самых популярных текстовых редакторов, которые используются в терминале.
Vim
Vim является мощным и гибким текстовым редактором, который является стандартным в большинстве Unix-подобных систем. Он имеет сложный интерфейс, но позволяет вам быстро и эффективно редактировать текст. Вы можете открыть файл в Vim с помощью команды vim filename
. Vim имеет различные режимы, включая командный режим, режим вставки и визуальный режим. Вот несколько основных команд:
i # Перейти в режим вставки
:w # Сохранить файл
:q # Выйти из Vim
:wq # Сохранить файл и выйти
:q! # Выйти без сохранения
Nano
Nano является более простым текстовым редактором, который также широко используется в Unix-подобных системах. Он имеет более простой интерфейс, который отображает основные команды внизу экрана. Вы можете открыть файл в Nano с помощью команды nano filename
. Вот несколько основных команд:
Ctrl+O # Сохранить файл
Ctrl+X # Выйти из Nano
Emacs
Emacs является еще одним мощным текстовым редактором, который имеет множество возможностей и гибкую среду для настройки. Он имеет более крутую кривую обучения, но позволяет выполнять множество операций без выхода из редактора. Вы можете открыть файл в Emacs с помощью команды emacs filename
. Вот несколько основных команд:
Ctrl+x Ctrl+s # Сохранить файл
Ctrl+x Ctrl+c # Выйти из Emacs
cat
Команда cat
также может использоваться для просмотра содержимого файлов непосредственно в терминале, хотя она не является редактором. Вы можете открыть файл с помощью команды cat filename
.
Все эти редакторы имеют множество дополнительных команд и возможностей, которые позволяют им соответствовать различным потребностям пользователей.
Основы скриптов для терминала
Скрипты — это мощный инструмент для автоматизации рутинных задач. Они могут использоваться для автоматического запуска команд, анализа данных, тестирования программного обеспечения и многих других вещей.
Скрипты можно писать на различных языках, но одним из наиболее популярных для терминала является Bash (Bourne Again SHell). Bash — это широко используемая командная оболочка на Unix-подобных операционных системах, которая имеет встроенный интерпретатор скриптов.
Рассмотрим пример простого скрипта на Bash, который может пригодиться разработчикам.
- Скрипт для автоматического создания нового каталога и перехода в него. Это простой скрипт, который может значительно сократить время на рутинные операции. Его можно написать так:
#!/bin/bash
# Скрипт для создания нового каталога и перехода в него
if [ -z "$1" ]
then
echo "Ошибка: отсутствующий аргумент"
echo "Использование: ./make_and_cd.sh <имя каталога>"
else
mkdir $1 && cd $1
fi
Выполните chmod +x make_and_cd.sh
, чтобы сделать скрипт исполняемым. Этот скрипт принимает имя каталога в качестве аргумента и, если оно не указано, выводит сообщение об ошибке.
- Скрипт для проверки занятого дискового пространства. Это может быть полезно, если вы работаете с большими данными или хотите отслеживать использование диска.
#!/bin/bash
# Скрипт для проверки занятого дискового пространства
df -h
Этот скрипт просто вызывает команду df -h
, которая показывает использование дискового пространства в удобном для человека формате.
- Скрипт для быстрого создания резервной копии файла. Этот скрипт создает резервную копию файла с добавлением текущего времени к имени файла.
#!/bin/bash
# Скрипт для бекапа файла
if [ -z "$1" ]
then
echo "Ошибка: отсутствующий аргумент"
echo "Использование: ./backup.sh <имя файла>"
else
cp $1 "$1_$(date +%Y%m%d_%H%M%S)"
fi
Этот скрипт принимает имя файла в качестве аргумента и создает его резервную копию с текущей датой и временем в имени.
Эти скрипты можно дополнительно настроить и адаптировать под свои потребности, добавив различные команды и опции. Важно понимать, что скрипты на Bash — это мощный инструмент, который может значительно упростить вашу работу в терминале.
Заключение
Терминал — это мощный инструмент, который может значительно повысить вашу продуктивность. Эти основы дадут вам хороший старт, но есть еще много другого, что вы можете делать в терминале. Не бойтесь экспериментировать и исследовать!