С работа с файловой системой: C# и .NET | Работа с потоками и файловой системой

Содержание

Работа с файловой системой в языке 1С 8.3, 8.2 (в примерах)

&НаСервере
Процедура ЧтениеИЗаписьФайловНаСервере()
 
    /// Как записать произвольное значение в файл в 1с 8.3, 8.2
 
    // любое сериализуемое (то есть превращаемое 
    // в строку и обратно) значение можно сохранять
    // в файл, например, массивы, списки значений, строки
    // структуры и т.д.
    Числа = Новый Массив;
    Числа.Добавить(35);
    Числа.Добавить(67);
    ЗначениеВФайл("c:\числа.txt", Числа);
    // эта функция работает только на сервере
 
    /// Как восстановить произвольное значение из файла в 1с 8.3, 8.2    
 
    ЧислаИзФайла = ЗначениеИзФайла("c:\числа.txt");
    Сообщить(ЧислаИзФайла[0]); // 35
    Сообщить(ЧислаИзФайла[1]); // 67
 
    /// Как записать текстовый файл в 1с 8.3, 8.2
 
    // работает как на сервере, так и на клиенте
    Текст = Новый ЗаписьТекста(
        "c:\привет.txt", // имя
        КодировкаТекста.ANSI, // кодировка
        Символы.ПС, // разделитель строк (необ.
) Ложь // перезаписывать файл, а не дописывать в конец (необ.) ); Текст.ЗаписатьСтроку("Добро пожаловать!"); Текст.ЗаписатьСтроку("Посторонним вход воспрещен."); Текст.Закрыть();       /// Как прочитать текстовый файл в 1с 8.3, 8.2   // работает как на сервере, так и на клиенте Текст = Новый ЧтениеТекста( "c:\привет.txt", // имя КодировкаТекста.ANSI, // кодировка Символы.ПС, // разделитель строк (необ.) , Истина // монопольный режим (необ.) );   // читаем пока есть что читать Пока Истина Цикл Строка = Текст.ПрочитатьСтроку(); Если Строка = Неопределено Тогда Прервать; Иначе Сообщить(Строка); КонецЕсли; КонецЦикла;   КонецПроцедуры   &НаКлиенте Процедура ОперацииНадФайлами(Команда)   // для тестов создадим пустой файл   Текст = Новый ЗаписьТекста("c:\file_src.txt"); Текст.Закрыть();       /// Как проверить существование файла в 1С 8.
3, 8.2   ФайлНаДиске = Новый Файл("c:\file_src.txt"); Если ФайлНаДиске.Существует() Тогда Сообщить("c:\file_src.txt существует"); КонецЕсли;       /// Как скопировать файл в 1с 8.3, 8.2   КопироватьФайл( "c:\file_src.txt", // что копируем "c:\file_dest.txt" // куда копируем ); // перезапишет, если уже есть такой файл       /// Как переместить файл в 1с 8.3, 8.2   ПереместитьФайл( "c:\file_dest.txt", "c:\file_new.txt" ); // перезапишет, если уже есть такой файл       /// Как найти файлы в каталоге в 1с 8.3, 8.2   // возвращает массив значений типа Файл МассивНайденныхФайлов = НайтиФайлы( "c:\", // где искать "*.txt", // маска поиска Ложь // если Истина, то будет искать и в подкаталогах );   Для Каждого Файл Из МассивНайденныхФайлов Цикл Сообщить("Найден " + Файл.ПолноеИмя); КонецЦикла;       /// Как удалить файл в 1с 8.3, 8.2   // если файл readonly - будет ошибка УдалитьФайлы( "c:\file_new.
(adsbygoogle = window.adsbygoogle || []).push({}); txt" );       /// Как удалить файлы в каталоге по маске в 1с 8.3, 8.2   // поиск в каталоге нерекурсивный УдалитьФайлы( "c:\helpme1c", // заведомо не существующий каталог "*.txt" // маска для поиска удаляемых файлов ); // если опустить маску, то удалятся все файлы и каталог       /// Как получить имя временного файла в 1с 8.3, 8.2   Сообщить( ПолучитьИмяВременногоФайла() ); // например, c:\Temp\v8_11AE_4.tmp   Сообщить( ПолучитьИмяВременногоФайла(".txt") ); // например, c:\Temp\v8_11AE_5.txt       /// Как прочитать атрибуты файла в 1с 8.3, 8.2   Ф = Новый Файл("c:\file_src.txt");   // время последнего изменения файла Сообщить(Ф.ПолучитьВремяИзменения());   // проверяем атрибут только чтение Сообщить(Ф.ПолучитьТолькоЧтение());   // проверяем атрибут hidden (скрытность, невидимость) Сообщить(Ф.ПолучитьНевидимость());       /// Как установить атрибуты файла в 1с 8.3, 8.2   // меняем время последнего изменения файла Ф.
УстановитьВремяИзменения(ТекущаяДата());   // меняем атрибут только чтение Ф.УстановитьТолькоЧтение(Ложь);   // меняем атрибут невидимости Ф.УстановитьНевидимость(Ложь);       /// Как узнать размер файла в 1с 8.3, 8.2   Сообщить(Ф.Размер()); // в байтах   // Как узнать по пути файл это или каталог в 1с 8.3, 8.2 Если Ф.ЭтоКаталог() Тогда Сообщить("Это каталог"); ИначеЕсли Ф.ЭтоФайл() Тогда Сообщить("Это файл"); КонецЕсли;       /// Как вытащить расширение файла из его пути в 1с 8.3, 8.2   Сообщить(Ф.Расширение); // .txt       /// Как вытащить имя файла без расширения в 1с 8.3, 8.2   Сообщить(Ф.ИмяБезРасширения); // file_src   КонецПроцедуры   &НаКлиенте Процедура ОперацииНадКаталогами(Команда)       /// Как создать каталог в 1с 8.3, 8.2   // каталог может уже существовать СоздатьКаталог("c:\new_dir");   // создадутся все подкаталоги СоздатьКаталог("c:\new_dir\2\3");       /// Как проверить существование каталога в 1с 8.
3, 8.2   КаталогНаДиске = Новый Файл("c:\new_dir"); Если КаталогНаДиске.Существует() Тогда Сообщить("Папка c:\new_dir существует"); КонецЕсли;       /// Как удалить каталог вместе с содержимым в 1с 8.3, 8.2   УдалитьФайлы("c:\new_dir"); // мы опустили маску, поэтому удалятся все файлы // внутри каталога, а также сам каталог       /// Как получить каталог временных файлов в 1с 8.3, 8.2   Сообщить( КаталогВременныхФайлов() ); // например, c:\temp   КонецПроцедуры   &НаКлиенте Процедура РаботаСВременнымХранилищем(Команда)   // временное хранилище - объект, в который мы можем помещать // и считывать данные произвольного типа, // доступ к которому есть и на сервере и на клиенте // это позволяет передавать между сервером и клиентом // данные, которые иначе не передать       /// Как сохранить произвольное значение во временное     /// хранилище в 1с 8.3, 8.2   Список = Новый СписокЗначений; Список.Добавить("Владивосток"); Список.
Добавить("Хабаровск"); Список.Добавить("Петропавловск-Камчатский");   АдресВХранилище = ПоместитьВоВременноеХранилище( Список // произвольные данные );       /// Как прочитать произвольное значение из временного     /// хранилища в 1с 8.3, 8.2   СписокИзХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище); Если СписокИзХранилища = Неопределено Тогда Сообщить("Значение по этому адресу уже удалено из хранилища."); Иначе Сообщить(СписокИзХранилища[0]); // Владивосток КонецЕсли;       /// Как перезаписать уже сохраненное значение во временном     /// хранилище в 1с 8.3, 8.2   Массив = Новый Массив; Массив.Добавить(10); Массив.Добавить(20);   ПоместитьВоВременноеХранилище( Массив, АдресВХранилище );       /// Сколько времени хранится значение, сохраненное во     /// временном хранилище в 1с 8.3, 8.2   // всё зависит от второго параметра функции ПоместитьВоВременноеХранилище   // #1 если туда в качестве адреса был передан уникальный идентификатор формы // или уже существующий адрес в хранилище, то значение будет автоматически // удалено после закрытия формы   // #2 если туда в качестве адреса передан уникальный идентификатор, не // являющийся уникальным идентификатором формы, то значение будет // автоматически удалено только после завершения сеанса пользвоателя   // #3 если адрес не указан, помещенное значение будет удалено после // очередного запроса сервера   // см.
примеры ниже       /// Как сохранить значение во временное хранилище на всё     /// время жизни формы в 1с 8.3, 8.2   ПоместитьВоВременноеХранилище( Массив, ЭтаФорма.УникальныйИдентификатор );       /// Как сохранить значение во временное хранилище на всё     /// время сеанса пользователя в 1с 8.3, 8.2   АдресВХранилище = ПоместитьВоВременноеХранилище( Массив, Новый УникальныйИдентификатор );       /// Как удалить значение из временного хранилища в 1с 8.3, 8.2   УдалитьИзВременногоХранилища(АдресВХранилище);       /// Как узнать является ли строка адресом во временном хранилище     /// в 1с 8.3, 8.2   Если ЭтоАдресВременногоХранилища(АдресВХранилище) Тогда Сообщить("Да, это адрес во временном хранилище."); КонецЕсли;   КонецПроцедуры   /// Как передать файл с клиента на сервер в 1с 8.3, 8.2   &НаКлиенте Процедура ПередачаФайлаСКлиентаНаСервер(Команда)   // создадим тестовый файл для передачи Текст = Новый ЗаписьТекста("c:\test.
txt"); Текст.ЗаписатьСтроку("Привет,"); Текст.ЗаписатьСтроку("Мир!"); Текст.Закрыть();   ОповещениеОЗавершении = Новый ОписаниеОповещения( "ВыполнитьПослеПомещенияФайла", ЭтотОбъект );   НачатьПомещениеФайла( ОповещениеОЗавершении, , // адрес в хранилище "c:\test.txt", // имя файла Ложь, // интерактивно ЭтаФорма.УникальныйИдентификатор ); // если опустить последний параметр, то помещенный файл // будет удален после очередного запроса сервера // а если указать - то только после удаления объекта формы   // если нужно предоставить пользователю возможность // выбрать файл самому четвёртый параметр (интерактивно) // нужно установить в Истина   КонецПроцедуры   &НаКлиенте Процедура ВыполнитьПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт   Если Результат Тогда   // сохраним полученный адрес в реквизит формы АдресФайлаВХранилище = Адрес;   Сообщить( "Наконец-то! Файл " + ВыбранноеИмяФайла + " передан на сервер и сохранён во " + "временном хранилище по адресу " + Адрес);   Иначе   Сообщить("Не удалось передать файл на сервер.
");   КонецЕсли;   КонецПроцедуры   /// Как прочитать файл на сервере из временного хранилища /// в 1с 8.3, 8.2   &НаСервере Процедура ПрочитатьФайлНаСервереИзХранилищаНаСервере()   Если АдресФайлаВХранилище = "" Тогда Сообщить("Сначала нужно передать файл с клиента на сервер."); Возврат; КонецЕсли;   ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВХранилище);   Если ДвоичныеДанные = Неопределено Тогда Сообщить("Похоже файл уже был удалён из хранилища."); Возврат; КонецЕсли;   ДвоичныеДанные.Записать("c:\server.txt");   Текст = Новый ЧтениеТекста("c:\server.txt"); Пока Истина Цикл Строка = Текст.ПрочитатьСтроку(); Если Строка = Неопределено Тогда Прервать; Иначе Сообщить(Строка); КонецЕсли; КонецЦикла;   КонецПроцедуры   /// Как передать файл с сервера на клиент в 1с 8.3, 8.2   &НаКлиенте Процедура ПередатьФайлССервераНаКлиент(Команда)   Если АдресФайлаВХранилище = "" Тогда Сообщить("Сначала нужно сохранить файл на сервере. "); Сообщить("Воспользуйтесь кнопкой 'Передача файла с клиента...'"); Возврат; КонецЕсли;   ОповещениеОЗавершении = Новый ОписаниеОповещения( "ВыполнитьПослеПолученияФайлов", ЭтотОбъект );   ПолучаемыеФайлы = Новый Массив; ПолучаемыеФайлы.Добавить( Новый ОписаниеПередаваемогоФайла( "c:\from_server.txt", // куда сохранять на клиента АдресФайлаВХранилище // адрес в хранилище на сервере ) );   НачатьПолучениеФайлов( ОповещениеОЗавершении, ПолучаемыеФайлы, , Ложь // интерактивно );   КонецПроцедуры   &НаКлиенте Процедура ВыполнитьПослеПолученияФайлов(ПолученныеФайлы, ДополнительныеПараметры) Экспорт   Для Каждого Файл Из ПолученныеФайлы Цикл Сообщить("Получен " + Файл.Имя + " из " + Файл.Хранение); КонецЦикла;   КонецПроцедуры   /// Скачать и выполнить эти примеры на компьютере

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

Команды для работы с файловой системой

Просмотр файловой системы — ls

Команда ls (list files) предназначена для просмотра содержимого каталогов и получения информации о файлах.

Примеры:

$ ls
$ ls -a
$ ls /bin
$ ls -l /
$ ls -l /dev
$ ls -l ..
$ ls -a .

Определение текущего каталога — pwd

pwd (print working directory) показывает текущий рабочий каталог.

Смена текущего каталога — cd

cd (change directory) меняет текущий рабочий каталог. Если команда cd вызвана без параметров, происходит переход в домашний каталог пользователя. Команда cd позволяет вернуться в предыдущий каталог (каталог, откуда был осуществлен переход в текущий).

Примеры:

$ cd /usr
$ cd bin
$ cd ..
$ cd
$ cd ~
$ cd ~u1

Создание файла с помощью команды touch

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

Создание каталога — mkdir

Команда mkdir (make directory) создает каталоги, в том числе и промежуточные (если указана опция -p).

Примеры:

$ mkdir /tmp/test
$ mkdir ~p /tmp/a/b/c

Удаление файла — rm

Команда rm удаляет файлы и каталоги, в т.ч. каталоги с содержимым (опция r или R). Опция f подавляет вывод запросов (например, при удалении файлов, доступных только для чтения) и ошибок при удалении, а опция i выводит запрос при удалении каждого файла.

Примеры:

$ touch /tmp/test
$ rm -r /tmp/test
# rm -fr /*

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

Команда rmdir удаляет только пустые каталоги. При использовании опции p удаляются и родительские каталоги целевого каталога, если они пусты.

Примеры:

$ rmdir /tmp/test
$ rmdir -p /tmp/a/b/c

Копирование файлов и каталогов — cp

Команда cp позволяет копировать файли и каталоги (опция r или R). При её использовании часто применяются шаблоны шелла. В общем случае, команда cp требует не менее двух параметров: что копировать и куда копировать. Команда cp имеет большое количество опций, подробно о которых можно узнать на странице man.

Примеры:

$ touch file1
$ mkdir dir1
$ cp file1 file2
$ cp file1 incorrectdirname
$ cp file1 dir1/
$ cp -r dir1/ dir2/

Перемещение и переименование файлов и каталогов — mv

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

Примеры:

$ mv file2 file3
$ mv dir2 dir3
$ mv file3 incorrectdirname
$ mv file3 dir1/
$ mv dir3 dir1/

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

Команда ln позволяет создавать символьные (с опцией s) и жесткие (без опции s) ссылки.

Примеры:

$ ln -s /etc/rc.conf file4

$ mkdir -p ~/var/db/mysql
$ touch ~/var/db/mysql/file.db

$ mkdir ~/disk2
$ mv ~/var/db/mysql ~/disk2/

$ ln -s ~/disk2/mysql/ ~/var/db/mysql
$ ls ~/var/db/mysql/

Команды для работы с содержимым файлов

Определение типа файла — file

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

Примеры:

$ file /usr/sbin/adduser
$ file /bin/sh
$ file /usr/share/man/man1/cat.1.gz

Просмотр файлов — more/less

Пейджеры (pager) more или less используются для просмотра больших объемов текстовой информации страницами. Они позволяют осуществлять навигавицию, поиск по тексту и некоторые другие действия с помощью команд. Получить помощь по этим командам всегда можно, нажав клавишу h. Выход из пейджера осуществляется с помощью команды q. Поиск информации осуществляется с помощью команд / (вперед) и ? (назад), после которых указывается шаблон для поиска. Для получения подробной справки обратитесь к соответствующей странице справочного руководства.

Примеры запуска:

$ more /etc/defaults/rc.conf
$ less /etc/defaults/rc.conf

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

UNIX обладает богатым арсеналом средств резервного копирования и восстановления данных: программы dump/restore, cpio, tar и пр. Для работы архивами наиболее широко используется программа tar. Несмотря на то, что в разных системах UNIX используются различные реализации этой программы, получающиеся в результате архивы являются кроссплатформенными, т. е. могут быть обработаны в разных ОС (в т.ч. и Windows). Ниже приведены примеры работы с программой tar:

Создать архив:

$ tar -c -v -f имяфайлаархива.tar каталогилифайл …

Посмотреть содержимое архива:

$ tar -t -f имяфайлаархива.tar

Раскрыть архив целиком:

$ tar -x -v -f имяфайлаархива.tar

Раскрыть отдельные файлы:

$ tar -xf имяфайлаархива. tar ‘etc/fstab’ $ tar -xOf имяфайлаархива.tar ‘etc/fstab’ — вывести на экран(STDOUT) $ tar -xf имяфайлаархива.tar ‘etc/’ $ tar -xf имяфайлаархива.tar ‘*fstab*’

Дополнительные ключи:

-z использовать gzip сжатие
-j использовать bzip2 сжатие

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

Статистика использования разделов — df

Для получения статистики использования разделов дисков (смонтированных файловых систем) используется команда df. Наиболее полезные опции здесь – h (human-readable, выводит числовые данные в виде, удобном для восприятия пользователем) и t (выводит информацию только о файловых системах указанного типа, не принимая во внимание остальные – например, виртуальные файловые системы).

Пример запуска программы:

$ df -h -t ufs
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 434M 143M 256M 36% /
/dev/ad0s1e 403M 12K 371M 0% /tmp
/dev/ad0s1f 6.4G 427M 5. 5G 7% /usr
/dev/ad0s1d 771M 304K 709M 0% /var

Размер каталога — du

Программа du (disk usage) позволяет получить статистику использования дискового пространства не по разделам целиком, а для конкретных указанных каталогов. Опция h здесь аналогична этой опции программы df, а опции s (summary) и d число (depth) позволяют указать необходимую степень подробности (глубину) выводимой информации. Опция s эквивалента опции d 0 (нулевая глубина погружения), причем эти опции нельзя указывать вместе.

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

$ du -s -h /usr/share/
$ du -d 1 /usr/share/

Команды поиска файлов

Метоположение программ — which и whereis

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

Примеры:

$ which ls
/bin/ls

$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

Поиск файлов по индексированной базе — locate

Поиск файлов по имени с помощью заранее созданной индексной базы данных используется программа locate. Для создания индексной базы используется программа /usr/libexec/locate.updatedb

Полный поиск файлов — find

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

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

Поиск по имени и по шаблону имени

$ find /usr/share -name index.html
$ find /usr/share -name ‘*.html’

Поиск файлов, которые модифицировались за последние 2 дня и вывод полной информации про них

$ find /var/log -ctime -2 -type f -ls

Поиск файлов более новых чем некоторый

$ touch -t 200901051230 /tmp/xtime
$ find /etc/ -newer /tmp/xtime -type f

Пример выполнения команд над найденными файлами

# find /usr/ports/ -name ‘*. tbz’ -exec mv {} /usr/ports/packages/All/ \;

Работа с файлами и папками системы Windows

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

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

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

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

Если нажать стрелку в правой части кнопки «Вид», будет доступен еще больший выбор. Перетащите ползунок выше или ниже, чтобы точно настроить размер значков файлов и папок. Значки изменяют размер по мере перемещения ползунка.

Библиотеки предоставляют больше возможностей благодаря функции упорядочения файлов различными способами. Например, если нужно упорядочить файлы в медиатеке по жанру (таким как Jazz и Classical):

  • Нажмите кнопку Пуск и выберите пункт Музыка.
  • В области библиотек (над списком файлов) меню Упорядочить по и выберите Жанр.

Поиск файлов в системе Windows

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

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

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

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

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

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

Большинство людей копируют и перемещают файлы Windows с помощью метода, который называется «перетаскивание». Откройте папку, содержащую файл, который требуется переместить. Далее откройте в другом окне ту папку, в которую нужно переместить эти элементы. Расположите окна на рабочем столе рядом, чтобы видеть содержимое обоих.

Перетащите файл или папку с первой папки в другую. Вот и все.

Пользуясь перетаскиванием, можно заметить, что иногда файл или папка копируется, а в другой раз – перемещается.

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

Если перетаскивать в папку с другим расположением (например, сетевым) или на съемный носитель (например, компакт-диска), элемент копируется.

Советы:

  • Самый простой способ упорядочить два окна на рабочем столе – это воспользоваться параметром «Привязка». Дополнительные сведения см. Размещение окон на рабочем столе рядом друг с другом с помощью функции привязки.
  • Если скопировать или переместить файл или папку в библиотеку, то сохранение происходит в расположении для сохранения по умолчанию библиотеки. Чтобы узнать, как настроить путь для сохранения библиотеки по умолчанию, см. Настройка библиотеки.
  • Другой способ скопировать или переместить файл – перетащить его из списка файлов в папке или библиотеке в области переходов. В таком случае не будет необходимости открывать два отдельных окна.

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

Зачастую новые файлы Windows создают с помощью программы. Например, текстовый документ можно создать в текстовом редакторе, а видеофайл – в видеоредакторе.

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

По умолчанию большинство программ сохраняет файлы в стандартных папках («Мои документы», «Моя музыка» и др.) – так файлы легче найти.

Если файл больше не нужен, его можно удалить с компьютера, чтобы иметь больше свободного места и не загромождать компьютер ненужными файлами. Чтобы удалить файл, откройте папку или библиотеку, в которой расположено файл, и выделите его. Нажмите клавишу Delete на клавиатуре, а затем в диалоговом окне Удаление файла нажмите кнопку Да.

После удаления файла он временно хранится в «Корзине». «Корзина» можно сравнить со страховочной сеткой: он позволяет восстановить случайно удаленные файлы и папки. Время от времени следует очищать «Корзину» для освобождения места на диске, которое занимают ненужные файлы. Чтобы узнать, как это сделать, см. Окончательное удаление файлов из корзины.

Открытие существующего файла

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

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

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

Вот несколько типичных значков файлов:

Папка – это своеобразный контейнер, который можно использовать для хранения файлов. Если разложить на обычном столе тысячи бумажных документов, найти среди них нужный будет практически невозможно.

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

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

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

Когда дело дойдет до «благоустройства» Windows, Вам не придется начинать все с нуля. Для доступа к файлам и папкам и их упорядочения различными способами можно воспользоваться библиотеками – новым средством Windows.

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

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

    По умолчанию папка «Мои документы» – хранилище для всех файлов, перемещенных, скопированных или сохраненных в библиотеку документов.

  • Библиотека изображений. В этой библиотеке можно организовывать и упорядочивать цифровые изображения, полученные с камеры, сканера или переданы другими людьми по электронной почте. Дополнительные сведения см. Управление изображениями.

    По умолчанию папка «Мои рисунки» – хранилище для всех изображений, перемещенных, скопированных или сохраненных в библиотеку изображений.

  • Медиатека. В этой библиотеке можно организовывать и упорядочивать всю цифровую музыку, например, песни, добытые с аудио компакт-диска или загруженные из Интернета. Дополнительные сведения см. Управление музыкой.

    По умолчанию папка «Моя музыка» – хранилище для всех файлов, перемещенных, скопированных или сохраненных в фонотеку.

  • Библиотека видеозаписей. В этой библиотеке можно организовывать и упорядочивать видео, например, клипы с цифровой фото- или видеокамеры или видео, загруженные из Интернета.

    По умолчанию папка «Мои видеозаписи» – хранилище для всех файлов, перемещенных, скопированных или сохраненных в библиотеку видеозаписей.

Чтобы открыть библиотеки «Документы», «Изображения» или «Музыка», меню Пуск и нажмите Документы, Изображения и Музыка.

Дополнительные сведения о библиотеках см. Работа с библиотеками.

Cтруктура окна системы Windows

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

Вот типичное окно и его компоненты:

Компонент окна

Использование

Область навигации

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

Для просмотра папок и вложенных папок можно воспользоваться и папкой «Компьютер».

Кнопки «Назад» и «Вперед»

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

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

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

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

Панель адреса

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

Область библиотек

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

Заголовки столбцов

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

Список файлов

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

Поле поиска

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

Область сведений

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

Область просмотра

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

Взаимодействие с файловой системой через Python | by Nick Komissarenko

В прошлой статье мы говорили о работе с файлами в Python. Файлы и папки можно также организовывать по каталогам, что очень удобно, например, в Google Colab. Сегодня рассмотрим управление файлами и папками с помощью Python-модуля os. Читайте далее, что такой текущий рабочий каталог; вывод всех файлов и папок; создание, переименование и удаление папок и файлов; а также обход дерева каталогов.

Текущая рабочая директория

Python работает с файловой системой относительно текущей рабочей директории. Чтобы узнать, какая она на вашей операционной системе, используется функция getcwd (cwd расшифровывается как current working directory):
>>> os.getcwd()
‘/home/root’

Функция chdir сменит ее на другую, которая будет указана аргументом:
>>> os.chdir(‘/home/root/Documents’)
>>> os.getcwd()
home/root/Documents’

Получение списков файлов и папок
Функция listdir без указания аргумента покажет все файлы и папки текущей рабочей директории. Можно также указать аргументом интересующий вас путь. Ниже представлен код на Python.
>>> os.listdir()

Создаем папки в Python
Чтобы создать одну папку, применяется функция mkdir. Эта функция сможет создать только одну папку в существующем пути, если указанного пути не существует, то вызовется ошибка. Ниже это показывает код на Python:
>>> os.mkdir(‘dir’) # все ок
>>> os.mkdir(‘dir2/sub-dir’)

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — → 1 os.mkdir(‘dir2/sub-dir’) FileNotFoundError: [Errno 2] No such file or directory: ‘dir2/sub-dir’

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

>>> os.makedirs(‘dir2/sub-dir’)

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

Функция rename изменит имя файла или папки, если они существуют. Функция не сможет переименовать папку в название, которое уже существует в каталоге, если она что-то внутри содержит.

>>> os.rename(‘dir’, ‘tmpdir’) # все ок

>>> os.rename(‘tmpdir’, ‘Videos’)

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

OSError: [Errno 39] Directory not empty: ‘dir’ -> ‘Videos’

Удаляем папки и файлы

Для удаления файла используется функция remove. Ниже Python-код удалит file:

>>> os.remove(‘file’)

Удалить одну папку можно с функцией rmdir. А вот за удаление целого каталога отвечает removedirs. Например, имеется каталог dir/sub-dir, тогда rmdir(‘dir/sub-dir’) удалит только папку sub-dir, а removedirs(‘dir/sub-dir’) удалит и dir, и sub-dir. Примеры на Python:

>>> os.rmdir(‘direct’) # удалит папку

>>> os.makedirs(‘dir/sub-dir’) # удалит каталог

Извлекаем информацию из файлов и папок

Функция stat вернет статус файла или папки. Статус имеет много атрибутов, но наиболее полезный из них — st_mtime, который содержит время последнего изменения содержимого в секундах (modification time). Это время можно преобразовать в datetime, о котором мы говорили тут. Вот так, в итоге, будет выглядеть Python-код:

>>> from datetime import datetime

>>> cwd = os.getcwd()

>>> status_info = os.stat(cwd)

>>> datetime.fromtimestamp(status_info.st_mtime)

datetime.datetime(2020, 9, 3, 13, 12, 13, 825475)

Гуляем по каталогу

Функция walk сгенерирует все дерево каталога. Поскольку возвращается генератор, то по нему можно итерироваться, причем генератор производит кортеж из трех значений: путь до папки, имя папки, имя файлов. Код на Python ниже демонстрирует это на примере каталога tmpdir, который имеет папки и файлы, а внутри этих папок также имеются файлы и папки.

>>> route = ‘/home/root/tmpdir’
>>> for dirpath, dirnames, filenames in os.walk(route):
… print(‘Текущий путь:’, dirpath)
… print(‘Папки:’, dirnames)
… print(‘Файлы:’, filenames)
… print()

Текущий путь: /home/root/tmpdir
Папки: [‘sub2-dir’, ‘sub3-dir’]
Файлы: [‘thisisfile.bat’]

Текущий путь: /home/root/tmpdir/sub2-dir
Папки: [‘sub2-dir2’, ‘sub2-dir1’]
Файлы: [‘somefile.txt’]

Текущий путь: /home/root/tmpdir/sub2-dir/sub2-dir2
Папки: []
Файлы: []

Текущий путь: /home/root/tmpdir/sub2-dir/sub2-dir1
Папки: []
Файлы: [‘sub2-dir1_file.txt’]

Текущий путь: /home/root/tmpdir/sub3-dir
Папки: []
Файлы: [‘file.bin’]

В следующей статье рассмотрим модули управления путями файловой системы с os.path и pathlib. А как работать с файловой системой в Python на практических примерах реальных Data Science проектов, вы узнаете на наших курсах в лицензированном учебном центре обучения и повышения квалификации IT-специалистов в Москве.

Смотреть расписание

Источники

Уроки Tcl

Уроки Tcl

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

Перед началом работы с файлом программа должна открыть файл для каких-нибудь действий (чтение, запись, или оба) командой open. Как только файл откроется, программа может выполнить gets или puts для чтения или записи информации.

Так же программа может использовать seek для передвижения позиции в файле. После передвижения gets и puts будут работать с новой позицией.

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

Команды для работы с файлами следующие:

open имяФайла ?доступ?
   Открывает файл и возвращает указатель, который используется для доступа командами gets, puts, close и другими. имяФайла — имя файла, который будет открыт. Желательно, с указанием полного пути к нему. доступ — режим работы с файлом.
  • r — Режим чтения. Файл должен существовать.
  • r+ — Режим чтения и записи. Файл должен существовать.
  • w — Режим записи. Создаёт файл если он не существует, или обнуляет существующий.
  • w+ — Режим записи и чтения. Создаёт файл в случае необходимости, или обнуляет существующий.
  • a — Режим добавления, открывает файл для записи. Файл должен существовать. Текущая позиция устанавливается на конец файла.
  • a+ — Режим добавления, открывает на запись. Если файл не существует, то создаётся. Если существует — позиция устанавливается на конец файла.
close файл
    Файл — указатель на файл. Команда закрывает файл открытый open.
gets файл ?имяПерем?
   Считывает строку из файла, и удаляет символ новой строки.
Если задан аргумент имяПерем, gets возвращает количество прочитанных символов (или -1 если достигнут конец файла), и помещает прочитанную строку в имяПерем.
Если имяПерем не задано, то gets возвращает прочитанную строку. Пустая строка может быть возвращена в случае если прочитана пустая строка из файла, или достигнут конец файла.
puts ?-nonewline? ?файл? строка
   Записывает строку в файл. Если файл не задан, то выводится на экран.
read ?-nonewline? файл
   Читает все оставшиеся символы из файла, и возвращает как строку. Если задана опция -nonewline, то если последний символ новой строки — он будет удалён.
read файл колСимв
    Читает не более колСимв символов из файла и возвращает как строку.
seek файл позиция ?отсчет?
    Изменяет текущую позицию работы с файлом. Позиция — количество символов, на которую будет сдвинута текущая позиция. С помощью аргумента отсчет можно поменять точку отсчета позиции. Значение отсчет может быть одним из:
  • startпозиция измеряется от начала файла.
  • currentпозиция измеряется от текущей позиции в файле.
  • endпозиция измеряется от конца файла.
tell файл
    Возвращает номер текущей позиции в файле.
flush файл
    Записывает все данные файла, хранящиеся в буфере.
eof файл
    Возвращает 1 если достигнут конец файла, иначе 0.

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

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

  • stdin — стандартный поток ввода (клавиатура)
  • stdout — стандартный поток вывода (экран)
  • strerr — стандартный поток ошибок (экран)

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

Количество открытых файлов ограничено, поэтому помните о том, что надо закрывать неиспользуемые файлы.

Чтобы определить конец файла используйте команду eof перед чтением очередной строки.

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

Открытие в режиме w+ позволяет изменять записанные данные, но очищает файл перед использованием.

Открывая файл в режиме r+ вы можете изменять его. Но можно открыть только существующий файл.

Все данные в Tcl хранятся как строки символов. Поэтому читая двоичный файл результат получится непредсказуем.

Пример:


set fileid [open "testfile" w+]

seek $fileid 0 start

puts $fileid "Это тест.\nПросто тест."

seek $fileid 0 start

set chars [gets $fileid line1];
set line2 [gets $fileid];

puts "$chars символов в строке \"$line1\""
puts "Вторая строка в файле: \"$line2\""

seek $fileid 0 start

set buffer [read $fileid];
puts "\nВ файле содержится текст:\n$buffer"
close $fileid

Горбачев «Yurez» Юрий  

Файловая система: что это такое и зачем она нужна накопителям

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

Чем отличаются файловые системы и для чего они нужны разберем в этой статье.

Что такое ФС?

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

Основные функции файловой системы:

  • Фрагментация файлов и их распределение на носителе.
  • Поиск файла при запросе программ.
  • Участие в создании, чтении и удалении файлов.
  • Работа с атрибутами файлов: изменение названия, размера, времени последнего изменения, доступ к файлу и многое другое.
  • Каталогизация и организация файлов.
  • Защита файлов от несанкционированного доступа и сбоев системы.
  • Определение права доступа к файлам.
  • Восстановление информации в случае сбоев.

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

Файловых систем довольно много. Но рядовым пользователям с операционной системой Windows на десктопном ПК знакомы только две. О них и поговорим подробнее.

FAT32

FAT – одна из старейших файловых систем, которая была разработана еще в 1977 году программистами компании Microsoft для гибких дисков.

За период эксплуатации выпускалось несколько версий, которые отличались от предыдущих объемами томов и файлов, которыми способны оперировать.

Современная версия FAT32 вышла в 1995 году. Она может работать с томами размером до 32 ГБ и файлами размером до 4 ГБ. При этом система не работает с накопителями объемом более 8 Тб. Поэтому сегодня FAT32 используется в основном только на флешках, картах памяти фотоаппаратов и музыкальных плееров.

Структура накопителя с FAT32 имеет три области:

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

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

Однако несмотря на очевидные недостатки, система все еще востребована, и даже предоставляет некоторые преимущества:

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

NTFS

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

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

Особенности файловой системы NTFS:

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

В отличие от предыдущей файловой системы, NTFS может работать с томами объемом 8 ПБ (1 петабайт – 1015 байт), и оперировать более чем 4 миллиардами файлов.

Таким образом NTFS – современное решение для пользовательского сегмента, позволяющее работать с твердотельными накопителями и жесткими дисками большого объема, имеющими несколько разделов.

Какие еще бывают файловые системы?

На мобильных устройствах с ОС Android используется файловая система ext2/ext4, но только в установленном накопителе. Съемные карты памяти работают на системе FAT32.

Файловая система exFAT – модификация FAT32, отличающаяся возможностью работы с файлами размером более 4 ГБ и имеющая более динамичную систему поиска. Ее использование ограничено лицензионным соглашением.

ReFS – новейшая разработка Microsoft для ОС Windows 8 и Windows 10 Enterprise и Pro для рабочих станций. Возможность создания тома ReFS удалена в Windows 10 Fall Creators Update 2017. Файловая система ReFS отличается высокой степенью надежности хранения файлов и легким их восстановлением в случае сбоя.

ZFS – файловая система, разработанная для систем хранения данных. Главная ее черта – отказоустойчивость. Данные с которыми ведется работа копируются в служебный сектор. Его объем должен быть равен области хранения.

Компания Apple использует собственные файловые системы HFS+ и Apple Xsan.

В дистрибутивах Linux, в зависимости от назначения устройства, используется около десятка файловых систем. Самые распространенные в пользовательском сегменте: Ext2, Ext3, Ext4.

Работа с файловой структурой операционной системы

 

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

Я. А. Коменский

 

Тема: Работа с файловой структурой операционной системы.

Цели:

Обучающая:

повторить основные операции над файлами и каталогами.

Развивающая:

формирование умения составлять дерево файловой системы;

формирование умения отслеживать путь по файловой системе;

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

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

Воспитательная

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

Оборудование:

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

Ход урока.

I Организационный момент.

(доска закрыта шторкой)

Здравствуйте, ребята! Я рада видеть вас всех, улыбающимися. Ребята, скажите, вы любите разгадывать ребусы? Попробуйте разгадать тот, который я нарисовала для вас к сегодняшнему уроку.

(на доске с использованием ActivInspire-Studio открыть шторку и показать ребус ребятам. Потом открыть весь ребус с ответом)

Слайд 1

 

 

 

 

 

 

Слайд 2

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

(создавать, копировать, удалять, перемещать, вставлять, переименовывать, архивировать)

Сегодня мы обобщим и закрепим полученные знания по теме «Файлы и файловая система». Для начала повторим основные понятия:

Слайд 3

Ø Файл (программа или данные, записанные в долговременной памяти компьютера и имеющее имя)

Ø Каталог (специальное место на диске, где регистрируются имена файлов и информация о них)

Ø Расширение файла (задаётся программой, в которой создан файл)

Ø Файловая система (система хранения и организации каталогов)

Ø Путь к файлу (последовательность имён каталогов. Путь задаёт маршрут к тому каталогу, в котором находится нужный файл)

II Подготовительный этап.

Ребята, сегодня у нас необычный урок, мы с вами проведём его в форме соревнования. У нас 4 команды, на столах у вас находится папка, куда вы будете складывать заработанные баллы в виде вот таких файлов. За правильный ответ команда получает 1 балл.

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

Слайд 4

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

1 … (интерфейс ОС) – Осуществляет взаимодействие человека с компьютером в форме диалога

2… (Дефрагментация диска) – Запись файлов в секторы, расположенные последовательно друг за другом

3… (Файловая структура диска)  – Это совокупность файлов на диске и взаимосвязей между ними. Файловые структуры бывают простыми и многоуровневыми (иерархическими).

4… (файловый менеджер) – Программа проводник, позволяет производить над файлами операции: архивация, удаление, переименование, перемещение.

Слайд 5

Начнём мы с цифрового диктанта. Вам нужно ответить на вопросы: если вы согласны с данным утверждением – поставьте цифру 1, если не согласны, то ноль. За каждый правильный ответ команда получает 1 балл. У вас на столах лежат по 2 пульта. Таким образом, в команде вы работаете парами. Итак, вы можете получит от 0 до 2 баллов. Всем всё понятно? Тогда приступайте к работе.

 

(На доске ActivInspire-Studio написать: 1 – да, нет – 0. Правильные ответы говорит учитель и вручает жетоны)

 

1. Рабочий стол — диалоговое окно ОС. (0)

2. В ОС Windows файловая система иерархическая. (1)

3. Диалоговые окна служат для настройки ОС. (1)

4. Файл — это набор однородной информации на диске с именем. (1)

5. Тип информации, хранящейся в файле, можно определить по расширению файла. (1)

6. Значки в папке могут быть представлены ярлыками (0)

7. Корзина хранит удалённые объекты (1)

8. Окно — главный объект ОС. (1)

9. Вершиной иерархической файловой системы Windows является папка Рабочий стол. (1)

10. Чтобы удалить выделенный файл, нужно нажать клавишу Enter/ (0)

11. Посмотреть объёмы папок можно из контекстного меню командой свойства. (1)

12. Разные файлы могут иметь одинаковые имена, если они хранятся в разных каталогах. (1)

13. Чтобы открыть Главное меню, нужно щёлкнуть на кнопке пуск Рабочего стола. (1)

14. Ярлык — это ссылка на объект. (1)

15. Очистить корзину можно из её контекстного меню. (1)

III Основной этап

(закрыть шторку)

Ребята, сейчас вам предстоит  выполнить тест. На эту работу вам отводится 4 минуты. Листы с вопросами у вас на столах.

(музыка)

Слайд 6

1)   Тестирование по теме «Файлы. Файловая система»

1. Файл – это:

а) Единица измерения информации

б) Программа в оперативной памяти

в) Текст, распечатанный на принтере        

г) Программа или данные на диске, имеющие имя

2. Выбери правильное имя файла:

а) 9 класс А                    б) 9 класс «А».doc

в) 9 класс А.doc            г) 9 класс А.docum

 

3. Расширение в имени файла указывает на:

а) размер файла           б) тип файла     

в) атрибут файла         г) параметр файла

 

4. Укажи полное имя файла:

 

 

 

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

 

1 группа

2 группа

3 группа

4 группа

Ответы

1

 

 

 

 

Г

2

 

 

 

 

В

3

 

 

 

 

Б

4

 

 

 

 

А

5

 

 

 

 

Е

6

 

 

 

 

Б

7

 

 

 

 

А

8

 

 

 

 

А

9

 

 

 

 

Б

10

 

 

 

 

Б, Д

 

2) Задания «Кто быстрее»

Ребята в группах решают задания которые проецируются на доске и первый поднявший руку отвечает. Если одна из команд даёт неправильный ответ, то другая команда может дать свой. За каждый правильный ответ — 1 балл.

(На доске ActivInspire-Studio)

Слайд 7

 

Задание 1.

По дереву файловой системы  прописать полный путь к файлу Компьютерные вирусы.doc:

 

 

Дополнительные вопросы:

1.     Собственное имя файла.

2.     Тип файла

 

 

 

 

Слайд 8

Задание 2.

По дереву файловой системы  прописать полный путь к файлу Письмо.txt:

 

 

Дополнительные вопросы:

1.     В каких папках хранятся фото.

2.     Петров – файл или папка?

 

 

 

 

 

 

Слайд 9

Задание 3.

Какое из открытых окон является активным? Как вы это определили?

 

                                                                                 1

    

 

 

 

 

 

Слайд 11

 

Задание 5.

 

Соберите одноуровневую файловую систему.

 

 

 

 

 

 

(Одноуровневая файловая система:

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

 

 

Слайд 12

 

Задание 6.

Соберите  многоуровневую файловую систему.

 

 

 

 

 

 

 

 

(Многоуровневая файловая система:

Если на диске хранятся сотни и тысячи файлов, то для удобства поиска файлы организуются в многоуровневую иерархическую файловую систему, которая имеет «древовидную» структуру (имеет вид перевернутого дерева Вершиной ФС ОС Windows является папка Рабочий стол).

 

ФИЗРАЗМИНКА

 

III. Самостоятельная работа

 

(музыка)

 

Слайд 13

 

(На доске ActivInspire-Studio)

Ребята решают на месте затем по очереди выходят и ставят «+» там где правильный ответ)

 

№1 Найти имена файлов

 

1. В некотором каталоге хранился файл Задача5. После того, как в этом каталоге создали подкаталог и переместили в созданный подкаталог файл Задача5, полное имя файла стало Е:\Класс9\Физика\Задачник\Задача5.
Каково было полное имя этого файла до перемещения?

1) Е:\Физика\Задачник\Задача5

2) Е:\Физика\Задача5

3) Е:\Класс9\Задачник\Задача5

4) Е:\Класс9\Физика\Задача5

(ответ 4)

2. Учитель работал в каталоге
D:\Материалы к урокам\10 класс\Практические работы.
Затем перешел в дереве каталогов на уровень выше, спустился в подкаталог Лекции и удалил из него файл Введение. Каково полное имя файла, который удалил преподаватель?

1) D:\Материалы к урокам\10 класс\Введение

2) D:\Материалы к урокам\10 класс\Лекции\Введение

3) D:\Материалы к урокам\Лекции\Введение

4) D:\Материалы к урокам\Введение\Лекции

(ответ 2)

 3. В некотором каталоге хранится файл Список_10_клacca.txt. В этом каталоге создали подкаталог и переместили в него файл Список_10_класса.txt, после чего полное имя файла стало D:\USER\CLASS\DOC\Список_10_класca.txt.
Каково полное имя каталога, в котором хранился файл до перемещения?

1) D:\USER\CLASS                  

2) DOC            

3) D:\USER\CLASS\DOC

4) CLASS

(ответ 1)

4. В некотором каталоге хранится файл Список_литературы.txt. В этом каталоге создали  подкаталог с именем 10_CLASS и переместили в него файл Список_литературы.txt. После чего полное имя файла стало
  
D:\SCHOOL\PHYSICS\10_CLASS\Список_литературы.txt.
Каково пол­ное имя каталога, в котором хранился файл до перемещения?

1) D:\SCHOOL\PHYSICS\10_CLASS

2) D:\SCHOOL\PHYSICS

3) D:\SCHOOL

4) SCHOOL

(ответ 2)

 

 

 Слайд 14

 

№2  Построить дерево каталогов

(каждой команде по 1 вопросу, выходят к доске и собирают на доске свой ответ)

 

1.          C:\Рисунки\Природа\Небо.bmp

C:\Рисунки\Природа\Снег.bmp

C:\Рисунки\Компьютер\Монитор.bmp

C:\Мои документы\Доклад.doc

2.

C:\Мои документы\Иванов\QBasic.doc

C:\Мои документы\Петров\Письмо.txt

C:\Мои документы\Петров\Рисунки\Море.bmp

C:\Фильмы\Интересный фильм.avi

3.

C:\Рефераты\Физика\Оптические явления.doc

C:\Рефераты\Информатика\Интернет.doc

C:\Рефераты\Информатика\Компьютерные вирусы.doc

C:\Рисунки\Закат.jpg

C:\Рисунки\ Зима.jpg

4.

C:\Document and Setting\Мои документы \  Рисунки \ Животные \ Тигр.bmp
C:\ Document and Setting\Мои документы \ Рисунки\Животные\Лиса.bmp
C:\ Document and Setting\Мои документы \Рисунки\Компьютер\Мышь.bmp
C:\Мои документы\Урок.doc

 

Слайд 15

 

№3 Творческое задание

1 команда:

Составить структуру управления школой с помощью вложенных папок.

2 команда:

Составить структуру популяции животного мира

3 команда:

Составить структуру растительного мира

4  команда:

Составить структуру работы в классе

 

IV Релаксация

Слайд 16

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

Ребята, а сейчас мы с вами немного отвлечёмся.

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

1.   Компьютер — лучший друг. (Книга — лучший друг.)

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

3.   Без компьютера жить, только небо коптить. (Без труда жить, только небо коптить.)

4.   На дисплей неча пенять, коли видеокарта крива. (На зеркало неча пенять, коли рожа крива.)

5.   Без винчестера — полсироты, а без материнской платы — и вся сирота. (Без отца — полсироты, а без матери — и вся сирота.)

6.   Компьютер памятью не испортишь. (Кашу маслом не испортишь.)

7.   Компьютер на столе не для одних только игр. (Голова на плечах не для одной только шапки.)

8.   По ноутбуку встречают, по уму провожают. (По одёжке встречают, по уму провожают.)

9.   На IBM PC «яблоки» не растут. (На сосне яблоки не растут.)

10.  Дарёному компьютеру в системный блок не заглядывают. (Дарёному коню в зубы не смотрят.)

11.  В Силиконовую долину со своим компьютером не ездят. (В Тулу со своим самоваром не ездят.)

12.  Не Intel’ом единым жив процессорный мир. (Не хлебом единым жив человек.)

13.  Мал микропроцессор (или ноутбук), да дорог. (Мал золотник, да дорог.)

14.  Всякий кабель своё гнездо любит. (Всякая птица своё гнездо любит.)

15.  Семь раз подумай — один раз апгрейдируй. (Семь раз подумай — один раз скажи.)

16.  Утопающий за «F1» хватается. (Утопающий за соломинку хватается.)

17.  Не всё WINDOWS, что висит. (Не всё золото, что блестит.)

18.  Семь бед — один «Reset». (Семь бед — один ответ.)

19.  Бит байт бережёт. (Копейка рубль бережёт.)

20.  Не идентификатор красит файл, а файл идентификатор. (Не имя красит человека, а человек имя.)

21.  Два раза подумай, один раз удали. (Два раза подумай, один раз скажи.)

22.  Наудалял с три Корзины. (Наврал с три короба.)

23.  Что из Корзины удалено, то пропало. (Что с возу упало, то пропало.)

 

 

V Итог урока

 

Контрольный тест ребята по очереди выходят к доске и выводят правильный ответ.

 

Тест контрольной работы

1. Что такое файл?

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

2. Какой вид имеет файловая структура хранения данных на компьютере?

(Иерархическая)

3. На что указывает расширение в имени файла?

(тип файла)

4. Выбери элементы, которые являются правильными именами исполняемого файла и переместите их в активную область

(inform.exe; C:\Windows\System\inform.exe)

5. Могут ли два каталога третьего уровня иерархии иметь одинаковые имена?

(да, если они принадлежат разным каталогам второго уровна)

6. Задано полное имя файла C:\inform\komp.txt. Каково собственно имя файла?

(komp.txt)

7. Какое логическое имя имеет дисковод гибких дисков?

(А)

8. Что такое папка?

(Именованная область диска)

9. Что может хранится в папке Убрать лишнее?

( Windows)

10. Как называется папка, в которой хранятся все папки и файлы?

(корневой)

 

Слайд 17

 

А теперь я попрошу вас посчитать результаты сегодняшней работы. И ответьте используя пульт.

 

Понравился вам урок? (ребята отвечают с помощью пультов)

 

И в завершении урока хочется сказать слова Сюньцзы: «В учении нельзя останавливаться!»

 

: Глава 4: Использование команд Linux :: Часть II: Использование Red Hat Linux :: red hat linux bible. Fedora и Enterprise Edition :: Linux systems :: eTutorials.org

Файловая система Red Hat Linux — это структура, в которой хранится вся информация на вашем компьютере. Файлы организованы в иерархию каталогов. Каждый каталог может содержать файлы, а также другие каталоги.

Если бы вы отобразили файлы и каталоги в Red Hat Linux, это выглядело бы как перевернутое дерево.Вверху находится корневой каталог, представленный одинарной косой чертой (/). Ниже приведен набор общих каталогов в системе Linux, таких как / bin, / dev, / home, / lib и / tmp, и это лишь некоторые из них. Каждый из этих каталогов, а также каталоги, добавленные в корень, могут содержать подкаталоги.

На рис. 4-1 показано, как файловая система Linux организована в виде иерархии. Чтобы проиллюстрировать, как каталоги связаны, на рисунке 4-1 показан каталог / home, содержащий подкаталоги для трех пользователей: chris, mary и tom.В каталоге chris есть подкаталоги: сводки, заметки и личные. Чтобы обратиться к файлу с именем inventory в каталоге chris / memos, вы можете ввести полный путь к / home / chris / memos / inventory. Если бы ваш текущий каталог был / home / chris / memos, вы могли бы ссылаться на файл просто как на инвентарь.

Некоторые из каталогов Red Hat Linux, которые могут вас заинтересовать, включают следующее:

  • / bin — содержит общие пользовательские команды Linux, такие как ls, sort, date и chmod.

  • / boot — содержит загрузочное ядро ​​Linux и файлы конфигурации загрузчика (GRUB).

  • / dev — содержит файлы, представляющие точки доступа к устройствам в ваших системах. К ним относятся терминальные устройства (tty *), гибкие диски (fd *), жесткие диски (hd *), RAM (ram *) и CD-ROM (cd *). (Обычно пользователи получают доступ к этим устройствам напрямую через файлы устройств.)

  • / etc — содержит файлы административной конфигурации.

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

  • / mnt — предоставляет место для монтирования устройств, таких как удаленные файловые системы и съемные носители (с именами каталогов cdrom, floppy и т. д.).

  • / root — представляет домашний каталог пользователя root.

  • / sbin — содержит административные команды и процессы-демоны.

  • / tmp — содержит временные файлы, используемые приложениями.

  • / usr — содержит пользовательскую документацию, игры, графические файлы (X11), библиотеки (lib) и множество других пользовательских и административных команд и файлов.

  • / var — содержит каталоги данных, используемых различными приложениями. В частности, здесь вы можете разместить файлы, которые вы используете как FTP-сервер (/ var / ftp) или веб-сервер (/ var / www).Он также содержит все файлы системного журнала (/ var / log).

  • Файловые системы в операционных системах DOS или MS Windows отличаются от файловой структуры Linux. См. Врезку о файловой системе Linux и файловых системах MS.

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

    Как пользователь Red Hat Linux, большинство файлов, которые вы сохраняете и с которыми работаете, вероятно, будут находиться в вашем домашнем каталоге. Вот команды, которые вы используете для создания и использования файлов и каталогов:

    • cd — перейти в другой текущий рабочий каталог

    • pwd — Распечатать имя текущего рабочего каталога

    • mkdir — Создать каталог

    • chmod — изменить разрешение на файл или каталог

    • ls — Список содержимого каталога

    Следующая процедура поможет вам создать каталоги в вашем домашнем каталоге, перемещаться между ними и установить соответствующие права доступа к файлам:

    1. Сначала перейдите в свой домашний каталог.Для этого просто введите cd. (Чтобы узнать о других способах обращения к домашнему каталогу, см. Боковую панель, посвященную определению каталогов.)

    2. Чтобы убедиться, что вы попали в домашний каталог, введите pwd. Когда я это сделаю, я получаю следующий ответ (ваш будет соответствовать вашему домашнему каталогу):

       $  pwd 
      / главная / Крис 
    3. Создайте новый каталог под названием test в вашем домашнем каталоге, как показано ниже:

       $  мкдир тест 
       
    4. Проверьте права доступа к каталогу, набрав:

       $  LS-старый тест 
      drwxr-xr-x 2 chris sales 1024 24 января 12:17 test 

      Обратите внимание, что в этом листинге указано, что test — это каталог (d), владелец — chris, группа — sales, а последний раз файл был изменен 24 января в 12:17 p.м. Предположим, вы хотите запретить всем, кто использует этот компьютер, использовать или просматривать файлы в этом каталоге. Разрешения для каталога: rwxr-xr-x. Я объясню, что означают эти разрешения, позже в этом разделе.

      Примечание?

      Когда вы добавляете нового пользователя в Red Hat Linux, по умолчанию этот пользователь назначается в группу с таким же именем. Например, в предыдущем тексте пользователь chris будет назначен группе chris.Такой подход к назначению групп называется схемой частных групп пользователей. Дополнительные сведения о частных группах пользователей см. В главе 11.

    5. А пока введите следующее:

       $  chmod 700 тест 
       

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

    6. Затем сделайте тестовый каталог вашим текущим каталогом, как показано ниже:

       $  cd тест 
       
    Использование метасимволов и операторов

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

    Использование метасимволов сопоставления файлов

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

    • * Соответствует любому количеству символов.

    • ? Соответствует любому одному символу.

    • […] Соответствует любому из символов в скобках, который может включать диапазон букв или цифр, разделенных тире.

    Чтобы опробовать некоторые из этих метасимволов сопоставления файлов, перейдите в пустой каталог (например, тестовый каталог, описанный в предыдущем разделе) и создайте несколько файлов.Вот пример того, как создать несколько пустых файлов:

     $  прикосновение яблоко банан виноград грейпфрут арбуз 
     

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

     $  LSA * 
    яблоко
    $  ls г * 
    виноград
    грейпфрут
    $  ls g * t 
    грейпфрут
    $  ls * e * 
    яблоко грейпфрут арбуз грейпфрут
    $  ls * п * 
    банановый арбуз 

    Первый пример соответствует любому файлу, который начинается с a (яблоко).В следующем примере сопоставляются любые файлы, начинающиеся с g (виноград, грейпфрут). Затем сопоставляются файлы, начинающиеся с g и заканчивающиеся на t (грейпфрут). Затем сопоставляется любой файл, имя которого содержит букву e (яблоко, виноград, грейпфрут, арбуз). Наконец, сопоставляется любой файл, содержащий n (банан, арбуз).

    Вот несколько примеров сопоставления с образцом с вопросительным знаком (?):

     $  ls ???? e 
    яблоко виноград
    $  ls g ??? e * 
    грейпфрут 

    Первый пример соответствует любому файлу из пяти символов, который заканчивается на e (яблоко, виноград).Второй соответствует любому файлу, который начинается с g и имеет пятый символ e (виноград, грейпфрут).

    Вот несколько примеров использования фигурных скобок для сопоставления с образцом:

     $  ls [abw] * 
    яблоко банан арбуз
    $  ls [agw] * [ne] 
    яблоко виноград арбуз 

    В первом примере сопоставляется любой файл, начинающийся с a, b или w. Во втором случае сопоставляется любой файл, который начинается с a, g или w, а также заканчивается на n или e.

    Использование метасимволов перенаправления файлов

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

    • < Направить содержимое файла команде.

    • > Направляет вывод команды в файл, удаляя существующий файл.

    • >> Направляет вывод команды в команду, добавляя вывод в конец существующего файла.

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

     $  корень почты <~ / .bashrc 
    $  человек chmod | столбец -b> / tmp / chmod 
      $ echo "Я завершил проект $ (дата)" >> ~ / projects 
     

    В первом примере содержимое файла.bashrc в домашнем каталоге отправляются в почтовом сообщении корневому пользователю компьютера. Вторая командная строка форматирует справочную страницу chmod (с помощью команды man), удаляет лишние пробелы (col -b) и отправляет вывод в файл / tmp / chmod (стирая предыдущий файл / tmp / chmod, если он существует) . Последняя команда приводит к добавлению следующего текста в файл проекта пользователя:

     Я завершил проект в субботу 25 октября 13:46:49 PST 2003 
    Понимание прав доступа к файлам

    После того, как вы некоторое время поработаете с Linux, вы почти наверняка получите сообщение «Permission denied».Разрешения, связанные с файлами и каталогами в Linux, были разработаны для предотвращения доступа пользователей к личным файлам других пользователей и для защиты важных системных файлов.

    Девять бит, назначенных каждому файлу для разрешений, определяют доступ, который вы и другие имеете к вашему файлу. Биты разрешения отображаются как rwxrwxrwx. Первые три бита относятся к разрешению владельца, следующие три относятся к группе, назначенной файлу, а последние три применяются ко всем остальным. R обозначает чтение , , w обозначает запись , , а x обозначает разрешения на выполнение.Если вместо буквы отображается тире, это означает, что разрешение на чтение, запись или выполнение отключено.

    Вы можете увидеть разрешения для любого файла или каталога, набрав команду ls -ld. Именованный файл или каталог выглядит так, как показано в следующем примере:

     $  ls -ld ch4 test 
    -rw-rw-r-- 1 chris sales 4983 18 января 22:13 ch4
    drwxr-xr-x 2 chris sales 1024 24 января 13:47 test 

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

    Если у вас есть файл, вы можете изменить права доступа к нему по своему усмотрению. Вы можете сделать это с помощью команды chmod. Для каждого из трех наборов разрешений для файла (чтение, запись и выполнение) r присваивается числу 4, w — 2, а x — 1. Таким образом, чтобы сделать разрешения широко открытыми для себя как владельца, вы установит первое число на 7 (4 плюс 2 плюс 1). То же самое будет верно для групповых и других разрешений. Любая комбинация разрешений может быть результатом от 0 (нет разрешения) до 7 (полное разрешение).

    Вот несколько примеров того, как изменить права доступа к файлу и каким будет разрешение в результате:

      chmod 777 файлов  (rwxrwxrwx
      chmod 755 файлов  (rwxr-xr-x
      chmod 644 файла  (rw - r —- r-
      chmod 000 файлов  (--------- 

    Когда вы пытаетесь создать файл, по умолчанию ему дается разрешение rw-r — r—. Каталогу предоставляется разрешение rwxr-xr-x. Эти значения по умолчанию определяются значением umask.Введите umask, чтобы узнать, какое у вас значение umask. Например:

     $  маска 
    022 

    Значение umask маскирует значение разрешений 666 для файла и 777 для каталога. Umask 022 дает разрешение для каталога 755 (rwxr-xr-x). Та же самая umask приводит к разрешению файла 644 (rw-r — r—). (Разрешения на выполнение для обычных файлов по умолчанию отключены.)

    Наконечник?

    Вот отличный совет по изменению разрешений сразу для большого количества файлов.Используя параметры -R команды chmod, вы можете изменить права доступа для всех файлов и каталогов в структуре каталогов одновременно. Например, если вы хотите полностью открыть разрешения для всех файлов и каталогов в каталоге / tmp / test, вы можете ввести следующее:

     $ chmod -R 777 / tmp / test 

    Эта командная строка запускает chmod рекурсивно (-R) для каталога / tmp / test, а также для любых файлов или каталогов, которые существуют ниже этой точки в файловой системе (например, / tmp / test / hat, / tmp / test / hat / caps и т. д.).Все будет установлено на 777 (полные разрешения на чтение / запись / выполнение).

    Осторожно?

    Параметр -R команды chmod работает лучше всего, если вы полностью открываете разрешения или добавляете разрешение на выполнение (а также соответствующее разрешение на чтение / запись). Причина в том, что если вы рекурсивно отключите разрешение на выполнение, вы лишитесь возможности перейти в любой каталог в этой структуре. Например, chmod -R 644 / tmp / test отключает разрешение на выполнение для каталога / tmp / test, а затем не может изменить какие-либо файлы или каталоги ниже этой точки.

    Перемещение, копирование и удаление файлов

    Команды для перемещения, копирования и удаления файлов довольно просты. Чтобы изменить расположение файла, используйте команду mv. Чтобы скопировать файл из одного места в другое, используйте команду cp. Чтобы удалить файл, используйте команду rm. Вот некоторые примеры:

     $  мв abc def 
    $  мв abc ~ 
    $  cp abc def 
    $  cp abc ~ 
     долл. США abc 
      $ пог. * 
     

    Из двух команд перемещения (mv) первая перемещает файл abc в файл def в том же каталоге (фактически переименовывая его), а вторая перемещает файл abc в ваш домашний каталог (~).Первая команда копирования (cp) копирует abc в файл def, а вторая копирует abc в ваш домашний каталог (~). Первая команда удаления (rm) удаляет файл abc; второй удаляет все файлы в текущем каталоге (кроме тех, которые начинаются с точки).

    Примечание?

    Для пользователя root команды mv, cp и rm имеют псевдонимы, каждая из которых запускается с параметром -i. Это вызывает появление запроса на подтверждение каждого перемещения, копирования и удаления, по одному файлу за раз.Это сделано для того, чтобы пользователь root не испортил по ошибке большую группу файлов.

    Работа с файловыми системами | Документы Microsoft

    • 6 минут на чтение

    В этой статье

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

    Хранение файлов и производительность в файловых системах

    Мы не рекомендуем работать с файлами в разных операционных системах, если для этого нет особых причин. Для максимальной производительности храните файлы в файловой системе WSL, если вы работаете в командной строке Linux (Ubuntu, OpenSUSE и т. Д.). Если вы работаете в командной строке Windows (PowerShell, Командная строка), храните файлы в файловой системе Windows.

    Например, при сохранении файлов проекта WSL:

    • Используйте корневой каталог файловой системы Linux: \\ wsl $ \ Ubuntu-18.04 \ home \ <имя пользователя> \ Project
    • Не корневой каталог файловой системы Windows: / mnt / c / Users / <имя пользователя> / Project $ или C: \ Users \ <имя пользователя> \ Project

    Когда вы видите / mnt / в пути к файлу в командной строке WSL, это означает, что вы работаете с подключенного диска.Таким образом, файловая система Windows C: / drive ( C: \ Users \ <имя пользователя> \ Project ) будет выглядеть следующим образом при подключении в командной строке WSL: / mnt / c / Users / <имя пользователя> / Project долларов США. Файлы проекта можно хранить на смонтированном диске, но ваша скорость работы улучшится, если вы сохраните их непосредственно на диске \\ wsl $ .

    Просмотр текущего каталога в проводнике Windows

    Вы можете просмотреть каталог, в котором хранятся ваши файлы, открыв проводник Windows из командной строки, используя:

      исследователь.исполняемый .
      

    Также можно использовать команду: powershell.exe / c start. Не забудьте добавить точку в конце команды, чтобы открыть текущий каталог.

    Чтобы просмотреть все доступные дистрибутивы Linux и их корневые файловые системы в проводнике файлов Windows, введите в адресной строке: \\ wsl $

    Чувствительность к регистру имени файла и каталога

    Чувствительность к регистру определяет, будет ли регистр прописным (FOO.txt) или строчным (foo.txt) буквы обрабатываются как отдельные (с учетом регистра) или эквивалентные (без учета регистра) в имени файла или каталоге. Файловые системы Windows и Linux обрабатывают чувствительность к регистру по-разному — Windows нечувствительна к регистру, а Linux чувствительна к регистру. Узнайте больше о том, как настроить чувствительность к регистру, особенно при монтировании дисков с помощью WSL, в статье с практическими рекомендациями по настройке чувствительности к регистру.

    Взаимодействие между командами Windows и Linux

    Инструменты и команды для Windows и Linux могут использоваться как взаимозаменяемые с WSL.

    • Запустите инструменты Windows (например, notepad.exe) из командной строки Linux (например, Ubuntu).
    • Запустите инструменты Linux (например, grep) из командной строки Windows (например, PowerShell).
    • Делитесь переменными среды между Linux и Windows. (Сборка 17063+)

    Запустите двоичные файлы Linux из командной строки Windows (CMD) или PowerShell, используя wsl (или wsl.exe ).

    Например:

      C: \ темп> wsl ls -la
    <- содержимое C: \ temp ->
      

    Двоичные файлы, вызываемые таким образом:

    • Используйте тот же рабочий каталог, что и текущее приглашение CMD или PowerShell.
    • Запуск от имени пользователя WSL по умолчанию.
    • Иметь те же права администратора Windows, что и вызывающий процесс и терминал.

    Команда Linux после wsl (или wsl.exe ) обрабатывается так же, как любая команда, выполняемая в WSL. Такие вещи, как sudo, конвейер и перенаправление файлов, работают.

    Пример использования sudo для обновления вашего дистрибутива Linux по умолчанию:

      C: \ temp> wsl sudo apt-get update
      

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

    Смешивание команд Linux и Windows

    Вот несколько примеров смешивания команд Linux и Windows с помощью PowerShell.

    Чтобы использовать команду Linux ls -la для вывода списка файлов и команду PowerShell findstr для фильтрации результатов по словам, содержащим «git», объедините команды:

      wsl ls -la | findstr "мерзавец"
      

    Чтобы использовать команду PowerShell dir для вывода списка файлов и команду Linux grep для фильтрации результатов по словам, содержащим «git», объедините команды:

      C: \ temp> dir | wsl grep git
      

    Чтобы использовать команду Linux ls -la для вывода списка файлов и команду PowerShell > out.txt , чтобы распечатать этот список в текстовый файл с именем «out.txt», объедините команды:

      C: \ temp> wsl ls -la> out.txt
      

    Команды, переданные в wsl.exe , перенаправляются в процесс WSL без изменений. Пути к файлам должны быть указаны в формате WSL.

    Чтобы использовать команду Linux ls -la для вывода списка файлов в пути к файловой системе Linux / proc / cpuinfo с помощью PowerShell:

      C: \ temp> wsl ls -la / proc / cpuinfo
      

    Использование команды Linux ls -la для вывода списка файлов в C: \ Program Files путь к файловой системе Windows с помощью PowerShell:

      C: \ temp> wsl ls -la "/ mnt / c / Program Files"
      

    WSL может запускать инструменты Windows непосредственно из командной строки WSL, используя [имя-инструмента].exe . Например, notepad.exe .

    Приложения, запускаемые таким образом, имеют следующие свойства:

    • Сохранить рабочий каталог как командную строку WSL (по большей части — исключения описаны ниже).
    • Имеют те же права доступа, что и процесс WSL.
    • Запуск от имени активного пользователя Windows.
    • Отображается в диспетчере задач Windows, как если бы он был запущен непосредственно из командной строки CMD.

    Исполняемые файлы Windows, выполняемые в WSL, обрабатываются аналогично собственным исполняемым файлам Linux — конвейерная обработка, перенаправления и даже фоновая работа работают должным образом.

    Чтобы запустить инструмент Windows ipconfig.exe , используйте инструмент Linux grep для фильтрации результатов «IPv4» и используйте инструмент Linux cut для удаления полей столбца из дистрибутива Linux (например, Ubuntu ) введите:

      ipconfig.exe | grep IPv4 | вырезать -d: -f2
      

    Давайте попробуем пример смешивания команд Windows и Linux. Откройте свой дистрибутив Linux (например, Ubuntu) и создайте текстовый файл: touch foo.txt . Теперь используйте команду Linux ls -la для вывода списка прямых файлов и деталей их создания, а также инструмент Windows PowerShell findstr.exe , чтобы отфильтровать результаты, чтобы в результатах отображался только файл foo.txt :

      ls -la | findstr.exe foo.txt
      
    Инструменты

    Windows должны включать расширение файла, соответствовать регистру файла и быть исполняемым. Неисполняемые файлы, включая пакетные сценарии. Собственные команды CMD, такие как dir , можно запустить с помощью команды cmd.exe / C .

    Например, выведите список содержимого вашей файловой системы Windows C: \ directory, введя:

      cmd.exe / C каталог
      

    Или используйте команду ping , чтобы отправить эхо-запрос на веб-сайт microsoft.com:

      ping.exe www.microsoft.com
      

    Параметры передаются в двоичный файл Windows без изменений. Например, следующая команда откроет C: \ temp \ foo.txt в notepad.exe :

      notepad.exe "C: \ temp \ foo.txt"
      

    Это тоже будет работать:

      notepad.exe C: \\ temp \\ foo.txt
      

    Совместное использование переменных среды между Windows и WSL с помощью WSLENV

    WSL и Windows совместно используют специальную переменную среды WSLENV , созданную для объединения дистрибутивов Windows и Linux, работающих на WSL.

    Свойства переменной WSLENV :

    • Общий; он существует как в среде Windows, так и в среде WSL.
    • Это список переменных среды, которые будут совместно использоваться Windows и WSL.
    • Он может форматировать переменные среды для правильной работы в Windows и WSL.
    • Он может помочь в потоке между WSL и Win32.

    Примечание

    До 17063, только переменная среды Windows, к которой имел доступ WSL, была PATH (так что вы могли запускать исполняемые файлы Win32 из-под WSL).Начиная с 17063, начинает поддерживаться WSLENV . WSLENV чувствителен к регистру.

    флаги WSLENV

    В WSLENV доступно четыре флага, влияющих на то, как переводится переменная среды.

    WSLENV флаги:

    • / p — переводит путь между путями стиля WSL / Linux и путями Win32.
    • / l — указывает, что переменная среды представляет собой список путей.
    • / u — указывает, что эта переменная среды должна быть включена только при запуске WSL из Win32.
    • / w — указывает, что эта переменная среды должна быть включена только при запуске Win32 из WSL.

    Флаги можно комбинировать по мере необходимости.

    Узнайте больше о WSLENV, включая ответы на часто задаваемые вопросы и примеры установки значения WSLENV на конкатенацию других предварительно определенных переменных среды, каждая из которых имеет суффикс косой черты, за которым следуют флаги, чтобы указать, как значение должно быть преобразовано, и передают переменные с помощью сценария. В этой статье также содержится пример настройки среды разработки с языком программирования Go, настроенной для совместного использования GOPATH между WSL и Win32.

    Отключить совместимость

    Пользователи могут отключить возможность запуска инструментов Windows для одного сеанса WSL, выполнив следующую команду от имени пользователя root:

      эхо 0> / proc / sys / fs / binfmt_misc / WSLInterop
      

    Чтобы снова включить двоичные файлы Windows, выйдите из всех сеансов WSL и повторно запустите bash.exe или выполните следующую команду от имени пользователя root:

      эхо 1> / proc / sys / fs / binfmt_misc / WSLInterop
      

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

    Работа с файловой системой в Deno

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

    В нашем последнем выпуске мы использовали Deno для создания инструмента командной строки для выполнения запросов к стороннему API. В этой статье мы оставим сеть в стороне и создадим инструмент, который позволит вам искать в файловой системе текст в файлах и папках в вашем текущем каталоге — аналогично инструментам вроде grep .

    Примечание: мы не создаем инструмент, который будет столь же оптимизирован и эффективен, как grep , и не собираемся его заменять! Цель создания подобного инструмента — познакомиться с API файловой системы Deno.

    Установка Deno

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

    На момент написания последней стабильной версии Deno была 1.10.2 , поэтому в этой статье я использую именно ее.

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

    Настройка нашей новой команды с помощью Yargs

    Как и в предыдущей статье, мы будем использовать Yargs для создания интерфейса, который наши пользователи могут использовать для выполнения нашего инструмента. Давайте создадим index.ts и заполним его следующим:

      импортировать пряжу из "https: // обозначение".land/x/[email protected]/deno.ts ";
    
    interface Yargs  {
      описать: (параметр: строка, описание: строка) => Яргс ;
      DemandOption: (обязательно: строка []) => Яргс ;
      argv: ArgvReturnType;
    }
    
    interface UserArguments {
      текст: строка;
    }
    
    const userArguments: UserArguments =
      (yargs (Deno.args) так же неизвестно, как Yargs )
        .describe ("текст", "текст для поиска в текущем каталоге")
        .demandOption (["текст"])
        .argv;
    
    console.log (userArguments);
      

    Здесь есть кое-что, на что стоит обратить внимание:

    • Мы устанавливаем Yargs, указав его путь в репозитории Deno. Я явно использую точный номер версии, чтобы гарантировать, что мы всегда будем получать эту версию, чтобы мы не использовали последнюю версию при запуске скрипта.
    • На момент написания статьи Deno + TypeScript для Yargs был не лучшим, поэтому я создал свой собственный интерфейс и использовал его для обеспечения некоторой безопасности типов.
    • UserArguments содержит все входные данные, которые мы будем запрашивать у пользователя. На данный момент мы будем запрашивать только текст , но в будущем мы могли бы расширить это, чтобы предоставить список файлов для поиска, а не предполагать текущий каталог.

    Мы можем запустить это с , обозначив run index.ts , и увидеть наш вывод Yargs:

      $ обозначает запуск index.ts
    Проверить файл: ///home/jack/git/deno-file-search/index.ts
    Параметры:
      --help Показать справку [логическое]
      --version Показать номер версии [логическое]
      --text текст для поиска в текущем каталоге [обязательно]
    
    Отсутствует обязательный аргумент: текст
      

    Пришло время приступить к реализации!

    Список файлов

    Прежде чем мы сможем начать поиск текста в заданном файле, нам нужно сгенерировать список каталогов и файлов для поиска.Deno предоставляет Deno.readdir , который является частью «встроенной» библиотеки, что означает, что вам не нужно импортировать его. при обозначении: ядро ​​/ ядро.js: 86: 46 в unwrapOpResult (обозначение: core / core.js: 106: 13) в Object.opSync (обозначение: core / core.js: 120: 12) в Object.cwd (обозначение: runtime / js / 30_fs.js: 57: 17) в файле: ///home/jack/git/deno-file-search/index.ts: 19: 52

    Помните, что Deno требует, чтобы всем сценариям были явно даны разрешения на чтение из файловой системы. В нашем случае флаг --allow-read разрешит запуск нашего кода:

      ~ / $ обозначает запуск --allow-read index.ts --text = 'foo'
    { имя: ".git ", isFile: false, isDirectory: true, isSymlink: false}
    {имя: ".vscode", isFile: false, isDirectory: true, isSymlink: false}
    {имя: "index.ts", isFile: true, isDirectory: false, isSymlink: false}
      

    В данном случае я запускаю сценарий в каталоге, в котором я собираю наш инструмент, поэтому он находит исходный код TS, репозиторий .git и папку .vscode . Давайте начнем писать некоторые функции для рекурсивной навигации по этой структуре, поскольку нам нужно найти все файлы в каталоге, а не только файлы верхнего уровня.Кроме того, мы можем добавить несколько распространенных игнорирований. Я не думаю, что кто-то захочет, чтобы скрипт выполнял поиск по всей папке .git !

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

      const IGNORED_DIRECTORIES = новый набор ([". Git"]);
    
    асинхронная функция getFilesList (
      каталог: строка,
    ): Promise  {
      const foundFiles: строка [] = [];
      для ожидания (const fileOrFolder из Deno.readDir (каталог)) {
        if (fileOrFolder.isDirectory) {
          if (IGNORED_DIRECTORIES.has (fileOrFolder.name)) {
            
            Продолжить;
          }
          
          const nestedFiles = ждать getFilesList (
            `$ {directory} / $ {fileOrFolder.name}`,
          );
          foundFiles.push (... вложенные файлы);
        } еще {
          
          foundFiles.push (`$ {каталог} / $ {fileOrFolder.name}`);
        }
      }
      вернуть foundFiles;
    }
      

    Тогда мы можем использовать это так:

      const files = ожидание getFilesList (Deno.cwd ());
    console.log (файлы);
      

    Мы также получаем результат, который выглядит хорошо:

      $ обозначает запуск --allow-read index.ts --text = 'foo'
    [
      "/home/jack/git/deno-file-search/.vscode/settings.json",
      "/home/jack/git/deno-file-search/index.ts"
    ]
      

    Использование пути

    Модуль

    Теперь мы можем комбинировать пути к файлам со строками шаблона следующим образом:

      `$ {directory} / $ {fileOrFolder.name}`,
      

    Но было бы лучше сделать это с помощью модуля Deno path .Этот модуль является одним из модулей, которые Deno предоставляет как часть своей стандартной библиотеки (так же, как Node со своим модулем path ), и если вы использовали модуль Node path , код будет выглядеть очень похожим. На момент написания последней версии библиотеки std , которую предоставляет Deno, является 0.97.0 , и мы импортируем модуль path из файла mod.ts :

      import * как путь от "https://deno.land/[email protected]/path/mod.ts ";
      

    mod.ts всегда является точкой входа при импорте стандартных модулей Deno. Документация для этого модуля находится на сайте Deno и содержит path.join , который будет принимать несколько путей и объединять их в один путь. Давайте импортируем и используем эту функцию, а не объединяем их вручную:

     
    импортировать ярги из "https://deno.land/x/[email protected]/deno.ts";
    import * как путь из "https://deno.land/[email protected]/path/mod.ts";
    
    
    асинхронная функция getFilesList (
      каталог: строка,
    ): Promise  {
      const foundFiles: строка [] = [];
      для ожидания (const fileOrFolder из Deno.readDir (каталог)) {
        if (fileOrFolder.isDirectory) {
          if (IGNORED_DIRECTORIES.has (fileOrFolder.name)) {
            
            Продолжить;
          }
          
          const nestedFiles = ждать getFilesList (
            path.join (каталог, fileOrFolder.name),
          );
          foundFiles.push (... вложенные файлы);
        } еще {
          
          foundFiles.push (путь.join (каталог, имя_файла));
        }
      }
      вернуть foundFiles;
    }
      

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

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

    В отличие от Node, который позволяет вам читать содержимое файлов с помощью модуля fs и метода readFile , Deno предоставляет readTextFile из коробки как часть своего ядра, что означает, что в этом случае нам не нужно импортировать любые дополнительные модули. readTextFile действительно предполагает, что файл закодирован как UTF-8 — что для текстовых файлов обычно то, что вам нужно. Если вы работаете с другой кодировкой файла, вы можете использовать более общий readFile , который ничего не предполагает о кодировке и позволяет передавать определенный декодер.

    Получив список файлов, мы можем перебрать их и прочитать их содержимое в виде текста:

      const files = ожидание getFilesList (Deno.cwd ());
    
    files.forEach (async (файл) => {
      const contents = await Deno.readTextFile (файл);
      console.log (содержимое);
    });
      

    Поскольку мы хотим знать номер строки при нахождении совпадения, мы можем разделить содержимое на символ новой строки ( \ n ) и искать каждую строку по очереди, чтобы увидеть, есть ли совпадение. Таким образом, если есть, мы будем знать индекс номера строки, чтобы мы могли сообщить об этом пользователю:

      files.forEach (async (файл) => {
      const contents = await Deno.readTextFile (файл);
      const lines = contents.split ("\ n");
      линий.forEach ((строка, индекс) => {
        if (line.includes (userArguments.text)) {
          console.log («ПОИСКПОЗ», строка);
        }
      });
    });
      

    Для хранения наших совпадений мы можем создать интерфейс, представляющий Match , и помещать совпадения в массив, когда мы их находим:

      интерфейс Match {
      файл: строка;
      номер строчки;
    }
    const соответствует: Match [] = [];
    files.forEach (async (файл) => {
      const contents = await Deno.readTextFile (файл);
      const lines = contents.split ("\ n");
      линий.forEach ((строка, индекс) => {
        if (line.includes (userArguments.text)) {
          match.push ({
            файл,
            строка: index + 1,
          });
        }
      });
    });
      

    Затем мы можем выйти из матчей:

      match.forEach ((match) => {
      console.log (match.file, «строка:», match.line);
    });
      

    Однако, если вы запустите сценарий сейчас и предоставите ему текст, который определенно будет совпадать, вы все равно не увидите совпадений, записанных в консоль. Это распространенная ошибка, которую делают люди с async и await в вызове forEach ; forEach не будет ждать завершения обратного вызова, прежде чем считать себя выполненным.Возьмите этот код:

      files.forEach (file => {
      новое обещание (resolve => {
        ...
      })
    })
      

    Механизм JavaScript будет выполнять forEach , который выполняется для каждого файла, генерируя новое обещание, а затем продолжит выполнение остальной части кода. Он не будет автоматически ждать выполнения этих обещаний, и это точно так же, когда мы используем await .

    Хорошая новость заключается в том, что это будет работать должным образом в для... из цикла , поэтому вместо:

      files.forEach (file => {...})
      

    Мы можем поменяться на:

      для (файл const файлов) {
      ...
    }
      

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

      $ обозначает run --allow-read index.ts --text = 'readTextFile'
    Проверить файл: ///home/jack/git/deno-file-search/index.ts
    /home/jack/git/deno-file-search/index.ts строка: 54
      

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

    Сначала мы можем создать структуру данных:

      const соответствует = новая карта <строка, Set > ();
      

    Затем мы можем сохранять совпадения, добавляя их в набор Set для данного файла. Это немного больше работы, чем раньше. Сейчас мы не можем просто помещать элементы в массив. Сначала нам нужно найти любые существующие совпадения (или создать новый набор ), а затем сохранить их:

      для (файл const файлов) {
      const contents = await Deno.readTextFile (файл);
      const lines = contents.split ("\ n");
      lines.forEach ((строка, индекс) => {
        if (line.includes (userArguments.text)) {
          const matchForFile = match.get (файл) || новый Set  ();
          matchForFile.add ({
            файл,
            строка: index + 1,
          });
          match.set (файл, matchForFile);
        }
      });
    }
      

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

      для (постоянное совпадение совпадений) {
      const fileName = match [0];
      const fileMatches = совпадение [1];
      консоль.журнал (имя_файла);
      fileMatches.forEach ((m) => {
        console.log ("=>", m.line);
      });
    }
      

    Мы можем сделать некоторую деструктуризацию, чтобы сделать это немного аккуратнее:

      для (постоянное совпадение совпадений) {
      const [fileName, fileMatches] = совпадение;
      

    Или даже:

      для (const [fileName, fileMatches] совпадений) {
      

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

      $ обозначает run --allow-read index.ts --text = 'Deno'
    /home/jack/git/deno-file-search/index.ts
    => 15
    => 26
    => 45
    => 54
      

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

      интерфейс Match {
      файл: строка;
      lineNumber: число;
      lineText: строка;
    }
      

    Затем обновите код, в котором хранятся совпадения. Одна действительно хорошая вещь в TypeScript заключается в том, что вы можете обновить интерфейс Match , а затем заставить компилятор сообщить вам код, который вам нужно обновить.Я часто обновляю тип, а затем жду, пока VS Code выявит какие-либо проблемы. Это действительно продуктивный способ работы, если вы не можете точно вспомнить все места, где код нуждается в обновлении:

      if (line.includes (userArguments.text)) {
      const matchForFile = match.get (файл) || новый Set  ();
      matchForFile.add ({
        файл,
        lineNumber: index + 1,
        lineText: строка,
      });
      match.set (файл, matchForFile);
    }
      

    Код, который выводит совпадения, также нуждается в обновлении:

      для (const [fileName, fileMatches] совпадений) {
      консоль.журнал (имя_файла);
      fileMatches.forEach ((m) => {
        console.log ("=>", m.lineNumber, m.lineText.trim ());
      });
    }
      

    Я решил вызвать trim () в нашем lineText , чтобы, если совпадающая строка имеет большой отступ, мы не показываем ее таким образом в результатах. Мы удалим все начальные (и конечные) пробелы в нашем выводе.

    И на этом я бы сказал, что наша первая версия готова!

      $ обозначает запуск --allow-read index.ts --text = 'Deno'
    Проверьте файл: /// home / jack / git /dem-file-search / index.ts
    /home/jack/git/deno-file-search/index.ts
    => 15 (яргс (Deno.args) неизвестен как Яргс )
    => 26 для ожидания (const fileOrFolder из Deno.readDir (каталог)) {
    => 45 файлов const = ожидание getFilesList (Deno.cwd ());
    => 55 const contents = await Deno.readTextFile (файл);
      

    Фильтрация по расширению файла

    Давайте расширим функциональность, чтобы пользователи могли фильтровать расширения файлов, которые мы сопоставляем, с помощью флага extension , которому пользователь может передать расширение (например, --extension js , чтобы соответствовать только .js файлов). Сначала давайте обновим код Yargs и типы, чтобы сообщить компилятору, что мы принимаем (необязательный) флаг расширения:

      interface UserArguments {
      текст: строка;
      расширение ?: строка;
    }
    
    const userArguments: UserArguments =
      (yargs (Deno.args) так же неизвестно, как Yargs )
        .describe ("текст", "текст для поиска в текущем каталоге")
        .describe ("расширение", "соответствующее расширение файла")
        .demandOption (["текст"])
        .argv;
      

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

      interface FilterOptions {
      расширение ?: строка;
    }
    
    асинхронная функция getFilesList (
      каталог: строка,
      параметры: FilterOptions = {},
    ): Promise  {}
      

    Теперь в теле функции, когда мы нашли файл, мы проверяем, что либо:

    • Пользователь не предоставил добавочный номер для фильтрации.
    • Пользователь предоставил расширение для фильтрации, и расширение файла соответствует предоставленному. Мы можем использовать path.extname , который возвращает расширение файла для заданного пути (для foo.ts он вернет .ts , поэтому мы берем расширение, которое передал пользователь, и добавляем . к Это).
      асинхронная функция getFilesList (
      каталог: строка,
      параметры: FilterOptions = {},
    ): Promise  {
      const foundFiles: строка [] = [];
      для ожидания (const fileOrFolder из Deno.readDir (каталог)) {
        if (fileOrFolder.isDirectory) {
          if (IGNORED_DIRECTORIES.has (fileOrFolder.name)) {
            
            Продолжить;
          }
          
          const nestedFiles = ждать getFilesList (
            path.join (каталог, fileOrFolder.name),
            параметры,
          );
          foundFiles.push (... вложенные файлы);
        } еще {
          
    
          
          const shouldStoreFile =! options.extension ||
            path.extname (fileOrFolder.name) === `. $ {options.extension}`;
    
          if (shouldStoreFile) {
            foundFiles.push (path.join (каталог, fileOrFolder.name));
          }
        }
      }
      вернуть foundFiles;
    }
      

    Наконец, нам нужно обновить наш вызов функции getFilesList , чтобы передать ей любые параметры, введенные пользователем:

      const files = ожидание getFilesList (Deno.cwd (), userArguments);
      

    Найти и заменить

    В завершение, давайте расширим наш инструмент, чтобы учесть базовую замену. Если пользователь передает --replace = foo , мы возьмем все совпадения, найденные в результате их поиска, и заменим их заданным словом — в данном случае foo , прежде чем записать этот файл на диск.Для этого мы можем использовать Deno.writeTextFile . (Как и в случае с readTextFile , вы также можете использовать writeFile , если вам нужен больший контроль над кодировкой.)

    Еще раз, мы сначала обновим наш код Yargs, чтобы можно было указать аргумент:

      interface UserArguments {
      текст: строка;
      расширение ?: строка;
      заменить ?: строка;
    }
    
    const userArguments: UserArguments =
      (yargs (Deno.args) так же неизвестно, как Yargs )
        .describe ("текст", "текст для поиска в текущем каталоге")
        .описать ("расширение", "сопоставимое расширение файла")
        .describe ("заменить", "текст для замены любых совпадений")
        .demandOption (["текст"])
        .argv;
      

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

      для (файл const файлов) {
      const contents = await Deno.readTextFile (файл);
      const lines = contents.split ("\ n");
      lines.forEach ((строка, индекс) => {
        if (line.includes (userArguments.text)) {
          const matchForFile = match.get (файл) || новый Set  ();
          matchForFile.add ({
            файл,
            lineNumber: index + 1,
            lineText: строка,
          });
          match.set (файл, matchForFile);
        }
      });
    
      if (userArguments.replace) {
        const newContents = contents.replaceAll (
          userArguments.text,
          userArguments.replace,
        );
        
      }
    }
      

    Запись на диск — это случай вызова writeTextFile с указанием пути к файлу и нового содержимого:

      если (userArguments.заменять) {
      const newContents = contents.replaceAll (
        userArguments.text,
        userArguments.replace,
      );
      await Deno.writeTextFile (файл, newContents);
    }
      

    Однако при запуске мы получим ошибку разрешений. Deno разделяет чтение и запись файла на отдельные разрешения, поэтому вам нужно передать флаг --allow-write , чтобы избежать ошибки:

      $ означает run --allow-read index.ts --text = 'readTextFile' --extension = ts --replace = 'jackWasHere'
    Проверьте файл: /// home / jack / git /dem-file-search / index.ts
    ошибка: неперехваченный (в обещании) PermissionDenied: требуется доступ на запись к "/home/jack/git/deno-file-search/index.ts", запустить снова с флагом --allow-write
        await Deno.writeTextFile (файл, newContents);
      

    Вы можете передать --allow-write или быть более конкретным с --allow-write =. , что означает, что инструмент имеет разрешение только на запись файлов в текущем каталоге:

      $ обозначает запуск --allow-read --allow-write =. index.ts --text = 'readTextFile' --extension = ts --replace = 'jackWasHere'
    / домашний / джек / git / означающий-поиск-файл / index.ts
    => 74 const contents = await Deno.readTextFile (файл);
      

    Компиляция в исполняемый файл

    Теперь, когда у нас есть сценарий и мы готовы поделиться им, давайте попросим Deno объединить наш инструмент в один исполняемый файл. Таким образом, нашим конечным пользователям не нужно будет запускать Deno и каждый раз передавать все соответствующие флаги разрешений; мы можем сделать это при комплектации. означает компиляцию позволяет нам сделать это:

      $ обозначает компиляцию --allow-read --allow-write =.index.ts
    Проверить файл: ///home/jack/git/deno-file-search/index.ts
    Файл пакета: ///home/jack/git/deno-file-search/index.ts
    Скомпилируйте файл: ///home/jack/git/deno-file-search/index.ts
    Выдать поиск-файл-обозревателя
      

    И тогда мы можем вызвать исполняемый файл:

      $ ./deno-file-search index.ts --text = readTextFile --extension = ts
    /home/jack/git/deno-file-search/index.ts
    => 74 const contents = await Deno.readTextFile (файл);
      

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

    Заключение

    Мне действительно очень нравится работать в Deno. По сравнению с Node мне нравится тот факт, что TypeScript, Deno Format и другие инструменты просто выходят из коробки. Мне не нужно настраивать проект Node, затем Prettier, а затем выяснять, как лучше всего добавить в него TypeScript.

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

    SitePoint имеет постоянно растущий список статей о Deno.Посмотрите их здесь, если вы хотите изучить Deno дальше.

    Использование файловых систем в Amazon EFS

    Amazon Elastic File System представляет собой стандартный интерфейс файловой системы, поддерживающий полный доступ к файловой системе семантика. Используя сетевую файловую систему (NFS) версии 4.1 (NFSv4.1), вы можете смонтировать свой Файл Amazon EFS на любом инстансе Amazon Elastic Compute Cloud (Amazon EC2) на базе Linux.После ваша система смонтирована, вы можете работать с файлами и каталогами так же, как и с локальной файловой системой. Для дополнительной информации на см. раздел Монтирование файловых систем EFS.

    После того, как вы создадите файловую систему и смонтируете ее на вашем экземпляре EC2, чтобы использовать ваш файл система эффективно вам нужно знать об управлении разрешениями на уровне NFS для пользователей, групп, и связанные Ресурсы.Когда вы впервые создаете свою файловую систему, есть только один корневой каталог в /. По умолчанию только пользователь root (UID 0) имеет права на чтение, запись и выполнение. Для другим пользователям, чтобы изменить файловую систему, пользователь root должен явно предоставить им доступ. Вы используете точки доступа EFS для предоставления каталогов, которые доступны для записи из определенного приложения.Для большего информацию см. в разделе Работа с пользователями, группами и разрешениями на Уровень сетевой файловой системы (NFS) и работа с точками доступа Amazon EFS.

    Amazon EFS: как это работает

    Начало работы

    Прохождения

    FileSystem — Expo Documentation

    expo-file-system обеспечивает доступ к файловой системе, хранящейся локально на устройстве.В Expo Go каждый проект имеет отдельную файловую систему и не имеет доступа к файловой системе других проектов Expo. Однако он может сохранять контент, совместно используемый другими проектами, в локальной файловой системе, а также обмениваться локальными файлами с другими проектами. Он также может загружать и скачивать файлы с сетевых URL-адресов.

    Совместимость платформ
    Устройство Android Эмулятор Android Устройство iOS Симулятор iOS Интернет
    9011 9011 9011 9011 Classic система сборки? ( expo build: [android | ios] ) Используете ли вы эту библиотеку в простом приложении React Native?
     
      const callback = downloadProgress => {
      const progress = downloadProgress.totalBytesWritten / downloadProgress.totalBytesExpectedToWrite;
      this.setState ({
        downloadProgress: прогресс,
      });
    };
    
    const downloadResumable = FileSystem.createDownloadResumable (
      'http://techslides.com/demos/sample-videos/small.mp4',
      FileSystem.documentDirectory + 'small.mp4',
      {},
      Перезвоните
    );
    
    пытаться {
      const {uri} = ждать downloadResumable.downloadAsync ();
      console.log («Загрузка завершена в», uri);
    } catch (e) {
      console.error (е);
    }
    
    пытаться {
      ждать downloadResumable.pauseAsync ();
      консоль.log ('Приостановленная операция загрузки, сохранение для будущего извлечения');
      AsyncStorage.setItem ('pausedDownload', JSON.stringify (downloadResumable.savable ()));
    } catch (e) {
      console.error (е);
    }
    
    пытаться {
      const {uri} = ждать downloadResumable.resumeAsync ();
      console.log («Загрузка завершена в», uri);
    } catch (e) {
      console.error (е);
    }
    
    
    const downloadSnapshotJson = ожидание AsyncStorage.getItem ('pausedDownload');
    const downloadSnapshot = JSON.parse (downloadSnapshotJson);
    const downloadResumable = новая файловая система.DownlowerSumable (
      downloadSnapshot.url,
      downloadSnapshot.fileUri,
      downloadSnapshot.options,
      Перезвоните,
      downloadSnapshot.resumeData
    );
    
    пытаться {
      const {uri} = ждать downloadResumable.resumeAsync ();
      console.log («Загрузка завершена в», uri);
    } catch (e) {
      console.error (е);
    }
      
     
      импорт * как файловая система из expo-file-system;
    
    const gifDir = FileSystem.cacheDirectory + 'giphy /';
    const gifFileUri = (gifId: string) => gifDir + `gif _ $ {gifId} _200.gif`;
    const gifUrl = (gifId: string) => `https://media1.giphy.com/media/$ {gifId} / 200.gif`;
    
    
    асинхронная функция sureDirExists () {
      const dirInfo = ждать FileSystem.getInfoAsync (gifDir);
      if (! dirInfo.exists) {
        console.log («Каталог Gif не существует, создается ...»);
        ждать FileSystem.makeDirectoryAsync (gifDir, {промежуточные: истина});
      }
    }
    
    
    экспортировать асинхронную функцию addMultipleGifs (gifIds: string []) {
      пытаться {
        ждать гарантироватьDirExists ();
    
        console.log ('Downloading', gifIds.length, 'gif files... ');
        ждите Promise.all (gifIds.map (id => FileSystem.downloadAsync (gifUrl (id), gifFileUri (id))));
      } catch (e) {
        console.error ("Не удалось загрузить файлы gif:", e);
      }
    }
    
    
    
    экспортировать асинхронную функцию getSingleGif (gifId: string) {
      ждать гарантироватьDirExists ();
    
      const fileUri = gifFileUri (gifId);
      const fileInfo = ждать FileSystem.getInfoAsync (fileUri);
    
      if (! fileInfo.exists) {
        console.log («Gif не кешируется локально. Загрузка ...»);
        ожидание FileSystem.downloadAsync (gifUrl (gifId), fileUri);
      }
    
      return fileUri;
    }
    
    
    экспорт асинхронной функции getGifContentUri (gifId: string) {
      вернуть FileSystem.getContentUriAsync (ожидание getSingleGif (gifId));
    }
    
    
    экспортировать асинхронную функцию deleteAllGifs () {
      console.log ('Удаление всех файлов GIF ...');
      ждать FileSystem.deleteAsync (gifDir);
    }
      
     
      импорт * как файловая система из expo-file-system;
      

    API принимает file: // URI, указывающих на локальные файлы на устройстве для идентификации файлов. Каждое приложение имеет доступ только для чтения и записи к расположениям в следующих каталогах:

    file: // URI, указывающий на каталог, в котором будут храниться пользовательские документы для этого приложения.Файлы, хранящиеся здесь, будут оставаться до тех пор, пока приложение не удалит их явным образом. Заканчивается на /. Примеры использования относятся к файлам, которые пользователь сохраняет и ожидает увидеть снова.

    file: // URI, указывающий на каталог, в котором будут храниться временные файлы, используемые этим приложением. Файлы, хранящиеся здесь, могут быть автоматически удалены системой при нехватке памяти. Примеры использования — это загруженные или сгенерированные файлы, которые необходимы приложению для одноразового использования.


    Так, например, URI для файла с именем 'myFile' под 'myDirectory' в каталоге пользовательских документов приложения будет FileSystem.documentDirectory + 'myDirectory / myFile' .

    API-интерфейсы Expo, которые создают файлы, обычно работают в этих каталогах. Сюда входят аудиозаписей, записей, фотографий с камеры, фотографий, результатов ImagePicker , баз данных SQLite, и результатов takeSnapShotAsync (), . Это позволяет использовать их с API FileSystem .

    Некоторые функции FileSystem могут читать (но не записывать) из других мест. В настоящее время файловой системы.getInfoAsync () и FileSystem.copyAsync () могут читать из URI, возвращаемых CameraRoll.getPhotos () из React Native.

    Эти значения могут использоваться для определения способа чтения / записи данных.

    • FileSystem.EncodingType.UTF8 — стандартный читаемый формат.

    • FileSystem.EncodingType.Base64 — Двоичное представление с основанием 64.

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

    • FileSystem.FileSystemSessionType.BACKGROUND — Использование этого режима означает, что сеанс загрузки / выгрузки на собственной стороне будет работать, даже если приложение переведено в фоновый режим. Если задача завершается, когда приложение находится в фоновом режиме, Promise будет либо решен немедленно, либо (если выполнение приложения уже остановлено) после того, как приложение снова будет перемещено на передний план.

      Примечание : Фоновый сеанс не завершится неудачно, если сервер или ваше соединение не работают.Напротив, он продолжает попытки, пока задача не будет выполнена успешно или не будет отменена вручную.

    • FileSystem.FileSystemSessionType.FOREGROUND — Использование этого режима означает, что сеанс загрузки / выгрузки на собственной стороне будет завершен, как только приложение станет неактивным (например, когда оно перейдет в фоновый режим). Повторный перевод приложения на передний план вызовет отклонение обещания.

    Простой сервер в Node.js, который может сохранять загруженные изображения на диск:

     
      const express = require ('express');
    константное приложение = экспресс ();
    const fs = require ('fs');
    const multer = require ('multer');
    const upload = multer ({dest: 'uploads /'});
    
    
    приложение.patch ('/ binary-upload', (req, res) => {
      req.pipe (fs.createWriteStream ('./ uploads / image' + Date.now () + '.png'));
      res.end ('ОК');
    });
    
    
    app.patch ('/ multipart-upload', upload.single ('photo'), (req, res) => {
      
      console.log (req.body);
      res.end ('ОК');
    });
    
    app.listen (3000, () => {
      console.log ('Работаем на порту 3000');
    });
      

    Получите информацию метаданных о файле, каталоге или внешнем контенте / ресурсе.

    Если в этом URI нет элемента, возвращается обещание, которое разрешается в {существует: ложь, isDirectory: ложь} .Else возвращает Promise, который разрешается в объект со следующими полями:

    • exists ( boolean ) true .

    • isDirectory ( boolean ) true , если это каталог, false , если это файл файл, выраженный в секундах с начала эпохи.

    • размер ( номер ) — Размер файла в байтах.При работе с источником из CameraRoll.getPhotos () , присутствует только в том случае, если параметр size был истинным.
    • uri ( строка ) — Файл : // URI, указывающий на файл. Это то же самое, что и входной параметр fileUri .

    • md5 ( string ) — Присутствует, если вариант md5 был правдой. Содержит хеш-код файла MD5.

    Прочитать все содержимое файла в виде строки.Двоичный файл будет возвращен в необработанном формате, вам нужно будет добавить данные : image / png; base64, , чтобы использовать его как Base64.

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

    Записать все содержимое файла в виде строки.

    • fileUri ( строка ) file: // или SAF URI для файла или каталога. Примечание: когда вы используете SAF URI, файл должен существовать. Вы не можете создать новый файл.
    • содержимое ( строка ) — Строка для замены содержимого файла.

    • options ( object ) — Необязательные реквизиты, которые определяют, как должен быть записан файл.

      • кодировка ( строка ) — Формат кодировки, используемый при записи файла. Параметры: FileSystem.EncodingType.UTF8 , FileSystem.EncodingType.Base64 . По умолчанию FileSystem.EncodingType.UTF8

    Удалить файл или каталог. Если URI указывает на каталог, каталог и все его содержимое рекурсивно удаляются.

    Переместите файл или каталог в новое место.

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

    Создайте новый пустой каталог.

    Перечислить содержимое каталога.

    • fileUri ( строка ) file: // URI для каталога.

    Обещание, которое преобразуется в массив строк, каждая из которых содержит имя файла или каталога, содержащегося в каталоге по адресу fileUri .

    Загрузите содержимое удаленного URI в файл в файловой системе приложения. Каталог для локального файла uri должен существовать до вызова этой функции.

     
      FileSystem.downloadAsync (
      'http://techslides.com/demos/sample-videos/small.mp4',
      FileSystem.documentDirectory + 'small.mp4'
    )
      .then (({uri}) => {
        console.log («Загрузка завершена в», uri);
      })
      .catch (error => {
        console.error (ошибка);
      });
      
    • url ( строка ) — удаленный URI для загрузки.

    • fileUri ( строка ) — Локальный URI файла для загрузки.Если по этому URI файла нет, создается новый. Если по этому URI есть файл, его содержимое заменяется. Каталог для файла должен существовать.

    • параметры ( объект ) — карта параметров:

      • заголовки ( объект ) — объект, содержащий все поля заголовка HTTP и их значения для сетевого запроса загрузки. Ключи и значения объекта — это имена и значения заголовка соответственно.

      • md5 ( boolean ) — Если true , включить хеш MD5 файла в возвращаемый объект. false по умолчанию. Предоставляется для удобства, так как обычно проверяют целостность файла сразу после загрузки.

      • sessionType ( FileSystemSessionType ) — (только iOS) Тип сеанса. Определяет, можно ли обрабатывать задачи в фоновом режиме. На Android сеансы всегда работают в фоновом режиме, и вы не можете это изменить. По умолчанию FileSystemSessionType.BACKGROUND .

    Возвращает обещание, которое разрешается в объект со следующими полями:

    • uri ( строка ) — Файл : // URI, указывающий на файл.Это то же самое, что и входной параметр fileUri .

    • status ( номер ) — код состояния HTTP-ответа для сетевого запроса загрузки.

    • заголовков ( объект ) — объект, содержащий все поля заголовка ответа HTTP и их значения для сетевого запроса загрузки. Ключи и значения объекта — это имена и значения заголовка соответственно.

    • md5 ( string ) — Присутствует, если вариант md5 был правдой.Содержит хеш-код файла MD5.

    Загрузите содержимое файла, на который указывает fileUri , на удаленный URL.

    • url ( строка ) — удаленный URL, на который будет отправлен файл.

    • fileUri ( строка ) — Локальный URI файла для отправки. Файл должен существовать.

    • параметры ( объект ) — карта параметров:

      • заголовки ( объект ) — объект, содержащий все поля заголовка HTTP и их значения для сетевого запроса загрузки.Ключи и значения объекта — это имена и значения заголовка соответственно.

      • httpMethod ( String ) — Метод запроса. Принимает значения: POST, PUT, PATCH. По умолчанию «POST».

      • sessionType ( FileSystemSessionType ) — (только iOS) Тип сеанса. Определяет, можно ли обрабатывать задачи в фоновом режиме. На Android сеансы всегда работают в фоновом режиме, и вы не можете это изменить. По умолчанию FileSystemSessionType.ИСТОРИЯ ВОПРОСА .

      • uploadType ( FileSystemUploadType ) — Тип загрузки определяет, как файл будет отправлен на сервер. По умолчанию FileSystemUploadType.BINARY_CONTENT .

      Если uploadType равен FileSystemUploadType.MULTIPART , доступны дополнительные параметры:

      • fieldName ( строка ) — Имя поля, в котором будет храниться загруженный файл.По умолчанию используется имя файла без расширения.

      • mimeType ( строка ) — MIME-тип предоставленного файла. Если не указан, модуль попытается угадать его на основе расширения.

      • параметров ( Record ) — Дополнительные свойства формы. Они будут расположены в теле запроса.

    Возвращает обещание, которое разрешается в объект со следующими полями:

    • статус ( номер ) — код состояния HTTP-ответа для сетевого запроса загрузки.

    • заголовков ( объект ) — объект, содержащий все поля заголовка ответа HTTP и их значения для сетевого запроса загрузки. Ключи и значения объекта — это имена и значения заголовка соответственно.

    • тело ( строка ) — тело ответа сервера.

    Создайте объект DownloadResumable , который может запускать, приостанавливать и возобновлять загрузку содержимого по удаленному URI в файл в файловой системе приложения.Обратите внимание: вам необходимо вызвать downloadAsync () в экземпляре DownloadResumable , чтобы начать загрузку. У объекта DownloadResumable есть обратный вызов, который обеспечивает обновления хода загрузки. Загрузки можно возобновить после перезапуска приложения, используя AsyncStorage для хранения объекта DownloadResumable.savable () для последующего извлечения. Сохраняемый объект содержит аргументы, необходимые для инициализации нового объекта DownloadResumable для возобновления загрузки после перезапуска приложения.Каталог для локального файла uri должен существовать до вызова этой функции.

    • url ( строка ) — удаленный URI для загрузки.

    • fileUri ( строка ) — Локальный URI файла для загрузки. Если по этому URI файла нет, создается новый. Если по этому URI есть файл, его содержимое заменяется. Каталог для файла должен существовать.

    • options ( object ) — Карта параметров:

      • md5 ( boolean ) — Если true , включить MD5-хэш файла в возвращаемый объект. false по умолчанию. Предоставляется для удобства, так как обычно проверяют целостность файла сразу после загрузки.

      • заголовков ( объект ) — объект, содержащий любые дополнительные поля заголовка HTTP, необходимые для запроса. Ключи и значения объекта — это имена и значения заголовка соответственно.

    • обратный вызов ( функция ) — Эта функция вызывается при каждой записи данных для обновления хода загрузки.Передается объект со следующими полями:

      • totalBytesWritten ( число ) — общее количество байтов, записанных операцией загрузки.
      • totalBytesExpectedToWrite ( число ) — общее количество байтов, которые, как ожидается, будут записаны операцией загрузки. Значение -1 означает, что сервер не вернул заголовок Content-Length и общий размер неизвестен. Без этого заголовка вы не сможете отслеживать прогресс загрузки.

      Примечание : Когда приложение было перемещено в фоновый режим, этот обратный вызов не будет запущен, пока он не будет перемещен на передний план.

    • resumeData ( string ) — Строка, которая позволяет API возобновить приостановленную загрузку. Это устанавливается для объекта DownloadResumable автоматически, когда загрузка приостанавливается. При инициализации нового DownloadResumable это должно быть null .

    Загрузите содержимое удаленного URI в файл в файловой системе приложения.

    Возвращает обещание, которое разрешается в объект со следующими полями:

    • uri ( строка ) — Файл : // URI, указывающий на файл. Это то же самое, что и входной параметр fileUri .

    • status ( номер ) — код состояния HTTP для сетевого запроса загрузки.

    • заголовков ( объект ) — объект, содержащий все поля заголовка HTTP и их значения для сетевого запроса загрузки.Ключи и значения объекта — это имена и значения заголовка соответственно.

    • md5 ( string ) — Присутствует, если вариант md5 был правдой. Содержит хеш-код файла MD5.

    Приостановить текущую операцию загрузки. resumeData добавляется к объекту DownloadResumable после успешной операции приостановки. Возвращает объект, который можно сохранить с AsyncStorage для будущего извлечения (тот же объект, который возвращается при вызове FileSystem.СкачатьResumable.savable () . См. Пример ниже.

    Возвращает обещание, которое разрешается в объект со следующими полями:

    • url ( строка ) — удаленный URI для загрузки.

    • fileUri ( строка ) — Локальный URI файла для загрузки. Если по этому URI файла нет, создается новый. Если по этому URI есть файл, его содержимое заменяется.

    • options ( object ) — Карта параметров:

      • md5 ( boolean ) — Если true , включить MD5-хэш файла в возвращаемый объект. false по умолчанию. Предоставляется для удобства, так как обычно проверяют целостность файла сразу после загрузки.
    • resumeData ( string ) — Строка, которая позволяет API возобновить приостановленную загрузку.

    Возобновить приостановленную операцию загрузки.

    Возвращает обещание, которое разрешается в объект со следующими полями:

    • uri ( строка ) — Файл : // URI, указывающий на файл.Это то же самое, что и входной параметр fileUri .

    • status ( номер ) — код состояния HTTP для сетевого запроса загрузки.

    • заголовков ( объект ) — объект, содержащий все поля заголовка HTTP и их значения для сетевого запроса загрузки. Ключи и значения объекта — это имена и значения заголовка соответственно.

    • md5 ( string ) — Присутствует, если вариант md5 был правдой.Содержит хеш-код файла MD5.

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

    Возвращает объект со следующими полями:

    • url ( строка ) — удаленный URI для загрузки.

    • fileUri ( строка ) — Локальный URI файла для загрузки. Если по этому URI файла нет, создается новый.Если по этому URI есть файл, его содержимое заменяется.

    • options ( object ) — Карта параметров:

      • md5 ( boolean ) — Если true , включить MD5-хэш файла в возвращаемый объект. false по умолчанию. Предоставляется для удобства, так как обычно проверяют целостность файла сразу после загрузки.
    • resumeData ( string ) — Строка, которая позволяет API возобновить приостановленную загрузку.

    Возьмите file: // URI и преобразуйте его в URI контента ( content: // ), чтобы к нему могли получить доступ другие приложения за пределами Expo.

     
      FileSystem.getContentUriAsync (uri) .then (cUri => {
      console.log (cUri);
      IntentLauncher.startActivityAsync ('android.intent.action.VIEW', {
        данные: cUri,
        флаги: 1,
      });
    });
      
    • fileUri ( строка ) — Локальный URI файла.Если по этому URI нет файла, будет сгенерировано исключение.

    Возвращает обещание, которое преобразуется в строку , содержащую content: // URI, указывающую на файл. URI такой же, как входной параметр fileUri , но в другом формате.

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

     
      Файловая система.getFreeDiskStorageAsync (). then (freeDiskStorage => {
      
      
    });
      
    Возвращает обещание, которое разрешает количество байтов, доступных на внутреннем диске, или JavaScript
    MAX_SAFE_INTEGER , если емкость больше 2 53 — 1 байт.

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

     
      Файловая система.getTotalDiskCapacityAsync (). then (totalDiskCapacity => {
      
      
    });
      
    Возвращает Promise, которое разрешается в число, которое указывает общую емкость внутреннего дискового хранилища в байтах, или JavaScript
    MAX_SAFE_INTEGER , если емкость больше 2 53 — 1 байт. StorageAccessFramework — это пространство имен внутри модуля expo-file-system , который инкапсулирует все функции, которые могут использоваться с URI SAF. Вы можете узнать больше о SAF в документации Android.

    SAF URI — это URI, совместимый с Storage Access Framework. Он должен выглядеть так: content: //com.android.externalstorage.* . Самый простой способ получить такой URI — использовать метод requestDirectoryPermissionsAsync .

     
      импорт {StorageAccessFramework} из файловой системы expo;
      

     
      импорт {StorageAccessFramework} из файловой системы expo;
    
    
    const permissions = ждать StorageAccessFramework.requestDirectoryPermissionsAsync ();
    
    if (permissions.granted) {
      
      const uri = permissions.directoryUri;
    
      
      const files = ждать StorageAccessFramework.readDirectoryAsync (uri);
      alert (`Файлы внутри $ {uri}: \ n \ n $ {JSON.stringify (files)}`);
    }
      

     
      импорт * как MediaLibrary из 'expo-media-library';
    импортировать * как файловую систему из 'expo-file-system';
    const {StorageAccessFramework} = файловая система;
    
    асинхронная функция migrateAlbum (albumName: string) {
      
      const albumUri = StorageAccessFramework.getUriForDirectoryInRoot (имя_альбома);
    
      
      const permissions = ждать StorageAccessFramework.requestDirectoryPermissionsAsync (albumUri);
      if (! permissions.granted) {
        возвращение;
      }
    
      const allowedUri = permissions.directoryUri;
      
      if (! allowedUri.includes (albumName)) {
        возвращение;
      }
    
      const mediaLibraryPermissions = ждать MediaLibrary.requestPermissionsAsync ();
      if (! mediaLibraryPermissions.granted) {
        возвращение;
      }
    
      
      await StorageAccessFramework.moveAsync ({
        от: allowedUri,
        кому: FileSystem.documentDirectory !,
      });
    
      const outputDir = FileSystem.documentDirectory! + albumName;
      const migratedFiles = ждать FileSystem.readDirectoryAsync (outputDir);
    
      
      const [newAlbumCreator, ... assets] = await Promise.all (
        migratedFiles.map > (
          async fileName => ждать MediaLibrary.createAssetAsync (outputDir + '/' + fileName)
        )
      );
    
      
      if (! newAlbumCreator) {
        возвращение;
      }
    
      
      const newAlbum = ожидание MediaLibrary.createAlbumAsync (имя альбома, newAlbumCreator, false);
      если (assets.длина) {
        ожидание MediaLibrary.addAssetsToAlbumAsync (активы, newAlbum, false);
      }
    }
      

    Получает URI SAF, указывающий на папку в корневом каталоге Android. Вы можете использовать эту функцию, чтобы получить URI для

    StorageAccessFramework.requestDirectoryPermissionsAsync при попытке перенести альбом. В этом случае имя альбома — это имя папки.
    • имя папки ( строка ) — Имя папки, которая находится в корневом каталоге Android.

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

    • initialFileUrl ( строка ) Необязательно . SAF URI каталога, который средство выбора файлов должно отображать при первой загрузке. Если URI неверен или указывает на несуществующую папку, он игнорируется. Доступно только на Android R и выше .

    Возвращает обещание, которое разрешается в объект со следующими полями:

    Перечислить содержимое каталога.

    • dirUri ( строка ) — SAF URI для каталога.
    Обещание, которое преобразуется в массив строк, каждая из которых содержит полный URI SAF файла или каталога, содержащегося в каталоге по адресу
    fileUri .

    Создает новый пустой каталог.

    Обещание, которое преобразуется в URI SAF для созданного каталога.

    Создает новый пустой файл.

    • parentUri ( строка ) — URI SAF для родительского каталога.
    • fileName ( string ) — Имя нового файла без расширения .

    • mimeType ( строка ) — MIME нового файла.

    Обещание, которое преобразуется в URI SAF для созданного файла.

    В этой таблице вы можете увидеть, какой тип URI может обрабатываться каждым методом.Например, если у вас есть URI, который начинается с content: // , вы не можете использовать FileSystem.readAsStringAsync () , но можете использовать FileSystem.copyAsync () , который поддерживает эту схему.

    Имя метода Android iOS
    getInfoAsync файл: // ,
    content: // ,
    схема *
    file: // ,
    ph: // ,
    assets-library: //
    readAsStringAsync file: // , asset : // ,
    SAF URI
    файл: //
    writeAsStringAsync файл: // ,
    SAF URI
    файл: deleteAsync файл: // ,
    SAF URI
    файл: //
    moveAsync Источник:
    файл: // , 077 SAF URI нация:
    файл: //

    Источник:
    файл: //

    Назначение:
    файл: //

    copyAsync Источник:
    файл:
    ,
    content: // ,
    asset: // ,
    SAF URI,
    без схемы *

    Назначение:
    файл: //

    Источник:
    файл: // ,
    ph: // ,
    assets-library: //

    Назначение:
    файл: //

    makeDirectoryAsync файл: // 9228 файл: // 9228 файл //
    readDirectoryAsync файл: // файл: //
    downloadAsync : //

    Место назначения:
    файл: //

    Источник:
    http: // ,
    https: //

    Место назначения:
    файл: //

    c uploadAs Источник:
    файл: //

    Назначение:
    http: //
    https: //

    Источник:
    файл: //

    Назначение:
    http: //
    https: //

    createDownloadResumable Источник:
    http: // ,
    https: //

    Место назначения:
    файл: //

    22703 http: // ,
    https: //

    Назначение:
    файл: //

    * На Android нет схемы по умолчанию используется для связанного ресурса.

    Следующие разрешения добавляются автоматически через файл AndroidManifest.xml этой библиотеки.

    Разрешения не требуются .

    Глава 2. Структура файловой системы и обслуживание Red Hat Enterprise Linux 6

    2.1. Обзор стандарта иерархии файловой системы (FHS)

    Red Hat Enterprise Linux использует структуру файловой системы стандарта Filesystem Hierarchy Standard ( FHS ), которая определяет имена, расположения и разрешения для многих типов файлов и каталогов.

    Документ FHS является авторитетной ссылкой на любую FHS-совместимую файловую систему, но стандарт оставляет многие области неопределенными или расширяемыми. В этом разделе представлен обзор стандарта и описание частей файловой системы, не охваченных стандартом.

    Указанные здесь каталоги и файлы представляют собой небольшое подмножество тех, которые указаны в документе FHS. Для получения наиболее полной информации см. Последнюю версию документации FHS по адресу http://www.pathname.com/fhs/.

    2.1.1.1. Сбор информации о файловой системе

    Команда df сообщает об использовании дискового пространства системой. Его результат выглядит примерно так:

    Пример 2.1. df вывод команды

    Файловая система Используется 1K блоков Доступно Использование% Установлено на
    / dev / mapper / VolGroup00-LogVol00
                           11675568 6272120 4810348 57% / / устройство / sda1
    100691 9281 86211 10% / загрузка
    нет 322856 0 322856 0% / dev / shm
     

    По умолчанию df показывает размер раздела в блоках по 1 килобайту и объем используемого и доступного дискового пространства в килобайтах.Чтобы просмотреть информацию в мегабайтах и ​​гигабайтах, используйте команду df -h . Аргумент -h означает «удобочитаемый» формат. Вывод для df -h выглядит примерно так:

    Пример 2.2. df -h вывод команды

    Используемый размер файловой системы Доступность% Установлено на
    / dev / mapper / VolGroup00-LogVol00
                            12 ГБ 6,0 ГБ 4,6 ГБ 57% / / dev / sda1
    99 млн 9,1 млн 85 млн 10% / загрузка
    нет 316M 0 316M 0% / dev / shm
     

    В приведенных выше примерах смонтированный раздел / dev / shm представляет файловую систему виртуальной памяти системы.

    Команда du отображает приблизительный объем пространства, используемого файлами в каталоге, показывая использование диска в каждом подкаталоге. Последняя строка вывода du показывает общее использование диска каталогом; чтобы увидеть только общее использование диска каталогом в удобочитаемом формате, используйте du -hs . Для получения дополнительных сведений см. man du .

    Чтобы просмотреть разделы системы и использование дискового пространства в графическом формате, используйте Gnome System Monitor , щелкнув → → или используя команду gnome-system-monitor .Выберите вкладку Файловые системы , чтобы просмотреть разделы системы. На рисунке ниже показана вкладка Файловые системы .

    Рисунок 2.1. Вкладка "Файловые системы монитора системы GNOME"

    2.1.1.2. Каталог
    / boot /

    Каталог / boot / содержит статические файлы, необходимые для загрузки системы, например, ядро ​​Linux. Эти файлы необходимы для правильной загрузки системы.

    Не удаляйте каталог / boot / .Это приведет к невозможности загрузки системы.

    2.1.1.3. Каталог
    / dev /

    Каталог / dev / содержит узлы устройств, которые представляют следующие типы устройств:

    Эти узлы устройств необходимы для правильной работы системы. Демон udevd создает и удаляет узлы устройств в / dev / по мере необходимости.

    Устройства в каталоге и подкаталогах / dev / определяются как символ (обеспечивающий только последовательный поток ввода и вывода, например, мышь или клавиатура) или как блок (доступный случайным образом, например, жесткий диск или флоппи-дисковод).Если установлен GNOME или KDE, некоторые устройства хранения автоматически обнаруживаются при подключении (например, через USB) или вставке (например, дисковод компакт-дисков или DVD-дисков), и появляется всплывающее окно с содержимым.

    Таблица 2.1. Примеры общих файлов в каталоге / dev

    Файл Описание
    / dev / hda Главное устройство на основном канале IDE.
    / dev / hdb Подчиненное устройство на первичном канале IDE.
    / dev / tty0 Первая виртуальная консоль.
    / dev / tty1 Вторая виртуальная консоль.
    / dev / sda Первое устройство на основном канале SCSI или SATA.
    / dev / lp0 Первый параллельный порт.
    / dev / ttyS0 Последовательный порт.

    2.1.1.4. Справочник
    / etc /

    Каталог / etc / зарезервирован для файлов конфигурации, локальных для машины. Он не должен содержать двоичных файлов; любые двоичные файлы следует переместить в / bin / или / sbin / .

    Например, в каталоге / etc / skel / хранятся «скелетные» пользовательские файлы, которые используются для заполнения домашнего каталога при первом создании пользователя. Приложения также хранят свои файлы конфигурации в этом каталоге и могут ссылаться на них при запуске.Файл / etc / exports определяет, какие файловые системы экспортируют на удаленные хосты.

    2.1.1.5. Каталог
    / lib /

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

    2.1.1.7. Справочник
    / mnt /

    Каталог / mnt / зарезервирован для временно смонтированных файловых систем, таких как смонтированные файловые системы NFS.Для всех съемных носителей используйте каталог / media / . Автоматически обнаруженный съемный носитель будет смонтирован в каталоге / media .

    Каталог / mnt не должен использоваться программами установки.

    2.1.1.8. Справочник
    / opt /

    Каталог / opt / обычно зарезервирован для программного обеспечения и дополнительных пакетов, которые не являются частью установки по умолчанию. Пакет, который устанавливается в / opt / , создает каталог с его именем, например / opt / packagename /.В большинстве случаев такие пакеты следуют предсказуемой структуре подкаталогов; большинство из них хранят свои двоичные файлы в / opt / packagename / bin / , а их страницы man - в / opt / packagename / man / .

    2.1.1.9. Справочник
    / proc /

    Каталог / proc / содержит специальные файлы, которые либо извлекают информацию из ядра, либо отправляют ему информацию. Примеры такой информации включают системную память, информацию о процессоре и конфигурацию оборудования.Дополнительные сведения о / proc / см. В Раздел 2.3, «Виртуальная файловая система / proc».

    2.1.1.10. Справочник
    / sbin /

    В каталоге / sbin / хранятся двоичные файлы, необходимые для загрузки, восстановления, восстановления или исправления системы. Для использования двоичных файлов в / sbin / требуются права root. Кроме того, / sbin / содержит двоичные файлы, используемые системой до того, как будет смонтирован каталог / usr / ; любые системные утилиты, используемые после установки / usr / , обычно помещаются в / usr / sbin / .

    Как минимум, следующие программы должны храниться в / sbin / :

    • arp

    • часы

    • остановка

    • инициализация

    • fsck. *

    • грн

    • ifconfig

    • мингетти

    • мкфс.*

    • мкксвап

    • перезагрузка

    • маршрут

    • отключение

    • подкачка

    • свопон

    2.1.1.11. Справочник
    / srv /

    Каталог / srv / содержит данные для конкретного сайта, обслуживаемые системой Red Hat Enterprise Linux.Этот каталог предоставляет пользователям расположение файлов данных для конкретной службы, такой как FTP, WWW или CVS. Данные, относящиеся только к определенному пользователю, должны находиться в каталоге / home / .

    При установке httpd по умолчанию используется / var / www / html для обслуживаемого контента.

    2.1.1.12. Справочник
    / sys /

    Каталог / sys / использует новую виртуальную файловую систему sysfs , специфичную для 2.6 ядер. Благодаря усиленной поддержке аппаратных устройств с возможностью горячей замены в ядре 2.6, каталог / sys / содержит информацию, аналогичную той, что содержится в / proc / , но отображает иерархическое представление информации об устройствах, относящихся к устройствам с возможностью горячей замены.

    2.1.1.13. Справочник
    / usr /

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

    / usr / bin

    Этот каталог используется для двоичных файлов.

    / usr и др.

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

    / usr / games

    В этом каталоге хранятся игры.

    / usr / include

    Этот каталог используется для файлов заголовков C.

    / usr / kerberos

    Этот каталог используется для двоичных файлов и файлов, связанных с Kerberos.

    / usr / lib

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

    / usr / lib64

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

    / usr / libexec

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

    / usr / sbin

    В этом каталоге хранятся двоичные файлы системного администрирования, не принадлежащие к / sbin / .

    / usr / акция

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

    / usr / src

    В этом каталоге хранится исходный код.

    / usr / tmp связано с / var / tmp

    В этом каталоге хранятся временные файлы.

    Каталог / usr / также должен содержать подкаталог / local / . Согласно FHS, этот подкаталог используется системным администратором при локальной установке программного обеспечения и должен быть защищен от перезаписи во время обновления системы.Каталог / usr / local имеет структуру, аналогичную / usr / , и содержит следующие подкаталоги:

    • / usr / local / bin

    • / usr / local / и т. Д.

    • / usr / local / games

    • / usr / local / include

    • / usr / местные / библиотека

    • / usr / местные / libexec

    • / usr / local / sbin

    • / usr / local / share

    • / usr / local / src

    Использование Red Hat Enterprise Linux / usr / local / немного отличается от FHS.FHS заявляет, что / usr / local / следует использовать для хранения программного обеспечения, которое должно оставаться защищенным от обновлений системного программного обеспечения. Поскольку диспетчер пакетов RPM может безопасно выполнять обновления программного обеспечения, нет необходимости защищать файлы, сохраняя их в / usr / local / .

    Вместо этого Red Hat Enterprise Linux использует / usr / local / для программного обеспечения, локального для машины. Например, если каталог / usr / смонтирован как доступный только для чтения общий ресурс NFS с удаленного хоста, все еще можно установить пакет или программу в каталог / usr / local / .

    2.1.1.14. Справочник
    / var /

    Поскольку FHS требует, чтобы Linux монтировал / usr / как доступный только для чтения, любые программы, которые записывают файлы журнала или нуждаются в каталогах spool / или lock / , должны записывать их в каталог / var / . FHS утверждает, что / var / предназначен для переменных данных, которые включают в себя каталоги и файлы спула, данные журнала, временные и временные файлы.

    Ниже приведены некоторые из каталогов, находящихся в каталоге / var / , в зависимости от того, что установлено в системе:

    Файлы системного журнала, такие как сообщений и lastlog , находятся в каталоге / var / log / .Каталог / var / lib / rpm / содержит системные базы данных RPM. Файлы блокировки находятся в каталоге / var / lock / , обычно в каталогах программы, использующей файл. В каталоге / var / spool / есть подкаталоги, в которых хранятся файлы данных для некоторых программ. Эти подкаталоги могут включать:

    • / var / катушка / at /

    • / вар / катушка / clientmqueue /

    • / var / катушка / cron /

    • / var / катушка / чашки /

    • / вар / катушка / exim /

    • / var / катушка / lpd /

    • / var / spool / mail /

    • / вар / катушка / почтальон /

    • / var / катушка / mqueue /

    • / var / spool / news /

    • / var / spool / postfix /

    • / вар / катушка / переупаковка /

    • / var / катушка / rwho /

    • / вар / катушка / самба /

    • / вар / катушка / кальмар /

    • / var / spool / squirrelmail /

    • / вар / катушка / up2date /

    • / var / катушка / uucp /

    • / var / spool / uucppublic /

    • / вар / катушка / vbox /

    Управление файлами - Руководство пользователя TACC Frontera

    Управление файлами на Frontera

    Frontera монтирует три файловые системы Lustre, общие для всех узлов: домашнюю, рабочую и временную файловую систему.Frontera также содержит четвертую файловую систему, FLASH , поддерживающую приложения с очень высокой пропускной способностью или требованиями IOPS.

    Механизмы запуска

    Frontera определяют соответствующие переменные среды на уровне учетной записи $ HOME , $ SCRATCH и $ WORK , которые хранят пути к каталогам, принадлежащим вам в каждой из этих файловых систем. Обратитесь к приведенной ниже таблице Frontera File Systems, чтобы узнать об основных характеристиках этих файловых систем, и в разделах Good Citizenship, чтобы получить рекомендации по этикету файловой системы.

    Таблица 2. Файловые системы Frontera

    Файловая система Квота Основные характеристики
    $ ДОМ 25 ГБ, 400 000 файлов Не предназначен для параллельных или высокоинтенсивных операций с файлами .
    Регулярное резервное копирование.
    По умолчанию: 1 полоса, размер полосы 1 МБ.
    Не продувается.
    $ РАБОТА 1 ТБ, 3 000 000 файлов во всех системах TACC,
    независимо от того, где в файловой системе находятся файлы.
    Не предназначен для высокоинтенсивных операций с файлами или заданий с очень большими файлами.
    В глобальной общей файловой системе, которая смонтирована в большинстве систем TACC.
    По умолчанию: 1 полоса, размер полосы 1 МБ.
    Резервная копия не сохранена.
    Не продувается.
    $ Царапина без квоты Общая емкость 44 ПБ.
    По умолчанию: 1 полоса, размер полосы 1 МБ.
    Нет резервной копии.
    Разложен на три отдельные файловые системы: scratch2 , scratch3 и scratch4 , описанные ниже.
    Файлы подлежат очистке, если время доступа * превышает 10 дней .

    Все новые проекты назначаются / scratch2 в качестве файловой системы по умолчанию $ SCRATCH . После запуска на Frontera персонал TACC может переназначить пользователей и проекты на / scratch3 или / scratch4 в зависимости от ресурсов, необходимых для их рабочего процесса. Файловая система / scratch4 использует вдвое больше OST, предлагая вдвое большую доступную пропускную способность ввода-вывода: / scratch2 и / scratch3 .Три файловые системы Frontera $ SCRATCH описаны ниже:

    Таблица 2а. Временные файловые системы

    Файловая система Характеристики Назначение
    / царапина2 Размер: 10,6 ПБ
    OST: 16
    Пропускная способность: 60 ГБ / с
    Временная файловая система по умолчанию.
    / царапина 3 Размер: 10,6 ПБ
    OST: 16
    Пропускная способность: 60 ГБ / с
    Предназначен для рабочих процессов с интенсивными операциями ввода-вывода.
    / царапина 4 Размер: 21,2 ПБ
    OST: 32
    Пропускная способность: 120 ГБ / с
    Предназначен для рабочих процессов с крупномасштабными параллельными операциями ввода-вывода.

    Политика очистки от царапин

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

    * Операционная система обновляет время доступа к файлу, когда этот файл изменяется при входе в систему или на вычислительном узле, или при каждом чтении этого файла. Чтение или выполнение файла / скрипта обновит время доступа. Используйте команду « ls -ul » для просмотра времени доступа.

    Навигация по общим файловым системам

    Файловые системы / home и / scratch компании Frontera смонтированы только на Frontera, но рабочая файловая система, смонтированная на Frontera, является глобальной общей файловой системой, размещенной на Stockyard.Stockyard - это та же рабочая файловая система, которая в настоящее время доступна на Stampede2, Lonestar5 и некоторых других ресурсах TACC.

    Переменная среды $ STOCKYARD указывает на каталог верхнего уровня, которым вы владеете в глобальной общей файловой системе. Определение переменной среды $ STOCKYARD , конечно, зависит от учетной записи, но вы увидите одно и то же значение во всех системах TACC, которые предоставляют доступ к глобальной общей файловой системе. Этот каталог - отличное место для хранения файлов, к которым вы хотите регулярно получать доступ из нескольких ресурсов TACC.

    Переменная среды $ WORK , зависящая от вашей учетной записи, варьируется от системы к системе и является подкаталогом $ STOCKYARD (рисунок 3). Имя подкаталога соответствует связанному ресурсу TACC. Переменная среды $ WORK на Frontera указывает на подкаталог $ STOCKYARD / stampede2 , удобное место для файлов, которые вы используете, и заданий, запускаемых на Frontera. Однако помните, что все подкаталоги, содержащиеся в вашем каталоге $ STOCKYARD , доступны вам из любой системы, которая монтирует файловую систему.Если у вас есть учетные записи как на Frontera, так и на Stampede2, например, каталог $ STOCKYARD / frontera доступен из вашей учетной записи Stampede2, а $ STOCKYARD / stampede2 доступен из вашей учетной записи Frontera.

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

    См. Пример для фиктивного пользователя bjones на рисунке ниже.Все каталоги доступны из всех систем, однако данный подкаталог (например, lonestar5 , stampede2 ) будет существовать только , если у вас есть выделение в этой системе.

    Рис. 3. Файловая система склада

    Рисунок 3. Каталоги на уровне учетной записи в рабочей файловой системе (глобальная общая файловая система, размещенная на Stockyard). Пример для фиктивного пользователя bjones . Все каталоги доступны из всех систем. Подкаталоги (e.грамм. lonestar5 , stampede2 ) существуют, только если у вас есть выделения в связанной системе.

    Обратите внимание, что подкаталоги для конкретных ресурсов $ STOCKYARD - это просто удобный способ управления файлами, относящимися к конкретным ресурсам. У вас есть доступ к любому такому подкаталогу из любых ресурсов TACC. Если вы вошли в систему Frontera, например, выполнение псевдонима cdw (эквивалент cd $ WORK ) приведет вас в подкаталог для конкретного ресурса $ STOCKYARD / frontera .Но вы можете получить доступ к этому каталогу и из других систем TACC, выполнив cd $ STOCKYARD / frontera . Эти команды позволяют обмениваться файлами в системах TACC. Фактически, несколько удобных псевдонимов на уровне учетной записи упрощают навигацию по принадлежащим вам каталогам в общих файловых системах:

    Таблица 3. Встроенные псевдонимы уровня учетной записи

    Псевдоним Команда
    CD или CD CD $ HOME
    CDW cd $ РАБОТА
    CD cd $ SCRATCH
    cdy или cdg cd $ СКЛАД

    Большие файлы с полосами

    Файловые системы Lustre

    Frontera выглядят и действуют как единый логический жесткий диск, но на самом деле представляют собой сложные интегрированные системы, включающие множество физических дисков.Lustre может распределять больших файлов по нескольким физическим дискам, обеспечивая высокую производительность, необходимую для обслуживания запросов ввода-вывода от сотен пользователей на тысячах узлов. Цели объектного хранилища (OST) управляют вращающимися дисками файловой системы: например, файл с 16 полосами распределяется по 16 OST. Один назначенный сервер метаданных (MDS) отслеживает OST, назначенные файлу, а также описательные данные файла.

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

    В то время как файловая система $ WORK содержит сотни файлов OST, в царапающей системе Frontera их гораздо меньше. Таким образом, рекомендуемое количество полос при передаче или создании больших файлов зависит от места назначения файла.

    • Переход на $ WORK : Хорошее практическое правило - разрешить хотя бы одну полосу на каждые 100 ГБ в файле. Например, чтобы установить количество полос по умолчанию для текущего каталога равным 30 (вероятное количество полос для каталога, получающего файл размером около 3 ТБ), выполните:

       $  lfs setstripe -c 30 $ PWD  
    • Перенос в файловую систему Frontera $ SCRATCH : практическое правило все еще применяется, но ограничьте количество полос до 16, поскольку файловая система Frontera $ SCRATCH обслуживается гораздо меньшим количеством файлов OST.

       $  lfs setstripe -c 16 $ PWD  

    Обратите внимание, что команда « lfs setstripe » всегда устанавливает как количество полос, так и размер полосы, даже если вы явно указываете только одно или другое. Поскольку в приведенном выше примере размер полосы явно не указан, команда установит размер полосы в каталоге равным системному значению Frontera по умолчанию (1 МБ). Как правило, нет необходимости настраивать размер полосы при создании или передаче файлов.

    Помните, что изменить чередование уже существующего файла невозможно.Более того, команда « mv » не влияет на чередование файлов, если исходный и целевой каталоги находятся в одной файловой системе. Конечно, вы можете использовать команду « cp » для создания второй копии с другим чередованием; для этого скопируйте файл в каталог с заданными параметрами полосы.

    Вы можете проверить количество полос в файле с помощью команды « lfs getstripe »:

     $  lfs getstripe  myfile   

    Передача файлов с помощью Globus

    Frontera имеет две конечные точки Globus.Одна конечная точка использует аутентификацию XSede myproxy, а другая - аутентификацию CILogon myproxy. См. Использование Globus в TACC для получения подробной информации.

    Передача файлов с помощью

    scp

    Вы можете передавать файлы между Frontera и системами на базе Linux, используя scp или rsync . И scp , и rsync доступны в приложении Mac Terminal. Клиенты Windows SSH обычно включают в себя возможности передачи файлов на основе scp .

    Утилита Linux scp (безопасное копирование) является компонентом пакета OpenSSH. Предполагая, что ваше имя пользователя Frontera - bjones , простая передача scp , которая перемещает файл с именем myfile из вашей локальной системы Linux в Frontera $ HOME , будет выглядеть так:

     localhost $  scp ./myfile [email protected]: # обратите внимание на двоеточие после сетевого адреса  

    Вы можете использовать подстановочные знаки, но вам нужно быть осторожным с тем, когда и где вы хотите, чтобы подстановочные знаки происходили.Например, чтобы отправить все файлы, заканчивающиеся на .txt , из текущего каталога на вашем локальном компьютере в / work / 01234 / bjones / scripts на Frontera:

     localhost $  scp * .txt [email protected]: / work / 01234 / bjones / frontera  

    Чтобы отложить расширение подстановочного знака до достижения Frontera, используйте обратную косую черту ( \ ) в качестве escape-символа перед подстановочным знаком. Например, чтобы вытащить все файлы, заканчивающиеся на .txt , из / work / 01234 / bjones / scripts на Frontera в текущий каталог в вашей локальной системе:

     localhost $  scp bjones @ frontera.tacc.utexas.edu:/work/01234/bjones/frontera/\*.txt.  

    Вы, конечно, можете использовать переменные оболочки или среды при вызове scp . Например:

    localhost $  destdir = "/ work / 01234 / bjones / frontera / data" 
    localhost $  scp ./myfile [email protected]: $ destdir  

    Вы также можете выполнить команды scp на локальном клиенте, которые используют переменные среды Frontera, такие как $ HOME , $ WORK и $ SCRATCH .Для этого используйте обратную косую черту ( \ ) в качестве escape-символа перед $ ; это гарантирует, что расширение произойдет после установления соединения с Frontera:

     localhost $  scp ./myfile [email protected]: \ $ WORK / data # Обратите внимание на обратную косую черту  

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

     localhost $  scp -r ./mydata [email protected]:\$WORK  # НЕ ДЕЛАЙТЕ ЭТО 

    Вместо этого используйте tar для создания архива каталога, а затем перенесите каталог как один файл:

    localhost $  tar cvf ./mydata.tar mydata # создать архив 
    localhost $  scp ./mydata.tar [email protected]: \ $ WORK # передать архив  

    Передача файлов с помощью

    rsync

    Утилита rsync (удаленная синхронизация) - отличный способ синхронизировать файлы, которые вы обслуживаете в нескольких системах: при передаче файлов с помощью rsync утилита копирует только измененные части отдельных файлов.В результате rsync особенно эффективен, когда вам нужно обновить только небольшую часть большого набора данных. Базовый синтаксис аналогичен scp :

    localhost $  rsync mybigfile [email protected]: \ $ WORK / data 
    localhost $  rsync -avtr mybigdir [email protected]: \ $ WORK / data  

    Параметры второй передачи типичны и подходят для синхронизации каталога: это рекурсивное обновление ( -r ) с подробной ( -v ) обратной связью; синхронизация сохраняет отметки времени ( -t ), а также символические ссылки и другие метаданные ( -a ).Поскольку rsync передает только изменения, рекурсивные обновления с rsync могут быть менее требовательными, чем эквивалентная рекурсивная передача с scp .

    См. Дополнительные важные советы по разделению принимающего каталога при передаче больших файлов в разделе «Доброе гражданство»; следите за своей квотой на $ HOME и $ WORK ; и ограничение количества одновременных переводов. Помните также, что $ STOCKYARD (и ваш каталог $ WORK на каждом ресурсе TACC) доступен из нескольких других систем TACC: нет необходимости в scp , когда и источник, и место назначения включают подкаталоги $ STOCKYARD .

    Если вы хотите поделиться файлами и данными с соавторами вашего проекта, см. Раздел «Совместное использование файлов проекта в системах TACC» для получения пошаговых инструкций. Руководители проектов или делегаты могут использовать разрешения и команды группы Unix для создания общих рабочих областей только для чтения или чтения-записи, которые функционируют как репозитории данных и предоставляют общую рабочую область для всех участников проекта.

    Leave a comment