Вывести строку файла утилита

Работа с файлами в си ввод и вывод в файл в си

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

В этой статье мы узнаем, как считывать данные из файлов и записывать информацию в файлы в программах си. Файлы в си используются для того, чтобы сохранять результат работы программы си и использовать его при новом запуске программы . Например можно сохранять результаты вычислений , статистику игр.
Чтобы работать с файлами в си необходимо подключить библиотеку stdio.h
#include
Чтобы работать с файлом в си необходимо задать указатель на файл по образцу
FILE *имя указателя на файл;
Например
FILE *fin;
Задает указатель fin на файл
Дальше необходимо открыть файл и привязать его к файловому указателю. Для открытия файла в си на чтение используется команда
Имя указателя на файл= fopen(«путь к файлу», «r»);
Например следующая команда
fin = fopen(«C:\\Users\\user\\Desktop\\data.txt», «r»);
откроет файл data.txt, находящийся на рабочем столе по пути C:UsersuserDesktop Чтобы узнать путь к файлу можно выбрать файл мышью нажать на правую кнопку мыши и выбрать свойства файла. В разделе Расположение будет указан путь к файлу. Обратите внимание , что в си путь указывается с помощью двух слешей.
После работы с файлом в си , необходимо его закрыть с помощью команды
fclose(имя указателя на файл)

Читайте также:  Как чистить мидии желудки

Считывание информации из текстового файла в Си

Чтобы можно было считывать русские символы из файла, необходимо настроить работу с Кириллицей с помощью команды
setlocale(LC_ALL, «Russian»);

При этом необходимо в начале программы подключить #include

Оператор fscanf()

Для считывания слова из файла в си используется команда fscanf(). Эта команда аналогична команде ввода информации с клавиватуры в си scanf() только первый параметр это указатель на файл
fscanf(указатель на файл,»%формат ввода данных1% форматввода данных2…»,&перменная1,&переменная2…);
Например команда
fscanf(fin,»%d%d%d»,&a,&b,&c);
считает из файла, который привязан к указателю на файл fin строку из трех целочисленных переменных
Разберем пример программы, которая считывает из текстового файла data.txt в которые записаны три столбца цифр информацию и записывает ее в массивы. Для каждого столбца информации свой массив. Подробно о работе с массивами в Си.
#include
#include
main()
< int a[10];
int b[10];
int c[10];
int i;
// определяем указатель на файл
FILE *fin;
// открываем файл на чтение
fin = fopen(«C:\\Users\\user\\Desktop\\data.txt», «r»);
// построчное считывание из файла
for (i=0;i

Построковое считывание информации из файла в СИ.Функция fgets ( )

Оператор fscanf() считывает из файла слово , т.е. до первого встречного пробела.
Чтобы считать из файла всю строку из файла в Си используется конструкция
if ( NULL != fgets (строковая переменная, длина строки, указатель на файл ) )
<
действия при считывании строки
>
Например программа на Си которая считывает две строки из файла и выводит их на экран
#include
#include
#include
main()
<
// задаем строковые перменные
char st1[100];
char st2[100];
//определяем указатель на файл
FILE *fin;
// настриваем работу с Кириллицей
setlocale(LC_ALL, «Russian»);
// открываем файл на чтение
fin = fopen(«C:\\data.txt», «r»);
// считываем первую строку из файла
if ( NULL != fgets ( st1, 100, fin ) )
<
// выводим строку на экран
printf(«%s «,st1);>
// считываем вторую строку из файла
if ( NULL != fgets ( st2, 100, fin ) )
<
// выводим строку на экран
printf(«%s\n»,st2);>
// закрываем файл на чтение
fclose(fin);
>

Читайте также:  Как вывести пятно от молочного коктейля

Запись информации в текстовый файл в Си

Для записи данных в файл в Си, необходимо открыть файл в режиме записи
Имя указателя на файл= fopen(«путь к файлу», «w»);
Для записи в строку текстового файла используется команда fprnitf(), которая аналогична команде printf() вывод на экран в си только первый параметр это указатель на файл
fprintf (имя указателя на файл,”%формат ввода”, переменные);
Например запись в файл out.txt значение переменной а
a=10;
fout = fopen(«C:\\Users\\user\\Desktop\\out.txt», «w»);
fprintf (fout,”%d”, a);
Пример программы на си которая запрашивает два числа и записывает в файл out.txt оба эти числа и их сумму

main()
< int a;
int b;
int c;
FILE *fout;
fout = fopen(«C:\\Users\\user\\Desktop\\out.txt», «w»);
printf («введите первое число \n»);
scanf(«%d», &a);
printf («введите второе число \n»);
scanf(«%d», &b);
c=a+b;
fprintf(fout,»%d %d %d»,a,b,c);
getch();
fclose(fout);
>

Вернуться к содержанию Перейти к уроку Ошибки в программах на си

Источник

Как сохранить в текстовый файл вывод командной строки Windows

Командная строка — неизменный компонент любой операционной системы Windows, который берет свое происхождение прямиком от её предка — операционной системы MS-DOS. Данная программа имеет довольно широкие возможности, но сейчас мы поговорим о довольно примитивной вещи — сохранение (по факту — перенаправление) вывода командной строки в текстовый файл.

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

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

Как видно, командная строка не вывела никакого результата введенной команды на экран, но зато сохранила все в файл ping.txt. К сожалению, существуют ограничения перенаправления вывода, которые не позволяют одновременно отображать вывод и в окне командной строки, и сохранять их в текстовый файл. Однако, можно воспользоваться хитростью — сразу по завершению выполнения команды вывести содержимое текстового файла на экран с помощью команды type. Получится что-то следующее:

Если требуется файл не записывать (существующий текстовый файл будет перезаписан), а дописывать (существующий текстовый файл будет дополнен), нужно вместо одного символа «>» использовать два — «>>».

В случае, если в текстовый файл нужно сохранить так же какой-то текст (например, в составе bat файла), то можно воспользоваться комбинацией с командой echo:

Содержимое получившегося текстового файла будет следующим:

Источник

Ввод данных из файла и вывод в файл

Открытие и закрытие файлов

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

В языке программирования C указатель на файл имеет тип FILE и его объявление выглядит так:

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

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

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

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

Объявление функции fopen() содержится в заголовочном файле stdio.h, поэтому требуется его подключение. Также в stdio.h объявлен тип-структура FILE.

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

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

Чтение из текстового файла и запись в него

fscanf()

Функция fscanf() аналогична по смыслу функции scanf() , но в отличии от нее осуществляет форматированный ввод из файла, а не стандартного потока ввода. Функция fscanf() принимает параметры: файловый указатель, строку формата, адреса областей памяти для записи данных:

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

Допустим, у нас есть файл содержащий такое описание объектов:

Тогда, чтобы считать эти данные, мы можем написать такую программу:

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

fgets()

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

Такой вызов функции прочитает из файла, связанного с указателем myfile, одну строку текста полностью, если ее длина меньше 50 символов с учетом символа ‘\n’, который функция также сохранит в массиве. Последним (50-ым) элементом массива str будет символ ‘\0’, добавленный fgets() . Если строка окажется длиннее, то функция прочитает 49 символов и в конце запишет ‘\0’. В таком случае ‘\n’ в считанной строке содержаться не будет.

В этой программе в отличие от предыдущей данные считываются строка за строкой в массив arr. Когда считывается следующая строка, предыдущая теряется. Функция fgets() возвращает NULL в случае, если не может прочитать следующую строку.

getc() или fgetc()

Функция getc() или fgetc() (работает и то и другое) позволяет получить из файла очередной один символ.

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

Запись в текстовый файл

Также как и ввод, вывод в файл может быть различным.

  • Форматированный вывод. Функция fprintf ( файловый_указатель, строка_формата, переменные ) .
  • Посточный вывод. Функция fputs ( строка, файловый_указатель ) .
  • Посимвольный вывод. Функция fputc() или putc( символ, файловый_указатель ) .

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

Запись в каждую строку файла полей одной структуры:

Построчный вывод в файл ( fputs() , в отличие от puts() сама не помещает в конце строки ‘\n’):

Пример посимвольного вывода:

Чтение из двоичного файла и запись в него

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

При открытии файла для двоичного доступа, вторым параметром функции fopen() является строка «rb» или «wb».

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

Функции fread() и fwrite() принимают в качестве параметров:

  1. адрес области памяти, куда данные записываются или откуда считываются,
  2. размер одного данного какого-либо типа,
  3. количество считываемых данных указанного размера,
  4. файловый указатель.

Эти функции возвращают количество успешно прочитанных или записанных данных. Т.е. можно «заказать» считывание 50 элементов данных, а получить только 10. Ошибки при этом не возникнет.

Пример использования функций fread() и fwrite() :

Здесь осуществляется попытка чтения из первого файла 50-ти символов. В n сохраняется количество реально считанных символов. Значение n может быть равно 50 или меньше. Данные помещаются в строку. То же самое происходит со вторым файлом. Далее первая строка присоединяется ко второй, и данные сбрасываются в третий файл.

Источник

Вывести строку файла утилита

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

1.1. cat, tail, head, tee: Команды для вывода содержимого файлов

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

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

для вывода содержимого файла журнала почтового демона на стандартный вывод [47] . Команда cat имеет очень полезную опцию ( -n ), которая позволяет вам выводить номера строк.

Некоторые файлы, типа журналов демонов (если они запущены) обычно имеют довольно большой размер [48] и полный их вывод на экран будет не очень полезным. Вообще говоря, вам нужны только несколько строк из файла. Для этого вы можете воспользоваться командой tail . Следующая команда выведет (по умолчанию) последние 10 строк из файла /var/log/mail/info :

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

В этом случае все изменения в файле /var/log/mail/info будут немедленно выводиться на экран. Использование команды tail с опцией -f весьма полезно, когда вам нужно знать, как работает ваша система. Например, наблюдая за файлом журнала /var/log/messages , вы сможете всегда получать обновленную информацию о системных сообщениях и различных демонах.

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

Вы можете использовать опцию -n для вывода последних n строк файла. Например, для вывода последних 2-х строк наберите:

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

Команда head похожа на tail , но она выводит первые строки файла. Следующая команда выведет (по умолчанию) первые 10 строк файла /var/log/mail/info :

Как и в случае с tail вы можете указать опцию -n для указания числа выводимых строк. Например, для вывода первых 2-х наберите:

Также вы можете использовать эти две команды совместно. Например, если вы хотите увидеть только строки 9 и 10, вы можете воспользоваться командой, в которой head выберет первые 10 строк из файла и передаст их по каналу в команду tail .

При этом последняя команда возьмет последние 2 строки и выведет их на экран. Таким же способом вы можете выбрать 20-ю от конца файла строку:

В этом примере мы говорим команде tail взять последние 20 строк и передать их по каналу в head . Затем команда head выводит на экран первую строку из полученных данных.

Допустим, что нам нужно вывести на экран результат последнего примера и сохранить его в файл results.txt . Нам может помочь утилита tee . Её синтаксис:

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

Давайте рассмотрим еще один пример. Нам нужно выбрать последние 20 строк, сохранить их в файл results.txt , а на экран вывести только первую из них. Тогда мы должны ввести следующее:

У команды tee есть полезная опция ( -a ), которая позволяет вам дописать данные в конец существующего файла.

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

1.2. grep: Поиск строк в файлах

Ни имя команды, ни её аббревиатура (« General Regular Expression Parser » — синтаксический анализатор общих регулярных выражений) не являются интуитивными, однако её действие и использование довольно просты: grep ищет в одном или нескольких файлах шаблон, заданный в качестве аргумента. Её синтаксис:

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

-i : поиск без учета регистра (т.е. игнорирование разницы между верхним и нижним регистром);

-v : обратный поиск. Вывод строк, которые не соответствуют шаблону;

-n : вывод номера строки для каждой из найденных строк;

-w : сообщает grep ‘у, что шаблон должен совпадать со всем словом.

Итак, давайте теперь вернёмся к анализу лог-файла почтового демона. Нам необходимо найти все строки в файле /var/log/mail/info , содержащие шаблон « postfix ». Для этого мы вводим такую команду:

Если нам нужно найти все строки, НЕ содержащие шаблона postfix , нам необходимо воспользоваться опцией -v :

Команду grep можно использовать в каналах.

Допустим, что нам нужно найти все сообщения об успешно отправленных письмах. В этом случае мы должны отфильтровать все строки, добавленные почтовым демоном в файл журнала (содержащие шаблон postfix ), и они должны содержать сообщение об успешной отправке ( status=sent ) [49] :

В этом случае команда grep использована дважды. Это разрешается, но выглядит не совсем красиво. Тот же результат может быть получен при помощи утилиты fgrep . По сути fgrep — это более простой способ для вызова grep -F . Сначала нам нужно создать файл, содержащий шаблоны, записанные в отдельной строке каждый. Такой файл может быть создан следующим образом (мы используем patterns.txt в качестве имени файла):

Проверьте результат командой cat . \n — это специальный шаблон, означающий « новую строку ».

Затем мы вызываем следующую команду, в которой мы используем файл patterns.txt и утилиту fgrep вместо « двойного вызова » команды grep :

Файл ./patterns.txt может содержать сколько угодно шаблонов. Например, для выборки сообщений о письмах, успешно отправленных на адрес peter@mandriva.com , достаточно будет добавить этот электронный адрес в наш файл ./patterns.txt , выполнив следующую команду:

Понятное дело, что вы можете комбинировать команду grep с tail и head . Если нам нужно найти сообщения о предпоследнем электронном письме, отправленном на адрес peter@mandriva.com , мы используем:

Здесь мы применили описанный выше фильтр и отправили результат через канал в команды tail и head . Они выбрали из данных предпоследнее значение.

1.3. egrep: Регулярные выражения и фильтрование

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

Как и в случае с fgrep , grep имеет сокращенный вызов для команды grep -E : egrep . egrep использует регулярные выражения вместо шаблонов, предоставляя нам более мощный интерфейс для « grep’анья » текста.

Вдобавок к тому, что мы упоминали в разделе Раздел 3, «Шаблоны подстановки в командном процессоре» при рассмотрении шаблонов подстановки, вот еще несколько дополнительных регулярных выражений:

[:alnum:] , [:alpha:] и [:digit:] могут быть использованы вместо определения классов самих символов и представляют, соответственно: все буквы плюс все цифры, все буквы (верхний и нижний регистры) и все цифры. У них есть дополнительное преимущество — они включают в себя международные символы и учитывают региональные настройки системы.

[:print:] представляет все символы, которые могут быть выведены на экран.

[:lower:] и [:upper:] представляют все буквы верхнего и нижнего регистров соответственно.

Существует много других доступных классов и вы можете просмотреть их в egrep (1) . Перечисленные выше классы являются наиболее часто используемыми.

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

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

Предшествующий элемент будет соответствовать 0 или более вхождениям.

Предшествующий элемент будет соответствовать одному или более вхождениям.

Предшествующий элемент соответствует ровно n вхождениям.

Предшествующий элемент соответствует n или более вхождениям.

Предшествующий элемент соответствует как минимум n вхождениям, но не более m раз.

Если вы заключите регулярное выражение в квадратные скобки, позже вы сможете восстановить его. Допустим, что вы указали выражение [:alpha:]+ . Оно может представлять слово. Если вы хотите определить дважды повторяющиеся слова, вы можете поместить это выражение в скобки и повторно использовать его с помощью \1 , если это первая группа. У вас может быть до 9 таких « записей ».

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

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

Также вы можете использовать символ | , определяющий вхождение для выражения слева от знака | или для выражения справа от этого знака. Этот оператор объединяет эти выражения. Используя созданный ранее файл testfile , вы можете попробовать поискать выражения, содержащие только дублирующиеся слова или содержащие дублирующиеся слова с числами:

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

И, в заключение, для использования опредёленных символов вы должны их « заэкранировать », вставив перед ними обратную косую черту. Вот эти символы: ? , + , < , | , ( , ) и конечно же \ . Для использования их в своих выражениях вы должны писать: \? , \+ , \< , \| , \( \) и \\ .

Эта маленькая хитрость может помочь избежать повторения вводимых слов в « вашем вашем » тексте.

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

1.4. wc: Подсчет элементов в файлах

Команда wc ( Word Count — подсчёт слов) используется для подсчёта числа строк, слов и символов в файлах. Также она полезна для вычисления самой длинной строки. Её синтаксис:

Список полезных опций:

-l : вывод количества строк;

-w : вывод количества слов;

-m : вывод общего количества символов;

-c : вывод количества байт;

-L : вывод длины самой длинной строки в тексте.

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

Если нам нужно определить число пользователей в нашей системе, мы можем ввести:

Если нам нужно узнать число CPU в нашей системе, мы пишем:

В предыдущем разделе мы получили список сообщений об успешно отправленных письмах на адреса, перечисленные в нашем файле ./patterns.txt . Если нам нужно узнать количество этих сообщений, мы можем перенаправить наш отфильтрованный результат через канал в команду wc :

1.5. sort: Сортировка содержимого файла

Ниже представлен синтаксис этой мощной утилиты для сортировки [50] :

Давайте отсортируем часть файла /etc/passwd . Как видите, этот файл не отсортирован:

Если нам нужно отсортировать его по полю login , мы набираем:

По умолчанию команда sort сортирует информацию по первому полю в порядке возрастания (в нашем случае по полю login ). Чтобы отсортировать данные в порядке убывания, используйте опцию -r :

Для каждого пользователя имеется свой собственный UID , записанный в файле /etc/passwd . Следующая команда сортирует файл в порядке возрастания по полю UID :

Здесь мы используем следующие опции sort :

-t»:» : сообщает sort ‘у, что разделителем полей является символ «:» ;

-k3 : означает, что сортировка должна быть выполнена по третьему столбцу;

-n : сообщает что выполняется сортировка числовых данных, а не буквенных.

То же самое может быть выполнено в обратном порядке:

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

-u : строгая сортировка: исключаются повторяющиеся поля сортировки;

-f : игнорирование регистра (строчные символы обрабатываются так же, как и прописные).

И, наконец, если мы хотим найти пользователя с максимальным UID , мы можем воспользоваться следующей командой:

где мы сортируем файл /etc/passwd в порядке возрастания по столбцу UID и перенаправляем результат по каналу в команду tail . Далее выводится первое значение отсортированного списка.

[47] Некоторые примеры в этом разделе основаны на реальной работе с файлами журналов некоторых серверов (служб, демонов). Убедитесь, что у вас запущен syslogd (позволяет журналировать действия демонов) и соответствующий демон (в нашем случае Postfix ), и что вы в работаете под root ‘ом. Естественно вы всегда можете применять наши примеры к другим файлам.

[48] Например, файл /var/log/mail/info содержит информацию обо всех отправленных письмах, сообщениях о выборке почты пользователями по протоколу POP и т.п.

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

[50] Здесь мы только вкратце рассмотрим sort . Об ее возможностях можно написать целую книгу.

Источник

Оцените статью
Замечание