Для вывода на экран содержимого текущего каталога в командной оболочке windows используется команда

Программистам часто приходится работать в консоли — например, чтобы запустить тестирование проекта, закоммитить новый код на Github или отредактировать документ в vim. Всё это происходит так часто, что все основные действия с файлами становится быстрее и привычнее выполнять в консоли. Рассказываем и показываем основные команды, которые помогут ускорить работу в терминале под OS Windows.

Для начала нужно установить терминал или запустить командную строку, встроенную в Windows — для этого нажмите Win+R и введите cmd. Терминал часто встречается и прямо в редакторах кода, например, в Visual Studio Code.

Чтобы ввести команду в консоль, нужно напечатать её и нажать клавишу Enter.

Содержимое текущей папки — dir

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

C:\content-server>dir
 Том в устройстве C имеет метку SYSTEM
 Серийный номер тома: 2C89-ED9D

 Содержимое папки C:\content-server

06.10.2020  00:41    <DIR>          .
06.10.2020  00:37    <DIR>          .circleci
16.07.2020  16:04               268 .editorconfig
16.07.2020  16:04                10 .eslintignore
16.07.2020  16:04               482 .eslintrc
06.10.2020  00:37    <DIR>          .github
16.07.2020  16:04                77 .gitignore
06.10.2020  00:41    <DIR>          assets
06.10.2020  00:41    <DIR>          gulp
16.07.2020  16:10               379 gulpfile.js
16.07.2020  16:10           296 320 package-lock.json
16.07.2020  16:10               751 package.json
16.07.2020  16:04               509 README.md

Открыть файл

Чтобы открыть файл в текущей папке, введите его полное имя с расширением. Например, blog.txt или setup.exe.

Перейти в другую папку — cd

Команда cd без аргументов выводит название текущей папки.

Перейти в папку внутри текущего каталога:

C:\content-server>cd assets
C:\content-server\assets>

Перейти на одну папку вверх:

C:\content-server\assets>cd ..
C:\content-server>

Перейти в папку на другом диске:

c:\content-server>cd /d d:/
d:\>

Чтобы просто изменить диск, введите c: или d:.

Создать папку — mkdir или md

Создаём пустую папку code внутри папки html:

d:\html>mkdir coded:\html>dir

 Содержимое папки d:\html

03.11.2020  19:23    <DIR>           .
03.11.2020  19:23    <DIR>           ..
03.11.2020  19:25    <DIR>           code
               0 файлов              0 байт
               3 папок  253 389 438 976 байт свободно

Создаём несколько пустых вложенных папок — для этого записываем их через косую черту:

d:\html>mkdir css\js
d:\html>dir
 Том в устройстве D имеет метку DATA
 Серийный номер тома: 0000-0000

 Содержимое папки d:\html

03.11.2020  19:23    <DIR>           .
03.11.2020  19:23    <DIR>           ..
03.11.2020  19:25    <DIR>           code
03.11.2020  19:29    <DIR>           css

Создаётся папка css, внутри которой находится папка js. Чтобы проверить это, используем команду tree. Она показывает дерево папок.

Удалить папку — rmdir или rd

Чтобы удалить конкретную папку в текущей, введите команду rmdir:

d:\html\css>rmdir js

При этом удалить можно только пустую папку. Если попытаться удалить папку, в которой что-то есть, увидим ошибку:

d:\html\css>d:\html>rmdir css
Папка не пуста.

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

d:\html>rmdir css /s
css, вы уверены [Y(да)/N(нет)]? y

Показать дерево папок — tree

В любом момент мы можем увидеть структуру папок. Для этого используется команда tree.

d:\html>tree
Структура папок тома DATA
Серийный номер тома: 0000-0000
D:.
├───code
└───css
    └───js

Если вы хотите посмотреть содержимое всего диска, введите tree в корне нужного диска. Получится красивая анимация, а если файлов много, то ещё и немного медитативная.

Удаление файла — del или erase

Команда для удаления одного или нескольких файлов.

d:\html>del blog.txt

Переименование файла — ren или rename

Последовательно вводим ren, старое и новое имя файла.

d:\html>dir
 Содержимое папки d:\html

03.11.2020  19:23    <DIR>            .
03.11.2020  19:23    <DIR>            ..
03.11.2020  19:59                 0 blag.txt

d:\html>ren blag.txt blog.txt

d:\html>dir
 Содержимое папки d:\html

03.11.2020  19:23    <DIR>            .
03.11.2020  19:23    <DIR>            ..
03.11.2020  19:59                 0 blog.txt

Команды одной строкой

Очистить консоль — cls.

Информация о системе — systeminfo.

d:\html>systeminfo

Имя узла:                         DESKTOP-6MHURG5
Название ОС:                      Майкрософт Windows 10 Pro
Версия ОС:                        10.0.20246 Н/Д построение 20246
Изготовитель ОС:                  Microsoft Corporation
Параметры ОС:                     Изолированная рабочая станция
Сборка ОС:                        Multiprocessor Free

Информация о сетевых настройках — ipconfig.

d:\html>ipconfig
Настройка протокола IP для Windows
Адаптер Ethernet Ethernet 2:

   Состояние среды. . . . . . . . : Среда передачи недоступна.
   DNS-суффикс подключения . . . . . :

Список запущенных процессов — tasklist.

c:\>tasklist

Имя образа                     PID Имя сессии          № сеанса       Память
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0         8 КБ
System                           4 Services                   0     2 688 КБ
Secure System                   72 Services                   0    23 332 КБ
…

Справка по командам — help

Команда help без аргументов выводит список всех возможных команд. help вместе с именем команды выведет справку по этой команде.

d:\html>help tree
Графическое представление структуры папок или пути.

TREE [диск:][путь] [/F] [/A]

   /F   Вывод имён файлов в каждой папке.
   /A   Использовать символы ASCII вместо символов национальных алфавитов.

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

👉🏻 Больше статей о фронтенде и работе в айти в телеграм-канале.

Подписаться

Материалы по теме

  • 10 горячих клавиш VS Code, которые ускорят вашу работу
  • Полезные команды для работы с Git
  • Полезные команды для работы с Node. js

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

ТелеграмПодкастБесплатные учебники

The dir command is one of the most useful commands while navigating the command line, and is present in its different forms in several operating systems. In this article, we will look at the Dir command and learn several use cases for it.

What is the dir Command

dir command in Windows OS is a built-in function that allows the user to do the following task:

  • View the contents of any directory
  • Check file attributes (both hidden and read-only)
  • Filter search results based on date or file type.

Basic Syntax

The general syntax of the dir command is:

dir [path] [options]
  • Path: specifies the location
  • Options: modifies to filter the output

1. List Files & Directories

This command is used to list all files and directories in the current one:

help dir

dircmd

help dir command

Output :

Displays a list of files and subdirectories in a directory.

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
 [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

 [drive:][path][filename]
             Specifies drive, directory, and/or files to list.

 /A          Displays files with specified attributes.
 attributes   D  Directories                R  Read-only files
              H  Hidden files               A  Files ready for archiving
              S  System files               I  Not content indexed files
              L  Reparse Points             O  Offline files
              -  Prefix meaning not
 /B          Uses bare format (no heading information or summary).
 /C          Display the thousand separator in file sizes.  This is the
 .
 .

output1

output

Usage explanation:

The command is mainly used for displaying the list of files and subdirectories in a directory. This could be done by executing the Dir command without any arguments.

Dir

cmddir11

dir

Which would produce an output similar to this.

Output

Directory of C:\Users

09/26/2020  11:34 AM    <DIR>          .
09/26/2020  11:34 AM    <DIR>          ..
09/02/2020  07:07 PM             1, 000 applese
09/24/2020  08:59 PM    <DIR>          Public
10/20/2020  06:39 PM    <DIR>          Soap
              1 File(s)          1, 000 bytes
              4 Dir(s)  13, 879, 459, 840 bytes free

dir12

Output

2. List Content of a Specific Directory

The output of the dir command in this enable users to specify a directory to view its contents. The syntax for this command is as follows:

Input

dir C:\Users\gfg19310\Documents

r11

List all content – Input

Output

Directory of C:\Users\gfg19310\Documents

20-03-2023  13:02    <DIR>          .
20-03-2023  13:02    <DIR>          ..
20-03-2023  13:02    <DIR>          Custom Office Templates

r22

List all content – Output

3. Show Hidden Files

Here, we will use /A option with the H attribute to include hidden files along with it. Here’s the syntax:

Input

dir  /A:H

show hidden file – Input

Output

07-06-2023  16:36    <DIR>          AppData
07-06-2023  16:36    <JUNCTION>     Application Data [C:\Users\GFG19310.GFG\AppData\Roaming]
07-06-2023  16:36    <JUNCTION>     Cookies [C:\Users\GFG19310.GFG\AppData\Local\Microsoft\Windows\INetCookies]
07-06-2023  16:36    <JUNCTION>     Local Settings [C:\Users\GFG19310.GFG\AppData\Local]
07-06-2023  16:36    <JUNCTION>     My Documents [C:\Users\GFG19310.GFG\Documents]
07-06-2023  16:36    <JUNCTION>     NetHood [C:\Users\GFG19310.GFG\AppData\Roaming\Microsoft\Windows\Network Shortcuts]
11-12-2024  05:46         3,670,016 NTUSER.DAT
07-06-2023  16:36           688,128 ntuser.dat.LOG1
07-06-2023  16:36         1,085,440 ntuser.dat.LOG2
02-01-2025  10:40         1,048,576 NTUSER.DAT{53b39e87-18c4-11ea-a811-000d3aa4692b}.TxR.0.regtrans-ms
18-12-2024  09:56         1,048,576 NTUSER.DAT{53b39e87-18c4-11ea-a811-000d3aa4692b}.TxR.1.regtrans-ms
18-12-2024  09:56         1,048,576 NTUSER.DAT{53b39e87-18c4-11ea-a811-000d3aa4692b}.TxR.2.regtrans-ms
18-12-2024  09:56            65,536 NTUSER.DAT{53b39e87-18c4-11ea-a811-000d3aa4692b}.TxR.blf
07-06-2023  16:36            65,536 NTUSER.DAT{53b39e88-18c4-11ea-a811-000d3aa4692b}.TM.blf
07-06-2023  16:36           524,288 NTUSER.DAT{53b39e88-18c4-11ea-a811-000d3aa4692b}.TMContainer00000000000000000001.regtrans-ms
07-06-2023  16:36           524,288 NTUSER.DAT{53b39e88-18c4-11ea-a811-000d3aa4692b}.TMContainer00000000000000000002.regtrans-ms
07-06-2023  16:36                20 ntuser.ini
07-06-2023  16:36    <JUNCTION>     PrintHood [C:\Users\GFG19310.GFG\AppData\Roaming\Microsoft\Windows\Printer Shortcuts]
07-06-2023  16:36    <JUNCTION>     Recent [C:\Users\GFG19310.GFG\AppData\Roaming\Microsoft\Windows\Recent]
07-06-2023  16:36    <JUNCTION>     SendTo [C:\Users\GFG19310.GFG\AppData\Roaming\Microsoft\Windows\SendTo]
07-06-2023  16:36    <JUNCTION>     Start Menu [C:\Users\GFG19310.GFG\AppData\Roaming\Microsoft\Windows\Start Menu]
07-06-2023  16:36    <JUNCTION>     Templates [C:\Users\GFG19310.GFG\AppData\Roaming\Microsoft\Windows\Templates]

h22

show hidden file – Output

4. List Files with Specific Extensions

To display files with a specific extension (e.g., .txt): Here’s a sample

Input

dir *.txt

Display Text -input

Output

Directory of C:\Users\GFG19310.GFG

14-11-2024  15:32                 3 example.txt
20-11-2024  14:44                 0 filename.txt
20-11-2024  14:45                 0 Rapture.txt
14-11-2024  15:35                 3 Rqapture.txt

t22

Display Text -Output

5. View Subdirectories

To include all subdirectories and their contents, use the following command:

Input

dir /S

dir /S

Output

Directory of C:\Users\GFG19310.GFG\Saved Games

07-06-2023  16:36    <DIR>          .
07-06-2023  16:36    <DIR>          ..
               0 File(s)              0 bytes

Directory of C:\Users\GFG19310.GFG\Searches

07-06-2023  16:38    <DIR>          .
07-06-2023  16:38    <DIR>          ..
08-11-2022  16:52               855 winrt--{S-1-5-21-1623517014-2252875782-278851815-1404}-.searchconnector-ms
07-06-2023  16:37               859 winrt--{S-1-5-21-2245693176-3959787992-2909979321-1244}-.searchconnector-ms
               2 File(s)          1,714 bytes

Directory of C:\Users\GFG19310.GFG\Videos

07-06-2023  16:38    <DIR>          .
07-06-2023  16:38    <DIR>          ..
26-12-2024  13:37    <DIR>          Captures
               0 File(s)              0 bytes

Directory of C:\Users\GFG19310.GFG\Videos\Captures

26-12-2024  13:37    <DIR>          .
26-12-2024  13:37    <DIR>          ..
26-12-2024  13:37           185,053 File Explorer 26-12-2024 13_37_47.png
11-10-2023  15:51            23,668 Network Connections .png

dir00

Fetching Directory

6. Sort by Date, Size, or Name

We can fetch data based on date, size or name. Let’s check them out:

By Date:

Input

dir /O:D

dir /O:D

Output

Directory of C:\Users\GFG19310.GFG

07-06-2023  16:36    <DIR>          3D Objects
07-06-2023  16:36    <DIR>          Contacts
07-06-2023  16:36    <DIR>          Favorites
07-06-2023  16:36    <DIR>          Music
07-06-2023  16:36    <DIR>          Saved Games
07-06-2023  16:36    <DIR>          Links
07-06-2023  16:37    <DIR>          OneDrive
07-06-2023  16:38    <DIR>          Searches
07-06-2023  16:38    <DIR>          Videos
07-06-2023  16:40    <DIR>          Documents
18-04-2024  12:51         2,635,835 get-pip.py
18-04-2024  16:16         2,635,835 get-pip.p
14-11-2024  15:32                 3 example.txt
14-11-2024  15:35                 3 Rqapture.txt
20-11-2024  14:44                 0 filename.txt
20-11-2024  14:45                 0 Rapture.txt
12-12-2024  18:45    <DIR>          my-node-project
18-12-2024  09:56    <DIR>          .
18-12-2024  09:56    <DIR>          ..
26-12-2024  10:02    <DIR>          Downloads
30-12-2024  18:34    <DIR>          Pictures
31-12-2024  16:02    <DIR>          Desktop

date11

Output

By Size:

Input

dir /O:S

dir /O:S

Output

Directory of C:\Users\GFG19310.GFG

18-12-2024  09:56    <DIR>          .
18-12-2024  09:56    <DIR>          ..
07-06-2023  16:36    <DIR>          3D Objects
07-06-2023  16:36    <DIR>          Contacts
31-12-2024  16:02    <DIR>          Desktop
07-06-2023  16:40    <DIR>          Documents
26-12-2024  10:02    <DIR>          Downloads
07-06-2023  16:38    <DIR>          Searches
07-06-2023  16:36    <DIR>          Favorites
20-11-2024  14:44                 0 filename.txt
07-06-2023  16:36    <DIR>          Saved Games
07-06-2023  16:38    <DIR>          Videos
07-06-2023  16:36    <DIR>          Links
07-06-2023  16:36    <DIR>          Music
12-12-2024  18:45    <DIR>          my-node-project
07-06-2023  16:37    <DIR>          OneDrive
30-12-2024  18:34    <DIR>          Pictures
20-11-2024  14:45                 0 Rapture.txt
14-11-2024  15:32                 3 example.txt
14-11-2024  15:35                 3 Rqapture.txt
18-04-2024  12:51         2,635,835 get-pip.py
18-04-2024  16:16         2,635,835 get-pip.p

bysize31

Output

By Name:

Input

dir /O:N

dir /O:N

Output

Directory of C:\Users\GFG19310.GFG

18-12-2024  09:56    <DIR>          .
18-12-2024  09:56    <DIR>          ..
07-06-2023  16:36    <DIR>          3D Objects
07-06-2023  16:36    <DIR>          Contacts
31-12-2024  16:02    <DIR>          Desktop
07-06-2023  16:40    <DIR>          Documents
26-12-2024  10:02    <DIR>          Downloads
14-11-2024  15:32                 3 example.txt
07-06-2023  16:36    <DIR>          Favorites
20-11-2024  14:44                 0 filename.txt
18-04-2024  16:16         2,635,835 get-pip.p
18-04-2024  12:51         2,635,835 get-pip.py
07-06-2023  16:36    <DIR>          Links
07-06-2023  16:36    <DIR>          Music
12-12-2024  18:45    <DIR>          my-node-project
07-06-2023  16:37    <DIR>          OneDrive
30-12-2024  18:34    <DIR>          Pictures
20-11-2024  14:45                 0 Rapture.txt
14-11-2024  15:35                 3 Rqapture.txt
07-06-2023  16:36    <DIR>          Saved Games
07-06-2023  16:38    <DIR>          Searches
07-06-2023  16:38    <DIR>          Videos

bynamealt

Output

7. View Results Page by Page

This command is used where too many files exists, we can use the /P option to get results one page at a time. Here’s the command:

Input

dir /P

dir /P

Output

Directory of C:\Users\GFG19310.GFG

18-12-2024  09:56    <DIR>          .
18-12-2024  09:56    <DIR>          ..
07-06-2023  16:36    <DIR>          3D Objects
07-06-2023  16:36    <DIR>          Contacts
31-12-2024  16:02    <DIR>          Desktop
07-06-2023  16:40    <DIR>          Documents
26-12-2024  10:02    <DIR>          Downloads
14-11-2024  15:32                 3 example.txt
07-06-2023  16:36    <DIR>          Favorites
20-11-2024  14:44                 0 filename.txt
18-04-2024  16:16         2,635,835 get-pip.p
18-04-2024  12:51         2,635,835 get-pip.py
07-06-2023  16:36    <DIR>          Links
07-06-2023  16:36    <DIR>          Music
12-12-2024  18:45    <DIR>          my-node-project
07-06-2023  16:37    <DIR>          OneDrive
30-12-2024  18:34    <DIR>          Pictures
20-11-2024  14:45                 0 Rapture.txt
14-11-2024  15:35                 3 Rqapture.txt
07-06-2023  16:36    <DIR>          Saved Games
07-06-2023  16:38    <DIR>          Searches
07-06-2023  16:38    <DIR>          Videos

view22

Output

8. List File Attributes

We can also include attributes such as read-only files and archives using the following command:

Input

dir /A

dir /A

Output

Directory of C:\Users\GFG19310.GFG

18-12-2024  09:56    <DIR>          .
18-12-2024  09:56    <DIR>          ..
07-06-2023  16:36    <DIR>          3D Objects
07-06-2023  16:36    <DIR>          AppData
07-06-2023  16:36    <JUNCTION>     Application Data [C:\Users\GFG19310.GFG\AppData\Roaming]
07-06-2023  16:36    <DIR>          Contacts
07-06-2023  16:36    <JUNCTION>     Cookies [C:\Users\GFG19310.GFG\AppData\Local\Microsoft\Windows\INetCookies]
31-12-2024  16:02    <DIR>          Desktop
07-06-2023  16:40    <DIR>          Documents
26-12-2024  10:02    <DIR>          Downloads
14-11-2024  15:32                 3 example.txt
07-06-2023  16:36    <DIR>          Favorites
20-11-2024  14:44                 0 filename.txt
18-04-2024  16:16         2,635,835 get-pip.p
18-04-2024  12:51         2,635,835 get-pip.py
07-06-2023  16:36    <DIR>          Links
07-06-2023  16:36    <JUNCTION>     Local Settings [C:\Users\GFG19310.GFG\AppData\Local]
07-06-2023  16:36    <DIR>          Music
07-06-2023  16:36    <JUNCTION>     My Documents [C:\Users\GFG19310.GFG\Documents]
12-12-2024  18:45    <DIR>          my-node-project
07-06-2023  16:36    <JUNCTION>     NetHood [C:\Users\GFG19310.GFG\AppData\Roaming\Microsoft\Windows\Network Shortcuts]
11-12-2024  05:46         3,670,016 NTUSER.DAT
07-06-2023  16:36           696,320 ntuser.dat.LOG1
07-06-2023  16:36         1,003,520 ntuser.dat.LOG2
02-01-2025  10:40         1,048,576 NTUSER.DAT{53b39e87-18c4-11ea-a811-000d3aa4692b}.TxR.0.regtrans-ms
18-12-2024  09:56         1,048,576 NTUSER.DAT{53b39e87-18c4-11ea-a811-000d3aa4692b}.TxR.1.regtrans-ms
18-12-2024  09:56         1,048,57 ..

read111

Output

9. Display File Size

You can also check the file size (in bytes) using the following command:

Input

dir /-C

dir /-C

Output

Directory of C:\Users\GFG19310.GFG

18-12-2024  09:56    <DIR>          .
18-12-2024  09:56    <DIR>          ..
07-06-2023  16:36    <DIR>          3D Objects
07-06-2023  16:36    <DIR>          Contacts
31-12-2024  16:02    <DIR>          Desktop
07-06-2023  16:40    <DIR>          Documents
26-12-2024  10:02    <DIR>          Downloads
14-11-2024  15:32                 3 example.txt
07-06-2023  16:36    <DIR>          Favorites
20-11-2024  14:44                 0 filename.txt
18-04-2024  16:16           2635835 get-pip.p
18-04-2024  12:51           2635835 get-pip.py
07-06-2023  16:36    <DIR>          Links
07-06-2023  16:36    <DIR>          Music
12-12-2024  18:45    <DIR>          my-node-project
07-06-2023  16:37    <DIR>          OneDrive
30-12-2024  18:34    <DIR>          Pictures
20-11-2024  14:45                 0 Rapture.txt
14-11-2024  15:35                 3 Rqapture.txt
07-06-2023  16:36    <DIR>          Saved Games
07-06-2023  16:38    <DIR>          Searches
07-06-2023  16:38    <DIR>          Videos

bby1

Output

Advanced Syntax

The above-mentioned syntaxes is for general usage. Now, let’s see some of the advanced usage syntax along with their examples.

10. Save Output to a File

We can redirect the output to a text file (dir command) using the syntax below:

Input (file name: rapture.txt)

dir /S > rapture.txt

dir /S > filename

Output

A file name with the provided name will be created containing the directory list.

Output

11. Search for any Specific File

You can search for any file by its name (or even partial name), following this syntax:

Input (file name: rapture – taken as a partial name “rapt”)

dir *rapt*

*filename*

Output

Directory of C:\Users\GFG19310.GFG

03-01-2025  11:03         7,854,908 Rapture.txt
               1 File(s)      7,854,908 bytes
               0 Dir(s)  116,168,089,600 bytes free

partial22

Output

12. Check the Total Number of Files

This syntax will summarise the total count of a file including directory:

Input

dir /W

dir /W

Output

dirw22

Output

Bonus: Useful cmd Options (Summarization)

Option Description
/P Fetch results one page at a time
/S Includes all files in subdirectories.
/A Displays files with specified attributes (e.g., /A:H for hidden files).
/O Sorts output (e.g., /O:D for date, /O:N for name).
/B Displays output in bare format (file names only, without additional details).
/L Displays names in lowercase.
/T Displays time attributes (e.g., /T:C for creation time).
/Q Displays file ownership information.

The dir command is vastly used among users for managing and exploring directories through different ways and patterns in Windows OS. You can give it all a try and organize your work smoothly.

1. Командная строка Windows

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

Студентам предстоит освоить следующие навыки:

работа с файловой системой в командной строке;

создание архивных и пакетных файлов;

настройка переменных среды окружения.

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

Основные понятия

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

Командная строка — это интерфейс ОС, работающий в текстовом режиме следующим образом:

— ОС выводит на экран приглашение;

— пользователь вводит команду и нажимает [Enter];

— ОС выводит результаты на экран.

Приглашение к вводу команд содержит имя диска и текущий каталог, например:

C:\User\Valentin>

Пользователь вводит с клавиатуры команду и ее параметры, разделенные пробелами, например:

dir /b *.txt

Параметры (аргументы) командной строки — это части строки, разделенные пробелами. Их нумеруют, начиная с нуля. Нулевой параметр — это имя команды или исполняемого файла. Следующие за ним параметры указывают режим выполнения команды и сообщают имя объекта, с которым будет выполняться операция.

Команды ОС, например dir, выполняет сама ОС, поэтому на диске нет отдельных файлов для каждой команды, например dir. exe. К исполняемым файлам относятся прикладные программы (приложения) *.com и *.exe, а также пакетные файлы *.bat и *.cmd. Пакетные файлы — это текстовые файлы, содержащие последовательность команд ОС.

Регистр букв. Команды можно вводить и заглавными (большими) и строчными (маленькими) буквами — командной строке Windows это будет понятно: CD, cd, Cd, cD, см. рис.

Рис. Одна команда в разном регистре

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

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

Рис. Квадратные скобки не используем!

Квадратные скобки — это первая проверка внимательности и понимания. Если студент читает справку по команде и потом вводит квадратные скобки, значит он ничего не понял. И таких студентов с каждым годом встречается всё больше.

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

Задание

Найдите в Википедии сведения про регистр букв и чувствительность к регистру символов.

Запуск командной строки

Командную строку можно запустить разными способами:

1) через главное меню Пуск:

Start — Windows System — Command Prompt

2) через поле поиска:

Type here to search — cmd — Command Prompt

4) с помощью «горячих клавиш»:

нажмите комбинацию клавиш [Win + R] — Run — cmd — [OK] или [Enter], см. рис.

Рис. Запуск командной строки

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

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

Чтобы закрыть командное окно, нажмите кнопку [x] в правом верхнем углу окна либо введите на клавиатуре команду exit — «выйти». В переводе эта команда могла бы звучать так: «Закройте это окно!»

Рис. Окно командной строки

Задание

— Запустите командную строку описанными способами.

— Настройте размер шрифта и цвет текста и фона.

— Введите команду ver и нажмите [Enter].

— Запишите версию ОС.

— Найдите в командном окне все элементы интерфейса:

— — Приглашение

— — Мигающий курсор

— — Команду

— — Ответ ОС

— — Полосу прокрутки

— Закройте командное окно.

Справочная система

Команда help выводит на экран описание указанной команды. Например, чтобы изучить команду dir, нужно ввести команду:

help dir

Длинный текст справки выводится на экран постранично.

Некоторые команды и программы сами могут выводить справку при указании вопросительного знака в качестве параметра:

dir /?

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

dir [диск: ]

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

dir

dir c:

dir d:

Задание

Вызовите справку для команды dir описанными выше способами.

История ввода команд

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

Содержимое командной строки можно редактировать клавишами [Влево], [Вправо], [Home], [End], [Del], [BackSpace].

Клавиша [Backspace] находится на клавиатуре над клавишей [Enter]. Эта клавиша удаляет символ слева от курсора.

Английское слово backspace означает «вернуться на одну позицию назад». Эта клавиша была ещё на печатных машинках, см. рис. Тогда она просто передвигала печатающую головку на один символ влево. Русское название — «Забой». Можно было вернуться и напечатать другую букву поверх первой — если надо было исправить ошибку — то есть «забить» одну букву другой, перепечатать символ. А теперь на компьютере это ещё и стирание символа слева от курсора — с той же целью — исправить опечатку.

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

Клавиша «Забой» тоже осталась на своём привычном месте.

Рис. Клавиша «Забой» на печатающей машинке

Клавиша [Del] удаляет символ справа от курсора.

Для полного удаления текущей команды нажмите [Esc].

Задание

— Используя клавиши [Up] и [Down], просмотрите историю ввода.

— Верните команду help dir

— Отредактируйте команду, чтобы получить help help

— Нажмите [Enter]

— Верните предыдущую команду

— Нажмите [Esc]

— Прочитайте описание [Backspace] на Википедии

Команда DIR

Для просмотра содержимого каталога используется команда dir. Английское слово directory переводится как «каталог, папка, директория».

На экран выводится список всех каталогов и файлов, находящихся в текущем каталоге диска с указанием их расширения и размеров, даты и времени создания, см. рис.

Каталоги помечаются символами <DIR>.

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

dir /b — вывод только названий файлов

dir /d — вывод списка в несколько колонок

dir /oe-s — отсортированный по расширениям список имен каталогов и файлов, а среди них — сортировка от больших файлов к меньшим.

Рис. Содержимое каталога

Задание

— Введите следующие команды:

dir

dir c:\

dir /b c:\

— Обратите внимание на результаты выполнения команд

— Вызовите справку для команды dir

— Выведите на экран список файлов и каталогов диска D:, отсортированных по расширению в обратном алфавитном порядке;

— Выведите на экран список файлов и каталогов диска D:, отсортированных по дате — от ранних к поздним

— Выведите на экран список файлов и каталогов диска D:, сгруппировав каталоги после файлов

— Выведите на экран в алфавитном порядке имена скрытых файлов

— Выведите на экран в алфавитном порядке имена системных файлов

Команда CD

Для перехода из каталога в каталог используют команду cd. Это сокращение от английских слов Change Directory — «смените каталог».

Как и многие другие команды ОС, это выражение действительно звучит как команда в армии: «Рядовой Петров, смените каталог!»

Команда cd без параметров выводит имена текущего диска и папки.

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

cd c:\tmp — переход в каталог c:\tmp из любого каталога диска c:

cd /d c:\tmp — переход в каталог c:\tmp из любого каталога любого диска

cd tmp — переход в подкаталог tmp, расположенный в текущем каталоге

cd.. — переход на один уровень выше по дереву файлов

cd \ — переход в корневой каталог текущего диска

d: — переход на диск D:

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

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

Задание

— Вызовите справку для команды cd

— Обратите внимание на использование кавычек в команде cd

— Используя команды cd и dir, переходите вверх и вниз по файловому дереву диска с:

— Сделайте зарисовку фрагмента файлового дерева

— Установите текущий диск d:

— Переходите вверх и вниз по файловому дереву диска d:

— Перейдите в каталог C:\Program Files с одновременной сменой диска и каталога

— Перейдите в корневой каталог

Команда TREE

Команда tree выводит на экран схематичное изображение дерева каталогов. Английское слово Tree означает «дерево», а также «забраться на дерево». В нашем случае это слово означает «вывести на экран схему дерева файловой системы».

Если не указаны диск или путь, на экран выводится часть дерева, начиная с текущего каталога.

Чтобы прервать вывод на экран, нажмите сочетание клавиш [Ctrl + C].

Примеры:

tree \ — вывод дерева каталогов всего диска C:

tree c:\ /f more — постраничный вывод дерева диска C:

Задание

— Вызовите справку для команды tree

— Введите команду tree

— Введите команду tree и нажмите [Ctrl + C]

— Введите команду tree с постраничным выводом

— Сделайте зарисовку части дерева диска C:, начиная с корневого каталога

Команда SET

Команда set (англ. Set — «установите значение, задайте состояние, настройте») позволяет просматривать и изменять переменные (параметры) среды окружения (англ. Environment variables — «переменные окружения»). Имеется в виду среда выполнения программ.

Переменные окружения — это настройки ОС, доступные для прикладных программ в виде текстовых строк в оперативной памяти. Их также называют так: set-параметры.

К переменным окружения обращаются по имени.

Команда set без параметров выводит текущие значения переменных среды окружения, см. рис.

Вот некоторые примеры переменных окружения:

HOMEDRIVE — диск, на котором находится домашний каталог

HOMEPATH — путь к домашнему каталогу

NUMBER_OF_PROCESSORS — число логических процессоров, то есть процессоров, ядер и т. п.

OS — операционная система или семейство ОС

PATH — путь поиска исполняемых файлов

PROMPT — формат приглашения командной строки

USERNAME — имя пользователя

Рис. Параметры окружения

Для обращения к значению переменной окружения используют символ процента. Например, %os% — значение переменной os.

Примеры:

set path=C:\Temp;%path% — добавление каталога C:\Temp в путь поиска

echo %os% — вывод на экран значения переменной OS

Задание

— Выведите полный список переменных окружения

— Определите число «процессоров»

— Определите тип операционной системы

— Выясните в Википедии, что такое Windows NT

— Определите имя пользователя

— Выведите путь для поиска

— Добавьте каталог d:\ в путь для поиска

— Выведите путь для поиска

— Выведите полный список переменных окружения

— Убедитесь, что значение переменной path изменилось

Команда PATH

Команда path (англ. Path — «путь») устанавливает путь для поиска исполняемых файлов. Если при запуске приложения полный путь к файлу не указан, ОС пытается найти исполняемый файл в текущем каталоге, а затем просматривает пути к каталогам из заранее заданного списка path.

Список путей для поиска хранится в переменной среды окружения PATH. Для просмотра списка путей используется команда path без параметров.

Примеры:

path — выводит список путей

path c:\usr; d:\bin — задание двух путей для поиска

path %path%; d:\s — добавляет каталог d:\s к пути поиска

Изменение set-параметров из командной строки действует только для текущего командного окна. После изменения путей для поиска ОС не сможет выполнять некоторые команды. Для восстановления работоспособности закройте текущее командное окно и откройте новое.

Задание

— Выведите список путей поиска

— Добавьте каталог c:\1 в список путей

— Выведите список путей поиска

— Убедитесь, что каталог добавлен в список

Создание файлов

Обычно системный администратор ограничивает права рядового пользователя — чтобы тот не испортил работающую систему.

Например, пользователю могут запретить создание файлов в корневом каталоге диска c:\. Рекомендуется проводить опыты с файлами на другом диске в своём каталоге, например d:\sidorov.

Для создания текстовых файлов в командной строке можно использовать два способа.

Способ 1. Копирование ввода с клавиатуры в файл:

copy con file. txt

При выполнении этой команды данные с клавиатуры записываются в указанный файл. Для завершения ввода текста нажмите комбинацию [Ctrl + Z], а затем [Enter].

con (англ. Console — «Консоль») — устройство стандартного ввода-вывода информации. «Стандартный ввод» выполняется с клавиатуры, а «стандартный вывод» — на экран.

Способ 2. Перенаправление стандартного вывода:

echo текст> file. txt

Команда echo (англ. Echo — «эхо») выводит текст, напечатанный после команды, на экран.

Символ «больше» направляет вывод вместо экрана в файл. В результате, при выполнении этой команды будет создан файл file. txt, который будет содержать в себе текст, напечатанный после команды echo.

Задание

— Просмотрите в Википедии статью Консоль, которая относится к компьютерам

— Создайте на рабочем диске свой рабочий каталог и назовите его своей фамилией

— Перейдите в свой рабочий каталог

— Создайте текстовый файл a. txt с помощью копирования с консоли в файл.

— Создайте текстовый файл b. txt с помощью перенаправления стандартного вывода.

Вывод на экран

Команда type выводит на экран содержимое текстового файла (например, *.txt или *.bat), например:

type f. txt

Можно также выполнить копирование файла на экран (устройство стандартного вывода, консоль), например

copy f. txt con

Задание

— Выведите на экран файл a. txt командой type

— Выведите на экран файл b. txt командой copy

Команда COPY

Команда copy (англ. copy — «скопируйте, создайте копию») используется, чтобы скопировать один или несколько файлов. Первый параметр команды — исходный файл (источник). Второй параметр — результат копирования (каталог или новый файл). Например, команда copy f1.txt d:\t копирует файл f1.txt в каталог d:\t.

Для объединения нескольких файлов в один файл между именами файлов ставится знак +. Например команда

copy f1+f2+f3 f4

объединяет файлы f1, f2 и f3 в файл f4

Второй параметр команды может содержать имя файла или путь к файлу.

Примеры:

copy 1.txt 2.txt — копирование файла 1.txt в файл 2.txt в текущем каталоге. Если файл с именем 2.txt уже существует в этом каталоге, то его содержимое заменяется содержимым файла 1.txt. Перед копированием ОС запрашивает согласие пользователя на замену существующего файла.

copy 1.txt d:\t\2.txt — копирование файла 1.txt в файл 2.txt в каталоге d:\t

Звездочка * заменяет любой символ или несколько символов в названии файла. Например, команда copy *.txt d:\ копирует все файлы с расширением txt в каталог d:\.

Задания

— Скопируйте файл a. txt в каталог d:\

— Выведите на экран файл d:\a. txt

— Скопируйте файл a. txt в d:\z. txt

— Выведите на экран файл d:\z. txt

— Скопируйте файл b. txt в файл c. txt

— Выведите на экран файл c. txt

— Скопируйте файл a. txt в файл c. txt

— Выведите на экран файл c. txt

— Скопируйте файлы a. txt и b. txt в файл c. txt

— Выведите на экран файл c. txt

— Скопируйте все файлы типа txt в файл d. txt

— Выведите на экран файл d. txt

Работа с архивами

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

Самораспаковывающийся архив SFX (SelF-eXtracting archive) — это исполняемый файл *.exe, содержащий архив и программу распаковки. При запуске такого файла производится распаковка архива без использования дополнительной программы-архиватора.

В лабораторной работе используется программа 7-zip — свободно распространяемый архиватор.

Сайт программы:

https://www.7-zip.org/

Чтобы запускать архиватор из командной строки, необходимо добавить в путь поиска каталог C:\Program Files\7-Zip

При вызове архиватора ему передают команду — первую букву английского слова, например

add

list

extract

Примеры использования архиватора:

7z a x1 b. txt — упаковка файла b. txt в архив x1.7z

7z l 1.7z — вывод списка файлов из архива 1.7z

7z e 1.7z — извлечение файлов из архива 1.7z

7z e 1.7z — od:\ — извлечение файлов в каталог d:\

7z a — sfx rr *.txt — сжатие всех текстовых файлов в самораспаковывающйся архив rr. exe

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

7z <command> [<switches>…] <archive_name> [<file_names>…]

означает, что пользователь может вводить такие команды:

7z a ghjk

7z l ghjk

7z a ghjk a. txt

7z a — sfx ghjk b.doc b. txt

Задания

— Выясните, в каком каталоге находится архиватор 7-zip

— Выведите на экран путь поиска

— Добавьте путь для поиска архиватора

set path=%path%;C:\Program Files\7-Zip

— Выведите на экран путь поиска

— Убедитесь, что путь добавлен

— Введите команду 7z и прочитайте справку по использованию архиватора

— Выясните назначение и перевод команд a, e, l

— Упакуйте файл с. txt в архив сс.7z

— Сравните размеры исходного и сжатого файлов

— Создайте текстовый файл tt.docx в редакторе MS Word

— Упакуйте файл tt.docx в архив t1.7z

— Сравните размеры исходного и сжатого файлов

— Упакуйте все файлы с расширением *.txt в архив ttt.7z

— Выведите список файлов из архива ttt.7z

— Распакуйте архив ttt.7z в каталог d:\

— Убедитесь, что операция выполнена успешно

— Упакуйте файл tt.doc в саморапаковывающийся архив в каталоге d:\

— Сравните размеры исходного и сжатого файлов

— Перейдите в каталог d:\

— Запустите созданный архивный файл на выполнение

— Убедитесь, что операция выполнена успешно

Перенаправление ввода-вывода

При выполнении программ в командной строке используется так называемый стандартный ввод-вывод. Это стандартные встроенные функции ОС для ввода текста с клавиатуры и вывода текста на экран. Такие действия выполняются, например, при использовании команд printf и scanf в программе на языке C.

Для перенаправления стандартного ввода-вывода используют следующие символы:

> — записать в файл (вместо вывода на экран);

>> — добавить к файлу (вместо вывода на экран);

< — прочитать из файла (вместо ввода с клавиатуры);

— объединить две команды в конвейер (вместо вывода на экран и ввода с клавиатуры).

Стандартный ввод

Если в параметрах командной строки не указано имя файла, то команда принимает данные с клавиатуры. Например, команда sort сортирует текстовые строки по алфавиту. Команда sort без параметров сортирует текст, вводимый с клавиатуры до нажатия [Ctrl+Z] и [Enter]. Команда sort f. txt сортирует текст из файла f. txt. Команда dir> f. txt отправляет список файлов в файл f. txt вместо вывода на экран. Команда dir>> f. txt дописывает список файлов в конец файла f. txt, если этот файл уже существует.

Конвейер

При организации конвейера стандартный вывод первой команды (вместо вывода на экран) направляется на стандартный ввод второй команды (вместо чтения с клавиатуры). Например, конвейер dir sort создает список файлов, сортирует его и выводит на экран.

Команда more организует постраничный вывод на экран. При организации конвейера в виде tree more, команда more перехватывает вывод на экран результатов работы команды tree и выводит длинный текст по страницам. При работе с командой more для вывода на экран следующей строки нажимают [Enter], для вывода следующей страницы — пробел [Space], для выхода из страничного просмотра — клавишу [Q] (англ. Quit — «выйти»).

Задания

— Вызовите команду dir и запишите результаты в файл d4.txt

— Выведите файл d4.txt на экран

— Вызовите команду ver и добавьте результаты к файлу d4.txt

— Выведите файл d4.txt на экран

— Выведите файловое дерево в постраничном режиме

Пакетные файлы

Пакетный файл — это текстовый файл с расширением *.bat (англ. Batch — «пакет»). В пакетном файле записывают последовательность команд ОС. Имеется также возможность составления несложных программ.

Хотя пакетный файл содержит текст, он является исполняемым файлом. Чтобы запустить пакетный файл из командной строки, нужно ввести его имя и нажать [Enter]. При этом расширение указывать не обязательно.

Для запуска файла или команды в отдельном окне используется команда start, например:

start dir

Задание

— Выведите справку по команде date

— Командой echo создайте пакетный файл da.bat, в котором содержится команда вывода на экран текущей даты

— Запустите файл da.bat на выполнение, указав расширение

— Запустите файл da.bat на выполнение, не указав расширение

— Запустите файл da.bat на выполнение в отдельном окне

— Перейдите в корневой каталог диска D:

— Запустите на исполнение файл da.bat без указания пути

— Ознакомьтесь с сообщением ОС

— Добавьте к пути поиска полный путь к каталогу, где находится файл da.bat

— Убедитесь, что путь поиска изменен

— Запустите на исполнение файл da.bat без указания пути

— Убедитесь, что файл успешно запущен

Работа с файлами и каталогами

Для создания каталогов используется команда mkdir (англ. Make Directory — «Создайте каталог»).

Для удаления каталогов используется команда rmdir (англ. Remove Directory — «Удалите каталог»).

Для удаления фалов используется команда del (англ. Delete — «Удалите»).

Задания

— Вызовите справку по mkdir

— Создайте каталог (в названии используйте номер группы)

— Перейдите в новый каталог

— Создайте каталог (в названии используйте фамилию)

— Перейдите в новый каталог

— Создайте текстовый файл

— Вызовите справку по del

— Удалите текстовый файл

— Поднимитесь на один уровень вверх по файловому дереву

— Вызовите справку по rmdir

— Удалите каталог

— Создайте каталог

— Поднимитесь на один уровень вверх по файловому дереву

— Удалите каталог

Управление процессами

Процесс — это программа, которая выполняется на компьютере. Пока программа хранится на диске, это файл. Когда она запущена на выполнение, это процесс. Процессы находятся в оперативной памяти, а не на диске.

Для вывода списка процессов используется команда tasklist (англ. Task List — «Составьте список задач (процессов)»).

Для остановки выполнения процесса используется команда taskkill (англ. Task Kill — «Убейте задачу, остановите выполнение указанного процесса»).

Для остановки процесса требуется указать идентификатор процесса PID (англ. Process Identifier — «Идентификатор процесса»). PID — это «уникальное» целое число, назначенное каждому процессу. У всех процессов эти номера разные.

Задание

— Выведите на экран список процессов

— Определите, какой процесс занимает больше всего памяти

— Определите номер процесса cmd. exe

— Запустите второе командное окно

— Выведите список процессов

— Определите номер второго процесса cmd. exe

— Определите, сколько памяти занимает каждый процесс cmd. exe

Конец ознакомительного фрагмента.

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

Синтаксис этой команды:

XCOPY источник [результат] [ключи]

Команда XCOPY имеет множество ключей, мы коснемся лишь некоторых из них. Ключ /D[:[дата]] позволяет копировать только файлы, измененные не ранее указанной даты. Если параметр дата не указан, то копирование будет производиться только если источник новее результата. Например, команда

XCOPY "C:\Мои документы\*.*" "D:\BACKUP\Мои документы" /D

скопирует в каталог ‘D:\BACKUP\Мои документы’ только те файлы из каталога ‘C:\Мои документы’, которые были изменены со времени последнего подобного копирования или которых вообще не было в ‘D:\BACKUP\Мои документы’.

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

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

Ключ /I важен для случая, когда копируются несколько файлов, а файл назначения отсутствует. При задании этого ключа команда XCOPY считает, что файл назначения должен быть каталогом. Например, если задать ключ /I в команде копирования всех файлов с расширением txt из текущего каталога в несуществующий еще подкаталог TEXT,

XCOPY  *.txt TEXT /I

то подкаталог TEXT будет создан без дополнительных запросов.

Ключи /Q, /F и /L отвечают за режим отображения при копировании. При задании ключа /Q имена файлов при копировании не отображаются, ключа /F — отображаются полные пути источника и результата. Ключ /L обозначает, что отображаются только файлы, которые должны быть скопированы (при этом само копирование не производится).

С помощью ключа /H можно копировать скрытые и системные файлы, а с помощью ключа /R — заменять файлы с атрибутом «Только для чтения». Например, для копирования всех файлов из корневого каталога диска C: (включая системные и скрытые) в каталог SYS на диске D:, нужно ввести следующую команду:

XCOPY C:\*.* D:\SYS /H

Ключ /T позволяет применять XCOPY для копирования только структуры каталогов источника, без дублирования находящихся в этих каталогах файлов, причем пустые каталоги и подкаталоги не включаются. Для того, чтобы все же включить пустые каталоги и подкаталоги, нужно использовать комбинацию ключей /T /E.

Используя XCOPY можно при копировании обновлять только уже существующие файлы (новые файлы при этом не записываются). Для этого применяется ключ /U. Например, если в каталоге C:\2 находились файлы a.txt и b.txt, а в каталоге C:\1 — файлы a.txt, b.txt, c.txt и d.txt, то после выполнения команды

XCOPY C:\1 C:\2 /U

в каталоге C:\2 по-прежнему останутся лишь два файла a.txt и b.txt, содержимое которых будет заменено содержимым соответствующих файлов из каталога C:\1. Если с помощью XCOPY копировался файл с атрибутом «Только для чтения», то по умолчанию у файла-копии этот атрибут снимется. Для того, чтобы копировать не только данные, но и полностью атрибуты файла, необходимо использовать ключ /K.

Ключи /Y и /-Y определяют, нужно ли запрашивать подтверждение перед заменой файлов при копировании. /Y означает, что такой запрос нужен, /-Y — не нужен.

Материалы по курсу «Основы программирования»

Работа в текстовой оболочке операционной системы (ОС)

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

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

Текстовые оболочки допускают как интерактивный режим — пользователь вводит
команды и наблюдает их результат, так и «пакетный» (batch) — пользователь
может создать файл со списком команд, которые будут выполняться автоматически.
Кроме того, в текстовых оболочках присутствуют средства, позволяющие
комбинировать работу нескольких программ — вывод одной программы связывать
со входом другой.

На сегодняшней лекции мы будем рассматривать основные команды и принципы
работы в оболочках cmd.exe на Windows и Bash на Linux и macOS.

Для запуска оболочки cmd.exe на Windows нужно найти пункт меню «Командная
строка» в группе «Служебные — Windows» в меню «Пуск»:

  • «Пуск» → «Служебные — Windows» → «Командная строка» (Windows 10)
  • «Пуск» → «Программы» → «Служебные» → «Командная строка (Windows 7)

Для запуска оболочки на Linux и macOS нужно найти приложение «Терминал» или
«Консоль» (в разных дистрибутивах Линукса оно может называться по-разному)

Командная строка Windows:

win-console.png

Командная строка Linux или macOS (выглядит примерно так):

posix-console.png

У оболочки есть так называемое приглашение — место на экране для ввода
команды. В командной строке Windows приглашение выглядит так:

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

В оболочке Bash (используемой по умолчанию на Linux и macOS), приглашение
выглядит так:

mazdaywik@Mazdaywik-NB10:~$

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

Команды оболочки позволяют перемещаться по папкам, манипулировать файлами
(копировать, переименовывать, перемещать, удалять) и запускать другие
программы. Команды в Командной строке Windows и Bash различаются.

Общий синтаксис команды:

‹команда› ‹параметр1› ‹параметр2›…

Здесь ‹команда› — это имя команды, параметры — указание режимов работы
команды и имён файлов, которыми команда манипулирует. Бывают команды, которые
вообще не принимают параметры.

Имя команды отделяется от параметров пробелом, сами параметры тоже разделяются
пробелами. Если имя команды или параметр сам должен содержать пробелы, то он
заключается в кавычки: "двойные" (работают и на Windows, и на Linux/macOS)
или 'одинарные' (работают только на Linux/macOS).

Команды бывают встроенные — обрабатываются самой оболочкой, либо являются
именами программ.

Основные команды оболочки

Смена текущей папки, cd

cd ‹имя папки›, работает и на Windows, и на Linux, и на macOS.

C:\Users\Mazdaywik>cd Desktop

C:\Users\Mazdaywik\Desktop>
mazdaywik@Mazdaywik-NB10:~$ cd example
mazdaywik@Mazdaywik-NB10:~/example$

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

Создание папки, mkdir

Для того, чтобы создать новую пустую папку, используется команда mkdir:

На Windows вместо mkdir можно использовать более короткий синоним md,
на Linux и macOS — только mkdir.

mazdaywik@Mazdaywik-NB10:~$ mkdir "New folder"
mazdaywik@Mazdaywik-NB10:~$ cd "New folder"
mazdaywik@Mazdaywik-NB10:~/New folder$
C:\Users\Mazdaywik>mkdir "New folder"

C:\Users\Mazdaywik>cd "New folder"

C:\Users\Mazdaywik\New folder>

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

На Windows для создания текстового файла используется команда вида

после чего с клавиатуры нужно ввести содержимое файла. Ввод завершается
нажатием клавиш Ctrl-Z и Enter.

На Linux и macOS нужно ввести команду

ввести содержимое файла и нажать комбинацию клавиш Ctrl-D.

C:\Users\Mazdaywik\New folder>copy con "new file.txt"
first line
second line
third line
^Z
Скопировано файлов:         1.

C:\Users\Mazdaywik\New folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ cat > "new file.txt"
first line
second line
third line
mazdaywik@Mazdaywik-NB10:~/New folder$

Просмотр содержимого папки

На Windows используется команда dir, которая распечатывает содержимое
папки, выводя сведения о каждом файле. Если команду вызвать с параметром /b,
будут выведены только имена файлов. В папке New folder на данный момент
всего один файл:

C:\Users\Mazdaywik\New folder>dir
 Том в устройстве C имеет метку System
 Серийный номер тома: 0052-DDD1

 Содержимое папки C:\Users\Mazdaywik\New folder

09.04.2022  14:33    <DIR>          .
09.04.2022  14:33    <DIR>          ..
09.04.2022  14:33                37 new file.txt
               1 файлов             37 байт
               2 папок  43 388 399 616 байт свободно

C:\Users\Mazdaywik\New folder>dir /b
new file.txt

C:\Users\Mazdaywik\New folder>

На Linux и macOS используется команда ls, которая распечатывает имена
файлов в папке. Если указать параметр -l, то будут распечатаны подробные
сведения:

mazdaywik@Mazdaywik-NB10:~/New folder$ ls
'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$ ls -l
total 4
-rw-r--r-- 1 mazdaywik mazdaywik 34 Apr  9 14:34 'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$

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

На Windows используется команда

copy ‹исходный файл› ‹имя копии›
copy ‹исходный файл› ‹целевая папка›

На Linux и macOS:

cp ‹исходный файл› ‹имя копии›
cp ‹исходный файл› ‹целевая папка›

Для примера скопируем файл new file.txt в copy.txt:

C:\Users\Mazdaywik\New folder>copy "new file.txt" copy.txt
Скопировано файлов:         1.

C:\Users\Mazdaywik\New folder>dir
 Том в устройстве C имеет метку System
 Серийный номер тома: 0052-DDD1

 Содержимое папки C:\Users\Mazdaywik\New folder

09.04.2022  14:41    <DIR>          .
09.04.2022  14:41    <DIR>          ..
09.04.2022  14:33                37 copy.txt
09.04.2022  14:33                37 new file.txt
               2 файлов             74 байт
               2 папок  43 390 611 456 байт свободно

Команда dir нам показала, что в папке теперь находятся два файла.
Имя файла new file.txt нужно было заключать в кавычки, т.к. оно содержит
пробел. Имя целевого файла copy.txt пробелов не содержит, поэтому кавычки
не нужны.

На Linux:

mazdaywik@Mazdaywik-NB10:~/New folder$ cp "new file.txt" copy.txt
mazdaywik@Mazdaywik-NB10:~/New folder$ ls -l
total 8
-rw-r--r-- 1 mazdaywik mazdaywik 34 Apr  9 14:43  copy.txt
-rw-r--r-- 1 mazdaywik mazdaywik 34 Apr  9 14:34 'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$

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

На Windows используется команда

ren ‹исходное имя› ‹новое имя›

На Linux и macOS:

mv ‹исходное имя› ‹новое имя›

Переименуем файл copy.txt в backup.txt:

C:\Users\Mazdaywik\New folder>ren copy.txt backup.txt

C:\Users\Mazdaywik\New folder>dir /b
backup.txt
new file.txt

C:\Users\Mazdaywik\New folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ mv copy.txt backup.txt
mazdaywik@Mazdaywik-NB10:~/New folder$ ls
 backup.txt  'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$

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

На Windows используется команда move:

move ‹исходный файл› ‹целевой файл›
move ‹исходный файл› ‹целевая папка›

на Linux и macOS — mv:

mv ‹исходный файл› ‹целевой файл›
mv ‹исходный файл› ‹целевая папка›

Таким образом, на Linux и macOS используется одна и та же команда и для
переименования, и для перемещения файлов.

Создадим папку nested в текущей папке и переместим в неё файл backup.txt:

C:\Users\Mazdaywik\New folder>mkdir nested

C:\Users\Mazdaywik\New folder>move backup.txt nested
Перемещено файлов:         1.

C:\Users\Mazdaywik\New folder>dir /b
nested
new file.txt

C:\Users\Mazdaywik\New folder>dir /b nested
backup.txt

C:\Users\Mazdaywik\New folder>

Мы создали папку nested, переместили в неё файл backup.txt, посмотрели
содержимое текущей папки и содержимое папки nested. Как видим, команда
dir может принимать имя папки, содержимое которой нужно распечатать. Если
имя не указано, то распечатывается содержимое текущей папки.

mazdaywik@Mazdaywik-NB10:~/New folder$ mkdir nested
mazdaywik@Mazdaywik-NB10:~/New folder$ mv backup.txt nested
mazdaywik@Mazdaywik-NB10:~/New folder$ ls
 nested  'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$ ls nested
backup.txt
mazdaywik@Mazdaywik-NB10:~/New folder$

На Linux и macOS команда ls также поддерживает указание имени папки,
которую нужно распечатать.

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

На Windows используется команда del или erase (это два синонима), которая
принимает имя удаляемого файла:

del ‹имя файла›
erase ‹имя файла›

На Linux и macOS такая команда называется rm:

Удалим файл backup.txt в папке nested:

C:\Users\Mazdaywik\New folder>del nested\backup.txt

C:\Users\Mazdaywik\New folder>dir /b nested

C:\Users\Mazdaywik\New folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ rm nested/backup.txt
mazdaywik@Mazdaywik-NB10:~/New folder$ ls nested
mazdaywik@Mazdaywik-NB10:~/New folder$

Команды dir /b и ls ничего не вывели, т.к. папки пустые.

Удаление папок

Для удаления папки используется команда rmdir на всех трёх рассматриваемых
операционных системах. На Windows можно использовать более короткий синоним
rd. Команда rmdir (rd) может удалить только пустой каталог, в противном
случае выдаст ошибку.

Удалим папку nested:

C:\Users\Mazdaywik\New folder>rmdir nested

C:\Users\Mazdaywik\New folder>dir /b
new file.txt

C:\Users\Mazdaywik\New folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ rmdir nested
mazdaywik@Mazdaywik-NB10:~/New folder$ ls
'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$

Просмотр содержимого файла

Для того, чтобы вывести на экран содержимое файла, на Windows используется
команда type:

На Linux и macOS — cat:

Посмотрим содержимое файла new file.txt:

C:\Users\Mazdaywik\New folder>type "new file.txt"
first line
second line
third line

C:\Users\Mazdaywik\New folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ cat "new file.txt"
first line
second line
third line
mazdaywik@Mazdaywik-NB10:~/New folder$

Очистка экрана

Чтобы стереть содержимое окна консоли, нужно выполнить команду cls
на Windows или clear на Linux/macOS.

Запуск консоли Python в консоли оболочки

На Windows, если Python установлен правильно, нужно ввести команду python,
на Linux и macOS — python3 (т.к. команда python без цифры на конце
может запустить Python 2.7 на некоторых дистрибутивах Linux или версиях macOS).

C:\Users\Mazdaywik\New folder>python
Python 3.9.5 (tags/v3.9.5:0a7dcbd, May  3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+2
3
>>> exit
Use exit() or Ctrl-Z plus Return to exit
>>> exit()

C:\Users\Mazdaywik\New folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ python3
Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+2
3
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
mazdaywik@Mazdaywik-NB10:~/New folder$

Завершение работы в оболочке

Команда exit (работает везде) закрывает окно оболочки.

Запуск программ на Python в оболочке

Для запуска программы на Python’е нужно выполнить в оболочке команду

python ‹имя исходного файла›
python3 ‹имя исходного файла›

в зависимости от операционной системы.

Напишем программу, которая распечатывает фразу Hello, World! и запустим её.

C:\Users\Mazdaywik\New folder>copy con hello.py
print('Hello, World!')
^Z
Скопировано файлов:         1.

C:\Users\Mazdaywik\New folder>python hello.py
Hello, World!

C:\Users\Mazdaywik\New folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ cat > hello.py
print('Hello, World!')
mazdaywik@Mazdaywik-NB10:~/New folder$ python3 hello.py
Hello, World!
mazdaywik@Mazdaywik-NB10:~/New folder$

На Windows программы на Python можно запускать, просто указывая имя исходного
файла — интерпретатор Python будет вызываться автоматически:

C:\Users\Mazdaywik\New folder>hello.py
Hello, World!

C:\Users\Mazdaywik\New folder>

На Linux и macOS, чтобы так сделать, нужно выполнить дополнительные действия:
добавить в начало файла специальный комментарий

и пометить файл как исполнимый командной chmod +x.

mazdaywik@Mazdaywik-NB10:~/New folder$ cat > hello.py
#!/usr/bin/env python3

print('Hello, World!')
mazdaywik@Mazdaywik-NB10:~/New folder$ chmod +x hello.py
mazdaywik@Mazdaywik-NB10:~/New folder$ ./hello.py
Hello, World!
mazdaywik@Mazdaywik-NB10:~/New folder$

Одна из особенностей оболочек Linux и macOS — для запуска программ из текущей
папки нужно явно добавлять в начало ./, к этому надо привыкнуть.

Стандартные потоки ввода-вывода

В операционных системах (и в Windows, и в unix-подобных системах macOS и Linux)
для программ, запускаемых в консоли, доступны три стандартных потока
ввода-вывода — три псевдофайла, посредством которых программы могут
взаимодействовать с пользователем и друг с другом.

  • Стандартный ввод (условно называемый stdin) — по умолчанию связан с вводом
    с клавиатуры.
  • Стандартный вывод (stdout) — по умолчанию связан с выводом текста на экран,
    предназначен для вывода полезных данных программы.
  • Стандартный вывод ошибок (stderr) — тоже по умолчанию связан с экраном,
    предназначен для вывода сообщений об ошибках.

Если программа запрашивает пользовательский ввод, то, как правило, она читает
его из (псевдо)файла stdin, если печатает на экран — по умолчанию выводит
в (псевдо)файл stdout.

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

Для того, чтобы ввести конец файла в операционной системе Windows, нужно
нажать комбинацию клавиш Ctrl-Z (на экране высветится ^Z) и после этого
Enter. Для того, чтобы ввести конец файла в unix-подобных ОС, нужно нажать
Ctrl-D.

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

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

Для того, чтобы подменить пользовательский ввод на чтение текстового файла,
нужно к команде запуска программы добавить < «имя-файла.txt»:

program arg1 arg2... < input.txt

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

Рассмотрим следующую программу greeting.py:

name = input("Введите ваше имя:")
sirname = input("Введите вашу фамилию:")

print("Привет,", name, sirname)

(встроенная функция input() запрашивает ввод с клавиатуры)

Рассмотрим запуск программы обычным образом и с использованием
перенаправления ввода:

Z:\>python greeting.py
Введите ваше имя:Александр
Введите вашу фамилию:Коновалов
Привет, Александр Коновалов

Z:\>type input.txt
Alexander
Konovalov
Z:\>python greeting.py < input.txt
Введите ваше имя:Введите вашу фамилию:Привет, Alexander Konovalov

Z:\>

Первый запуск демонстрирует ввод данных с клавиатуры (stdin связан
с клавиатурой): я вводил свои имя и фамилию (завершая ввод каждой строки
нажатием на клавишу Enter, которая вводила и перевод строки тоже), набираемый
мною текст отображался на экране и считывался из stdin встроенной функцией
input().

Далее, при помощи команды type я показал, что в данной папке есть текстовый
файл input.txt с двумя строчками, в которых написаны, соответственно,
имя и фамилия (из-за особенностей Windows, кириллица может считываться неверно).

В третьей команде я связал стандартный ввод stdin с файлом input.txt,
в результате чего программа считывала данные не с клавиатурного ввода,
а из текстового файла — на экране видно только то, что она выводит,
но не считывает.

Можно считать, что при перенаправлении ввода стандартный ввод неявно считается
файлом, открытым в режиме r (для чтения).

Стандартный вывод можно перенаправить двумя способами: для перезаписи и для
дозаписи (сравни с режимами w и a функции open() в Python). Для того,
чтобы стандартный вывод перенаправить в файл в режиме перезаписи (если файла
не было, он будет создан, если файл был, его старое содержимое сотрётся),
нужно к команде запуска добавить > «имя-файла.txt», в режиме дозаписи (если
файл был, то новые данные будут добавляться в конец) — >> «имя-файла.txt»:

program arg1 arg2... > output.txt
program arg1 arg2... >> output.txt

Рассмотрим тот же пример:

Z:\>python greeting.py
Введите ваше имя:Alexander
Введите вашу фамилию:Konovalov
Привет, Alexander Konovalov

Z:\>python greeting.py > output.txt
Alexander
Konovalov

Z:\>

В текущей папке появится файл output.txt со следующим содержимым:

Введите ваше имя:Введите вашу фамилию:Привет, Alexander Konovalov

Когда мы перенаправили вывод в файл output.txt, то, что программа до этого
выводила на экран (строчку Введите ваше имя: и т.д.), она стала выводить
в файл — свои имя и фамилию я писал практически наугад, не видя, что программа
меня спрашивает.

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

Стандартный поток ошибок перенаправляют редко, для перенаправления используются
похожие команды, но перед знаками > и >> нужно указать цифру 2:

program arg1 arg2... 2>errors.txt
program arg1 arg2... 2>>errors.txt

Описанный выше синтаксис связывания связывания стандартных потоков с файлами
одинаково работает и в Windows, и в unix-подобных системах (macOS и Linux).

Связывать стандартные потоки можно не только с файлами, но и между собой.
Если у нас есть две программы, одна из которых (назовём её prog1) пишет
данные на stdout, а вторая (назовём её prog2) читает данные со стандартного
ввода (stdin), то их можно связать в конвейер:

Стандартный вывод stdout программы prog1 будет связан со стандартным
вводом stdin программы prog2, то, всё, что будет выводить первая программа,
будет считывать вторая программа.

В конвейере может быть сколько угодно команд:

prog1 | prog2 | prog3 | prog4

Здесь у команд prog2 и prog3 связаны и стандартные вводы, и стандартные
выводы.

В командной строке unix-подобных операционных систем имеется довольно много
встроенных команд, предназначенных для обработки текстовых данных (выбор
подстрок, сортировка строчек и т.д.), эти программы удобно комбинировать
при помощи конвейеров. Командная строка Windows гораздо беднее на эти
возможности.

Возьмём текстовый файл следующего содержимого:

jack.txt

«`
This is the house that Jack built.
This is the malt
That lay in the house that Jack built.
This is the rat, that ate the malt
That lay in the house that Jack built.
This is the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the priest all shaven and shorn,
That married the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the cock that crowed in the morn,
That waked the priest all shaven and shorn,
That married the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the farmer sowing his corn,
That kept the cock that crowed in the morn,
That waked the priest all shaven and shorn,
That married the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
«`

Для того, чтобы найти в нём все строки, в которых упоминается некоторая
строчка, на Windows нужно использовать команду find "искомая строка"
(кавычки обязательны), в unix-подобных системах — grep "искомая строка"
(кавычки нужны, если в искомой строке есть пробелы).

Для примера, найдём в файле слово dog:

Z:\>find "dog" < jack.txt
This is the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,

Z:\>

Программа find считывает строчки со стандартного ввода и выводит их
на стандартный вывод. Аналогично работает и grep:

mazdaywik@Mazdaywik-NB10:~/modules$ grep dog < jack.txt
This is the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
mazdaywik@Mazdaywik-NB10:~/modules$

Команда sort (есть и там, и там) сортирует строки, считанные из stdin,
и выводит их в алфавитном порядке на stdout (часть вывода опущена):

Z:\>sort < jack.txt
That chased the rat, that ate the malt
...
This is the cat,
This is the cock that crowed in the morn,
This is the cow with the crumpled horn,
This is the dog, that worried the cat,
This is the farmer sowing his corn,
This is the house that Jack built.
This is the maiden all forlorn,
This is the malt
This is the man all tattered and torn,
This is the priest all shaven and shorn,
This is the rat, that ate the malt

Z:\>
mazdaywik@Mazdaywik-NB10:~/modules$ sort < jack.txt
That chased the rat, that ate the malt
...
This is the cat,
This is the cock that crowed in the morn,
This is the cow with the crumpled horn,
This is the dog, that worried the cat,
This is the farmer sowing his corn,
This is the house that Jack built.
This is the maiden all forlorn,
This is the malt
This is the man all tattered and torn,
This is the priest all shaven and shorn,
This is the rat, that ate the malt
mazdaywik@Mazdaywik-NB10:~/modules$

Найдём все строчки, содержащие слово This, отсортирует их по алфавиту
и результат сложим в файл с именем this.txt:

Z:\>find "This" < jack.txt | sort > this.txt
mazdaywik@Mazdaywik-NB10:~/modules$ grep This < jack.txt | sort > this.txt

В обоих случаях получим файл this.txt со следующим содержимым:

This is the cat,
This is the cock that crowed in the morn,
This is the cow with the crumpled horn,
This is the dog, that worried the cat,
This is the farmer sowing his corn,
This is the house that Jack built.
This is the maiden all forlorn,
This is the malt
This is the man all tattered and torn,
This is the priest all shaven and shorn,
This is the rat, that ate the malt

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

В обоих случаях у программы поиска подстроки (find или grep) стандартный
ввод связывался с исходным файлом, стандартный вывод — со следующей программой
в конвейере — командой сортировки sort. Её стандартный вывод перенаправлялся
в целевой файл.

Для программ, работающих в командной строке, принято соглашение:

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

Таким образом, командам grep, find, sort и другим встроенным командам
можно в командной строке указывать и имена файлов:

grep 'какая-то строчка' one.txt two.txt three.txt
find "какая-то строчка" one.txt two.txt three.txt

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

На Windows наиболее употребительными являются файлы с именами nul и con.
Чтение из файла nul сразу же приводит к обнаружению конца файла (т.е.
этот файл воспринимается как пустой), запись в него игнорируется. Чтение
из файла con соответствует чтению с клавиатуры (даже если стандартный ввод
перенаправлен), запись в него соответствует записи на экран (даже если
перенаправлен станадартный вывод). Файлы nul и con неявно присутствуют
в каждой папке.

На unix-подобных системах чаще всего используется файл /dev/null, аналогичный
файлу nul на Windows: при чтении он воспринимается как пустой (сразу же
встречаем конец файла), при записи записываемые данные игнорируются.

Файлы nul и /dev/null используются в командной строке для того, чтобы
подавить вывод на экран:

C:\…>program args... > nul
user@comp:~/...$ program args... > /dev/null

С псевдофайлом con мы работали, когда создавали текстовый файл из командной
строки на Windows:

C:\Users\Mazdaywik\New folder>copy con "new file.txt"
first line
second line
third line
^Z
Скопировано файлов:         1.

C:\Users\Mazdaywik\New folder>

Команда cat в unix-системах читает указанные в командной строке файлы
и выводит их содержимое на стандартный вывод. Если файлы не указаны, то она
выводит на стандартный вывод содержимое стандартного ввода. Когда мы создавали
файл в командной строке Linux, мы просто перенаправляли стандартный вывод:

mazdaywik@Mazdaywik-NB10:~/New folder$ cat > "new file.txt"
first line
second line
third line
mazdaywik@Mazdaywik-NB10:~/New folder$

Взаимодействие программ на Python с операционной системой

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

Чтобы посмотреть перечень всех доступных средств, нужно в среде IDLE
ввести следующую команду:

>>> import sys
>>> help(sys)

Нам все эти средства не нужны, кроме двух основных:

  • доступ к стандартным потокам ввода-вывода,
  • доступ к аргументам командной строки.

Стандартные потоки ввода-вывода доступны как переменные

  • sys.stdin
  • sys.stdout
  • sys.stderr

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

При запуске программ в среде IDLE конец файла для sys.stdin вводится как
Ctrl-D в новой строчке независимо от операционной системы, вывод на sys.stdout
отображается синим цветом, на sys.stderr — красным цветом.

Пример: используем .readlines() для sys.stdin.

>>> sys.stdin.readlines()
one
two
three
>>> ['one\n', 'two\n', 'three\n']

Пример: выводим на sys.stderr:

>>> print("Напечатается синим")
Напечатается синим
>>> print("Напечатается красным", file=sys.stderr)
Напечатается красным
>>>

Мы говорили о том, что функция print() по умолчанию пишет на экран, чтобы
перенаправить вывод в файл, мы использовали параметр file=. Если быть точным,
функция print() всегда пишет в файл, по умолчанию file=sys.stdout.

Для доступа к аргументам командной строки используется переменная sys.argv,
в которой находится список аргументов. Этот список всегда непустой, т.к.
значением нулевого элемента списка sys.argv[0] является имя самой запущенной
программы. Для примера создадим файл test-argv.py со следующим содержимым:

import sys

for i, arg in enumerate(sys.argv):
    print(i, arg)

Запустим его:

Z:\>python test-argv.py one two three
0 test-argv.py
1 one
2 two
3 three

Z:\>
mazdaywik@Mazdaywik-NB10:~/modules$ python3 test-argv.py one two three
0 test-argv.py
1 one
2 two
3 three

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

Z:\>python test-argv.py "with space" without space
0 test-argv.py
1 with space
2 without
3 space

Пробел между словами with space стал частью параметра, т.к. внутри кавычек,
пробел между словами without и space стал разделителем параметров.

Пример. Напишем программу cat.py, имитирующую работу программы cat
в unix-системах. Программа cat читает файлы, перечисленные в командной
строке, каждый из них открывает и выводит его содержимое на стандартный
вывод. Если имена файлов отсутствуют, то читается стандартный ввод.

import sys


def main():
    if len(sys.argv) == 1:
        process_stream(sys.stdin)
    else:
        for name in sys.argv[1:]:
            with open(name) as stream:
                process_stream(stream)


def process_stream(stream):
    sys.stdout.write(stream.read())


if __name__ == "__main__":
    main()

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

В программе объявлены две функции main() и process_stream(), в самом конце
вызывается функция main(). Условие __name__ == "__main__" выполняется
всегда при обычном запуске программы.

За счёт того, что основной код программы сосредоточен в функции main(),
а не «размазан» по всему исходнику, понимание программы упрощается, кроме того,
в основном коде мы можем вызывать функции до их объявления.

Функция main() описывает обычную логику для консольных программ: обрабатывать
либо файлы (если указаны явно), или стандартный ввод. Поскольку обработка и того,
и другого выполняется одинаково, эта логика вынесена во вспомогательную функцию
process_stream().

Убедимся, что функция работает, как мы ожидаем:

mazdaywik@Mazdaywik-NB10:~/modules$ python3 cat.py test-argv.py this.txt
import sys

for i, arg in enumerate(sys.argv):
    print(i, arg)
This is the cat,
This is the cock that crowed in the morn,
This is the cow with the crumpled horn,
This is the dog, that worried the cat,
This is the farmer sowing his corn,
This is the house that Jack built.
This is the maiden all forlorn,
This is the malt
This is the man all tattered and torn,
This is the priest all shaven and shorn,
This is the rat, that ate the malt
mazdaywik@Mazdaywik-NB10:~/modules$ cat
hello!
hello!
mazdaywik@Mazdaywik-NB10:~/modules$ python3 cat.py
hello!
hello!
mazdaywik@Mazdaywik-NB10:~/modules$

Мы видим, что поведение встроенной программы cat и написанной нами cat.py
идентично на Linux. Кроме того, программа cat.py будет работать и на Windows:

Z:\>python cat.py test-argv.py this.txt
import sys

for i, arg in enumerate(sys.argv):
    print(i, arg)
This is the cat,
This is the cock that crowed in the morn,
This is the cow with the crumpled horn,
This is the dog, that worried the cat,
This is the farmer sowing his corn,
This is the house that Jack built.
This is the maiden all forlorn,
This is the malt
This is the man all tattered and torn,
This is the priest all shaven and shorn,
This is the rat, that ate the malt

Z:\>

Пример. Напишем программу grep.py, имитирующую работу встроенной программы
grep unix-подобных систем. Программа принимает в качестве первого параметра
искомую подстроку, после которой может следовать несколько имён файлов. Программа
выводит все строки указанных файлов, содержащие данную подстроку. Если указано
два и более файлов, то в начало выводимой строки добавляется имя сканируемого
файла. Если файлы не указаны, читается стандартный ввод. Программа может
принимать ключ -v, говорящий о том, что вывод нужно инвертировать, т.е.
выводить строки, не содержащие указанной подстроки.

(На самом деле, сходство будет неточное, т.к. программа grep принимает
шаблон, а наша программа — подстроку. Кроме того, ключей у команды grep
на самом деле очень много, а у нас будет только один -v.)

Для простоты будем считать, что ключ -v указывается перед искомой подстрокой.

import sys


def main():
    v = False
    argv = sys.argv[1:]
    if len(argv) > 0 and argv[0] == '-v':
        v = True
        argv = argv[1:]

    if len(argv) == 0:
        print(sys.argv[0]
              + ': Не указана строка поиска',
              file=sys.stderr)
        return

    search_string = argv[0]
    files = argv[1:]

    if len(files) == 0:
        process(search_string, sys.stdin, None, v)
    elif len(files) == 1:
        with open(files[0]) as stream:
            process(search_string, stream, None, v)
    else:
        for name in files:
            with open(name) as stream:
                process(search_string, stream, name, v)


def process(search_string, stream, name, v):
    if name != None:
        prefix = name + ':'
    else:
        prefix = ''

    for line in stream:
        found = (search_string in line)
        if not v:
            if found:
                print(prefix + line, end='')
        else: # -v указан
            if not found:
                print(prefix + line, end='')


if __name__ == "__main__":
    main()

Функция process принимает, помимо потока, который нужно просканировать,
искомую строку, имя файла и факт наличия параметра -v. Переменная prefix
содержит строку, добавляемую в начало вывода каждой строки: она пустая,
если имя файла печатать не надо (сканируется стандартный ввод или файл один),
в ней имя файла и двоеточие в остальных случаях.

Код функции process можно несколько сократить:

def process(search_string, stream, name, v):
    if name != None:
        prefix = name + ':'
    else:
        prefix = ''

    for line in stream:
        found = (search_string in line)
        if found != v:
            print(prefix + line, end='')

Можно убедиться, что написанная программа правильно повторяет поведение
встроенной команды grep:

mazdaywik@Mazdaywik-NB10:~/modules$ grep if cat.py grep.py
cat.py:    if len(sys.argv) == 1:
cat.py:if __name__ == "__main__":
grep.py:    if len(argv) > 0 and argv[0] == '-v':
grep.py:    if len(argv) == 0:
grep.py:    if len(files) == 0:
grep.py:    elif len(files) == 1:
grep.py:    if name != None:
grep.py:        if found != v:
grep.py:if __name__ == "__main__":
mazdaywik@Mazdaywik-NB10:~/modules$ python3 grep.py if cat.py grep.py
cat.py:    if len(sys.argv) == 1:
cat.py:if __name__ == "__main__":
grep.py:    if len(argv) > 0 and argv[0] == '-v':
grep.py:    if len(argv) == 0:
grep.py:    if len(files) == 0:
grep.py:    elif len(files) == 1:
grep.py:    if name != None:
grep.py:        if found != v:
grep.py:if __name__ == "__main__":
mazdaywik@Mazdaywik-NB10:~/modules$ grep for test-argv.py
for i, arg in enumerate(sys.argv):
mazdaywik@Mazdaywik-NB10:~/modules$ grep -v for test-argv.py
import sys

    print(i, arg)
mazdaywik@Mazdaywik-NB10:~/modules$ python3 grep.py for test-argv.py
for i, arg in enumerate(sys.argv):
mazdaywik@Mazdaywik-NB10:~/modules$ python3 grep.py -v for test-argv.py
import sys

    print(i, arg)
mazdaywik@Mazdaywik-NB10:~/modules$

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Активация сервера удаленных рабочих столов windows server 2016
  • Как посмотреть версию windows 10 ltsc
  • Как переназначить клавиши на клавиатуре ноутбука windows 10
  • Беспроводная сеть отключена windows 10 lenovo
  • Windows 10 pro black edition