Утилиты gzip — gunzip
Пользователям всегда недостаточно дискового пространства, поэтому инструменты для сжатия данных всегда актуальны. Утилита позволяет осуществить преобразования файлов, после которых они будут занимать меньше дискового пространства.
paul@rhel55 ~$ ls -lh text.txt -rw-rw-r-- 1 paul paul 6.4M апр 17 13:11 text.txt paul@rhel55 ~$ gzip text.txt paul@rhel55 ~$ ls -lh text.txt.gz -rw-rw-r-- 1 paul paul 760K апр 17 13:11 text.txt.gz
Вы можете получить оригинал вашего файла, воспользовавшись утилитой .
paul@rhel55 ~$ gunzip text.txt.gz paul@rhel55 ~$ ls -lh text.txt -rw-rw-r-- 1 paul paul 6.4M апр 17 13:11 text.txt
Тип времени
1.1 time_t
На самом деле, длинное целое число, представляет время UTC (0: 0AM 0:05 1 января 1970 года, время эпохи системы Linux) к текущей системе вторичной разницы во времени, обычно используется для временных функций:
Используя функцию Ctime (), мы можем преобразовать функцию времени добраться до времени и даты нашего привычного использования и вернуть его в строку.
Кроме того, если вы хотите сравнить разницу времени между двумя раз, вы можете использовать функцию Difftime ():
1.2 struct tm
Структура TM называется взорванным временем в стандарте ANSI. Из определения следующего мы также можем увидеть, что время разлагается в очень подробную область.
Функции Gmtime () и LoceTime () могут преобразовать форматы данных Time_T в форматы TM. Разница состоит в том, что результатом преобразования GMTime () — это информация, соответствующая GMT (центральному часовым поясам), и результатом преобразования локального () функции — это информация о текущем часовом поясе.
Функция функции MKTime () точно противоположная, и она преобразует структуру TM в Time_T тип времени.
Функция ASCTIME () представляет собой время и дату представления структуры TM в наше привычное использование и возвращается в строку.
1.3 struct timeval
Структура Timeval может получить время точности уровня MS, которая определяется следующим образом:
Функция, используемая структурой Timeval: GetTimeOfDay () и SettimeOfDay ():
1.4 struct timespec
Структура TimeSpec может обеспечить более высокие значения времени прецизионного времени, а уровень NS определяется следующим образом:
Соответствующая функция: clock_getime ():
Если CLK_ID используется для разработки соответствующего типа часов, могут использоваться разные типы для получения различных значений времени, с четырьмя видами:
- CLOCK_REALTIME: Система — это в режиме реального времени, начиная с UTC, если время изменяется соответственно пользовательскими изменениями;
- CLOCK_MONOTONIC:Когда система запускает запуск, даже если пользователь меняет время;
- CLOCK_PROCESS_CPUTIME_ID:Этот процесс начинает выполнять время в текущую программу систем процессора;
- CLOCK_THREAD_CPUTIME_ID:Этот рычаг начинается со временем выполнения в текущей программной системе CPU.
Утилита date
Утилита может использоваться для вывода информации о дате, времени, часовом поясе, а также дополнительной информации.
paul@rhel55 ~$ date Sat Apr 17 12:44:30 CEST 2010
Форматирование строки с информацией о дате может быть изменено в соответствии с вашими предпочтениями. Обратитесь к странице руководства для получения информации о других параметрах форматирования.
paul@rhel55 ~$ date +'%A %d-%m-%Y' Суббота 17-04-2010
Во всех системах Unix для подсчета времени используется количество секунд, прошедших с 1969 года (первой секундой является первая секунда первого дня января 1970 года). Для вывода времени Unix в секундах может использоваться команда .
paul@rhel55 ~$ date +%s 1271501080
Когда же значение этого счетчика достигнет двух миллиардов секунд?
paul@rhel55 ~$ date -d '1970-01-01 + 2000000000 seconds' Ср май 18 03:33:20 MSK 2033
Преобразование типа времени
2.1 Время преобразования типа
Введенные соответствующие функции времени и соответствующие функции обработки, давайте сделаем простой сводку различных типов времени, как показано ниже:
Большинство функций на рисунке были описаны в разделе 1, где две функции используются в структурных типах TM и пользователь, определенные в типе структуры TM и определенным пользователем. Convert между форматом отображения.
Функция STRFTIME () преобразует формат TM в формат формата и поместите его в главный адрес, а формат общего формата:
- Микро-неделя
- % Полное имя
- Микрофин
- % B полное имя
- Строка времени даты% C Standard
- Опубликовать два числа в% c
- Первый день ежемесячного указа
- % D месяц / день / год
- % e в двух символьном домене, первый день ежемесячного представления
- % F лет — месяц — день
- Следующие два числа% г старых, используйте недельный год
- % G старше, используйте недельный год
- % h Короткопичное имя месяца
- % H 24 часа часа
- % I 12 часов часов
- % J разумно выразил первые несколько дней
- Месяц, указанный% m dec
- Минимальное количество минут, обозначенных% м
- % N новый символ линии
- % P Местный AM или PM эквивалентно отобразить
- % R 12 часов времени
- % R показывает часы и минуты: HH: мм
- % S Десятичное количество секунд
- % T горизонтальная вкладка
- % T отображение времени STATH: HH: MM: SS
- % U Еженедельный день, в понедельник первый день (стоимость от 0 до 6, понедельник 0)
- % U, Годилой неделя, поставить воскресенье в качестве первого дня (стоимость от 0 до 53)
- Процент недели, используя ежедневный год
- Выполнение% WECIMAL (значение от 0 до 6, воскресенье 0)
- Неделя% W, в понедельник в качестве первого дня (стоимость от 0 до 53)
- % X Стандартная строка даты
- % X Стандартная строка времени
- % Y не займет десять лет (стоимость от 0 до 99)
- % Y принимает десятичный год века
- % Z,% Z Название часового пояса, если имя часового пояса не может быть получено, верните пустые символы.
- %% процентов знака
Функция STRPTIME () выполняет противоположную работу, преобразуйте функцию Rentime () обратно в формат структуры TM. Это определяется следующим образом:
Параметры для работы с командой dd
В довольно большой набор дополнительных параметров для конфигурации настроек. Мы рассмотрим основные из них:
- — Установить размер блока (), который система будет считывать. Оптимально использовать 4–8 MB;
- — Установить, сколько байт нужно записывать за один раз;
- — Выбрать определенное число блоков для копирования. А чтобы обозначить их размер, подключают -опцию.
- — обозначить сколько байт нужно считать за раз. По умолчанию — 512 байт.
- — Обозначить сколько байт нужно записать за раз. По умолчанию — 512 байт.
- — Пропустить определенное количество байт в начале вывода;
- — Пропустить определенное количество байт в начале ввода;
- — Параметр, чтобы преобразовать файл. Параметр имеет собственные параметры. С их помощью, например, можно конвертировать систему кодов ASCII в EBCDIC и наоборот. В таблице указаны основные способы конвертации файлов.
Параметр | Действие |
Заменить буквы верхнего регистра на нижний | |
Заменить буквы нижнего регистра на верхний | |
Не создавать выходной файл | |
Игнорировать ошибки ввода-вывода | |
Поменять местами каждую пару байтов ввода | |
Записывает данные выходного файла до окончания процесса | |
Аналогично , но еще записываются метаданные | |
Не обрезать выходной файл |
Назначение команды dd
Мы упоминали, что основная задача — обработка файлов. Но в Linux все устройства, порты, оперативная память и память с кодом процессов отображаются как файлы, а это значит, что над ними можно проводить операции в . Еще утилита позволяет осуществлять выборочное копирование файлов с диска. Например, переместить фрагмент файла определенного размера или пропустить несколько гигабайт. Эта функция также помогает считать файлы с поврежденного носителя, изменить расположение байтов в файле, создавать файлы фиксированного размера. Кроме этого в можно создать дополнительную копию загрузочного сектора жесткого диска или прочитать блоки из системных файлов.
Инсталляция iPerf
В большинстве случаев достаточно установить серверную часть приложения локально на «местный» сервер или удаленно на виртуальную машину, а затем подключиться к ней практически с любого компьютера, находящегося в общей ИТ-инфраструктуре. Программа бесплатная, имеет версии под платформы Linux и Windows.
Последние версии дистрибутивов доступны по адресам:
- Linux, Unix – https://github.com/esnet/iperf/releases
- Windows – https://sourceforge.net/projects/iperf2/files/
Инсталляция в Ubuntu и Debian осуществляется командой:
$ sudo apt install iperf3
В операционных системах CentOS и Fedora она выглядит иначе:
$ sudo dnf install iperf3
Перед первым запуском рекомендуется принудительно открыть необходимые порты в брандмауэре, чтобы утилита наверняка заработала. По умолчанию протоколы TCP и UDP используют порт 5201. Выполняется открытие командой:
$ firewall-cmd --permanent --add-port=5201/tcp $ firewall-cmd --permanent --add-port=5201/udp $ firewall-cmd –reload
Работать с программой придется в консоли, но особых затруднений это не вызывает, потому что синтаксис и перечень команд относительно просты. Например, запуск серверной части выполняется командой:
$ iperf –s
На экране появится сообщение Server listening on 5201. Оно означает, что сервер ждет запросов от клиентов (программа остается активной вплоть до перезагрузки операционной системы).
Клиентская часть, если речь идет о рабочих местах на Linux, работает аналогичным образом. Запускаемый файл всего один, различаются только префиксы и параметры вроде IP-адреса.
$ iperf -c 192.168.0.100
В приведенном примере программа будет обращаться к серверу, доступному по IP 192.168.0.100. После буквы -s или -c допускается ввод дополнительных команд, уточняющих задачу и позволяющих сохранить результаты в текстовом файле или вручную указать нестандартный порт.
Дата строкой
Опция -d позволяет работать на конкретную дату. Вы можете указать дату в виде удобочитаемой строки даты, как показано ниже:
date -d "2010-02-07 12:54:21"
Sun Feb 7 12:54:21 MSK 2010
Использование пользовательского форматирования:
date -d '16 Dec 1974' +'%A, %d %B %Y'
Monday, 16 December 1974
Строка даты также может принимать значения, такие как “tomorrow”, “friday”, “last friday” “next friday”, “next month”, “next week”… и т. д.
date -d "last week"
Sat May 25 14:31:42 MSK 2019
Вы также можете использовать параметр строки даты, чтобы показать местное время для разных часовых поясов. Например, чтобы показать местное время для 6:30 утра следующего понедельника по Московскому времени, введите:
date -d 'TZ="Europe/Moscow" 06:30 next Monday'
Mon Jun 10 06:30:00 MSK 2019
Синтаксис команды date
Программа может выполнятся от имени обычного пользователя. Стандартный синтаксис команды (квадратные скобки обозначают необязательное наличие):
date …
Ниже представлена таблица с часто применяемыми опциями для date.
Опция | Длинный вариант | Значение |
---|---|---|
-d STRING | —date=STRING | Вывод даты по указанной строке (например ‘yesterday’, ‘tomorrow’, ‘last monday’). |
-I | —iso-8601 | Вывод даты в формате ISO 8601. FMT по умолчанию содержит ‘date’. Также может содержать ‘hourse’, ‘minutes’, ‘seconds’, ‘ns’ для отображения соответствующих значений и часовой пояс относительно UTC рядом с датой. |
—rfc-3339=FMT | Вывод даты в формате RFC 3339. FMT по умолчанию содержит ‘date’. Также может содержать ‘seconds’ и ‘ns’ для отображения секунд или наносекунд. | |
-r FILE | —reference=FILE | Вывод даты последней модификации указанного файла в формате по умолчанию. |
-u | —utc | Вывод UTC-даты |
Аргумент ФОРМАТ отвечает за форматирование вывода даты. Для его указания необходимо поставить знак «+» и написать нужную маску. Наиболее популярные форматы:
Формат | Значение |
---|---|
%% | Знак процента |
%a | День недели текущей локали в короткой форме («Чтв») |
%A | День недели текущей локали в длинной форме («Четверг») |
%b | Месяц года текущей локали в короткой форме в родительном падеже («янв») |
%B | Месяц года текущей локали в длинной форме в родительном падеже («января») |
%c | Дата и время текущей локали без указания часового пояса |
%С | Первые две цифры текущего года |
%d | Числовой день месяца с ведущим нулём |
%D | Дата в формате %m/%d/%y |
%e | День месяца; аналог %_d |
%F | Дата в формате %Y-%m-%d |
%h | Аналог %b |
%H | Часы (00..23) |
%I | Часы (01..12) |
%j | День года (001..366) |
%m | Месяц (01..12) |
%M | Минуты (00..59) |
%n | Новая строка |
%q | Квартал года |
%S | Секунды (00..59) |
%t | Знак табуляции |
%T | Время в формате %H:%M:%S |
%u | Числовой день недели; 1 — понедельник |
%x | Дата в локальном формате |
%X | Время в локальном формате |
%Z | Аббревиатура временной зоны |
Как конвертировать строки в datetime
в Python — это метод из модуля datetime. Вот его синтаксис:
Аргументы формата необязательные и являются строками. Предположим, нужно извлечь текущие дату и время:
Копировать
Результат:
Результат будет в формате ISO 8601, то есть YYYY-MM-DDTHH:MM:SS.mmmmmm — формат по умолчанию, что позволяет получать строки в едином формате.
Таблица форматов:
Символ | Описание | Пример |
---|---|---|
%a | День недели, короткий вариант | Wed |
%A | Будний день, полный вариант | Wednesday |
%w | День недели числом 0-6, 0 — воскресенье | 3 |
%d | День месяца 01-31 | 31 |
%b | Название месяца, короткий вариант | Dec |
%B | Название месяца, полное название | December |
%m | Месяц числом 01-12 | 12 |
%y | Год, короткий вариант, без века | 18 |
%Y | Год, полный вариант | 2018 |
%H | Час 00-23 | 17 |
%I | Час 00-12 | 05 |
%p | AM/PM | PM |
%M | Минута 00-59 | 41 |
%S | Секунда 00-59 | 08 |
%f | Микросекунда 000000-999999 | 548513 |
%z | Разница UTC | +0100 |
%Z | Часовой пояс | CST |
%j | День в году 001-366 | 365 |
%U | Неделя числом в году, Воскресенье первый день недели, 00-53 | 52 |
%W | Неделя числом в году, Понедельник первый день недели, 00-53 | 52 |
%c | Локальная версия даты и времени | Mon Dec 31 17:41:00 2018 |
%x | Локальная версия даты | 12/31/18 |
%X | Локальная версия времени | 17:41:00 |
%% | Символ “%” | % |
Копировать
Результат:
Примеры конвертации строки в объект datetime с помощью strptime
Предположим, что есть следующая строка с датой: «11/17/20 15:02:34», и ее нужно конвертировать в объект .
Копировать
Результат:
Даты могут быть записаны в разных форматах. Например, следующие даты отличаются лишь представлением:
- Friday, November 17, 2020;
- 11/17/20;
- 11–17–2020.
Вот как это работает:
Копировать
Результат будет одинаковым для всех форматов:
Практические примеры
Если строка представлена в формате «Oct 17 2020 9:00PM», то ее можно конвертировать следующим образом:
Копировать
Результат — .
Функцию можно использовать для конвертации строки в объект даты:
Копировать
Результат:
Команда time
Вызов консольной команды time
Если стоит задача измерить только время выполнения команды в Linux, то все что вам необходимо — команда time.
Синтаксис данной команды очень простой:
# help time time: time pipeline Report time consumed by pipeline's execution. Execute PIPELINE and print a summary of the real time, user CPU time, and system CPU time spent executing PIPELINE when it terminates. Options: -p print the timing summary in the portable Posix format The value of the TIMEFORMAT variable is used as the output format. Exit Status: The return status is the return status of PIPELINE.
Пример вызова — замеряем время выполнения команды sleep 1:
# time sleep 1 real 0m1.003s user 0m0.001s sys 0m0.002s
С помощью ключа -p можно заставить команду выводить время выполнения в сжатом Posix формате:
# time -p sleep 1 real 1.00 user 0.00 sys 0.00
Другой time
Теперь разберемся, что же за команду мы выполняем:
# type time time is a shell keyword
Вот оно что! Оказывается, time, который мы вызывали — это внутренняя команда Shell.
А теперь попробуем сделать так:
# which time /usr/bin/time
# yum provides time time-1.7-38.el6.x86_64 : A GNU utility for monitoring a program's use of system : resources
А это уже внешняя команда, расположенная по пути: /usr/bin.
Попробуем вызвать ее:
# /usr/bin/time sleep 1 0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 640maxresident)k 0inputs+0outputs (0major+200minor)pagefaults 0swaps
Параметры вызова внешней команды time
-
Перенаправление вывода статистики в файл, вместо вывода в стандартный поток ошибок. По умолчанию, существующий файл будет полностью перезаписан.
Применяется для сбора статистики из программ с пользовательским интерфейсом или выводящих информацию в поток ошибок.
- Дополняет существующий файл новой информацией. Применяется совместно с опциями или .
-
Используется шаблон FORMAT для вывода статистики.
Формат вывода по умолчанию:
Описание используемых шаблонов приведено в конце статьи.
- Вывод краткой помощи и завершение команды.
-
Выводит информацию по стандарту POSIX 1003.2:
real %e
user %U
sys %S
- Выводит расширенную статистику использования ресурсов с описанием каждого параметра.
- «Тихий режим» — подавление вывода команды, в том числе и ошибок.
- Вывести версию команды time и завершить выполнение.
Внешний time по умолчанию
Чтобы явно указать, какую из команд мы хотим вызвать, можно воспользоваться следующим способом:
# command time Usage: time command
# builtin time real 0m0.000s user 0m0.000s sys 0m0.000s
Для того, чтобы по умолчанию запускалась внешняя команда time достаточно выполнить:
# alias time='command time'
Это установит внешнюю команду time по умолчанию для текущей сессии.
Чтобы применить эти изменения для всех последующих сессий, добавьте команду alias в файл ~/.bashrc (изменения для текущего пользователя) или /etc/bash.bashrc (изменения затронут всех пользователей системы).
Просмотр всех запланированных задач при помощи atq
Вы можете использовать программу atq в качестве альтернативы команде at -l для просмотра списка запланированных или выполняющихся в данный момент задач, а единственным аргументом этой программы является -q для указания определенной очереди.
#atq 3 Thu Oct 18 10:25:00 2012 a linuxaria 4 Thu Oct 18 20:00:00 2012 a linuxaria 6 Fri Oct 19 00:00:00 2012 a linuxaria
На мой взгляд, вывод программы не особенно полезен, так как вы не можете посмотреть, какая команда выполняется в рамках задачи с идентификатором 3 или любой другой задачи.
Для того, чтобы увидеть, что будет выполняться в рамках задачи, вы можете использовать следующую команду:
at -c идентификатор_задачи
Она выведет длинный список переменных окружения для выполнения команды и саму команду:
#at -c 6
#!/bin/sh
# atrun uid=1000 gid=1000
# mail linuxaria 0
umask 22
SSH_AGENT_PID=1579; export SSH_AGENT_PID
XDG_SESSION_COOKIE=586bed7d66c5f3bf0810f6ce0000001c-1350495018.439467-8023144; export XDG_SESSION_COOKIE
WINDOWID=25165830; export WINDOWID
GNOME_KEYRING_CONTROL=/tmp/keyring-m0UVoj; export GNOME_KEYRING_CONTROL
USER=linuxaria; export USER
LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri; export LIBGL_DRIVERS_PATH
SSH_AUTH_SOCK=/tmp/ssh-DbbUjzXR1501/agent.1501; export SSH_AUTH_SOCK
USERNAME=riccio; export USERNAME
SESSION_MANAGER=local/mint-desktop:@/tmp/.ICE-unix/1501,unix/mint-desktop:/tmp/.ICE-unix/1501; export SESSION_MANAGER
DEFAULTS_PATH=/usr/share/gconf/default.default.path; export DEFAULTS_PATH
XDG_CONFIG_DIRS=/etc/xdg/xdg-default:/etc/xdg; export XDG_CONFIG_DIRS
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games; export PATH
DESKTOP_SESSION=default; export DESKTOP_SESSION
PWD=/tmp; export PWD
GNOME_KEYRING_PID=1424; export GNOME_KEYRING_PID
LANG=en_US.UTF-8; export LANG
MANDATORY_PATH=/usr/share/gconf/default.mandatory.path; export MANDATORY_PATH
MDM_XSERVER_LOCATION=local; export MDM_XSERVER_LOCATION
SHLVL=1; export SHLVL
HOME=/home/linuxaria; export HOME
LOGNAME=linuxaria; export LOGNAME
XDG_DATA_DIRS=/usr/share/default:/usr/local/share/:/usr/share/:/usr/share/mdm/; export XDG_DATA_DIRS
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-QWgLeCbkps,guid=b1c32f270937311ee26524ff00000031; export DBUS_SESSION_BUS_ADDRESS
MDMSESSION=default; export MDMSESSION
WINDOWPATH=8; export WINDOWPATH
MDM_LANG=en_US.UTF-8; export MDM_LANG
XAUTHORITY=/home/linuxaria/.Xauthority; export XAUTHORITY
COLORTERM=gnome-terminal; export COLORTERM
cd /tmp || {
echo ‘Execution directory inaccessible’ >&2
exit 1
}
cp -a /project/source/* /backup/source/^C
Этот вывод позволяет гораздо лучше понять предназначение задачи.
Ограничение круга пользователей программы at
Файлы /etc/at.allow и /etc/at.deny устанавливают пользователей, которые могут планировать задачи для последующего исполнения при помощи программ at и batch. В качестве формата этих файлов используется простой список имен пользователей по одному в каждой строке. Использование пробелов в этих файлах не допускается.
Пользователь root может использовать программы at и batch при любых условиях.
В случае существования файла /etc/at.allow, на его основе устанавливается круг пользователей, которым разрешено планирование задач, но обычно в системах этого файла не существует.
Если файла /etc/at.allow не существует, проверяется файл /etc/at.deny, который обычно содержит длинный список «системных пользователей», таких как bin, backup, ftp или www-data, для которых планирование задач запрещено.