Основы командной строки для Java-программиста (ч. 6)

Введение

В прошлой статье мы рассмотрели тему оформления (форматирования) кода в классе, сопроводив ее множеством примеров, которыми можно руководствоваться при написании программ.
В этой публикации мы погрузимся еще глубже в кроличью нору, изучив базовый набор команд, используемый при каждодневной работе в консоли. В основном это будут утилиты для взаимодействия с файловой системой (ФС): создать, удалить, переименовать, переместить файл (папку), перейти из одной папки в другую и т. д.
Напомним, что консоль (терминал, командная строка) — программа, которая позволяет пользоваться возможностями операционной системы (ОС) не в графическом режиме (UI), а в текстовом, с помощью вводимых с клавиатуры команд.
Умение работать в командной строке поможет:
  • избавиться от страха перед этим инструментом
  • использовать возможности ОС в ситуациях, когда отсутствует UI
  • выполнять ряд действий намного быстрее, чем через UI
  • повысить уровень экспертности

1. Вывод информации об ОС

Для разогрева рассмотрим самую простую команду, которая выводит информацию об ОС — ver (аналогом для Linux/macOS является команда uname). Для Windows 11 она отображает следующую информацию:
> ver
Microsoft Windows [Version 10.0.22631.3447]

2. Перемещение по ФС

Для перемещения по ФС существует команда cd.
Ознакомьтесь с ее возможностями с помощью справки cd /?:
D:\Java\StartJava
> cd /?
Выводит имя или изменяет текущий каталог.

CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]

  ..  обозначает переход в родительский каталог.
Обращайтесь к справочной информации всегда, когда забываете, как пользоваться той или иной командой, или используете ее впервые.
С помощью cd перейдем в качестве примера на диск C:\, а затем обратно в папку StartJava (к файлам MyFirstApp.java и MyFirstApp.class), созданную ранее.
Чтобы перейти с одного диска в корень другого, достаточно написать, например, C:\ (без cd). А вот, чтобы перейти в какую-то конкретную папку на другом диске, необходимо воспользоваться специальным параметром
cd /D D:\Java\StartJava:
Если указываемый путь до папки (файла) содержит пробелы, то его нужно с двух сторон обрамить кавычками (для последних версий Windows это требование уже не актуально). Например, cd /D "C:\Program Files\java"
При наборе пути, чтобы не писать его полностью (или когда вы его не помните), используйте клавишу Tab. Она обеспечит автодополнение имен.
Если требуется перейти из текущей папки в родительскую (на уровень вверх), то чтобы не писать до нее полный путь, например, D:\Java, можно использовать две точки .. Это что-то вроде ссылки на родительскую папку.
Кроме двух точек есть и одна точка. Она указывает на текущую папку.
D:\Java\StartJava
> cd ..

D:\Java
>
Запись cd .. аналогична cd D:\Java\

3. Отображение содержимого папок

Как перемещаться по ФС мы узнали. Теперь научимся отображать содержимое папок. Для этого есть команда dir (ls).
Для вызова справки по ls существует другой параметр ls --help (/? используется только для Windows-команд). Отобразим содержимое папки StartJava:
D:\Java\StartJava
> ls -a
./  ../  MyFirstApp.class  MyFirstApp.java
Параметр -a (сокр. от all) отображает не только доступные файлы, но и скрытые, а также ссылки на текущую папку (одна точка) и родительскую (две точки). То, что . и .. являются папками, свидетельствует наличие у них /
Удобным способом отображения только необходимых файлов, является использование маски (шаблона) с помощью символа *:
D:\Java\StartJava
> ls *.java
MyFirstApp.java
Запись *.java означает, что нам неважно имя файла, главное чтобы он имел расширение java.

4. Перемещение файлов

Теперь попробуем переместить файл MyFirstApp.java в родительскую папку (в папку Java). Для это существует команда move (mv). Ее рекомендуется использовать с параметром -v, который отобразит результат ее работы (без него она выполнится без вывода каких-либо сообщений):
В демонстрируемом примере, кроме mv используются и другие команды, которые мы уже прошли. Попробуйте самостоятельно понять, какие выполняются шаги и для чего.

5. Удаление файлов

Для удаления файлов существует команда del (rm).
Удалим для примера MyFirstApp.class. При этом в начале перейдем в папку StartJava.
D:\Java
> cd .\StartJava\

D:\Java\StartJava
> rm -vi ..\MyFirstApp.class
rm: remove regular file '..\MyFirstApp.class'? y
removed '..\MyFirstApp.class'
Обратная косая черта с точкой у .\StartJava\ означает, что из текущей папки мы переходим в StartJava. При этом указывать . и оба \ необязательно. Запись cd StartJava также прекрасно будет работать.
Для удаления MyFirstApp.class из родительской папки, мы использовали .. , а также параметр -i, который отвечает за подтверждение удаления вводом пользователя yes (y) или no (n).

6. Копирование файлов

Создадим копию файла MyFirstApp.java с помощью команды copy (cp), сохранив ее в родительской папке, а затем отобразим ее содержимое:
D:\Java\StartJava
> copy MyFirstApp.java ..
Скопировано файлов:         1.

D:\Java\StartJava
> ls ..
MyFirstApp.java  StartJava/

7. Вывод содержимого файла

Отобразим в консоли содержимое файла с помощью команды type (cat):
D:\Java\StartJava
> type ..\MyFirstApp.java

public class MyFirstApp {
    public static void main(String[] args) {
        System.out.println("╨Э╨░╨┐╨╕╤Б╨░╨╜╨╛ ╨╛╨┤╨╜╨░╨╢╨┤╤Л, ╤А╨░╨▒╨╛╤В╨░╨╡╤В ╨▓╨╡╨╖╨┤╨╡");
    }
}
Чтобы в Windows русский текст отобразился корректно, нужно поменять кодовую страницу c DOS (866) на Unicode (65001) с помощью chcp:
D:\Java\StartJava
> chcp
Текущая кодовая страница: 866

> chcp 65001
Active code page: 65001

D:\Java\StartJava
> type ..\MyFirstApp.java

public class MyFirstApp {
    public static void main(String[] args) {
        System.out.println("Написано однажды, работает везде");
    }
}

8. Удаление папки

Теперь удалим папку StartJava с помощью команды rmdir (rm):
D:\Java\StartJava
> cd ..

D:\Java
> rm -vr StartJava\
removed 'StartJava\/MyFirstApp.java'
removed directory 'StartJava\'
Параметр -r позволяет рекурсивно удалять папки со всем их содержимым.

9. Создание папки

Без папки StartJava нам никак нельзя, т. к. в ней должен храниться весь наш код. Возродим ее из пепла, используя команду mkdir (md), а заодно создадим внутри нее еще одну папку под названием source.
Пишем в терминале команду mkdir StartJava\source, жмем Enter:
D:\Java
> mkdir StartJava\source

D:\Java
> ls StartJava\
source/
Обе папки успешно созданы.

10. Переименование файлов

Переименуем папку source в src (общепринятое сокращение) с помощью команды ren (mv). В ней будет храниться исходный код.
Вводим ren, а затем старое (при этом нужно указать путь до файла) и новое имя файла:
D:\Java
> ren .\StartJava\source src

D:\Java
> ls -a .\StartJava\
./  ../  src/
Папка успешно переименовалась.

11. Создание текстового файла

Создадим новый текстовый файл под названием about.txt с помощью команды copy con (touch):
D:\Java
> touch StartJava\about.txt

D:\Java
> ls StartJava\
about.txt  src/

12. Запись текста в файл

Запишем в about.txt какой-нибудь текст (при этом кодовая страница должна быть 65001), а затем прочитаем его из файла и выведем в консоль:
D:\Java
> echo Интенсив StartJava - программирование на Java для начинающих! > StartJava\about.txt

D:\Java
> cat StartJava\about.txt
Интенсив StartJava - программирование на Java для начинающих!
Команда echo отвечает за вывод информации в консоль. Но если ее использовать с символом >, то текст из консоли или результат работы любой команды, будет сохранен в текстовый файл.

13. Вывод структуры файлов и папок

Команда dir (ls) отображает содержимое одной конкретной папки. Но если нам нужно отобразить содержимое всех вложенных папок, то для этих целей есть команда tree:
D:\Java
> tree /F StartJava\
Folder PATH listing for volume Programming
Volume serial number is CC8E-25BD
D:\JAVA\STARTJAVA
│   about.txt
│
└───src
Параметр /F позволяет отображать не только папки, но и файлы.
Чтобы понять, на что по-настоящему способна эта команда, перейдите на диск C:\ и запустите tree. Вас ждет незабываемый водопад информации.
Если вы используете Linux/macOS, то вам необходимо установить утилиту tree (1, 2).

14. Цепочка команд

И напоследок попробуем выполнить множественные действия, записав разные команды в цепочку. Попробуйте самостоятельно понять, какие были выполнены шаги:
D:\Java
> copy MyFirstApp.java StartJava\ & cd StartJava & rm -v ..\MyFirstApp.java & mv -v MyFirstApp.java src
        1 file(s) copied.
removed '..\MyFirstApp.java'
renamed 'MyFirstApp.java' -> 'src/MyFirstApp.java'
Как видим, все команды отработали без ошибок. При этом они отделены друг от друга логическим оператором &. Он означает, что команда справа от него не выполнится, если предыдущая команда завершится неудачно.
И еще раз воспользуемся tree:
D:\Java
> tree /F StartJava\
Folder PATH listing for volume Programming
Volume serial number is CC8E-25BD
D:\JAVA\STARTJAVA
|   about.txt
|
└───src
        MyFirstApp.java

15. Прочие мелкие команды

cls (clear) — очищает консоль
systeminfo — выводит информацию о вашей платформе (ОС + железо)
help — выводит список команд для Windows
exit — закрывает командную строку

16. Соответствие команд Windows и Linux/macOS

Последние версии Windows поддерживают и команды Linux. А все Linux команды поддерживает и macOS.

Заключение

Мы рассмотрели самые ходовые и популярные команды на каждый день. Данная статья лишь приоткрывает завесу возможностей, которые может дать терминал в умелых руках. Вам же остается не останавливаться в познании этого инструмента и постепенно, самостоятельно углубляться во все его тонкости.
Автор: Чимаев Максим
Оцените статью, если она вам понравилась!