Cmd удалить строки из текстового файла
Это мой текстовый файл, и я хочу удалить первую строку (с пробелом):
Как удалить первую строку из текстового файла?
Я хочу, чтобы моя вторая строка была первой строкой:
Я попробовал команду findstr , но она не работает.
Самый простой подход (при условии, что ваш текстовый файл называется data.txt ):
Это ограничивает строки длиной около 65535 байт/символов, а файл-около 65535 строк. Кроме того, TABs расширяется до SPACEs (по умолчанию 8).
Вместо этого вы можете использовать цикл for /F (здесь необходим странный синтаксис строки опции без кавычек, чтобы отключить символ eol по умолчанию ; , чтобы не игнорировать строки, начинающиеся с таких):
Это ограничивает строки длиной около 8190 символов/байт и приводит к потере пустых строк.
Вы можете использовать цикл for /F вместе с findstr , чтобы сохранить пустые строки ( findstr добавляет номер строки плюс : к каждой строке, поэтому for /F не видит пустых строк; все, вплоть до (первого) двоеточия, затем удаляется в теле цикла; переключение отложенного расширения гарантирует, что вы не потеряете ! ):
Это по-прежнему ограничивает линии длиной около 8190 characters/bytes.
Или вы можете использовать перенаправление ввода < вместе с set /P (для этого общее количество строк должно быть определено заранее):
Это ограничивает линии длиной около 1022 characters/bytes.
Чтобы заменить исходный файл измененным, просто сделайте это:
Если вы должны работать с cmd.exe shell, то используйте:
Мне нужен скрипт cmd, который удаляет первую строку в моем текстовом файле. Сценарий следующий: я каждый день беру txt-файл из FTP, проблема в том, что он поставляется с пустой строкой вверху, а затем с заголовками файла. Поскольку я автоматически импортирую этот файл в таблицу доступа, эта пустая.
Мне нужно несколько раз удалить первую строку из огромного текстового файла с помощью скрипта bash. Прямо сейчас я использую sed -i -e 1d $FILE - но это занимает около минуты, чтобы сделать удаление. Есть ли более эффективный способ сделать это?
Я предлагаю хвост выводить строки, начинающиеся со строки № 2:
С главной страницы:
Похожие вопросы:
Какой самый простой способ удалить последнюю строку из текстового файла с помощью SQL Server Integration Services? Спасибо.
Возможный Дубликат : Заменить первую строку текстового файла на Java Java-найти строку в файле и удалить ее Я пытаюсь найти способ удалить первую строку текста в текстовом файле с помощью java.
Мне нужно удалить точную строку из текстового файла, но я ни за что на свете не могу понять, как это сделать. Любые предложения или примеры были бы очень признательны? Сопутствующие Вопросы.
Мне нужен скрипт cmd, который удаляет первую строку в моем текстовом файле. Сценарий следующий: я каждый день беру txt-файл из FTP, проблема в том, что он поставляется с пустой строкой вверху, а.
Мне нужно несколько раз удалить первую строку из огромного текстового файла с помощью скрипта bash. Прямо сейчас я использую sed -i -e 1d $FILE - но это занимает около минуты, чтобы сделать.
У меня есть файл с разделителями, который может содержать около миллионов записей, теперь я хочу удалить первую строку из файла с разделителями, прежде чем обрабатывать ее дальше. Длина первой.
Я нашел этот код в stackoverflow для удаления первой и последней строки из текстового файла. Но я не понимаю, как объединить этот код в один, чтобы он удалил 1-ю и последнюю строку из одного файла.
Я пытаюсь постоянно обновлять файл с последними данными (активный IP-адрес proxis и порты), добавляя новый прокси-сервер в нижней части текстового файла, и я хочу удалить первую строку (это будет в.
Здесь представлен фрагмент будущей книги «Основные инструменты и практики для начинающего разработчика программного обеспечения» Бальтазара Рубероля и Этьена Броду. Книга должна помочь образованию подрастающего поколения разработчиков. Она охватит такие темы, как освоение консоли, настройка и эффективная работа в командной оболочке, управление версиями кода с помощью git , основы SQL, инструменты вроде Make , jq и регулярные выражения, основы сетевого взаимодействия, а также лучшие практики разработки программного обеспечения и совместной работы. В настоящее время авторы упорно работают над этим проектом и приглашают всех поучаствовать в списке рассылки.
Одна из причин, которые делают командную оболочку бесценным инструментом, — это большое количество команд обработки текста и возможность легко объединять их в конвейер, создавая сложные шаблоны обработки. Эти команды делают тривиальными многие задачи по анализу текста и данных, преобразованию данных между разными форматами, по фильтрации строк и т. д.
При работе с текстовыми данными главный принцип заключается в том, чтобы разбить любую сложную проблему на множество более мелких — и решить каждую из них с помощью специализированного инструмента.
Заставьте каждую программу хорошо выполнять одну функцию — «Основы философии Unix»
Примеры из этой главы на первый взгляд могут показаться немного надуманными, но это сделано специально. Каждый из инструментов разработан для решения одной небольшой задачи. Однако в сочетании они становятся чрезвычайно мощными.
Мы рассмотрим некоторые из наиболее распространенных и полезных команд обработки текста в командной оболочке и продемонстрируем реальные рабочие процессы, соединяющие их вместе. Я предлагаю взглянуть на маны этих команд, чтобы увидеть всю широту возможностей в вашем распоряжении.
Файл CSV с примерами доступен в онлайне. Можете скачать его для проверки материала.
Команда cat используется для составления списка из одного или нескольких файлов и отображения их содержимого на экране.
head выводит первые n строк в файле. Это может быть очень полезно для того, чтобы заглянуть в файл неизвестной структуры и формата, не заваливая всю консоль кучей текста.
Если -n не указано, head выводит первые десять строк указанного файла или входящего потока.
tail — аналог head , только он выводит последние n строк в файле.
Если хотите вывести все строки, расположенном после n-й строки (включая её), можете использовать аргумент -n +n .
В нашем файле 43 строки, поэтому tail -n +42 выводит только 42-ю и 43-ю строки из него.
Если параметр -n не указан, tail выведет последние десять строк в указанном файле или входном потоке.
tail -f или tail --follow отображают последние строки в файле и каждую новую строку по мере записи в файл. Это очень полезно для просмотра активности в реальном времени, например, что записывается в логи веб-сервера и т. д.
wc (word count) выводит количество символов ( -c ), слов ( -w ) или строк ( -l ) в указанном файле или потоке.
По умолчанию отображается всё вышеперечисленное.
Если текстовые данные передаются по конвейеру или перенаправлены в stdin , то отображается только счётчик.
grep — это швейцарский нож фильтрации строк по заданному шаблону.
Например, можем найти все вхождения слова mutex в файле.
grep может обрабатывать либо файлы, указанные в качестве аргументов, либо поток текста, переданный на его stdin . Таким образом, мы можем сцеплять несколько команд grep для дальнейшей фильтрации текста. В следующем примере мы фильтруем строки в нашем файле metadata.csv , чтобы найти строки, содержащие и mutex, и OS.
Рассмотрим некоторые опции grep и их поведение.
grep -v выполняет инвертное сопоставление: фильтрует строки, которые не соответствуют шаблону аргументов.
grep -i выполняет сопоставление без учёта регистра. В следующем примере grep -i os находит как OS, так и os.
grep -l выводит список файлов, содержащих совпадение.
Команда grep -c подсчитывает, сколько раз найден образец.
grep -r рекурсивно ищет файлы в текущем рабочем каталоге и всех его подкаталогах.
grep -w показывает только совпадающие целиком слова.
cut извлекает часть файла (или, как обычно, входного потока). Команда определяет разделитель полей (который разделяет столбцы) с помощью опции -d , а порядковые номера столбцов для извлечения с помощью опции -f .
Например, следующая команда извлекает первый столбец из последних пяти строк нашего CSV-файла.
Поскольку мы имеем дело с CSV, то столбцы разделяются запятой, а за извлечение первого столбца отвечает опция -f 1 .
Можно выбрать и первый, и второй столбцы, используя опцию -f 1,2 .
paste объединяет вместе два разных файла в один многоколоночный файл.
По умолчанию paste использует разделитель табуляции, но его можно изменить с помощью параметра -d .
Ещё один распространённый способ использования paste — объединение всех строк в потоке или файле с помощью заданного разделителя, используя комбинацию аргументов -s и -d .
Если в качестве входного файла указан параметр - , то вместо него будет считываться stdin .
Команда sort , собственно, сортирует данные (в указанном файле или входном потоке).
sort -r выполняет обратную сортировку.
sort -n сортирует поля по их арифметическому значению.
uniq обнаруживает и отфильтровывает соседние одинаковые строки в указанном файле или входном потоке.
Поскольку uniq отфильтровывает только соседние строки, в наших данных могут ещё остаться дубликаты. Чтобы отфильтровать все одинаковые строки из файла, нужно сначала отсортировать его содержимое.
uniq -c в начале каждой строки вставляет количество её вхождений.
uniq -u отображает только уникальные строки.
Примечание. uniq особенно полезен в сочетании с сортировкой, поскольку конвейер | sort | uniq позволяет удалить все дублирующиеся строки в файле или потоке.
awk — это чуть больше, чем просто инструмент обработки текста: на самом деле у него целый язык программирования. В чём awk действительно хорош — так это в разбиении файлов на столбцы, и делает это с особенным блеском, когда в файлах перемешаны пробелы и табы.
Как видим, столбцы разделены либо пробелами, либо табуляциями, и не всегда одинаковым количеством пробелов. cut здесь бесполезен, потому что работает только с одним символом-разделителем. Но awk легко разберётся с таким файлом.
awk '< print $n >' выводит n-й столбец в тексте.
Хотя awk способен на гораздо большее, выдача колонок составляет, наверное, 99% вариантов использования в моём личном случае.
tr расшифровывается как translate. Эта команда заменяет одни символы на другие. Она работает либо с символами, либо с классами символов, такими как строчные, печатные, пробелы, буквенно-цифровые и т. д.
На стандартных входных данных tr <char1> <char2> заменяет все вхождения <char1> на <char2>.
tr может переводить классы символов с помощью нотации [:class:] . Полный список доступных классов описан на справочной странице tr , но некоторые продемонстрируем здесь.
[:space:] представляет все типы пробелов, от простого пробела до табуляции или символа новой строки.
Все символы, похожие на пробелы, переведены в запятую. Обратите внимание, что символ % в конце выдачи означает отсутствие завершающей новой строки. Действительно, этот символ тоже переведён в запятую.
[:lower:] представляет все строчные символы, а [:upper:] — все прописные. Таким образом, преобразование между ними становится тривиальным.
tr -c SET1 SET2 преобразует любой символ, не входящий в набор SET1, в символы набора SET2. В следующем примере все символы, кроме указанных гласных, заменяются пробелами.
tr -d удаляет указанные символы, а не заменяет их. Это эквивалент tr <char> '' .
tr также может заменить диапазоны символов, например, все буквы между a и e или все числа между 1 и 8, используя нотацию s-e , где s — начальный символ, а e — конечный.
Команда tr -s string1 сжимает все множественные вхождения символов в string1 в одно-единственное. Одним из наиболее полезных применений tr -s является замена нескольких последовательных пробелов одним.
Команда fold сворачивает все входные строки до заданной ширины. Например, может быть полезно убедиться, что текст помещается на дисплеях небольшого размера. Так, fold -w n укладывает строки по ширине n символов.
Команда fold -s будет разбивать строки только на символах пробела. Её можно объединить с предыдущей, чтобы ограничить строким заданным количеством символом.
sed — это неинтерактивный потоковый редактор, который используется для преобразования текста во входном потоке строка за строкой. В качестве входных данных используется или файл, или stdin , а на выходе тоже или файл, или stdout .
Команды редактора могут включать один или несколько адресов, функцию и параметры. Таким образом, команды выглядят следующим образом:
Хотя sed выполняет множество функций, мы рассмотрим только замену текста как один из самых распространённых вариантов использования.
Замена текста
Команда замены sed выглядит следующим образом:
Пример: замена первого экземпляра слова в каждой строке в файле:
Мы видим, что в первой строчке заменяется только первый экземпляр hello . Чтобы заменить все вхождения hello во всех строках, можно использовать опцию g (означает global).
sed позволяет использовать любые разделители, кроме / , что особенно улучшает читаемость, если в самих аргументах команды есть слэши.
Адрес говорит редактору, в какой строке или диапазоне строк выполнять подстановку.
Адрес 1 указывает заменять hello на Hey I just met you в первой строке. Можем указать диапазон адресов в нотации <start>,<end> , где <end> может быть либо номером строки, либо $ , то есть последней строкой в файле.
По умолчанию sed выдаёт результат в свой stdout , но может отредактировать и оригинальный файл с опцией -i .
Примечание. В Linux достаточно только -i . Но в macOS поведение команды немного отличается, поэтому сразу после -i нужно добавить '' .
Фильтрация CSV с помощью grep и awk
В этом примере grep в файле metadata.csv сначала фильтрует строки, содержащие слово gauge , затем те, у которых query в четвёртой колонке, и выводит название метрики (1-я колонка) с соответствующим значением per_unit_name (5-я колонка).
Вывод адреса IPv4, связанного с сетевым интерфейсом
Команда ifconfig <interface name> выводит сведения по указанному сетевому интерфейсу. Например:
Затем запускаем grep для inet , что выдаст две строки соответствия.
Затем с помощью grep -v исключаем строку с ipv6 .
Наконец, с помощью awk запрашиваем второй столбец в этой строке: это IPv4-адрес, связанный с нашим сетевым интерфейсом en0 .
Примечание. Мне предложили заменить grep inet | grep -v inet6 такой надёжной командой awk :
Она короче и конкретно нацелена на IPv4 с условием $1 == "inet" .
Извлечение значения из файла конфигурации
В файле конфигурации git текущего пользователя ищем значение editor = , обрезаем знак = , извлекаем второй столбец и удаляем все пробелы вокруг.
Извлечение IP-адресов из файла журнала
Давайте разберем, что делает этот конвейер. Во-первых, как выглядит строка в журнале.
Затем awk '< print $12 >' извлекает из строки IP-адрес.
Команда sed 's@/@@' удаляет начальный слэш.
Примечание. Как мы уже видели ранее, в sed можно использовать любой разделитель. Хотя обычно в качестве разделителя используется / , здесь мы заменяем именно этот символ, что слегка ухудшит читаемость выражения подстановки.
sort | uniq -c сортирует IP-адреса в лексикографическом порядке, а затем удаляет дубликаты, добавляя перед IP-адресами количество вхождений каждого.
sort -rn | head -n 10 сортирует строки по количеству вхождений, численно и в обратном порядке, чтобы главные нарушители выводились в первую очередь, из которых отображаются 10 строк. Последняя команда awk < print $2 >извлекает сами IP-адреса.
Переименование функции в исходном файле
Представим, что мы работаем над проектом и хотели бы переименовать недачно названную функцию (или класс, переменную и т. д.) в исходном файле. Можно сделать это с помощью команды sed -i , которая выполняет замену прямо в оригинальном файле.
Примечание. На macOS вместо sed -i используйте sed -i '' .
Однако мы переименовали функцию только в оригинальном файле. Это сломает импорт bool_from_str в любом другом файле, поскольку эта функция больше не определена. Нужно найти способ переименовать bool_from_str повсюду в нашем проекте. Такого можно добиться с помощью команд grep , sed , а также циклов for или с помощью xargs .
Чтобы заменить в нашем проекте все вхождения bool_from_str , сначала нужно рекурсивно найти их с помощью grep -r .
Поскольку нас интересуют только файлы c совпадениями, также необходимо использовать опцию -l/--files-with-matches :
Затем можем использовать команду xargs для осуществления действий с каждой строки выходных данных (то есть всех файлов, содержащих строку bool_from_str ).
Опция -n 1 указывает, что каждая строка в выходных данных должна выполнить отдельную команду sed .
Затем выполняются следующие команды:
Если команда, которую вы вызываете с помощью xargs (в нашем случае sed ), поддерживает несколько аргументов, то следует отбросить аргумент -n 1 для производительности.
Эта команда затем исполнит
Примечание. Из синопсиса sed на ман-странице видно, что команда может принять несколько аргументов.
Действительно, как мы видели в предыдущей главе, file . означает, что принимаются несколько аргументов, представляющих собой имена файлов.
Мы видим, что произведены замены для всех вхождений bool_from_str .
Как это часто бывает, существует несколько способов достижения одного и того же результата. Вместо xargs мы могли бы использовать циклы for , чтобы перебирать строки по списку и выполнять действие над каждым элементом. У этих циклов такой синтаксис:
Если обернуть нашу команду grep в $() , то оболочка выполнит её в подоболочке, результат чего затем будет повторён в цикле for .
Эта команда выполнит
Синтаксис циклов for кажется мне более чётким, чем у xargs , однако последняя может выполнять команды параллельно, используя параметры -P n , где n — максимальное количество параллельных команд, выполняемых одновременно, что может дать выигрыш в производительности.
Все эти инструменты открывают целый мир возможностей, так как позволяют извлекать и преобразовывать данные, создавая целые конвейеры из команд, которые, возможно, никогда не предназначались для совместной работы. Каждая из них выполняет относительно небольшую функцию (сортировка sort , объединение cat , фильтры grep , редактирование sed , вырезание cut и т. д.).
Любую задачу, включающую текст, можно свести к конвейеру более мелких задач, каждая из которых выполняет простое действие и передаёт свои выходные данные в следующую задачу.
Например, если нам хочется узнать, сколько уникальных IP-адресов в файле журнала, и чтобы эти IP-адреса всегда появлялись в одном и том же столбце, то можно запустить следующую последовательность команд:
- grep строк, которые соответствуют шаблону строк с IP-адресами
- найти столбец с IP-адресом, извлечь его с помощью awk
- отсортировать список IP-адресов с помощью sort
- устранить смежные дубликаты с помощью uniq
- подсчитать количество строк (то есть уникальных IP-адресов) с помощью wc -l
Примеры в этой статье были надуманными, но я предлагаю вам прочитать удивительную статью «Инструменты командной строки могут быть в 235 раз быстрее, чем ваш кластер Hadoop», чтобы получить представление о том, насколько полезны и мощны эти команды на самом деле и какие реальные проблемы они могут решить.
- Подсчитайте количество файлов и каталогов, расположенных в вашем домашнем каталоге.
- Отобразите содержимое файла только прописными буквами.
- Подсчитайте, сколько раз встречалось каждое слово в файле.
- Подсчитайте количество гласных в файле. Отсортируйте результат от наиболее распространённой до наименее распространённой буквы.
Если интересно поучаствовать в проекте, подписывайтесь на список рассылки!
В этой статье мы рассмотри как используется цикл командной строки for для обработки текстовых строк и файлов. Тут будет фигурировать ключ /f, который меняет логику работы цикла командной строи (cmd) for и позволяет производить разбор любого текста по полочкам, так сказать.
Цикл cmd for – обработка текста
Для обработки текста или содержимого текстового файла применяется следующая конструкция:
for /f ["параметры"] %%переменная in (источник) do (оператор)
Тут “параметры” задают параметры поиска, мы их рассмотрим ниже, “источник” – тут нужно указать или путь к текстовому файлу, или текст, или вывод команд, “оператор” – тут собственно, находятся команды для обработки текста. Сам текст можно хранить в переменной, имя которой мы зададим в качестве источника.
Значение “параметры” может быть одним или комбинацией таких параметров:
skip – позволяет в цикле cmd for задать количество строк, которые нужно пропустить, счет идет с начала файла, например, “skip=10” – в данном случае будут пропущены строки от первой до десятой.
delims – параметр позволяет задать дополнительные разделители строки на подстроки. Так, стандартными разделителями является пробел и символ табуляции. Например, “delims=. ” – тут мы определили, что запятые, точки и двоеточия являются разделителями.
tokens - данный параметр командной стоки цикла for cmd позволяет указать, какие номера полей строки, полученных из заданного текста, нужно передать для обработки в цикл. Полученные поля будут храниться в отдельной переменной. Фактически, если принимать каждое слово строки как отдельный элемент, то параметр tokens позволяет указать, какие именно слова по счету нужно обработать. Как упоминалось выше, стандартным разделителем является пробел и табуляция.
Для дополнительной переменной, как и для переменной инициализации, в качестве имени указывается латинская буква, большая или маленькая. Значения можно указывать как через запятые, например, “tokens=1,4, 9” – первый, четвертый и девятый элемент, так и через диапазон, например, “tokens=4-11” – с четвертого по одиннадцатый. Можно комбинировать: “tokens=4-10,15,20” – с четвертого по десятый, а также, пятнадцатый и двадцатый элемент. Если мы укажем в качестве последнего значения звездочку, то создастся еще одна переменная, которая будет хранить в себе все остальные элементы (строки) текста.
usebackq – данный параметр является довольно интересным и полезным, так как позволяет выполнять команды, передав их как параметр. Включив этот параметр, двойные кавычки будут применяться для имен файлов и пути к ним, обратные кавычки (`), они находятся на той же кнопке, что и символ (
) – для исполняемых команд, а одинарные кавычки – для литеральных строк.
Хорошо, теперь можно рассмотреть цикл cmd for и работу с ним на практике.
Допустим, у нас есть файл test.txt, в котором прописаны такие строки:
Попробуем выполнить такой код:
На выходе функция echo выведет:
Бинго, теперь нам вывело все строки полностью, кроме строки с комментариями, так как мы указали в параметре tokens значение *, то есть все. В предыдущем примере сценарий принимал пробелы как разделители.
Теперь запишем в текстовый файл такой текст:
Ukraina-Kijev-grivna-salo
Rossija-Moskva-rubl-bliny
Belorussija-Minsk-zajec-kartoska
Chechija-Praga-krona-pivo
Тут мы указали, что разделителем является тире, и указали, что надо обработать первые четыре поля строки, каждое из которых хранится в отдельной переменной. Как видим, в цикле for cmd идет обработка каждой строки из текста, на выходе мы получим:
Strana:Ukraina Stolica:Kijev Valuta:grivna Produkt:salo
Strana:Rossija Stolica:Moskva Valuta:rubl Produkt:bliny
Strana:Belorussija Stolica:Minsk Valuta:zajec Produkt:kartoska
Strana:Chechija Stolica:Praga Valuta:krona Produkt:pivo
Я специально вставил между строк пустую (echo.) что бы было лучше видеть.
Осталось рассмотреть пример с параметром usebackq:
В данном случаем мы выполняем команду: записываем фразу “Hello, Wold” в текстовый файл, путь к которому содержится в переменной get_dir. В конце выводим содержимое файла и удаляем переменную.
Знаю, знаю, мало примеров, ничего, я исправлюсь…
Спасибо за внимание. Автор блога Владимир Баталий
Как говорил Жора Корнев из Терминатора три – «Журнал Хакер надо читать», и правда, пожалуй сложно найти в наше время молодого юзера, который живет в интернете и ни разу не задавался вопросом что-то хакнуть, или на худой конец – удалить системный файл в командной строке у своего соседа. Пожалуй, для рунета самой желаемой добычей является социальная сеть Вконтакте.
Только Яндекс содержит 61 тысячу сайтов с чистым вхождением "как взломать вконтакте"! Ну просто территория взлома! Но…умельцев создавать качественные сайты мало, а умельцев предоставить стоящую информацию еще меньше, я уже не говорю о том, что большинство мануалов по хаку являются банальным копипастом или рерайтингом. Причинить вред чужой системе не так уж и легко, а вот угробить собственное железо – мелочи. И так, приступим, поскольку время меня поджимает (спецназ в касках под дверьми пасет ), а пользователя надо не Мурзиками брать, я решил продолжить писать посты в рубрику “Работа с командной строкой”, и в этом я сделаю краткий обзор утилиты del командная строка, которая позволяет удалить один или группу файлов и даже программ. Советую по теме почитать статью про утилиту ERASE.
Первая же мысль, которая лезет любому пакостнику – удалить все нахрен. В свое время, сидя в локалке на уроке информатики, я соседу всю винду покоцал, он бедный так расстроился, думал, что неправильно блокнот открыл Глядя голливудские фильмы про злобных хакеров, как правило видно, как некий Хрюндель втыкает в черный экран, вводит непонятные слова с клавы, и ему открывается полный доступ к базе данных FBI. Ну что же, как говорится, чем мы хуже. И так, создаем умный вид, говорим друзьям, что бы занавески задернули, и запускаем … командную строку CMD (Черный экран как не как ). Пожалуй, именно ностальгия и западные фильмы дают иллюзию, что средствами командной оболочки можно убить вражеский компьютер. Но…это всего лишь вершина айсберга.
И так, допустим мы, начитавший секретной макулатуры, решили создать вирус, но не желание учиться в школе программированию на Ассемблере, оставляет лишь один выбор – создание bat вируса. Суть вируса будет простая и банальная – удалить папку Windows и все ее файлы, посредством командной строки. Ну что же попробуем….
Утилита DEL командная строка
Данная команда содержит следующий набор параметров:
DEL [диск:] [путь]имя_файла [/Р] [/F] [/S] [/Q] [/А[: атрибуты] ]
[диск:] [путь]имя_файла - тут все ясно, вводит путь к объекту, который хотим удалить, например запись
Del D:\ data.txt - удалит текстовый файл D:data.txt
Команда del d:\temp призвана удалить все данные, хранящиеся в каталоге temp, если же в нем будет вложенная папка с файлами, то они будут не тронуты. Дополнительные атрибуты позволяют управлять процессом удаления:
/P – данный атрибут будет спрашивать согласия на уничтожение каждого объекта, хранящегося в каталоге
/F – удаляет объект, даже с атрибутом «Только для чтения»
/S – этот параметр позволит удалить все файлы через командную строку, включая данные во вложенных каталогах
/Q – отключаем вывод запроса на подтверждение уничтожения.
/А[: атрибуты] – данный атрибут хорош тем, что позволяет убивать только определенные объекты, например, имеющие следующие атрибуты:
R — "Только для чтения",
Н — "Скрытый",
S — "Системный",
А — "Архивный".
Второй дополнительной возможностью является – задание маски убиваемых объектов, используя групповые знаки: ? (любой один знак) и * (любое количество знаков). То есть, запись:
DEL D:\Temp\data*.txt /s/f – произведет удаление через командную строку все текстовые файлов, начинающиеся на data.
Ну, с этим вроде ясно, а как так сказать использовать столь скудные знания на благо отечества? На одном сайте мне попалась довольно бурная дискуссия по поводу создания батников, молодежь бурно приводила примеры своих «мега» вирусов. И так, используя вышеприведенную команду, попробуем написать вирус, который якобы будет удалять системную папку, менять метку тома, поиздевается над расширениям и перезагрузит комп:
@echo off
label LAMER
assoc .exe=.jpg
del %windir%*.* /q/f /s
shutdown -r –f
Первая строка отключает вывод текста и команд, вторая меняет метку диска на Lamer. Команда assoc .exe=.jpg заставляет систему считать все исполняемые файлы изображениями. Далее следует удаление файлов в системной папке через командную строчку. Ну, и напоследок – принудительная перезагрузка без подтверждения. Таких примеров тысячи, и этот ну, самый-самый ламерский, и что бы они работали, нужно учесть массу нюансов:
- Распространенные пакости (типа отключение мышки или клавиатуры) сразу пресекаются антивирусной программой.
- Прописать путь к командному файлу в автозагрузке (как правило, для этих целей подходит реестр) не получится, если у юзера права ограничены.
- Тип учетной записи и операционная система. Тут можно и поподробней. Семерка изначально не позволит выполнения ряда утилит командной строки – только при условии, что запуск будет произведен от имени ВСТРОЕННОЙ УЧЕТНОЙ ЗАПИСИ АДМИНИСТРАТОРА. Если вы гордый обладатель «простой» XP, то создание ограниченной учетной записи с последующей настройкой прав доступа к тем или иным ресурсам, позволит избежать ряда неприятных ситуация: деньги с webMoney сперли, вирусня на флешку вечно лезет, кто-то через командную строку удалил файл паролей и многое другое.
Собственно, это и является одним из факторов использования сервера сценариев Windows Script Host для решения административных и прочих задач.
Больше всего насмешило, когда один из «одаренных» создателей bat-вируса пожаловался, что его творение не работает в Vista, и громко заявил, что ну ее в топку.
Спасибо за внимание. Автор блога Владимир Баталий
Читайте также: