Робота з файлами та каталогами
Останнє оновлення 2025-07-14 | Редагувати цю сторінку
Огляд
Питання
- Як я можу створювати, копіювати та видаляти файли і каталоги?
- Як я можу редагувати файли?
Цілі
- Створити ієрархію каталогів, яка відповідає заданій схемі.
- Створити файли в цій ієрархії за допомогою редактора або шляхом копіювання та перейменування файлів, що вже існують.
- Видалити, скопіювати та перемістити вказані файли та/або каталоги.
Створення каталогів
Тепер ми знаємо, як досліджувати файли та каталоги, але як їх створювати?
У цьому уроці ми дізнаємося про створення та переміщення файлів і
каталогів на прикладі каталогу exercise-data/writing
.
Крок перший: подивимось, де ми знаходимося і що вже маємо
Ми все ще маємо бути у каталозі shell-lesson-data
на
Робочому столі (англ. Desktop), що ми можемо перевірити за
допомогою:
ВИХІД
/Users/nelle/Desktop/shell-lesson-data
Далі ми перейдемо до каталогу exercise-data/writing
і
подивимося, що у ньому міститься:
ВИХІД
haiku.txt LittleWomen.txt
Створення каталогу
Створимо новий каталог з назвою thesis
за допомогою
команди mkdir thesis
(яка не має виводу):
Як ви можете здогадатися з її назви, команда mkdir
означає ‘створити каталог’ (англ. ‘make directory’). Оскільки
thesis
є відносним шляхом (тобто не має початкової косої
риски, як /what/ever/thesis
), новий каталог буде створено у
поточному робочому каталозі:
ВИХІД
haiku.txt LittleWomen.txt thesis/
Оскільки ми щойно створили каталог thesis
, у ньому ще
нічого немає:
Зауважте, що команда mkdir
не тільки створює окремі
каталоги по одному за раз. Параметр -p
дозволяє команді
mkdir
створювати каталог із вкладеними підкаталогами за
одну операцію:
Параметр -R
з командою ls
покаже усі
вкладені підкаталоги у каталозі. Скористаймось ls -FR
для
рекурсивного зображення нової ієрархії каталогів, яку ми щойно створили
у каталозі project
:
ВИХІД
../project/:
data/ results/
../project/data:
../project/results:
Два способи зробити одне й те саме
Використання терміналу для створення каталогу нічим не відрізняється
від використання файлового провідника. Якщо ви зараз відкриєте поточний
каталог за допомогою графічного провідника файлів вашої операційної
системи, там також з’явиться каталог thesis
. Хоча термінал
і файловий провідник - це два різні способи взаємодії з файлами, самі
файли й каталоги одні й ті ж самі.
Доречні імена для файлів і каталогів
Використання надто складних імен для файлів і каталогів може ускладнити роботу в командному рядку. Ось кілька корисних порад щодо вибору ефективних імен.
- Не використовуйте пробіли.
Пробіли можуть зробити назву більш змістовною, але оскільки вони
використовуються для відокремлення аргументів у командному рядку, краще
уникати їх у назвах файлів і каталогів. Ви можете використовувати
-
або _
(наприклад,
north-pacific-gyre/
замість
north pacific gyre/
). Щоб перевірити це, спробуйте набрати
mkdir north pacific gyre
і подивіться, який каталог (або
каталоги!) буде створено, перевірив це за допомогою
ls -F
.
- Не починайте назву з
-
(тире).
Команди розглядають назви, що починаються з -
, як
опції.
- Використовуйте літери, цифри,
.
(крапку),-
(тире) і_
(підкреслення).
Багато інших символів мають особливе значення у командному рядку. Деякі з них ми розглянемо у цьому уроці. Існують спеціальні символи, які можуть спричинити неправильну роботу команди й навіть призвести до втрати даних.
Якщо вам потрібно звернутися до назв файлів або каталогів, які
містять пробіли чи інші спеціальні символи, вам слід узяти назву в
одинарні лапки
(''
).
Створення текстового файлу
Перейдімо до каталогу thesis
за допомогою
cd
, а потім запустимо текстовий редактор Nano та створимо
файл з назвою draft.txt
:
Який редактор використовувати?
Коли ми говоримо, що ‘nano
- це текстовий редактор’, ми
дійсно маємо на увазі ‘текстовий’. У ньому неможливо переглядати або
редагувати таблиці, зображення чи будь-які інші зручні для сприйняття
людиною дані. Ми використовуємо його у прикладах, оскільки це один із
найпростіших текстових редакторів. Однак, через це він може виявитися
недостатньо потужним або гнучким для складніших завдань, які вам
потрібно буде виконати після завершення цього семінару. У системах Unix
(таких як Linux та macOS), багато програмістів використовують [Emacs]
(https://www.gnu.org/software/emacs/) чи Vim (обидва вимагають більше часу на
вивчення), або графічний редактор, такий як Gedit чи VScode. У Windows, можливо, ви
захочете скористатися Notepad++. Операційна система
Windows також має вбудований редактор з назвою notepad
,
який можна запустити з командного рядка так само, як і nano
для цього семінару.
Незалежно від того, яким редактором ви користуєтеся, вам потрібно знати, де він шукає і зберігає файли. Якщо ви запускаєте його з термінала, він (імовірно) використовуватиме ваш поточний робочий каталог як розташування за замовчуванням. Однак, якщо ви використовуєте меню “Пуск” вашого комп’ютера, файли за замовчуванням можуть зберігатися замість цього на робочому столі або в каталозі “Документи” (Documents). Ви можете змінити це, перейшовши до іншого каталогу під час першого виконання команди “Зберегти як…” (“Save As…”).
Наберемо кілька рядків тексту.
{alt=“Скриншот текстового
редактора nano в дії з текстом”У минулому це було - публікуй чи зникни,
а наразі стало - ділися та процвітай”}
Як тільки ми будемо задоволені нашим текстом, нам треба використати
комбінацію Ctrl+O (утримуючи клавішу
Ctrl or Control, натисніть клавішу O),
щоб зберегти наші дані на диск. Потім нам буде запропоновано вказати
ім’я файлу, у якому зберігатиметься наш текст. Натисніть
Return, щоб прийняти запропоновану за замовчуванням назву
draft.txt
.
Як тільки файл було збережено, скористаємось комбінацією клавіш Ctrl+X, щоб вийти з редактора і повернутися до термінала.
Клавіша Control, Ctrl або ^
Клавіші Control також називається клавішею ‘Ctrl’. Існує декілька способів, якими може бути описане використання клавіші Control. Наприклад, ви можете побачити вказівку натиснути клавішу Control і, утримуючи її натиснутою, потім натиснути клавішу X, описану будь-яким з наступних способів:
Control-X
Control+X
Ctrl-X
Ctrl+X
^X
C-x
У nano, у нижній частині екрана ви побачите
^G Get Help ^O WriteOut
. Це означає, що ви можете
скористатися Control-G
для отримання довідки й
Control-O
для збереження вашого файлу.
Після завершення роботи команда nano
не залишає жодних
даних на екрані, але ls
тепер показує, що ми створили файл
з назвою draft.txt
:
ВИХІД
draft.txt
Створення файлів іншим способом
Ми побачили, як створювати текстові файли за допомогою редактора
nano
. Тепер спробуйте виконати наступну команду:
Що зробила команда
touch
? Якщо ви відкриєте поточний каталог у файловому провіднику, чи видно в ньому цей файл?Скористуйтеся
ls -l
для перегляду файлів. Який розмір має файлmy_file.txt
?У яких випадках доцільно створювати файл саме таким чином?
Команда
touch
створює новий файл з назвоюmy_file.txt
у вашому поточному каталозі. Щоб переконатися, що файл створено, скористайтеся командоюls
. Файлmy_file.txt
також можна переглянути у вашому графічному провіднику файлів.Коли ви перевіряєте файл за допомогою
ls -l
, зверніть увагу, що розмірmy_file.txt
— 0 байт. Це означає, що файл порожній. Якщо відкрити його в редакторі, ви не знайдете в ньому жодного вмісту.Іноді програми не генерують вихідні файли автоматично, а потребують, щоб порожні файли були створені заздалегідь. Потім під час виконання програма шукає наявний файл, щоб заповнити його своїми даними. За допомогою команди
touch
можна ефективно створити порожній текстовий файл для подальшого використання такими програмами.
Що ховається в імені?
Ви, мабуть, помітили, що всі файли Неллі називаються ‘щось крапка
щось’, і у цій частині уроку ми завжди використовували розширення
.txt
. Це лише умовність: ми можемо назвати файл
mythesis
або майже як завгодно. However, most people use
two-part names most of the time to help them (and their programs) tell
different kinds of files apart. The second part of such a name is called
the filename extension and indicates what type of data
the file holds: .txt
signals a plain text file,
.pdf
indicates a PDF document, .cfg
is a
configuration file full of parameters for some program or other,
.png
is a PNG image, and so on.
This is just a convention, albeit an important one. Files merely contain bytes; it’s up to us and our programs to interpret those bytes according to the rules for plain text files, PDF documents, configuration files, images, and so on.
Якщо ви назвете зображення кита у форматі PNG як
whale.mp3
, це не перетворить його якимось чарівним чином на
запис пісні кита, хоча це може змусити операційну систему
спробувати відкрити його за допомогою музичного плеєра. In this case, if
someone double-clicked whale.mp3
in a file explorer
program, the music player will automatically (and erroneously) attempt
to open the whale.mp3
file.
Moving files and directories
Returning to the shell-lesson-data/exercise-data/writing
directory,
In our thesis
directory we have a file
draft.txt
which isn’t a particularly informative name, so
let’s change the file’s name using mv
, which is short for
‘move’:
The first argument tells mv
what we’re ‘moving’, while
the second is where it’s to go. In this case, we’re moving
thesis/draft.txt
to thesis/quotes.txt
, which
has the same effect as renaming the file. Sure enough, ls
shows us that thesis
now contains one file called
quotes.txt
:
ВИХІД
quotes.txt
One must be careful when specifying the target file name, since
mv
will silently overwrite any existing file with the same
name, which could lead to data loss. За замовчуванням mv
не
запитуватиме підтвердження перед перезаписом файлів. Однак додатковий
параметр mv -i
(або mv --interactive
) змусить
mv
запросити таке підтвердження.
Note that mv
also works on directories.
Перемістимо quotes.txt
до поточного робочого каталогу.
Знову скористаємося mv
, але цього разу ми використаємо лише
назву каталогу як другий аргумент щоб повідомити mv
, що ми
хочемо зберегти назву файлу, але перемістити файл у нове місце. (Ось
чому команда називається ‘перемістити’.) У цьому випадку ми
використовуємо спеціальну назву .
поточного каталогу, про
яку ми згадували раніше.
The effect is to move the file from the directory it was in to the
current working directory. ls
now shows us that
thesis
is empty:
ВИХІД
$
Alternatively, we can confirm the file quotes.txt
is no
longer present in the thesis
directory by explicitly trying
to list it:
ПОМИЛКА
ls: cannot access 'thesis/quotes.txt': No such file or directory
ls
with a filename or directory as an argument only
lists the requested file or directory. If the file given as the argument
doesn’t exist, the shell returns an error as we saw above. We can use
this to see that quotes.txt
is now present in our current
directory:
ВИХІД
quotes.txt
Moving Files to a new folder
Після виконання наступних команд Джеймі зрозуміла, що помістила файли
sucrose.dat
та maltose.dat
не до того
каталогу. The files should have been placed in the raw
folder.
BASH
$ ls -F
analyzed/ raw/
$ ls -F analyzed
fructose.dat glucose.dat maltose.dat sucrose.dat
$ cd analyzed
Fill in the blanks to move these files to the raw/
folder (i.e. the one she forgot to put them in)
Copying files and directories
The cp
command works very much like mv
,
except it copies a file instead of moving it. We can check that it did
the right thing using ls
with two paths as arguments — like
most Unix commands, ls
can be given multiple paths at
once:
ВИХІД
quotes.txt thesis/quotations.txt
We can also copy a directory and all its contents by using the recursive option
-r
, e.g. to back up a directory:
We can check the result by listing the contents of both the
thesis
and thesis_backup
directory:
ВИХІД
thesis:
quotations.txt
thesis_backup:
quotations.txt
It is important to include the -r
flag. Якщо ви хочете
скопіювати каталог і не вкажете цей параметр ви побачите повідомлення
про те, що каталог було пропущено, оскільки -r
не
вказано.
Renaming Files
Припустімо, що ви створили у поточному каталозі простий текстовий
файл, який містить список статистичних тестів, які вам знадобляться для
аналізу ваших даних, і назвали його statstics.txt
Після створення і збереження цього файлу ви зрозуміли, що неправильно написали назву файлу! Ви хочете виправити помилку. Яку з наведених нижче команд ви можете використати для цього?
cp statstics.txt statistics.txt
mv statstics.txt statistics.txt
mv statstics.txt .
cp statstics.txt .
- Ні. Хоча це створить файл з правильною назвою, неправильно названий файл все одно існуватиме у каталозі, і його потрібно буде видалити.
- Yes, this would work to rename the file.
- Ні, крапка (.) indicates where to move the file, but does not provide a new file name; identical file names cannot be created.
- Ні, крапка (.) indicates where to copy the file, but does not provide a new file name; identical file names cannot be created.
Moving and Copying
What is the output of the closing ls
command in the
sequence shown below?
ВИХІД
/Users/jamie/data
ВИХІД
proteins.dat
BASH
$ mkdir recombined
$ mv proteins.dat recombined/
$ cp recombined/proteins.dat ../proteins-saved.dat
$ ls
proteins-saved.dat recombined
recombined
proteins.dat recombined
proteins-saved.dat
Ми розпочинаємо роботу в каталозі /Users/jamie/data
і
створюємо нову папку з назвою recombined
. Другий рядок
переміщує (mv
) файл proteins.dat
до нового
каталогу (recombined
). Третій рядок робить копію файлу,
який ми щойно перемістили. Складність полягає у тому, куди саме було
скопійовано цей файл. Нагадаємо, що ..
означає “піднятися
на рівень вище”, тому скопійований файл тепер знаходиться у
/Users/jamie
. Зверніть увагу, що ..
інтерпретується відносно поточного робочого каталогу, а
не відносно розташування файлу, який копіюється. Отже,
єдине, що буде показано за допомогою команди ls
(у каталозі
/Users/jamie/data
) - це каталог
recombined
.
- Ні, див. пояснення вище. Каталог
proteins-saved.dat
розташовано у каталозі/Users/jamie
- Так
- Ні, див. пояснення вище. Файл
proteins.dat
знаходиться в каталозі/Users/jamie/data/recombined
- Ні, див. пояснення вище. Файл
proteins-saved.dat
знаходиться в каталозі/Users/jamie
Removing files and directories
Повертаючись до каталогу
shell-lesson-data/exercise-data/writing
, давайте почистимо
цей каталог, видаливши створений нами файл quotes.txt
. Для
цього ми скористаємося командою Unix rm
(скорочення від
англ. remove
- видаляти):
We can confirm the file has gone using ls
:
ПОМИЛКА
ls: cannot access 'quotes.txt': No such file or directory
Deleting Is Forever
The Unix shell doesn’t have a trash bin that we can recover deleted files from (though most graphical interfaces to Unix do). Instead, when we delete files, they are unlinked from the file system so that their storage space on disk can be recycled. Tools for finding and recovering deleted files do exist, but there’s no guarantee they’ll work in any particular situation, since the computer may recycle the file’s disk space right away.
Using rm
Safely
What happens when we execute
rm -i thesis_backup/quotations.txt
? Why would we want this
protection when using rm
?
ВИХІД
rm: remove regular file 'thesis_backup/quotations.txt'? y
The -i
option will prompt before (every) removal (use
Y to confirm deletion or N to keep the file). The
Unix shell doesn’t have a trash bin, so all the files removed will
disappear forever. By using the -i
option, we have the
chance to check that we are deleting only the files that we want to
remove.
If we try to remove the thesis
directory using
rm thesis
, we get an error message:
ПОМИЛКА
rm: cannot remove `thesis': Is a directory
This happens because rm
by default only works on files,
not directories.
rm
can remove a directory and all its contents
if we use the recursive option -r
, and it will do so
without any confirmation prompts:
Given that there is no way to retrieve files deleted using the shell,
rm -r
should be used with great caution (you might
consider adding the interactive option rm -r -i
).
Operations with multiple files and directories
Oftentimes one needs to copy or move several files at once. This can be done by providing a list of individual filenames, or specifying a naming pattern using wildcards. Wildcards are special characters that can be used to represent unknown characters or sets of characters when navigating the Unix file system.
Copy with Multiple Filenames
For this exercise, you can test the commands in the
shell-lesson-data/exercise-data
directory.
In the example below, what does cp
do when given several
filenames and a directory name?
Що робить команда cp
у наведеному нижче прикладі, коли
їй задано три або більше імен файлів?
ВИХІД
basilisk.dat minotaur.dat unicorn.dat
If given more than one file name followed by a directory name
(i.e. the destination directory must be the last argument),
cp
copies the files to the named directory.
If given three file names, cp
throws an error such as
the one below, because it is expecting a directory name as the last
argument.
ПОМИЛКА
cp: target 'basilisk.dat' is not a directory
Using wildcards for accessing multiple files at once
Wildcards
*
is a wildcard, which represents zero
or more other characters. Розглянемо каталог
shell-lesson-data/exercise-data/proteins
:
*.pdb
відповідає ethane.pdb
,
propane.pdb
і кожному файлу, який закінчується на ‘.pdb’.
On the other hand, p*.pdb
only represents
pentane.pdb
and propane.pdb
, because the ‘p’
at the front can only represent filenames that begin with the letter
‘p’.
Символ ?
також є символом підстановки, але він
відповідає рівно одному будь-якому символу. Отже,
?ethane.pdb
буде відповідати methane.pdb
, тоді
як *ethane.pdb
відповідає як ethane.pdb
, так і
methane.pdb
.
Wildcards can be used in combination with each other. Наприклад,
???ane.pdb
відповідає трьом символам, за якими слідує
ane.pdb
, що дає
cubane.pdb ethane.pdb octane.pdb
.
Коли термінал бачить символ підстановки, він розгортає його для
створення списку відповідних імен файлів до запуску команди,
яку було введено. Як виняток, якщо вираз підстановки не відповідає
жодному файлу, Bash передасть вираз як аргумент до команди, якою вона є.
Наприклад, введення ls *.pdf
у каталозі
proteins
(який містить лише файли з іменами, що
закінчуються на .pdb
) призведе до повідомлення про те, що
не існує файлу з назвою *.pdf
. Втім, зазвичай команди на
кшталт wc
і ls
показують списки імен файлів,
які відповідають цим виразам, але не самим символам підстановки. Саме
термінал, а не інші програми, виконує розкриття символів
підстановки.
List filenames matching a pattern
При виконанні в каталозі alkanes
, яка з команд
ls
видасть наступний результат?
ethane.pdb methane.pdb
ls *t*ane.pdb
ls *t?ne.*
ls *t??ne.pdb
ls ethane.*
Відповіддю є 3.
1.
показує всі файли, назви яких починаюьться з нуля або
більше символів (*
), за якими йде літера t
,
потім нуль або більше символів (*
) і далі
ane.pdb
. Це дасть
ethane.pdb methane.pdb octane.pdb pentane.pdb
.
2.
показує всі файли, назви яких починаються з нуля або
більше символів (*
), за якими йде літера t
,
потім один будь-який символ (?
), потім ne.
і
далі нуль або більше символів (*
). Це дасть нам
octane.pdb
і pentane.pdb
, але не збігається ні
з чим, що закінчується на thane.pdb
.
3.
fixes the problems of option 2 by matching two
characters (??
) between t
and ne
.
Це і є рішення.
4.
показує лише файли, що починаються з
ethane.
.
More on Wildcards
Sam has a directory containing calibration data, datasets, and descriptions of the datasets:
BASH
.
├── 2015-10-23-calibration.txt
├── 2015-10-23-dataset1.txt
├── 2015-10-23-dataset2.txt
├── 2015-10-23-dataset_overview.txt
├── 2015-10-26-calibration.txt
├── 2015-10-26-dataset1.txt
├── 2015-10-26-dataset2.txt
├── 2015-10-26-dataset_overview.txt
├── 2015-11-23-calibration.txt
├── 2015-11-23-dataset1.txt
├── 2015-11-23-dataset2.txt
├── 2015-11-23-dataset_overview.txt
├── backup
│ ├── calibration
│ └── datasets
└── send_to_bob
├── all_datasets_created_on_a_23rd
└── all_november_files
Before heading off to another field trip, she wants to back up her data and send some datasets to her colleague Bob. Саманта використовує наступні команди щоб виконати цю роботу:
BASH
$ cp *dataset* backup/datasets
$ cp ____calibration____ backup/calibration
$ cp 2015-____-____ send_to_bob/all_november_files/
$ cp ____ send_to_bob/all_datasets_created_on_a_23rd/
Допоможіть Саманті, заповнивши пропуски.
The resulting directory structure should look like this
BASH
.
├── 2015-10-23-calibration.txt
├── 2015-10-23-dataset1.txt
├── 2015-10-23-dataset2.txt
├── 2015-10-23-dataset_overview.txt
├── 2015-10-26-calibration.txt
├── 2015-10-26-dataset1.txt
├── 2015-10-26-dataset2.txt
├── 2015-10-26-dataset_overview.txt
├── 2015-11-23-calibration.txt
├── 2015-11-23-dataset1.txt
├── 2015-11-23-dataset2.txt
├── 2015-11-23-dataset_overview.txt
├── backup
│ ├── calibration
│ │ ├── 2015-10-23-calibration.txt
│ │ ├── 2015-10-26-calibration.txt
│ │ └── 2015-11-23-calibration.txt
│ └── datasets
│ ├── 2015-10-23-dataset1.txt
│ ├── 2015-10-23-dataset2.txt
│ ├── 2015-10-23-dataset_overview.txt
│ ├── 2015-10-26-dataset1.txt
│ ├── 2015-10-26-dataset2.txt
│ ├── 2015-10-26-dataset_overview.txt
│ ├── 2015-11-23-dataset1.txt
│ ├── 2015-11-23-dataset2.txt
│ └── 2015-11-23-dataset_overview.txt
└── send_to_bob
├── all_datasets_created_on_a_23rd
│ ├── 2015-10-23-dataset1.txt
│ ├── 2015-10-23-dataset2.txt
│ ├── 2015-10-23-dataset_overview.txt
│ ├── 2015-11-23-dataset1.txt
│ ├── 2015-11-23-dataset2.txt
│ └── 2015-11-23-dataset_overview.txt
└── all_november_files
├── 2015-11-23-calibration.txt
├── 2015-11-23-dataset1.txt
├── 2015-11-23-dataset2.txt
└── 2015-11-23-dataset_overview.txt
Organizing Directories and Files
Джеймі працює над проєктом і бачить, що її файли не дуже добре впорядковані:
ВИХІД
analyzed/ fructose.dat raw/ sucrose.dat
The fructose.dat
and sucrose.dat
files
contain output from her data analysis. What command(s) covered in this
lesson does she need to run so that the commands below will produce the
output shown?
ВИХІД
analyzed/ raw/
ВИХІД
fructose.dat sucrose.dat
Reproduce a folder structure
You’re starting a new experiment and would like to duplicate the directory structure from your previous experiment so you can add new data.
Assume that the previous experiment is in a folder called
2016-05-18
, which contains a data
folder that
in turn contains folders named raw
and
processed
that contain data files. The goal is to copy the
folder structure of the 2016-05-18
folder into a folder
called 2016-05-20
so that your final directory structure
looks like this:
ВИХІД
2016-05-20/
└── data
├── processed
└── raw
Which of the following set of commands would achieve this objective? What would the other commands do?
The first two sets of commands achieve this objective. The first set uses relative paths to create the top-level directory before the subdirectories.
The third set of commands will give an error because the default
behavior of mkdir
won’t create a subdirectory of a
non-existent directory: the intermediate level folders must be created
first.
The fourth set of commands achieve this objective. Remember, the
-p
option, followed by a path of one or more directories,
will cause mkdir
to create any intermediate subdirectories
as required.
The final set of commands generates the ‘raw’ and ‘processed’ directories at the same level as the ‘data’ directory.
-
cp [old] [new]
копіює файл. -
mkdir [path]
створює новий каталог. -
mv [old] [new]
переміщує (перейменовує) файл або каталог. -
rm [path]
вилучає (видаляє) файл. -
*
matches zero or more characters in a filename, so*.txt
matches all files ending in.txt
. -
?
відповідає будь-якому одному символу у назві файлу, тому?.txt
відповідаєa.txt
, але неany.txt
. - Використання клавіші Control можна описати різними способами,
зокрема
Ctrl-X
,Control-X
та^X
. - The shell does not have a trash bin: once something is deleted, it’s really gone.
- Most files’ names are
something.extension
. Розширення не є обов’язковим і нічого не гарантує, але зазвичай використовується для позначення типу даних у файлі. - Depending on the type of work you do, you may need a more powerful text editor than Nano.