5.4. Примеры файловых систем
Файловая система FAT
Файловая система FAT(File Allocation Table) поддерживается всеми ОС для ПК. Она проста, надежна и занимает мало места на диске. Система FAT была разработана в течение нескольких дней Биллом Гейтсом в феврале 1976 при создании среды программирования Basic.
Основное назначение файловой системы отслеживать распределение пространства диска между файлами. Все пространство диска разбивается на участки фиксированной длины – кластеры. Кластер представляет собой один или несколько смежных секторов в логическом дисковом адресном пространстве. Файл может занимать не менее одного кластера. Размер кластера зависит от размера виртуального диска. Для каждого файла в FAT создается цепочка элементов каждый из которых указывает на определенный кластер. В каталоге содержащем имя файла имеется указатель на начало цепочки.
ПРИМЕР:
. . . | 15 | 16 | 17 | 18 | 19 | 20 | . . . |
кластеры файла | дефектный | свободный | кл. файла |
PR1.txt 15
15
16
17
18
19
. . .
16
19
деф.
своб.
посл.
. . .
Элемент каталога
Каталог – это справочник, который содержит сведения о местонахождении файла, размере, дате создания, времени обновления, атрибутах. Атрибуты файла сообщают системный он или нет, скрытый или нет, должен ли архивироваться при резервном копировании, доступен ли только для чтения.
Для каждого файла на диске имеется один элемент в определенном каталоге, для каждого каталога имеется элемент в его родительском каталоге и т. д. Т.о. структура является иерархической. Корневой каталог отличается от обычного каталога тем, что он размещен в фиксированном месте логического диска и имеет фиксированную длину(512 элементов).
При удалении файла из файловой системы FAT в первый байт соответствующей записи каталога заносится специальный признак, который показывает, что эта запись свободна, во все индексные указатели таблицы FAT заносится признак того, что кластер свободен. Данные в записи каталога , в том числе и номер первого кластера файла, остаются нетронутыми, что помогает восстановить файл, если он удален ошибочно. Восстановить надежно можно только файлы, расположенные в последовательных кластерах диска.
Достоинством такой организации является возможность осуществления прямого доступа к данным файла, а недостатком — постоянное фрагментирование диска, т. е. данные одного файла могут располагаться не в смежных кластерах, а иногда в очень удаленных друг от друга, что приводит к образованию сложных цепочек и увеличивает доступ к данным.
Используемый в FAT метод хранения информации не отличается высокой надежностью, т. к. при разрыве списка адресных указателей, например, из-за сбоя в работе ОС из-за внешних электромагнитных помех, теряется информация обо всех последующих кластерах файла.
FAT используется при доступе к диску очень интенсивно, поэтому она обычно загружается в ОП. Т. к. в FAT хранится очень важная информация, то FAT хранится на диске в двух экземпляра, второй экземпляр следует непосредственно за первым. Обновляются копии FAT одновременно. Используется же только первый экземпляр. Если он по каким-то причинам окажется разрушенным, то произойдет обращение ко второму экземпляру FAT .
Элемент таблицы FAT имеет длину 16 битов, следовательно, можно иметь до 216 кластеров (с номерами от 0 до 65535). Если дисковый раздел 32МБ, то размер кластера=512б. С увеличением раздела будет увеличиваться и размер кластера
Если файл будет иметь размер 33К, размер кластера 32К, то файл будет занимать 2 кластера, причем 31К будет свободен. Следовательно, еще одним недостатком FAT являются большие потери дискового пространства. Для диска 1-1,2Гб потери могут составить около 200Мб. Чтобы исправить этот недостаток большие диски можно разбивать на несколько виртуальных дисков меньшего размера.
Файловая система FAT считается неэффективной для дисков >500Мб.
Логический раздел, отформатированный под файловую систему FAT состоит из следующих областей(рис.):
Загрузочный сектор – содержит программу начальной загрузки ОС. Вид этой программы зависит от типа ОС, которая будет загружаться из этого раздела.
Основная копия FAT содержит информацию о размещении файлов и каталогов на диске.
Резервная копия FAT.
Корневой каталог занимает фиксированную обласить размером в 32 сектора (16Кбайт), что прозволяет хранить 512 записей о файлах и каталогах, т. к. каждая запись каталога состоит из 32 байт
Область данных предназначена для размещения всех файлов и каталогов, кроме корневого.
Элементы (указатели) FAT 32 бита одна запись каталога Кластеры данных | |||||||
0 | 1 | 2 | 3 | … | |||
FAT1 | |||||||
FAT2 (копия) | |||||||
Root directory . . . | |||||||
0 | 1 | 2 | |||||
Одной из важнейших характеристик FAT было использование имен файлов формата 8. 3. К стандартной FAT(реализация FAT16 ) добавились еще 2 разновидности, используемые в Windows95 и Windows NT: VFAT (виртуальная FAT) и FAT32. Сейчас FAT32 поддерживается и Windows Millennium Edition и всеми ОС семейства Windows 2000.
В файловую систему VFAT добавилась поддержка длинных имен файлов, для чего используются блоки каталогов. В исходной версии Windows95 основной файловой системой была VFAT. Windows95, начиная с версии OSR2 (12 августа 1996г.), поддерживает 32 разрядную FAT (FAT32), которая было разработана для поддержки больших разделов диска. Принципиальное отличие FAT32 заключается в том, что она намного эффективнее расходует дисковое пространство, т. к. использует кластеры меньшего размера.
В результате экономится 10-15% дискового пространства. FAT32 также может перемещать корневой каталог и использовать резервную копию FAT вместо стандартной. Корневой каталог представлен в виде обычной цепочки кластеров. Следовательно, корневой каталог может находиться в произвольном месте диска, что снимает ограничение на его размер.
Таким образом, FAT32 обеспечивает следующие преимущества по сравнению с FAT16:
Поддержка дисков размером до 2 Тб;
Более эффективное расходование дискового пространства, т. к. использует более мелкие кластеры;
Нет ограничения на количество элементов в корневом каталоге;
Более быстрая загрузка программ.
Файловая система NTFS
Отличительные свойства данной файловой системы:
поддержка больших файлов и дисков,
низкий уровень фрагментации,
поддержка длинных символьных имен,
контроль доступа к каталогам и отдельным файлам.
Максимальный размер раздела NTFS в данный момент ограничен лишь размерами жестких дисков.
Структура раздела
Как и любая другая система, NTFS делит все полезное место на кластеры — блоки данных, используемые единовременно. NTFS поддерживает почти любые размеры кластеров — от 512 байт до 64 Кбайт.
Диск NTFS условно делится на две части. Первые 12% диска отводятся под так называемую MFT зону. Запись каких-либо данных в эту область невозможна. MFT-зона всегда держится пустой — это делается для того, чтобы самый главный, служебный файл (MFT) не фрагментировался при своем росте. Остальные 88% диска представляют собой обычное пространство для хранения файлов.
MFT и ее структура
Каждый элемент системы представляет собой файл — даже служебная информация. Самый главный файл на NTFS называется MFT, или Master File Table — общая таблица файлов. Именно он размещается в MFT зоне и представляет собой централизованный каталог всех остальных файлов диска, и даже себя самого. MFT поделен на записи фиксированного размера (обычно 1 Кбайт), и каждая запись соответствует какому-либо файлу. Первые 16 файлов носят служебный характер — они называются метафайлами, причем самый первый метафайл — сам MFT. Эти первые 16 элементов MFT — единственная часть диска, имеющая фиксированное положение. Интересно, что вторая копия первых трех записей, для надежности хранится ровно посередине диска. Остальной MFT-файл может располагаться, как и любой другой файл, в произвольных местах диска — восстановить его положение можно с помощью его самого, «зацепившись» за самую основу — за первый элемент MFT.
Метафайлы
Первые 16 файлов NTFS (метафайлы) носят служебный характер. Каждый из них отвечает за какой-либо аспект работы системы. Преимущество настолько модульного подхода заключается в поразительной гибкости — например, на FAT-е физическое повреждение в самой области FAT фатально для функционирования всего диска, а NTFS может сместить, даже фрагментировать по диску, все свои служебные области, обойдя любые неисправности поверхности — кроме первых 16 элементов MFT.
Метафайлы находятся корневом каталоге NTFS диска — они начинаются с символа имени «$», хотя получить какую-либо информацию о них стандартными средствами сложно. В следующей таблице приведены используемые в данный момент метафайлы и их назначение.
$MFT | сам MFT |
$MFTmirr | копия первых 16 записей MFT, размещенная посередине диска |
$LogFile | файл поддержки журналирования |
$Volume | служебная информация — метка тома, версия файловой системы, т.д. |
$AttrDef | список стандартных атрибутов файлов на томе |
$. | корневой каталог |
$Bitmap | карта свободного места тома |
$Boot | загрузочный сектор (если раздел загрузочный) |
$Quota | файл, в котором записаны права пользователей на использование дискового пространства |
$Upcase | файл — таблица соответствия заглавных и прописных букв в имен файлов на текущем томе. Нужен в основном потому, что в NTFS имена файлов записываются в Unicode, что составляет 65 тысяч различных символов, искать большие и малые эквиваленты которых очень нетривиально. |
Файлы
В NTFS файл целиком размещается в записи таблицы MFT, если это позволяет сделать его размер. В том же случае, когда размер файла больше размера записи MFT, в запись помещаются только некоторые атрибуты файла, а остальная часть файла размещается в отдельном отрезке тома (или нескольких отрезках). Часть файла, размещаемая в записи MFT, называется резидентной частью, а остальные части — нерезидентными. Адресная информация об отрезках, содержащих нере зидентные части файла, размещается в атрибутах резидентной части.
Каталоги
Каталог на NTFS представляет собой специфический файл, хранящий ссылки на другие файлы и каталоги, создавая иерархическое строение данных на диске. Файл каталога поделен на блоки, каждый из которых содержит имя файла, базовые атрибуты и ссылку на элемент MFT, который уже предоставляет полную информацию об элементе каталога. Внутренняя структура каталога представляет собой бинарное дерево. Вот что это означает: для поиска файла с данным именем в линейном каталоге, таком, например, как у FAT-а, операционной системе приходится просматривать все элементы каталога, пока она не найдет нужный. Бинарное же дерево располагает имена файлов таким образом, чтобы поиск файла осуществлялся более быстрым способом — с помощью получения двухзначных ответов на вопросы о положении файла. Вопрос, на который бинарное дерево способно дать ответ, таков: в какой группе, относительно данного элемента, находится искомое имя — выше или ниже? Мы начинаем с такого вопроса к среднему элементу, и каждый ответ сужает зону поиска в среднем в два раза. Файлы, скажем, просто отсортированы по алфавиту, и ответ на вопрос осуществляется очевидным способом — сравнением начальных букв. Область поиска, суженная в два раза, начинает исследоваться аналогичным образом, начиная опять же со среднего элемента.
Контроль доступа к каталогам и отдельным файлам
В самом общем случае права доступа могут быть описаны матрицей прав досту па, в которой столбцы соответствуют всем файлам системы, строки — всем поль зователям, а на пересечении строк и столбцов указываются разрешенные опера ции
Имена файлов | |||||
Имена пользователей | Win. exe | Class.dbf | Unox.ppt | Modem.txt | |
Маша | читать | выполнять | Выполнять | ||
Миша | Читать | Выполнять | Выполнять, читать | ||
Саша | Читать | Выполнять, читать | |||
Паша | Читать, писать | создать |
Практически во всех операционных системах матрица прав доступа хранится «по частям», то есть для каждого файла или каталога создается так называемый список управления доступом (Access Control List, ACL), в котором описываются права на выполнение операций пользователей и групп пользователей по отноше нию к этому файлу или каталогу. Список управления доступа является атрибутом файла или каталога.
Материалы к спецкурсу «Unix»
Задачи на этой странице имеют различный уровень сложности с точки зрения количества строк кода, которые надо написать, но они не требуют применения каких-либо сложных алгоритмов.
1 Языковая статистика1
Написать скрипт, который подсчитывает статистику длин слов в тексте. Выдача — таблица из двух колонок: длина слова, число слов с такой длиной, встретившихся в тексте. Границами слов считать любые не буквы.
2 Языковая статистика2
Взять любой литературный текст из интернета сохранить в однобайтовой кодировке (или перекодировать в такую кодировку командой iconv)
Написать скрипт, подсчитывающий статистику распределения по частоте русских букв (включая пробел). Выдача — таблица из двух колонок: буква, процент появлений данной буквы от общей длины текста.
3 Языковая статистика3
Найти в литературном произведении наиболее часто встречающееся слово из 5 букв
4 Определение кодировки
Написать программу автоматического определения однобайтовой кодировки русских литературных текстов (из набора KOI8, CP1251, CP866).
Для предварительной проверки того, что в файле просто текст можно использовать проверку на максимальную длину слова между пробельными символами (<25). Для проверки кодировки можно построить частотную статистику, а можно попытаться искать вхождение коротких слов типа » и «, » или «, «,а » в разных кодировках. Можно теоретически подобрать слово, а можно проверять кандидатуры на одном достаточно длинном тексте, перекодированном в разные кодировки, исключать тестовые слова, которые вызывают ложные срабатывания.
5 Три буквы
Взять любой достаточно объёмный текст на русском языке (можно архив lib.ru).
Написать скрипт, который составит список последовательностей из трёх букв, которые в этом тексте отсутствуют (хзь, ччй…). Дополнительно сделать скрипт поиска опечаток, который будет извлекать из текста слова, содержащие «невозможные» буквосочетания.
Если я правильно посчитал, то число сочетаний из трёх букв (включая Ё) равно 333333 т.е приблизительно 33000. Число вполне разумное и вычисление много времени и памяти не займёт.
6 quoted-printable1
Почтовая кодировка quoted-printable оставляет латинскую часть кодировки ASCII как есть, а однобайтные русские буквы, знак = и, иногда, пробел представляет в 16-ричном представлении вида =А6. Говорят, что в Ubuntu есть программа qprint для работы с этой кодировкой.
В CentOS такой команды нет, но есть команда xxd, которая конвертирует байты в их 16-ричное представление.
Написать программу, которая будет кодировать смешанный русско-английский текст в quoted-printable. Строго следовать стандарту не обязательно. Так, пробелы можно оставить пробелами, а также считать, что в тексте нет управляющих символов.
7 quoted-printable2
Почтовая кодировка quoted-printable оставляет латинскую часть кодировки ASCII как есть, а однобайтные русские буквы, знак = и, иногда, пробел представляет в 16-ричном представлении вида =А6. Говорят, что в Ubuntu есть программа qprint для работы с этой кодировкой.
В CentOS такой команды нет, но есть команда xxd, которая конвертирует байты в их 16-ричное представление.
Написать программу, которая из кодировки quoted-printable восстанавливает однобайтовую кодировку. Т.е. поcледовательность вида =E3 превращает в один байт со значением 0xE3
8 Кредитка1
Для проверки правильности номера банковской карты используется алгоритм Луна (ГОСТ ISO/IEC 7812-1-2014)
Контрольная цифра вычисляется на основе первых 15 цифр и записывается в 16 позицию
Алгоритм описывается так (в стандарте чуть иначе):
- удвоить значение каждой второй цифры, начиная с первой цифры слева
- если после шага 1 в данной позиции получилось двузначное число, то сложить его цифры между собой
- сложить результаты удвоения, полученные на этапе 2 и цифры исходного номера, не подвергшейся удвоению
- вычесть сумму, полученную на этапе 3, из следующего бОльшего числа, оканчивающегося на ноль.
Если сумма, полученная на этапе 3, является числом, оканчивающимся на ноль (30, 40 и т. п.), то контрольная цифра равна 0.
Написать скрипт подсчёта контрольной цифры 15-значного номера, полученного как аргумент.
9 Кредитка2
Для проверки правильности номера банковской карты используется алгоритм Луна (ГОСТ ISO/IEC 7812-1-2014)
Контрольная цифра вычисляется на основе первых 15 цифр и записывается в 16 позицию
Реализовать алгоритм проверки:
- удвоить значение каждой второй цифры, начиная с первой цифры слева
- если после шага 1 в данной позиции получилось двузначное число, то сложить его цифры между собой
- сложить результаты удвоения, полученные на этапе 2 и цифры исходного номера, не подвергшейся удвоению
- если последняя цифра равна нулю, то ошибок нет
Написать скрипт проверки правильности номера, полученного как аргумент.
10 Уникальные файлы
В большом каталоге с подкаталогами хранится архив файлов (например, фотоархив). Есть подозрение, что часть файлов была скопирована под другими именами.
Написать скрипт поиска одинаковых файлов. Критерием одинаковости является контрольная сумма, вычисленая программой sum.
Скрипт получает в качестве параметра имя каталога (или начинает с текущего если нет параметра) и печатает группы имен найденных файлов дубликатов. Группы разделяются пустыми строками.
11 Календарь
Напечатать календарь на текущий год. В первой строке месяца его название. Далее даты разбитые на строки по 7 дней недели. Первая строка имеет слева отступ, соответствующий дню недели, приходящемуся на 1 число. Субботу и воскресенье можно вывести на экран красным цветом.
2021 сентябрь 1 2 3 4 5 6 7 8 9 10
12 Игра «угадайка»
Человек задумывает число от 0 до 10. Программа задаёт вопросы на «больше»-«меньше»:
Это число больше 7? [y/n] Это число меньше 2? [y/n]
Человек отвечает да или нет, программа должна отгадать число.
13 Крестики-нолики
Надо написать программу, с которой можно играть в крестики-нолики. Программа запускается с параметром x или o, который указывает за кого она будет играть. Крестики ходят первыми.
Человек вводит, а скрипт в цикле читает строки с двумя цифрами . Первая цифра означает номер строки, вторая номер колонки. Т.к. это крестики нолики, то возможные цифры от 1 до 3. При неправильном вводе выдаётся ошибка и запрашивается новый ход. При правильном вводе он засчитывается за ход человека, делается ход программы, и рисуется поле 3х3 с текущей позицией. Под полем выдается приглашение на ввод следующего хода..
Алгоритм искусственного интеллекта можно использовать максимально простой — табличный. Все возможные позиции можно хранить в отдельном файле. Команда grep
будет извлекать из этого файла оптимальный ход, соответствующий позиции.
Для чтения строк используется команда read
, вывод на экран командой echo
или printf
.Можно стирать экран и рисовать только текущую позицию, а можно печатать очередную позицию после предыдущей, так что на экране останется история ходов.
14 Бэкап1
В одном из заданий в течение семестра была задача на инкрементальное архивирование командой tar. Предположим, что полный архив делается раз в 10 дней, а затем каждый день делается архивирование обновлённых за сутки файлов. В результате, у вас есть архивы с названиями такого вида:
dir-full-20220110.tar, dir-new-20220111.tar, dir-new-20220112.tar… dir-full-20220120.tar
Написать скрипт, который по имени файла (с путём) находит в архивах его самую свежую версию и выдаёт имя архива.
15 Бэкап2
В одном из заданий в течение семестра была задача на инкрементальное архивирование командой tar. Предположим, что полный архив делается раз в 10 дней, а затем каждый день делается архивирование обновлённых за сутки файлов. В результате, у вас есть архивы с названиями такого вида:
dir-full-20220110.tar, dir-new-20220111.tar, dir-new-20220112.tar… dir-full-20220120.tar
Написать скрипт, который по имени файла (с путём) печатает даты его изменений.
16 Почти шелл
Написать оболочку для работы с архивом tar, которая будет имитировать работу с файловой системой.
В задании для примера взят архив arch.tar. Текущий каталог можно хранить в файле archive.cwd (где archive совпадает с именем архива) Пусть скрипт называется fstar. Он должен реализовать следующие команды:
- fstar ls arch.tar — список файлов текущего каталога.
- fstar cd /directory arch.tar — смена текущего каталога в архиве
- fstar cat file arch.tar — извлечение файла из архива в STDOUT
- fstar cp archfile path/dstfile arch.tar — извлечение из архива файла archfile под именем path/dstfile
- fstar cp srcfile path arch.tar — добавление файла srcfile в архив, приписав ему каталог path в архиве
Стеммер
Алгоритм нахождения корневых основ русского языка (стемминга) описан по ссылке — http://snowball.tartarus.org/algorithms/russian/stemmer.html
Задача — реализовать алгоритм на языке shell
Скриптовый вирус
Вот готовое описание скриптового вируса. Осталось его реализовать.
Вирус должен быть написан на языке shell. Он должен уметь заражать скрипты на языке shell через вставку в них своего кода.
Вирус содержит строки комментарии, обозначающие его начало и конец
#virus begin virus body #virus end
- Вирус должен просмотреть все объекты в каталоге (цикл for).
- У каждого объекта проверяется тип — является ли он файлом (test -f). Не файлы пропускаются.
- У каждого файла проверяется доступен ли он на чтение и на запись (test -r, test -w). Недоступные файлы пропускаются.
- У каждого файла проверяется наличие в первой строке подстроки «#!/bin/bash» (head -n 1, grep). Файлы без такой подстроки пропускаются.
- В файле ищется сигнатура вируса #virus begin. Если файл уже заражен, то он пропускается.
- Когда найден файл жертва, то вирус копирует его в каталог /tmp/.
- Из аргумента $0 вирус узнает имя файла, из которого он был запущен, и копирует свое тело из этого файла в каталог /tmp/.
- В тело файла жертвы записывается строка #!/bin/bash, затем тело вируса из каталога /tmp, затем оригинальный скрипт без первой строки из копии в каталоге /tmp.
- Удаляются вспомогательные файлы в каталоге /tmp
- После заражения одного файла вирус останавливается и передает управление родительскому скрипту.
File commander
Надо написать однопанельный клон нортон коммандера. Т.е. надо выводить на экран часть списка файлов в текущем каталоге. Одну из строк с именем файла помечать цветом или маркером в начале строки как текущую. Стрелками перемещать маркер и прокручивать список. По нажатию на Enter выполнять с текущим файлом некоторое действие в зависимости от его типа.
Предполагаем, что у нас нет имён файлов со спецсимволами (перевод строки, забой и т.п.), но могут быть имена файлов с пробелами.
Для управления вместо стрелок используем буквы. Например j-стрелка вниз, k- вверх, Enter или x — выполнить, q-завершить работу.
- Определяем размеры экрана, начинаем основной цикл
- Читаем список файлов и каталогов в текущем каталоге. Файлы, имена, которых начинаются с точки — игнорируем.
- Имена файлов не вмещающихся в ширину экрана обрезаем
- Печатаем на экране столько файлов, сколько входит, зарезервировав одену строку на ввод команды. Каталог .. печатаем в первой позиции. Каталог . не печатаем.
- Перед каждым файлом печатаем два символа. Первый — тип: f-файл, d-каталог, x-исполняемый файл. Второй символ — курсор: обычно пробел, но для текущего файла — ‘>’
- При нажатии клавиш вверх и вниз — курсор перемещается. При достижении последней строки, список файлов сдвигается вверх если «за экраном» есть файлы, то же при достижении верхней строки. Список файлов как бы находится за виртуальной прорезью размером с экран.
- При нажатии на клавишу исполнения: на каталоге — переход в каталог, на исполняемом файле — запуск, на текстовом файле — запуск редактора.
- Клавиша выхода — очистка экрана и выход.
Для чтения по одной букве используем read -n1
. Для определения типа файла — file
Определение размеров экрана — stty -a
. управление экраном tput
. Логика прокрутки списка файлов — самостоятельно.
Лабораторная работа 02: Каталоги, файлы и SFTP
Лабораторная работа 02 Ключевые слова: файл, каталог, папка,
структура каталогов, локальный компьютер, удаленный компьютер, dante
, SFTP, корневой каталог, домашний каталог, public_html
, student_html
, загрузить, скачать.
См. Википедию (http://www.wikipedia.org/) для
подробное описание ключевых слов (и не забудьте процитировать).
Подготовка
Вы должны выполнить задачи в Лаборатория 01, прежде чем делать это лаборатория
Цели
- Навигация по структуре каталогов на локальный компьютер.
- Навигация по структуре каталогов на
удаленный компьютер (
dante
). - Переместить файлы с локального компьютера на удаленный компьютер и наоборот.
Из этого лабораторного занятия вы узнаете, как сохранять и извлекать файлы
с удаленного компьютера с именем dante
.
Для этого курса вы должны опубликовать все свои завершенные
задания (домашние задания, лабораторные работы и проекты) в Интернете с определенным
исключения. Это означает, что вам нужно будет разместить все свои
файлы на dante
и ваша область веб-публикаций
активирован. Если ваша веб-публикация не активирована или вы
не знаю, если он активирован, полный
Лаборатория 01, прежде чем продолжить
лаборатория
Как правило, вы не должны использовать дискеты для своих заданий.
Они ненадежны и имеют тенденцию становиться нечитаемыми, когда вы
они нужны больше всего! Вместо этого используйте надежный удаленный компьютер (например, dante
) для хранения важных данных. Вам дали
100 МБ места на диске на данте
, что должно быть больше, чем
достаточно для этого курса.
Каталог часто также называют папкой, поэтому они могут использоваться взаимозаменяемо.
Навигация по структуре каталогов на Локальный компьютер
Чтобы иметь возможность находить папки и файлы на вашем локальному компьютеру, вы должны понимать, как перемещаться по структура каталогов компьютера. В этом разделе объясняется, как перемещаться через среду Windows на локальном компьютере.
Локальный компьютер — это ваш компьютер. клавиатура подключена к.
- Откройте Windows Explorer (, а не Internet Explorer). Ты
будет использовать Проводник Windows на локальном компьютере для навигации по
его структура каталогов.
Вы можете открыть проводник Windows одним из следующих способов:
- Нажмите одновременно следующие клавиши:
E
. - Щелкните правой кнопкой мыши Мой компьютер 9Значок 0054 расположен в верхнем левом углу углу экрана и выберите Исследовать .
- Откройте меню «Пуск» в левом нижнем углу экрана и выберите Программы>Проводник Windows .
- Нажмите одновременно следующие клавиши:
- Перейдите в каталог, например
C:\Documents
илиC:\My Документы
или другой подобный каталог.C:\Documents
означает каталог с именемДокументы
на жестком диске с именемС
.C:\Documents
, сначала нажав надиск C
а затем нажав наDocuments
каталог. - Создайте каталог. В строке меню выберите Файл>Создать>Папка . Назовите свой новый каталог EraseMe .
- Перейдите в только что созданный каталог
EraseMe
. каталог должен быть пуст. - Откройте Блокнот. Вы будете использовать его для создания нового файла. Блокнот может быть
открывается несколькими способами:
- Блокнот можно найти в меню «Пуск» в разделе Программы>Стандартные>Блокнот .
- Наведите указатель мыши на правую половину Проводника Windows, щелкните один раз правой кнопкой мыши и выберите New>Text Документ .
- Напишите несколько строк текста в блокноте и сохраните файл как testFile.txt внутри вашего каталога EraseMe . Помните, где файл расположен так, как он понадобится вам позже в этой лабораторной работе.
- Ниже приведено визуальное представление
C:\Documents\EraseMe\testFile.txt
на локальном компьютере.
Начало структуры каталогов называется root . В данном случае кореньПроводник Windows, показывающий структуру каталогов Упрощенная структура каталогов C:
. (Настольный компьютерС
.Мой компьютер
— это , а не каталог, и поэтому может ли , а не быть корнем структуры каталогов. это Метод Microsoft Windows для группировки различных частей локальный компьютер.) Другие корневые каталоги на локальном компьютереA:
(для флоппи-дисковода) иD:
, если он существуют.
Навигация по структуре каталогов на удаленном Компьютер
Чтобы иметь возможность находить каталоги и файлы на удаленном
компьютер, вы должны понимать, как перемещаться по удаленному
структура каталогов компьютера. В этом разделе объясняется, как перемещаться
через среду UNIX на удаленном компьютере с именем dante
, используя графическую программу SFTP с именем SSH Secure File Transfer.
SFTP расшифровывается как Secure File Transfer Protocol, который является стандартизированный метод (протокол) для передачи файлов между компьютеры безопасным/зашифрованным способом.
Удаленный компьютер — это компьютер, который вы можете доступ (например, через компьютерную сеть, такую как Интернет), и , а не компьютер, к которому подключена ваша клавиатура.
- Запуск Безопасная передача файлов по SSH из меню «Пуск» в разделе «Программы», в котором используется SFTP. ( Для использования этой программы требуется пакет UWICK. Если он не установлен, его можно загрузить отсюда: http://www.washington.edu/computing/software/uwick/starter/. )
- Нажмите кнопку Quick Connect .
- Появится окно с именем Connect to Remote Host . За
имя хоста, введите
dante.u.washington.edu
и для имя пользователя, введите свой UW NetID. Если ваш UW NetID былsmith
введите следующее:Введите свой пароль в следующем всплывающем окне, чтобы завершить подключение до
Данте
. - Теперь вы должны увидеть разделенное окно, показывающее некоторые файлы и/или
каталоги. Файлы и каталоги локального компьютера отображаются на
слева, пока отображаются файлы и каталоги удаленного компьютера
справа. В верхней и нижней части окна вы можете видеть
к какому компьютеру вы подключены, в данном случае
Данте
. В меньшем окне справа вы можете увидеть весь путь к каталогу вашего текущего местоположения на удаленный компьютер , например,/nfs/guido08/smith
. (При первом подключении вы всегда будете начинать в своем домашнем каталог, который должен иметь то же имя, что и ваш UW NetID.) такое же маленькое окошко слева, что соответствует путь к каталогу вашего текущего местоположения на локальном компьютер. В настоящее время он должен быть пуст.Серая полоса внизу окна — это статус . бар . Он сообщает вам, если вы подключены к удаленному компьютеру, к какому компьютеру вы подключены и т.д.
Вы можете узнать, что обозначает значок, перемещая мышь над иконой.
- Откройте каталог
public_html
или вашstudent_html
каталог на удаленном компьютере двойным нажав на нее. Если этот каталог пуст, правое окно должно стать пустым.Если вы спуститесь не в тот каталог, вы можете подняться и выйти из него, щелкнув значок «Вверх» .
Ваш
public_html
(альтернативноstudent_html
) — это каталог, доступный через Интернет. Вы видите содержимое этого каталога, когда переходите кhttp://students.washington.edu/yourUWNetID/
. - Создайте новый каталог с именем
fit100
внутри вашегоpublic_html
(альтернативноstudent_html
) каталог. Вы можете использовать один из следующих методов:- Выберите Операция>Новая папка .
- Щелкните правой кнопкой мыши внутри области файлов и папок на удаленной стороне и выберите Новая папка .
- Щелкните значок «Новая папка» на удаленной стороне.
- Нажмите
Ctrl
+N
.
Ваш каталог
fit100
— это каталог, куда вы должны поместить все свои задания для этого курс. Некоторые операционные системы (например, dante ) различают «fit100» и «FIT100». Пожалуйста, используйте все строчные буквы, чтобы избежать проблем с будущими заданиями. - Создайте дополнительные каталоги внутри вашего
fit100
. каталог. Вам понадобится каталог для этой лабораторной работы, который должен быть названныйlab1
(поскольку лаборатория называется Lab 1).Ваша структура каталогов
fit100
должна быть похожа на следующее, минус файлы:
Перемещение файлов с локального компьютера на удаленный компьютер и наоборот
Чтобы сделать ваши задания доступными в Интернете, т. е.
требуется для всех выполненных заданий в этом курсе, вы должны разместить
их в вашем веб-каталоге на dante
.
В этом разделе рассказывается, как загружать и скачивать файлы и каталоги на удаленный компьютер и с него.
Загрузить означает передать файлы/каталоги с вашего локального компьютера на удаленный компьютер (локальный -> удаленный). Загрузка означает передачу файлов/каталогов с удаленного компьютера на локальный компьютер (удаленный -> местный).
- Перейдите в каталог
lab02
наdante
, который должен находиться в вашем каталогеfit100
. - Используя левую половину SSH Secure File Transfer, перейдите туда, где вы поместил testFile.txt на локальный компьютер, дважды щелкнув в соответствующих каталогах. (Начните с двойного щелчка на My Компьютер.) Ваш файл должен находиться в каталоге EraseMe.
- Загрузите файл testFile.txt на свой
лаборатория02
каталог наданте
. Это можно сделать с помощью одного из следующие методы:- Перетащите файл с локальной (левой) стороны на удаленную (правую).
- Щелкните правой кнопкой мыши testFile.txt и выберите Upload .
- Выберите testFile.txt, а затем выберите Operation>Upload .
- Выберите Operation>Upload Dialog… . Найдите и выберите файл в диалоговом окне загрузки.
- Щелкните значок диалогового окна загрузки, а затем найдите и выберите файл в диалоговом окне загрузки.
- Загрузив файл, вы отправили копию файла с локального компьютера на удаленный компьютер. Если вы посмотрите в Передача в окне Безопасная передача файлов по SSH, вы увидеть статус передачи вашего файла.
- Загрузите testFile.txt с удаленного компьютера обратно на локальный
компьютер. На этот раз поместите его в другой каталог на вашем локальном компьютере.
компьютер, например, прямо в корневой каталог
С:\
. - Используя SSH Secure File Transfer, попрактикуйтесь в создании, переименовании и удаление каталогов как на локальном, так и на удаленном компьютере, а также как загрузка и скачивание файлов и каталогов. Если вы не можете для выполнения этих навыков, вам будет трудно превратить свой задания по этому курсу.
- Потратьте время, чтобы загрузить изображение или другой документ из Интернета, который которым вы хотели бы поделиться со своим ТА! Например, изображение интереса и/или хобби или текст стихотворения.
Когда вы закончите, закройте все окна SSH, чтобы выйти из удаленный компьютер. Наконец, выйдите из локального компьютера перед уход.
Лаборатория 02 Контрольный список
______ | Я понимаю ключевые слова для этой лаборатории и могу привести примеры того, что они имеют в виду. |
______ | Я могу найти файлы и каталоги на локальном компьютере. |
______ | Я могу найти файлы и каталоги на удаленном компьютере. |
______ | При необходимости я могу создавать, переименовывать и удалять файлы и каталоги. |
______ | Я могу загружать и скачивать файлы и каталоги на/с удаленного компьютер. |
Вам не нужно ничего отправлять, когда вы закончите это лаборатория Тем не менее, , вы должны уметь применять навыки в этом лаборатории для отправки всех будущих заданий.
Файл не находится в корневом каталоге и не будет проанализирован — SonarQube
нблэкберн (Нил Блэкберн)
#1
SonarQube 8.3.0.34182
SonarScanner для MSBuild 4.9
Запуск сборки с помощью SonarScanner для MSBuild Я получаю пару сотен предупреждений, подобных следующему:
EXEC : warning : File ‘C:\Program Files (x86) \MyProduct\MyAssembly. dll» не находится в корневом каталоге «C:\Perforce\MyProduct\src» и не будет анализироваться.
Созданные сборки помещаются в папку в Program Files, поэтому для каждого файла dll, pdb, xml и т. д. появляется предупреждение. В остальном анализ работает нормально.
На странице области анализа проекта в SonarQube я безуспешно пытался установить включение исходных файлов в C:\Perforce\MyProduct** и исключения файлов в C:\Program Files (x86)\MyProduct**. И поигрался с этими настройками.
Как лучше всего удалить эти предупреждения?
Спасибо
нблэкберн (Нил Блэкберн)
#2
У кого-нибудь есть предложения, как убрать эти предупреждения? Это последний пункт, который мешает нам развернуть SonarQube. Мы не хотим, чтобы счетчик предупреждений включал их.
Спасибо.
дменесес (Дуарте Менезес)
#3
Привет,
Если вы запустите сканер с включенными журналами отладки, вы сможете увидеть применяемые включения/исключения файлов. Есть несколько свойств, которые можно передать сканеру, чтобы контролировать, какие файлы будут включены: https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus
Если вы опубликуете журналы, мы можем попытаться помочь посмотреть, что не так.
нблэкберн (Нил Блэкберн)
#4
Привет @dmeneses
Спасибо за ответ.
Я создал временный проект SonarQube и построил на нем один из наших проектов. Он дает следующие два предупреждения:
EXEC: предупреждение: файл «C:\Perforce\FCI\main\src\Common\CommonAssemblyInfo.cs» не находится в корневом каталоге «C:\Perforce\FCI\main\src\FID.Core» и не будет быть проанализированы.
EXEC: предупреждение: файл «C:\Perforce\FCI\main\src\Common\VersionNumber.cs» не находится в корневом каталоге «C:\Perforce\FCI\main\src\FID.Core» и не будет быть проанализированы.
Я попытался настроить sonar.exclusions на странице настроек проекта для исключения:
C:\Perforce\FCI\main\src\Common\*
Я также попытался добавить каждый файл явно. Ни один из них не остановил предупреждения.
Файл журнала показывает:
15:54:13.326 ИНФОРМАЦИЯ: Исключенные источники: C:\Perforce\FCI\main\src\Common\*
Лог приложил. Сканер сообщает об ошибке, я не знаю почему, но я не думаю, что это имеет отношение к этой проблеме.
sonar.txt (412,4 КБ)
Спасибо.
Андрей_Эпуре (Андрей Эпуре)
#7
привет @nblackburn
не могли бы вы попробовать передать корневую папку на начальный шаг, например
SonarScanner.MSBuild.exe begin /k:"projectKey" /d:sonar.verbose=true /d:sonar.projectBaseDir= "C:\ПУТЬ\К\ОБЩАЯ\ПАПКА"
нблэкберн (Нил Блэкберн)
#8
Привет @Andrei_Epure
Спасибо за ответ.
Извините, я думал, что мой временный проект достаточно продемонстрирует проблему, но это не так. Ваше предложение использовать projectBaseDir устраняет проблему в моем тестовом проекте, но я не думаю, что смогу использовать его в реальном проекте, поскольку папка с исходным кодом и выходные папки находятся в совершенно разных областях.
Мои исходные файлы находятся в папке C:\Perforce\FCI\main\src, но SonarScanner жалуется на файлы в папке C:\Program Files (x86)\FID. New не находится в корневом каталоге.
C:\Program Files (x86)\FID.New — это место, куда копируются собранные сборки и т. д. во время сборки.
Я думаю, что мы просто хотим игнорировать что-либо в папке C:\Program Files (x86)\FID.New, но мне не удалось сделать это с помощью исключений.
Лог приложил.
Большое спасибо.
sonar2.txt (2,7 МБ)
Андрей_Эпуре (Андрей Эпуре)
#9
привет @nblackburn
Итак, эти двоичные файлы являются ссылками в
EXEC: предупреждение: файл «C:\Program Files (x86)\FID. New\x86\msvcp140_2.dll» не находится в корневом каталоге «C:\Perforce\FCI\main\src» и не будет проанализирован .
На файл ссылались следующие проекты: «C:\Perforce\FCI\main\src\FID.Core.Native.Tests\FID.Core.Native.Tests.csproj», «C:\Perforce\FCI\main\ src\FID.Core.Tests\FID.Core.Tests.csproj’, ‘C:\Perforce\FCI\main\src\FID.Integration.Slave.Tests\FID.Integration.Slave.Tests.csproj’, ‘C :\Perforce\FCI\main\src\FID.Integration.Master.Tests\FID.Integration.Master.Tests.csproj’.
- Не могли бы вы сообщить мне, как они упоминаются в CSPROJ? Я имею в виду, какой элемент схемы MSBuild используется для ссылки на них?
- Кроме того, какие шаблоны исключения вы используете для исключения этих файлов?
Сканер для MSBuild просматривает файлы, указанные в CSPROJ как источники или ресурсы (например, html, javascript).
нблэкберн (Нил Блэкберн)
#10
Привет @Andrei_Epure
Я вижу, что все проекты, упомянутые в «На файл ссылаются следующие проекты:», являются нашими тестовыми проектами, которые SonarQube все равно не анализирует. Я не уверен, что это важно. На большинство файлов эти проекты не ссылаются явно, например, на выбранный вами файл (msvcp140_2.dll) не ссылается ни один проект, наша сборка просто копирует его в выходную папку.
Для тех немногих, на которые явно ссылаются, например. nunit, на них ссылаются следующим образом:
Ложь Ссылка>
Так как, похоже, проблемы возникают из-за тестовых проектов, я безуспешно пытался добавить следующие исключения источников:
C:\Perforce\FCI\main\src\FID.Core.Native. Tests\**\ * C:\Perforce\FCI\main\src\FID.Core.Tests\**\* C:\Perforce\FCI\main\src\FID.Integration.Slave.Tests\**\* C:\Perforce\FCI\main\src\FID.Integration.Master.Tests\**\*
Я также пытался добавить C:\Program Files (x86)\Fid.New\**\*
.
Спасибо.
костин.захария (Костин Захария)
#12
Привет @nblackburn
Я безуспешно пытался создать небольшой репродуктор для этой проблемы и думаю, что я что-то упускаю.
Вот что я сделал:
- установил NUnit 2.6.3 (я заметил, что в вашем проекте используется та же версия)
- создал два проекта, предназначенных для .Net Framework 4.7.2
- установить выходную папку проектов на
C:\Program Files\temp\ReproRootDir
иC:\Program Files\temp\ReproRootDir. Lib
-
ReproRootDir
ссылается наReproRootDir.Lib
- Я ссылался на nunit.framework в обоих из них, используя:
Ложь Ссылка>
или
C:\Program Files (x86)\NUnit 2.6.3\bin\nunit.framework.dll Ссылка>
Затем я запустил анализ:
dotnet sonarscanner begin /k:root-dir /d:sonar.verbose=true > 1.log msbuild/t:перестроить > 2.log dotnet sonarscanner конец > 3.log
и я не смог найти никаких предупреждений, связанных с ... не находится в корне...
. Как вы думаете, может ли быть что-то важное, что делается в вашей среде, а здесь этого нет? Можете ли вы воспроизвести эту проблему с помощью небольшого проекта или решения?
нблэкберн (Нил Блэкберн)
№13
Привет @costin.zaharia, @Andrei_Epure
Кажется, я обнаружил причину проблемы.
Создайте папку на своем компьютере.
Скопируйте в него пару случайных файлов.
Добавьте в файл csproj следующее:
<Группа элементов>
PreserveNewest Ложь Контент>Замените «путь к вашей папке» на путь к вашей локальной папке, содержащей случайные файлы.
Создайте свой проект, и SonarScanner должен вывести предупреждение для каждого файла в вашей папке.
Мы собираем каждый из наших тестовых проектов в папку, отдельную от выпущенных сборок, поэтому у нас есть задача копирования, аналогичная приведенной выше, для копирования любой конфигурации и т.