Сортировка файлов в командной оболочке Linux / Хабр

Описание

Отправляет результат сортировки содержимого указанных ФАЙЛОВ (всех ФАЙЛОВ) на стандартный
поток вывода. Все указываемые в командной строке файлы объединяются.

Основные параметры:

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

-b, –ignore-leading-blanks
игнорировать пробелы в начале сортируемых полей или начале ключей
-d, –dictionary-order
воспринимать в составе ключей лишь буквы (латинского алфавита), цифры и пробелы,
игнорируя все прочие символы
-f, –ignore-case
во время сортировки преобразует строчные (маленькие) в соответствующие прописные (большие) буквы,
т.е. выполняется сортировка нечувствительная к регистру символов
-g, –general-numeric-sort
выполнять сравнение в соответствии с общим числовым значением
(используют совместно с параметром -b). Это численная сортировка, при которой дополнительно
распознаётся экспоненциальное представление чисел (например, 9.1019e7)
-i, –ignore-nonprinting
в ключах рассматриваются только печатаемые (ASCII) символы, а остальные игнорируются
-M, –month-sort
выполнять сравнение по трёх-символьным сокращениям англоязычных названий месяцев, т.е.
(незнакомое) < `JAN’ < … < `DEC’
-n, –numeric-sort
числовая сортировка, т.е. сравнение ведётся по числовому значению
(используют совместно с параметром -b)
-r, –reverse
сортировка выполняется в обратном порядке (по убыванию)

Другие параметры:

-c, –check
проверяет сортировался ли указанный файл. Если да, то не выполняет сортировку,
иначе выводит сообщение об ошибке
-k, –key=ПОЗ1[,ПОЗ2]
выбирает ключ сортировки, начиная с позиции ПОЗ1 и заканчивая
позицией ПОЗ2 (включительно). Номера полей и смещения символов указываются,
начиная с 1
-m, –merge
объединяет ранее отсортированные ФАЙЛЫ, которые не сортируются повторно
-o, –output=ФАЙЛ
выводит результат в указанный файл ФАЙЛ вместо стандартного вывода
-s, –stable
стабилизирует сортировку, не выполняя сравнения последней пересортировки
-S, –buffer-size=РАЗМЕР
под основной буфер в памяти использует область размером РАЗМЕР
-t, –field-separator=СИМВОЛ
использовать СИМВОЛ в качестве разделителя полей
-T, –temporary-directory=КАТАЛОГ
использует указанный КАТАЛОГ для временных файлов, игнорируя переменную окружения
$TMPDIR или /tmp; составные параметры могут указывать на различные каталоги
-u, –unique
уникальная сортировка: игнорирует повторяющиеся строки.
Обычно применяют с параметром -c для проверки сортированных файлов с целью
прерывания выполнения, если встретится несколько одинаковых строк подряд;
без -c выводится только первая строка из одинаковых
-z, –zero-terminated
вместо символа новой строки (newline), завершает строки двоичным 0
–help
вывести справку о программе, её параметрах и завершить работу
–version
вывести информацию о версии программы и завершить работу

Синтаксис параметра
-k, –key=ПОЗ1[,ПОЗ2] означает следующее:

ПОЗ указывается в формате F[.C][OPTS], где F является порядковым номером поля, а C
позицией символа в этом поле. OPTS представляет собой одну или более одиночных букв, которые
означают рассмотренные выше параметры и их действие перекрывает действие
глобальных параметров для этого ключа.

sort -k1.3

осуществляет сортировку по первому полю, начиная с его третьего символа.
Команда

sort -k4.6,7n

означает сортировку с 6-го символа четвёртого поля до 1-го символа седьмого поля.
Сортировка ведётся по числовому значению.
Допускается задание нескольких параметров -k для того, чтобы определить несколько
ключей, которые будут использованы последовательно в том порядке, в котором они указаны
в командной строке.

Величина размера SIZE памяти, отводимой для работы команды sort может быть задана
со следующими суффиксами: % – 1% от общей памяти; b – в байтах; K – 1024 байт (по умолчанию);
и соответственно для M, G, T, P, E, Z, Y.

Если в командной строке не указан никакой файл или вместо имени стоит дефис,
считывается стандартный ввод (с клавиатуры).

*** ВНИМАНИЕ ***

На сортировку влияют установки локали.
Установите переменную окружения LC_ALL=C , чтобы получить обычную сортировку в том порядке,
который использует действительные значения байт.

Paste

paste

объединяет вместе два разных файла в один многоколоночный файл.

$ cat ingredients
eggs
milk
butter
tomatoes
$ cat prices
1$
1.99$
1.50$
2$/kg
$ paste ingredients prices
eggs    1$
milk    1.99$
butter  1.50$
tomatoes    2$/kg


По умолчанию

paste

использует разделитель табуляции, но его можно изменить с помощью параметра

-d

$ paste ingredients prices -d:
eggs:1$
milk:1.99$
butter:1.50$
tomatoes:2$/kg

Ещё один распространённый способ использования

paste

 — объединение всех строк в потоке или файле с помощью заданного разделителя, используя комбинацию аргументов

-s-d

$ paste -s -d, ingredients
eggs,milk,butter,tomatoes


Если в качестве входного файла указан параметр

-

, то вместо него будет считываться

stdin

$ cat ingredients | paste -s -d, -
eggs,milk,butter,tomatoes

Замена текста

Команда замены

sed

выглядит следующим образом:

s/PATTERN/REPLACEMENT/[options]

Пример

: замена первого экземпляра слова в каждой строке в файле:

$ cat hello
hello hello
hello world!
hi
$ cat hello | sed 's/hello/Hey I just met you/'
Hey I just met you hello
Hey I just met you world
hi


Мы видим, что в первой строчке заменяется только первый экземпляр

hello

. Чтобы заменить

все

вхождения

hello

во всех строках, можно использовать опцию

g

(означает

global

$ cat hello | sed 's/hello/Hey I just met you/g'
Hey I just met you Hey I just met you
Hey I just met you world
hi

sed

позволяет использовать любые разделители, кроме

/

, что особенно улучшает читаемость, если в самих аргументах команды есть слэши.

$ cat hello | sed 's@hello@Hey I just met you@g'
Hey I just met you Hey I just met you
Hey I just met you world
hi


Адрес говорит редактору, в какой строке или диапазоне строк выполнять подстановку.

$ cat hello | sed '1s/hello/Hey I just met you/g'
Hey I just met you hello
hello world
hi
$ cat hello | sed '2s/hello/Hey I just met you/g'
hello hello
Hey I just met you  world
hi

Адрес

1

указывает заменять

helloHey I just met you

в первой строке. Можем указать диапазон адресов в нотации

, где

может быть либо номером строки, либо

$

, то есть последней строкой в файле.

$ cat hello | sed '1,2s/hello/Hey I just met you/g'
Hey I just met you Hey I just met you
Hey I just met you world
hi
$ cat hello | sed '2,3s/hello/Hey I just met you/g'
hello hello
Hey I just met you world
hi
$ cat hello | sed '2,$s/hello/Hey I just met you/g'
hello hello
Hey I just met you world
hi


По умолчанию

sed

выдаёт результат в свой

stdout

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

-i

$ sed -i '' 's/hello/Bonjour/' sed-data
$ cat sed-data
Bonjour hello
Bonjour world
hi

Примечание. В Linux достаточно только -i. Но в macOS поведение команды немного отличается, поэтому сразу после -i нужно добавить ''.

Извлечение ip-адресов из файла журнала

Следующий реальный код ищет в журнале БД сообщение

Too many connections from

(за ним следует IP-адрес) и отображает десять главных нарушителей.

$ grep 'Too many connections from' db.log | 
  awk '{ print $12 }' | 
  sed 's@/@@' | 
  sort | 
  uniq -c | 
  sort -rn | 
  head -n 10 | 
  awk '{ print $2 }'
   10.11.112.108
   10.11.111.70
   10.11.97.57
   10.11.109.72
   10.11.116.156
   10.11.100.221
   10.11.96.242
   10.11.81.68
   10.11.99.112
   10.11.107.120


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

$ grep "Too many connections from" db.log | head -n 1
2020-01-01 08:02:37,617 [myid:1] - WARN  [NIOServerCxn.Factory:1.2.3.4/1.2.3.4:2181:NIOServerCnxnFactory@193] - Too many connections from /10.11.112.108 - max is 60

Затем

awk '{ print $12 }'

извлекает из строки IP-адрес.

$ grep "Too many connections from" db.log | awk '{ print $12 }'
/10.11.112.108
...


Команда

sed 's@/@@'

удаляет начальный слэш.

$ grep "Too many connections from" db.log | awk '{ print $12 }' | sed 's@/@@'
10.11.112.108
...

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

sed 's////'

sort | uniq -c

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

$ grep 'Too many connections from' db.log | 
  awk '{ print $12 }' | 
  sed 's@/@@' | 
  sort | 
  uniq -c
   1379 10.11.100.221
   1213 10.11.103.168
   1138 10.11.105.177
    946 10.11.106.213
   1211 10.11.106.4
   1326 10.11.107.120
   ...

sort -rn | head -n 10

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

awk { print $2 }

извлекает сами IP-адреса.

$ grep 'Too many connections from' db.log | 
  awk '{ print $12 }' | 
  sed 's@/@@' | 
  sort | 
  uniq -c | 
  sort -rn | 
  head -n 10 | 
  awk '{ print $2 }'
  10.11.112.108
  10.11.111.70
  10.11.97.57
  10.11.109.72
  10.11.116.156
  10.11.100.221
  10.11.96.242
  10.11.81.68
  10.11.99.112
  10.11.107.120

Использование команды sort — мегалекции

Команда sort выполняет сортировку по алфавиту текстового файла или выхода команды. Например, следующая команда сортирует содержимое файла List.txt и отображает результаты в окне командной строки:

sort < list.txt

В этом примере команда sort сортирует строки файла List.txt в алфавитном порядке и выводит результат на экран без изменения файла. Для сохранения результатов работы команды sort (вместо их отображения) введите символ «больше» (>) и имя файла. Например, следующую команду можно использовать для алфавитной сортировки строк файла List.txt и сохранения результатов в файле Alphlist.txt:

sort < list.txt > alphlist.txt

Для сортировки вывода команды следует ввести команду, затем символ канала (|) и команду sort (команда| sort). Например, следующая команда сортирует в алфавитном порядке строки, которые содержат слово “Jones” (вывод команды find):

find “Jones” maillst.txt | sort

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

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

В следующей таблице описаны операторы перенаправления потоков ввода и вывода команд.

Оператор перенаправления Описание
> Записывает данные на выходе команды вместо командной строки в файл или на устройство, например, на принтер.
< Читает поток входных данных команды из файла, а не с клавиатуры.
>> Добавляет выходные данные команды в конец файла, не удаляя при этом существующей информации из файла.
>& Считывает данные на выходе одного дескриптора как входные данные для другого дескриптора.
<& Считывает входные данные одного дескриптора как выходные данные другого дескриптора.
| Считывает выходные данные одной команды и записывает их на вход другой команды. Эта процедура известна под названием «канал».

По умолчанию, входные данные команды (дескриптор STDIN) отсылаются с клавиатуры интерпретатору команд Cmd.exe, далее Cmd.exe отправляет выходные данные команды (дескриптор STDOUT) в окно командной строки.

:/>  Инструкция по эксплуатации Prology CMD-220UR | Страница 3 / 16

В следующей таблице представлены доступные дескрипторы.

дескриптор Числовой эквивалент дескриптора Описание
STDIN Ввод с клавиатуры
STDOUT Вывод в окно командной строки
STDERR Ошибка вывода в окно командной строки
UNDEFINED 3-9 Эти дескрипторы определяются индивидуально для каждой прикладной программы.

Номера от 0 до 9 представляют первые 10 дескрипторов. Для запуска программы и перенаправления любого из 10 дескрипторов используется интерпретатор команд Cmd.exe. Для задания требуемого дескриптора перед оператором перенаправления введите его номер. Если дескриптор не определен, то по умолчанию оператором перенаправления ввода «<» будет ноль (0), а оператором перенаправления вывода «>» будет единица (1). После ввода оператора «<» или «>» необходимо указать, откуда читать и куда записывать данные. Можно задать имя файла или любой из существующих дескрипторов.

Для задания перенаправления в существующие дескрипторы используется амперсанд (&), затем номер требуемого дескриптора (например, &номер_дескриптора). Например, для перенаправления дескриптора 2 (STDERR) в дескриптор 1 (STDOUT):

1<&2

Дублирование дескрипторов

Оператор перенаправления «&» дублирует выходные или входные данные с одного заданного дескриптора на другой заданный дескриптор. Например, для отправки выводных данных команды dir в файл File.txt и отправки ошибки вывода в файл File.txt:

dir>c:file.txt 2>&1

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

Перенаправление ввода команд (<)

Для перенаправления ввода команд с цифровой клавиатуры на файл или на устройство используйте оператор «<». Например, для ввода команды sort из файла List.txt:

sort<file.txt

Содержимое файла File.txt появится в командной строке в виде списка в алфавитном порядке.

Оператор «<» открывает заданное имя файла с доступом только для чтения. Поэтому с его помощью нельзя записывать в файл. Например, при запуске программы с оператором <&2 все попытки прочитать дескриптор 0 ни к чему не приведут, так как изначально он был открыт с доступом только для записи.

Примечание

  • Дескриптор 0 задан по умолчанию для оператора перенаправления ввода «<».

Перенаправление вывода команд (>)

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

Для перенаправления вывода команд из окна командной строки в файл или на устройство применяется оператор «>». Этот оператор используется с большинством команд. Например, для перенаправления вывода команды dir в файл Dirlist.txt:

dir>dirlist.txt

Если файл Dirlist.txt не существует, интерпретатор команд Cmd.exe создаст его. Если файл существует, Cmd.exe заменит информацию в файле на данные, полученные от команды dir.

Для запуска команды netsh routing dump и последующей отправки результатов ее работы в Route.cfg:

netsh routing dump>c:route.cfg

Оператор «>» открывает заданный файл с доступом только для записи. Поэтому с помощью данного оператора файл прочитать нельзя. Например, при запуске программы с оператором перенаправления <&0 все попытки записать дескриптор 1 ни к чему не приведут, так как изначально дескриптор 0 был открыт с доступом только для чтения.

Примечание.

  • Дескриптор 1 задан по умолчанию для оператора перенаправления вывода «>».

Использование оператора «<&» для перенаправления ввода и дублирования

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

Например, для считывания файла File.txt на вход в дескриптор 0 (STDIN) введите:

<file.txt

Для открытия файла File.txt, сортировки его содержимого и последующей отправки в окно командной строки (STDOUT) введите:

sort<file.txt

Для того чтобы найти файл File.txt и перенаправить дескриптор 1 (STDOUT) и дескриптор 2 (STDERR) в Search.txt введите:

findfile file.txt>search.txt 2<&1

Для дублирования определенного пользователем дескриптора 3 в качестве входной информации для дескриптора 0 (STDIN):

<&3

Использование оператора «>&» для перенаправления ввода и дублирования

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

Для дублирования определенного пользователем дескриптора 3 в дескриптор 1 введите:

>&3

Для перенаправления всех выходных данных, включая выходные данные дескриптора 2 (STDERR), команды ipconfig в дескриптор 1 (STDOUT) и последующего перенаправления выходных данных в Output.log введите:

ipconfig.exe>>output.log 2>&1

Использование оператора «>>» для добавления вывода

Для добавления выходных данных команды в конец файла без потери хранящейся в нем информации используется двойной символ «больше» (>>). Например, следующая команда добавляет список каталогов, созданный командой dir, в файл Dirlist.txt:

dir>>dirlist.txt

Для добавления выходных данных команды netstat в конец файла Tcpinfo.txt введите:

netstat>>tcpinfo.txt

Использование оператора канала (|)

Оператор канала «вертикальная линия» (|) забирает выходные данные одной команды (по умолчанию STDOUT) и направляет их на вход другой команды (по умолчанию STDIN). Например, следующая команда сортирует каталог:

dir | sort

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


Воспользуйтесь поиском по сайту:

Сортировка файлов в командной оболочке Linux / Хабр

§

  • Append – разрешение программе открывать файлы данных в указанных папках, как будто они находятся в текущей папке
  • Arp – вывод и изменение записей кэша протокола ARP
  • Assoc – вывод или изменение связи между расширениями имени и типами файлов
  • At – запуск программ и команд в заданное время
  • Atmadm – контроль подключений и адресов, зарегистрированных диспетчером вызовов ATM в сетях с асинхронным режимом передачи (ATM)
  • Attrib – просмотр, установка атрибутов файла или каталога
  • Bootcfg – настройка, запрос или изменение параметров файла Boot.ini
  • Cacls – просмотр или изменение файлов избирательных таблиц управления доступом (DACL)
  • Call – вызов одного пакетного файла из другого без завершения выполнения первого файла
  • Chcp – просмотр номера текущей кодовой страницы или изменение текущей кодовой страницы консоли
  • Chdir (Cd) – вывод имени текущего каталога или переход в другую папку
  • Chkdsk – вывод на экран отчета о состоянии диска
  • Chkntfs – просмотр или задание планирования автоматической проверки системы для томов файловых систем FAT, FAT32 или NTFS при запуске компьютера
  • Cipher – отображение или изменение шифрования папок и файлов на томах NTFS
  • Cls – очистка окна командной строки
  • Cmd – запуск нового экземпляра программы командного процессора Cmd.exe
  • Cmstp – установка или удаление профиля службы диспетчера подключений
  • Color – изменение цвета текста и фона в окне командной строки для текущего сеанса
  • Comp – побайтное сравнение двух или нескольких файлов
  • Compact – вывод сведений или изменение уплотнения файлов и каталогов в разделах NTFS
  • Convert – преобразование томов с файловой системой FAT и FAT32 в тома с файловой системой NTFS
  • Copy – копирование одного или нескольких файлов из одного расположения в другое
  • Country – задание использования подсистемой MS–DOS международного формата для времени, дат, валют, разделителей и преобразования символов
  • Date – отображение текущей настройки системной даты
  • Debug – запуск Debug.exe, программы для проверки и отладки исполнительных файлов MS–DOS
  • Debug: a (assemble) – создание двоичного кода процессоров 8086/8087/8088 непосредственно в памяти
  • Debug: c (compare) – сравнение двух блоков памяти
  • Debug: d (dump) – просмотр содержимого заданного диапазона адресов памяти
  • Debug: e (enter) – ввод данных в память по заданному адресу
  • Debug: f (fill) – заполнение адресов в определенной области памяти заданными значениями
  • Debug: g (go) – выполнение загруженной программы
  • Debug: h (hexadecimal) – выполнение шестнадцатеричных арифметических операций над двумя заданными числами
  • Debug: i (input) – считывание и вывод на экран одного байта из указанного порта ввода
  • Debug: l (load) – загрузка файла или содержимого сектора диска в память
  • Debug: m (move) – копирование содержимого одного блока памяти в другой
  • Debug: n (name) – задание имени исполняемого файла для команд debug l (load) или w (write) или задание параметров для отлаживаемого исполняемого файла
  • Debug: o (output) – вывод байта в порт вывода
  • Debug: p (proceed) – выполнение цикла, строковой инструкции, программного прерывания или процедур, а также вход в другую инструкцию
  • Debug: q (quit) – окончание работы программы Debug.exe без сохранения тестируемого файла и возврат в командную строку
  • Debug: r (register) – редактирование содержимого одного или нескольких регистров ЦПУ
  • Debug: s (search) – поиск в области памяти по шаблону из одного или нескольких байт
  • Debug: t (trace) – выполнение одной инструкции с выводом содержимого регистров, флагов состояния и декодированной формы выполняемой инструкции
  • Debug: u (unassemble) – деассемблирование байтов и просмотр соответствующего исходного кода, включая адреса и двоичные значения
  • Debug: w (write) – запись файла или определенных секторов на диск
  • Debug: xa (allocate expanded memory) – выделение заданного количества страниц памяти EMS
  • Debug: xd (deallocate expanded memory) – освобождение дескриптора памяти EMS
  • Debug: xm (мар expanded memory pages) – отображение логической страницы памяти EMS, соответствующей заданному дескриптору, в физическую страницу памяти EMS
  • Debug: xs (display expanded memory status) – вывод сведений о состоянии памяти EMS
  • Defrag – поиск и объединение фрагментированных файлов загрузки, файлов данных и папок на локальных томах
  • Del (erase) – удаление заданных файлов
  • Device – загрузка в память указанного драйвера устройства
  • Devicehigh – загрузка драйвера устройства в верхнюю область памяти
  • Dir – вывод списка файлов и подкаталогов каталога
  • Diskcomp – сравнение содержимого двух гибких дисков
  • Diskcopy – копирование содержимого гибкого диска на другой форматированный или неформатированный гибкий диск
  • DiskPart – работающий в текстовом режиме командный интерпретатор, который позволяет управлять объектами (дисками, разделами или томами) с помощью сценариев или команд, вводимых с командной строки
  • Dos – задание в подсистеме MS-DOS поддержки связи с верхней областью памяти (UMA) или загрузки части системы в область высокой памяти (HMA)
  • Doskey – вызов программы Doskey.exe, которая позволяет повторно вызывать команды Windows XP, редактировать командные строки и создавать макросы
  • Dosonly – запрет запуска из командной строки Command.com программ, отличных от приложений MS-DOS
  • Driverquery – вывод списка всех установленных драйверов устройств и их свойств
  • Fc – сравнение двух файлов и вывод различий между ними
  • Fcbs – задание числа блоков управления файлом (FCB), которые могут быть одновременно открыты подсистемой MS-DOS
  • Files – задание количества файлов, к которым подсистема MS-DOS может иметь доступ одновременно
  • Find – поиск заданной строки текста в файле или нескольких файлах
  • Findstr – поиск образцов текста в файлах с использованием регулярных выражений
  • Finger – отображает сведения о пользователе или пользователях конкретного удаленного компьютера (обычно с операционной системой UNIX), запускающего службу Finger или демон
  • For – запуск некоторой команды для каждого файла из заданного множества
  • Forcedos – запуск заданной программы в подсистеме MS-DOS
  • Format – форматирование диска в заданном дисководе для использования системой Windows
  • Fsutil – служебная программа командной строки, которая используется для выполнения связанных задач файловых систем FAT и NTFS, таких как управление точками повторной обработки, управление разреженными файлами, отключение тома или расширение тома
  • Fsutil: behavior – запрашивает текущие настройки для создания имен файлов с длиной 8.3 символа, для возможности отображения расширенных символов в имена файлов длиной 8.3 символа в томах NTFS, для обновления штампа времени последнего доступа к томам NTFS, частоты событий, записанных в системных журнал, и количества места на диске, зарезервированного зоной основной таблицы файлов (MFT)
  • Fsutil: dirty – создает запрос, чтобы проверить, задан ли «грязный» бит тома
  • Fsutil: file – находит файл по идентификатору безопасности, запрашивает выделенные под файл области, задает короткое имя файла, допустимую длину данных файла, нулевые данные для файла, или создает новый файл
  • Fsutil: fsinfo – перечисляет все приводы, запрашивает тип приводов, сведения о томах, сведения NTFS о томах и статистику файловой системы
  • Fsutil: hardlink – жесткая связь представляет запись каталога для файла
  • Fsutil: objectid – управляет идентификаторами объектов (OID)
  • Fsutil: quota – управляет дисковыми квотами на томах
  • Fsutil: reparsepoint – запрашивает или удаляет точки повторной обработки
  • Fsutil: sparse – управляет разреженными файлами
  • Fsutil: usn – управляет журналом изменения номеров последовательных обновлений (USN), в котором сохраняется архив всех изменений файлов в томе
  • Fsutil: volume – управляет томом
  • Ftype – вывод или редактирование связи между типом файла и его расширением
  • Getmac – возвращает аппаратный (MAC) адрес
  • Goto – в пакетной программе передает управление Windows XP в строку, определенную меткой
  • Gpresult – отображение параметров групповой политики и результирующей политики (RSOP) для пользователя или компьютера
  • Gpupdate – обновляет локальные параметры и параметры групповой политики Active Directory, включая параметры безопасности
  • Graftabl – служит для включения возможности отображения расширенного набора символов в графическом режиме
  • Help – справка
  • Helpctr – запуск справки и поддержки
  • Hostname – отображение имени узла, входящего в состав полного имени компьютера
  • If – обработка условий в пакетных программах
  • Install – служит для загрузки резидентных программ в память
  • Ipconfig – служит для отображения всех текущих параметров сети TCP/IP и обновления параметров DHCP и DNS
  • Ipseccmd – служит для настройки политик IPSec (Internet Protocol Security) в службе каталогов либо в локальном или удаленном реестре
  • Ipxroute – служит для отображения и изменения таблицы маршрутизации протокола IPX
  • Irftp – служит для отправки файлов по инфракрасной связи
  • Label – служит для создания, изменения или удаления метки тома (т.е. имени) диска
  • Loadfix – служит для загрузки программы выше первых 64 Кбайт обычной памяти и запуска этой программы
  • Loadhigh – служит для загрузки программы в верхнюю область памяти
  • Lodctr – служит для регистрации имен новых счетчиков производительности и текста объяснения для службы или драйвера устройства, а также для сохранения и восстановления значений счетчика и текста объяснения
  • Logman – управляет и задает расписания для счетчиков производительности и журнала трассировки событий на локальном или удаленных компьютерах
  • Lpq – служит для отображения состояния очереди печати на компьютере, использующем программное обеспечение сервера печати Line Printer Daemon (LPD)
  • Lpr – служит для отправки файла на компьютер, использующий программное обеспечение сервера печати Line Printer Daemon (LPD), для подготовки к печати
  • Macfile – служит для управления серверами, томами, папками и файлами файлового сервера для «Макинтоша» из командной строки
  • Mem – служит для вывода сведений о свободных и занятых областях памяти и программах, находящихся в памяти подсистемы MS-DOS
  • Mkdir – создание папки или подпапки
  • Mmc – служит для открытия окна консоли MMC
  • Mode – служит для отображения состояния и изменения параметров системы, а также перенастройки портов или устройств
  • More – служит для поэкранного вывода информации
  • Mountvol – служит для создания, удаления и получения списка точек подключения тома
  • Move – служит для перемещения одного или нескольких файлов из одного каталога в другой
  • Msiexec – средство установки, изменения и выполнения операций установщика Windows из командной строки
  • Msinfo32 – служит для отображения подробных сведений об оборудовании, системных компонентах и среде программного обеспечения
  • Perfmon – позволяет открыть консоль «Производительность» Windows XP с настройками системного монитора из файлов настройки версии для Windows NT 4.0
  • Файл Pagefileconfig.vbs – позволяет администратору вывести и настроить параметры использования виртуальной памяти файлом подкачки
  • Path – устанавливает путь поиска в переменной среды PATH
  • Pathping – предоставляет информацию о латентности сети и потерях данных на промежуточных узлах между исходным пунктом и пунктом назначения
  • Pause – приостанавливает выполнение пакетной программы с выводом сообщения об ожидании нажатия пользователем любой клавиши
  • Pbadmin – администрирует телефонные книги
  • Pentnt – обнаруживает ошибки деления с плавающей точкой процессора Pentium, отключает аппаратную обработку чисел с плавающей точкой и включает эмуляции операций с плавающей точкой
  • Ping – с помощью отправки сообщений с эхо-запросом по протоколу ICMP проверяет соединение на уровне протокола IP с другим компьютером, поддерживающим TCP/IP
  • Popd – изменяет текущий в каталог на каталог, сохраненный командой pushd
  • Print – отправляет текстовый файл на принтер
  • Prncnfg.vbs – настраивает или отображает параметры принтера
  • Prndrvr.vbs – добавляет, удаляет и составляет списки драйверов
  • Prnjobs.vbs – приостанавливает, возобновляет, отменяет и перечисляет задания печати
  • Prnmngr.vbs – добавляет, удаляет и составляет список принтеров или подключений принтеров в дополнение к настройкам и выводу принтера, заданного по умолчанию
  • Prnport.vbs – создает, удаляет и составляет список стандартных TCP/IP-портов принтера в дополнение к выводу на экран и изменению настроек порта
  • Prnqctl.vbs – печатает пробную страницу, приостанавливает или возобновляет печать на принтере и чистит очередь принтера
  • Prompt – изменяет приглашение командной строки (Cmd.exe)
  • Pushd – сохраняет имя текущего каталога для команды popd и переходит в другой каталог
  • SC – взаимодействует с контроллером служб и установленными службами
  • Schtasks – настраивает выполнение команд и программ через заданные интервалы или в указанное время
  • Secedit – настраивает и анализирует безопасность системы, сравнивая текущую конфигурацию хотя бы с одним шаблоном
  • Set – устанавливает, удаляет и просматривает переменные среды
  • Setlocal – начало области задания для определения переменных среды в пакетном файле
  • Setver – устанавливает номер версии MS-DOS, который подсистема MS-DOS сообщает программам
  • Shell – указывает имя и местоположение альтернативного командного интерпретатора, которого использует Windows XP для подсистемы MS-DOS
  • Shift – изменяет положения пакетных параметров в пакетных файлах
  • Shutdown – позволяет выключать или перезапускать локальный или удаленный компьютер
  • Sort – считывает входящие данные, сортирует их
  • Stacks – поддерживает динамическое использование стеков данных при обработке аппаратных прерываний
  • Start – запускает определенную программу или команду в отдельном окне
  • Subst – устанавливает соответствие пути в файловой системе заданному диску
  • Switches – позволяет работать с расширенной клавиатурой как с обычной
  • Systeminfo – выводит на экран подробные сведения о конфигурации компьютера и операционной системы
  • Sfc – сканирует и проверяет версии всех защищенных системных файлов после перезапуска компьютера
  • Taskkill – завершает одно или несколько заданий или процессов
  • Tasklist – отображает список приложений и служб с кодом процесса (PID) для всех задач, выполняющихся на локальном или удаленном компьютере
  • Tcmsetup – настраивает или отключает клиента TAPI
  • Tftp – осуществляет обмен файлами с удаленным компьютером, обычно с компьютером под управлением UNIX, на котором выполняется служба или демон протокола Trivial File Transfer Protocol (TFTP)
  • Tracerpt – обрабатывает журналы трассировки событий и данные, поступающие в реальном масштабе времени от поставщиков трассировочных данных
  • Time – выводит и задает системное время
  • Typeperf – записывает данные счетчика производительности в командное окно или в файл журнала поддерживаемого формата
  • Title – создает заголовок окна командной строки
  • Tracert – определяет путь до точки назначения с помощью посылки в точку назначения эхо-сообщений протокола ICMP с постоянным увеличением значений срока жизни
  • Tree – представляет графически дерево каталогов заданного пути или диска
  • Type – вывод содержимого текстового файла на экран
  • Unlodctr – удаляет имена счетчиков производительности и текст объяснения для службы или драйвера устройства из системного реестра
  • W32tm – используется для определения причины неполадок, связанных со службой времени Windows
  • Winnt32 – выполняет установку или обновление до Windows XP
  • Winnt – выполняет установку или обновление до Windows XP
  • WMIC – программа WMIC представляет собой командную строку и интерфейс написания сценариев, которые упрощают использование инструментария управления Windows (WMI) и систем, управляемых с помощью WMI
  • Xcopy – копирует файлы и каталоги, включая подкаталоги

Сортировка файлов в командной оболочке Linux / Хабр

Обработка текста в командной оболочке

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

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

Заставьте каждую программу хорошо выполнять одну функцию — «Основы философии Unix»

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

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

Опция -t

(–field-separator=РАЗДЕЛИТЕЛЬ)

Позволяет указать иной разделитель объектов сортировки вместо пробела. Вернемся к файлу pay.txt:

 1. I.A.Ivanov  1700
 2. J.P.Zaytsev 1955
 3. T.N.Petrova 1000
 4. A.D.Afonin  1300

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

 sort -t '.' -k4 pay.txt
 
 4. A.D.Afonin  1300
 1. I.A.Ivanov  1700
 3. T.N.Petrova 1000
 2. J.P.Zaytsev 1955

Теперь мы задали разделителем точку и указали четвертую колонку.

Давайте рассортируем по алфавиту шеллы, доступные в системе, указав разделителем слэш (-t ‘/’):

 sort -t '/' -k2 /etc/shells
 
 /bin/ash
 /bin/bash
 /bin/csh
 /bin/ksh
 /bin/tcsh
 /bin/zsh 

В директории /etc масса файлов, в которых встречаются различные разделители. Часто это двоеточие:

 sort -t ':' -k3n /etc/passwd

Эта команда рассортирует файл /etc/passwd в порядке возрастания идентификационных номеров пользователей. Проделайте этот пример самостоятельно, у него длинный вывод, боюсь мой редактор будет не в восторге.

Надеюсь, с разделителями все ясно, правила их задания очень напоминают команду cut.

Переименование функции в исходном файле


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

sed -i

, которая выполняет замену прямо в оригинальном файле.

$ cat izk/utils.py
def bool_from_str(s):
    if s.isdigit():
        return int(s) == 1
    return s.lower() in ['yes', 'true', 'y']
$ sed -i 's/def bool_from_str/def is_affirmative/' izk/utils.py
$ cat izk/utils.py
def is_affirmative(s):
    if s.isdigit():
        return int(s) == 1
    return s.lower() in ['yes', 'true', 'y']

Примечание. На macOS вместо sed -i используйте sed -i ''.

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

bool_from_str

в любом другом файле, поскольку эта функция больше не определена. Нужно найти способ переименовать

bool_from_str

повсюду в нашем проекте. Такого можно добиться с помощью команд

grepsed

, а также циклов

for

или с помощью

xargs

Поиск файлов с заданным расширением и их сортировка


В предыдущих примерах мы решали наши задачи с помощью запуска какой-то одной команды (

ls

или

sort

). Но при работе в Linux часто возникает необходимость совместного использования двух или большего количества команд. Как это сделать? Сделать это можно с помощью

команд, перенаправляющего выходные данные одной команды на вход другой команды.

Следующая конструкция позволит найти (команда find) все markdown-файлы (-iname «*.md») в рабочей директории (.) и отсортировать их по алфавиту в нисходящем порядке (sort -r). Попробуйте поискать и посортировать другие файлы, меняя расширение «*.md» на какое-то другое.

find . -iname "*.md" | sort -r

Сортировка файлов в командной оболочке Linux / ХабрПоиск и вывод нужных файлов с сортировкой их по алфавиту в нисходящем порядке

Если вам удобнее сохранить то, что получится, в файл, а не выводить в консоль, воспользуйтесь опцией –output команды sort. В результате, например, может получиться такая конструкция: find . -iname «*.md» | sort -r –output=sorted.txt. В данном случае отсортированный список найденных файлов попадёт в файл sorted.txt.

Резюме

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

sort

, объединение

cat

, фильтры

grep

, редактирование

sed

, вырезание

cut

и т. д.).

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

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

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

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

Углубляемся: циклы for и xargs


Чтобы заменить в нашем проекте все вхождения

bool_from_str

, сначала нужно рекурсивно найти их с помощью

grep -r

$ grep -r bool_from_str .
./tests/test_utils.py:from izk.utils import bool_from_str
./tests/test_utils.py:def test_bool_from_str(s, expected):
./tests/test_utils.py:    assert bool_from_str(s) == expected
./izk/utils.py:def bool_from_str(s):
./izk/prompt.py:from .utils import bool_from_str
./izk/prompt.py:                    default = bool_from_str(os.environ[envvar])

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

-l/--files-with-matches

-l, --files-with-matches
        Only the names of files containing selected lines are written to standard out-
        put.  grep will only search a file until a match has been found, making
        searches potentially less expensive.  Pathnames are listed once per file
        searched.  If the standard input is searched, the string ``(standard input)''
        is written.
$ grep -r --files-with-matches bool_from_str .
./tests/test_utils.py
./izk/utils.py
./izk/prompt.py


Затем можем использовать команду

xargs

для осуществления действий с каждой строки выходных данных (то есть всех файлов, содержащих строку

bool_from_str

$ grep -r --files-with-matches bool_from_str . | 
  xargs -n 1 sed -i 's/bool_from_str/is_affirmative/'

Опция

-n 1

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

sed

Затем выполняются следующие команды:

$ sed -i 's/bool_from_str/is_affirmative/' ./tests/test_utils.py
$ sed -i 's/bool_from_str/is_affirmative/' ./izk/utils.py
$ sed -i 's/bool_from_str/is_affirmative/' ./izk/prompt.py

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

xargs

(в нашем случае

sed

), поддерживает несколько аргументов, то следует отбросить аргумент

-n 1

для производительности.

grep -r --files-with-matches bool_from_str . | xargs sed -i 's/bool_from_str/is_affirmative/'


Эта команда затем исполнит

$ sed -i 's/bool_from_str/is_affirmative/' ./tests/test_utils.py ./izk/utils.py ./izk/prompt.py

Примечание. Из синопсиса sed на ман-странице видно, что команда может принять несколько аргументов.

SYNOPSIS
     sed [-Ealn] command [file ...]
     sed [-Ealn] [-e command] [-f command_file] [-i extension] [file ...]

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

Мы видим, что произведены замены для всех вхождений

bool_from_str

$ grep -r is_affirmative .
./tests/test_utils.py:from izk.utils import is_affirmative
./tests/test_utils.py:def test_is_affirmative(s, expected):
./tests/test_utils.py:    assert is_affirmative(s) == expected
./izk/utils.py:def is_affirmative(s):
./izk/prompt.py:from .utils import is_affirmative
./izk/prompt.py:                    default = is_affirmative(os.environ[envvar])

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

xargs

мы могли бы использовать циклы

for

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

for item in list; do
    command $item
done


Если обернуть нашу команду

grep$()

, то оболочка выполнит её в

подоболочке

, результат чего затем будет повторён в цикле

for

$ for file in $(grep -r --files-with-matches bool_from_str .); do
  sed -i 's/bool_from_str/is_affirmative/' $file
done

Эта команда выполнит

$ sed -i 's/bool_from_str/is_affirmative/' ./tests/test_utils.py
$ sed -i 's/bool_from_str/is_affirmative/' ./izk/utils.py
$ sed -i 's/bool_from_str/is_affirmative/' ./izk/prompt.py


Синтаксис циклов

for

кажется мне более чётким, чем у

xargs

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

-P n

, где

n

— максимальное количество параллельных команд, выполняемых одновременно, что может дать выигрыш в производительности.

Вывод адреса ipv4, связанного с сетевым интерфейсом

$ ifconfig en0 | grep inet | grep -v inet6 | awk '{ print $2 }'
192.168.0.38


Команда

ifconfig <interface name>

выводит сведения по указанному сетевому интерфейсу. Например:

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 19:64:92:de:20:ba
    inet6 fe80::8a3:a1cb:56ae:7c7c%en0 prefixlen 64 secured scopeid 0x7
    inet 192.168.0.38 netmask 0xffffff00 broadcast 192.168.0.255
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active

Затем запускаем

grep

для

inet

, что выдаст две строки соответствия.

$ ifconfig en0 | grep inet
    inet6 fe80::8a3:a1cb:56ae:7c7c%en0 prefixlen 64 secured scopeid 0x7
    inet 192.168.0.38 netmask 0xffffff00 broadcast 192.168.0.255


Затем с помощью

grep -v

исключаем строку с

ipv6

$ ifconfig en0 | grep inet | grep -v inet6
inet 192.168.0.38 netmask 0xffffff00 broadcast 192.168.0.255

Наконец, с помощью

awk

запрашиваем второй столбец в этой строке: это IPv4-адрес, связанный с нашим сетевым интерфейсом

en0

$ ifconfig en0 | grep inet | grep -v inet6 | awk '{ print $2 }'
192.168.0.38

Примечание. Мне предложили заменить grep inet | grep -v inet6 такой надёжной командой awk:

$ ifconfig en0 | awk ' $1 == "inet" { print $2 }'
192.168.0.38

Она короче и конкретно нацелена на IPv4 с условием $1 == "inet".

Оставьте комментарий

Adblock
detector