2 способа проброса туннелей с использованием ssh

1. туннель ssh

Дано: сервер ourproxy.provider.ru, стоящий на страже локальной сети. Этот сервер доступен извне и на нём работает демон sshd.

Требуется: получить из дома доступ к ресурсам внутри локальной сети, например, к интранет-серверу 10.10.5.1:80

Решение: выполнить на домашней машине команду, пробрасывающую туннель к искомому IP-адресу через ourproxy.provider.ru:

ssh -f -N user@ourproxy.provider.ru -L 8080:10.10.5.1:80

Опция -f говорит ssh, что после соединения нужно уйти в background.
Опция -N указывает, что никаких команд выполнять не нужно
Ключ -L означает, что соединения к localhost на порт 8080 нужно перенаправлять на 80 порт IP-адреса 10.10.5.1

Таким образом, набирая в браузере адрес http://localhost:8080, попадаем на нужный сервер.

2. обратный туннель ssh

Дано: компьютер на работе, находящийся за firewall’ом и nat’ом; компьютер дома с доступом в интернет; сервер ourproxy.provider.ru с работающим sshd, доступный обоим компьютерам. Но в данном случае прямой доступ с ourproxy.provider.ru к рабочей машине отсутствует.

Требуется: получить из дома доступ к сервису sshd на рабочем компьютере.

Решение: на рабочей машине выполнить команду:

ssh -f -N user@ourproxy.provider.ru -R 12345:localhost:22

Опции -f и -N описаны несколькими строчками выше.
Ключ -R означает, что подключения к порту 12345 на ourproxy.provider.ru будут перенаправляться на 22 порт рабочего компьютера.

После выполнения этой команды с рабочей машины можно будет попасть на эту машину с ourproxy.provider.ru, выполнив команду:

ssh -p 12345 user@locahost

По этому же принципу можно получить доступ к прочим ресурсам локальной сети. Вот еще один пример.

На рабочей машине:

ssh -f -N user@ourproxy.provider.ru -R 8080:10.10.5.1:80

На домашней машине:

ssh -f -N user@ourproxy.provider.ru -L localhost:8080:localhost:8080

Теперь, набрав в адресной строке браузера на домашнем компьютере http://localhost:8080, получаем доступ к интранет-серверу за двумя firewall-ами.

Конечно же, это приводит к серьёзной бреши в корпоративной безопасности, поэтому крайне не рекомендуется злоупотреблять этим советом.

Изучаем возможности директории /proc

Перевод статьи Federico Kereki «Discover the possibilities of the /proc directory».

Директория /proc — странный зверь. Она не существует на самом деле, но вы можете заглянуть в неё. Её файлы нулевой длины не являются ни бинарными, ни текстовыми, но вы можете открыть и просмотреть их. Эта специальная директория хранит все детали о вашей системе Linux, включая её ядро, процессы и параметры конфигурации. Изучая директорию /proc, вы можете изучить, как работают команды Linux, и даже сможете делать некоторые задачи администрирования.

В Linux все представлено в виде файла; даже к устройствам доступ происходит, как к файлам (в директории /dev). Не смотря на то, что вы можете подумать, что «нормальные» файлы либо текстовые, либо бинарные (или, возможно, файлы устройств или конвейеров), директория /proc содержит файлы странного типа, — виртуальные файлы. Их можно вывести списком, но на самом деле, они не существуют на диске; операционная система создает их «на лету», если вы делаете попытку их прочитать.

Большинство виртуальных файлов всегда имеют текущую метку даты/времени, говорящую о том, что они постоянно поддерживаются в рабочем состоянии. Директория /proc создается сама по себе каждый раз при загрузке системы. Вам нужно работать с правами суперпользователя, чтобы просмотреть всю директорию; некоторые из файлов (например, связанные с процессами) принадлежат пользователю, запустившему их. Хотя большинство файлов доступны только для чтения, несколько доступных для записи (в особенности в /proc/sys) позволяют вам менять параметры ядра (конечно, вы должны быть осторожны, делая это).

Организация директории /proc

Директория /proc состоит из виртуальных директорий и поддиректорий, которые группируют файлы по определенному принципу. Работая под суперпользователем, команда ls /proc выдаст что-то вроде этого:

1     2432  3340  3715  3762  5441  815
 
129   2474  3358  3716  3764  5445
 
1290  248   3413  3717  3812  5459
 
133   2486  3435  3718  3813  5479
 
1420  2489  3439  3728  3814  557
 
165   276   3450  3731  39    5842
 
166   280   36    3733  3973  5854
 
2     2812  3602  3734  4     6
 
2267  3     3603  3735  40    6381
 
2268  326   3614  3737  4083  6558
 
2282  327   3696  3739  4868  6561
 
2285  3284  3697  3742  4873  6961
 
2295  329   3700  3744  4878  7206
 
2335  3295  3701  3745  5     7207
 
2400  330   3706  3747  5109  7222
 
2401  3318  3709  3749  5112  7225
 
2427  3329  3710  3751  541   7244
 
2428  3336  3714  3753  5440  752
 
devices      modules
 
acpi       diskstats    mounts
 
asound     dma          mtrr
 
bus        execdomains  partitions
 
dri        fb           self
 
driver     filesystems  slabinfo
 
fs         interrupts   splash
 
ide        iomem        stat
 
irq        ioports      swaps
 
net        kallsyms     sysrq-trigger
 
scsi       kcore        timer_list
 
sys        keys         timer_stats
 
sysvipc    key-users    uptime
 
tty        kmsg         version
 
buddyinfo  loadavg      vmcore
 
cmdline    locks        vmstat
 
config.gz  meminfo      zoneinfo
 
cpuinfo    misc

Пронумерованные директории (остановимся на них позже) соответствуют каждому запущенному процессу; специальная символьная ссылка self указывает на текущий процесс. Некоторые виртуальные файлы предоставляют информацию о аппаратном обеспечении, например, /proc/cpuinfo, /proc/meminfo и /proc/interrupts. Другие дают информацию, связанную с файлами, например, /proc/filesystems или /proc/partitions. Файлы в /proc/sys относятся к конфигурации параметров ядра, как мы увидим позже.

Команда cat /proc/meminfo может дать следующее:

# cat /proc/meminfo
 
MemTotal:       483488 kB
 
MemFree:          9348 kB
 
Buffers:          6796 kB
 
Cached:         168292 kB
 
...несколько строк пропущены...

Если вы попробуете команды top или free, вы можете узнать некоторые из этих чисел. Фактически, несколько хорошо известных утилит получают доступ к директории /proc, чтобы получить информацию. Например, если вы хотите узнать, какую версию ядра вы используете, вы можете попробовать uname -srv или спуститься к истокам и набрать cat /proc/version. Есть ещё несколько других интересных файлов:

/proc/apm: содержит информацию о Advanced Power Management, если она установлена.

/proc/acpi: похожая директория, дающая хорошую информацию про более современный ACPI. К примеру, чтобы узнать, подключен ли ваш ноутбук к питанию AC, вы можете выполнить cat /proc/acpi/ac_adapter/AC/state и получить либо «on line», либо «off line»

/proc/cmdline: Показывает параметры, переданные ядру при загрузке. В моем случае, это root=/dev/disk/by-id/scsi-SATA_FUJITSU_MHS2040_NLA5T3314DW3-part3 vga=0x317 resume=/dev/sda2 splash=silent PROFILE=QuintaWiFi, что говорит о том, какой раздел файловой системы является основным, какой режим VGA используется и так далее. Последний параметр сделан с помощью Системы управления настройкой провилей openSUSE.

/proc/cpuinfo: Дает данные о процессоре вашего компьютера. Например, на моем ноутбуке, команда cat /proc/cpuinfo выводит листинг, начинающийся с:

processor       : 0
 
vendor_id       : AuthenticAMD
 
cpu family      : 6
 
model           : 8
 
model name      : Mobile AMD Athlon(tm) XP 2200+
 
stepping        : 1
 
cpu MHz         : 927.549
 
cache size      : 256 KB

Демонстрирующий, что у меня есть только один процессор, под номером 0, семейства 80686 (6 в cpu family идет в качестве средней цифры), — AMD Athlon XP, работающий минимум на 1 Гц.

/proc/loadavg: Файл, показывающий среднюю загрузку процессора; его информация включает использование ЦПУ в последнюю минуту, последние пять минут и последние 10 минут, а также число процессов, работающих в данный момент.

/proc/stat: Также предоставляет статистику, но последней загрузки.

/proc/uptime: Короткий файл, в котором только два числа — сколько секунд ваша система работает и сколько секунд она простаивает.

/proc/devices: Показывает все настроенные и загруженные символьные и блочные устройства. /proc/ide и /proc/scsi дает данные об устройствах IDE и SCSI.

/proc/ioports: Показывает информацию о зонах, используемых для ввода-вывода с вышеуказанными устройствами.

/proc/dma: Показывает используемые каналы DMA.

/proc/filesystems: Показывает типы файловых систем, поддерживаемых вашим ядром. Вот как это может выглядеть:

nodev   sysfs
 
nodev   rootfs
 
nodev   bdev
 
nodev   proc
 
nodev   cpuset
 
...несколько строк пропущено...
 
nodev   ramfs
 
nodev   hugetlbfs
 
nodev   mqueue
 
       ext3
 
nodev   usbfs
 
       ext2
 
nodev   autofs

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

/proc/mounts: Показывает всё смонтированное, что используется вашим компьютером (его вывод очень похож на /etc/mtab). Проще говоря, /proc/partitions и /proc/swaps покажет все разделы и пространство swap.

/proc/fs: Если вы открываете общий доступ к файловым системам с помощью NFS, в этой директории среди множества поддиректорий и файлов, есть /proc/fs/nfsd/exports, который показывает файловую систему, открытую для общего доступа и права на неё.

/proc/net: Содержит сетевую информацию. Описание каждого из файлов в этой директории займет слишком много места, но в ней есть /dev (каждое сетевое устройство), несколько файлов, связанных с iptables, сетевая статистика и статистика портов, информация о беспроводных подключениях и так далее.

Есть также несколько файлов, связанных с ОЗУ. Я уже упомянул о /proc/meminfo, но у вас также есть /proc/iomem, который показывает, сколько памяти использует ваша система и /proc/kcore, демонстрирующий физическую оперативную память ваше системы. В отличие от большинства других виртуальных файлов, размер /proc/kcore соответствует размеру вашей оперативной памяти и даже немного больше (не пытайтесь выполнить cat /proc/kcore, так как он имеет бинарное содержимое и завалит ваш экран). Наконец, здесь же есть много файлов и директорий, связанных с аппаратным обеспечением, такие как /proc/interrupts и /proc/irq, /proc/pci (все устройства PCI), /proc/bus и так далее, но они включают в себя очень специфическую информацию, которая не нужна большинству пользователей.

Что с процессами?

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

attr             cpuset   fdinfo
 
auxv             cwd      loginuid
 
clear_refs       environ  maps
 
cmdline          exe      mem
 
coredump_filter  fd       mounts
 
mountstats  stat
 
oom_adj     statm
 
oom_score   status
 
root        task
 
smaps       wchan

Давайте изучим основные файлы:

cmdline: Содержит команду, запустившую процесс, со всеми её параметрами.

cwd: Символьная ссылка на текущую рабочую директорию (CWD) процесса; exe ссылается на исполняемый процесс, а root на его корневую директорию.

environ: Показывает все переменные окружения процесса.

fd: Содержит все файловые дескрипторы для процесса, показывающие, какие файлы или устройства он использует.

maps, statm и mem: Работают с памятью, используемой процессом.

stat и status: Предоставляют информацию о статусе процесса, но последний — более четкую и упорядоченную.

Эти файлы дают несколько возможностей для написания скриптов. Например, если вы хотите отследить процессы-зомби, вы можете пройти по всем пронумерованным директориям и проверить содержание строки «(Z) Zombie» в файле /status. Однажды мне надо было проверить, запущена ли определенная программа. Я сделал проход по директориям и проверил файлы /cmdline, в поисках необходимой строки (вы также можете сделать это с помощью команды ps, но в этой статье это не рассматривается). А если вы хотите написать top, который будет выглядеть лучше, вся необходимая информация в ваших руках.

Настройка системы: /proc/sys

/proc/sys не только дает информацию о системе, она также позволяет изменять параметры ядра «на лету», активируя и дезактивируя его возможности (конечно, это может принести и вред вашей системе, — будьте осторожны!).

Чтобы определить, какой файл для настройки, а какой только для чтения, выполните ls -ld. Если файл имеет аттрибут «W», это значит, что вы можете использовать его каким-либо образом для настройки ядра. К примеру, ls -ld /proc/kernel/* начинается примерно так:

dr-xr-xr-x 0 root root 0 2008-01-26 00:49 pty
 
dr-xr-xr-x 0 root root 0 2008-01-26 00:49 random
 
-rw-r--r-- 1 root root 0 2008-01-26 00:49 acct
 
-rw-r--r-- 1 root root 0 2008-01-26 00:49 acpi_video_flags
 
-rw-r--r-- 1 root root 0 2008-01-26 00:49 audit_argv_kb
 
-r--r--r-- 1 root root 0 2008-01-26 00:49 bootloader_type
 
-rw------- 1 root root 0 2008-01-26 00:49 cad_pid
 
-rw------- 1 root root 0 2008-01-26 00:49 cap-bound

Как видете, bootloader_type не может быть изменен, но остальные файлы могут. Чтобы изменить файл, используйте что-то вроде echo 10 >/proc/sys/vm/swappiness. Конкретно этот пример позволит вам настроить производительность страничной организации виртуальной памяти. Кстати, эти изменения — временные и их результаты будут отменены при перезагрузке. Используйте sysctl и файл /etc/sysctl.conf, чтобы сделать более постоянные изменения.

Давайте поверхностно посмотрим на директории в /proc/sys:

debug: Содержит (сюрприз!) отладочную информацию. Это полезно, если вы занимаетесь разработкой ядра.

dev: Предоставляет информацию о специфических устройствах в вашей системе. Например, проверьте директорию /dev/cdrom.

fs: Дает данные о каждом возможном аспекте файловой системы.

kernel: Позволяет вам затрагивать работу и настройки ядра напрямую.

net: Допускает вас до вопросов, связанных с сетью. Будьте осторожны, потому как запутавшись в этом, вы можете потерять подключение.

vm: Работает с подсистемой VM.

Заключение

Специальная директория /proc предоставляет детальную информацию о внутренней работе Linux и позволяет вам улучшить многие аспекты его настройки. Если вы потратите немного больше времени, изучая все возможности этой директории, вы сможете получить более совершенную систему Linux. А не этого ли мы все желаем?

Установка расширений PECL

Введение в установку PECL

» PECL — это репозиторий расширений PHP, которые доступны вам через систему » PEAR. Эта часть руководства предназначена для демонстрации того, как вы можете получить и установить расширения PECL.

Эти инструкции подразумевают, что /your/phpsrcdir/ является путем к каталогу с дистрибутивом исходного кода PHP, а extname — это имя расширения PECL. Поэтому, приведем в соответствие. Эти инструкции также подразумевают знакомство с » командой pear. Информация в руководстве PEAR для команды pear также применима для команды pecl.

Для того, чтобы расширение можно было использовать, оно должно быть собрано, установлено и загружено. Методы, описанные ниже, предоставляют вам различные рекомендации по поводу того, как собрать и установить расширения, но сами они не будут автоматически загружены. Расширения могут быть загружены через добавление директивы extension в файл php.ini, или путем использования функции dl().

В процессе сборки модулей PHP важно, чтобы у вас были правильные версии необходимых утилит (autoconf, automake, libtool и т.д.). Информацию об этих утилитах и их версиях можно посмотреть тут » Anonymous CVS Instructions.

Загрузка расширений PECL

Есть несколько вариантов для загрузки расширений PECL, в том числе:

  • » http://pecl.php.net/Вебсайт PECL содержит информацию о различных расширениях, которые предоставлены PHP Development Team. Информация, доступная на этом вебсайте, включает в себя: лог изменений, новости релизов, требования и другие подобные детали.
  • pecl download extnameРасширения PECL, которые были опубликованы на сайте PECL, доступны для скачивания и установки через » команду pecl. Также, могут быть также указаны особые ревизии.
  • CVSБольшинство расширений PECL, также, находятся в CVS. Веб-интерфейс для просмотра доступен по адресу » http://cvs.php.net/pecl/. Для загрузки напрямую из CVS используется следующая последовательность команд. Стоит отметить, что пользователь cvsread имеет пароль phpfi:
    $ cvs -d:pserver:cvsread@cvs.php.net:/repository login
    $ cvs -d:pserver:cvsread@cvs.php.net:/repository co pecl/extname
  • Загрузка для Windows Пользователи Windows могут найти скомпилированные расширения PECL путем скачивания Collection of PECL modules со страницы » PHP Downloads, либо через » PECL Snapshot, либо расширения DLL на странице » PECL4WIN. Для компиляции PHP под Windows прочитайте соответствующий раздел
  • PECL для пользователей Windows

    Как и в случае DLL расширения PHP, установка проста и заключается в копировании файла DLL расширения PECL в директориюextension_dir и подключением затем его через php.ini. Например, добавьте следующую строку в ваш php.ini:

    extension=php_extname.dll

    После выполнения этих действий, перезапустите web-сервис.

    Компиляция общих расширений с помощью команды pecl

    PECL позволяет легко создавать общие расширения PHP. Используя » команду pecl, выполните следующее:

    $ pecl install extname

    Эта команда загрузит исходный код для расширения extname, скомпилирует и установит extname.so в вашу директорию extension_dir. Файл extname.so может быть затем загружен в php.ini

    По умолчанию, команда pecl не будет устанавливать пакеты, отмеченные состоянием alpha или beta. Если нет доступных стабильных версий пакетов, вы можете установить beta версию пакета, используя следующую команду:

    $ pecl install extname-beta

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

    $ pecl install extname-0.1

    Замечание: После подключения расширения в php.ini необходимо перезапустить web-сервис для того, чтобы изменения вступили в силу.

    Компиляция общих расширений с помощью phpize

    Иногда, использование инсталятора pecl не подходит. Это может быть связано с тем, что вы находитесь за файерволом или из-за того, что расширение, которое вы хотите установить, недоступно в PECL-совместимом пакете (к примеру, расширения из CVS, которые еще не зарелизены). Если вам необходимо собрать такое расширение, вы можете использовать низкоуровневые утилиты для выполнения сборки вручную.

    Команда phpize используется для подготовки окружения для расширения PHP. В следующем примере директория, где находятся исходные коды расширения, называется extname:

    $ cd extname
    $ phpize
    $ ./configure
    $ make
    # make install

    В случае успешной установки будет создан файл extname.so и помещен в PHP extensions directory. Вам будет необходимо добавить строку extension=extname.so в php.ini перед тем, как вы станете использовать это расширение.

    Если в системе отсутствует phpize, но существует возможность установки заранее скомпилированных пакетов (типа RPM), убедитесь, что установлена соответствующая devel версия пакета PHP, так как они часто содержат команду phpize с подходящими файлами заголовоков для сборки PHP и его расширений.

    Используйте phpize —help для просмотра дополнительной информации.

    Компиляция расширений PECL статически в PHP

    Возможно, вы захотите собрать расширение PECL статично в ваш бинарйный файл PHP. Для этого необходимо поместить код расширения в директорию php-src/ext/ и вызвать перегенерацию конфигурационных скриптов через систему сборки PHP.

    $ cd /your/phpsrcdir/ext
    $ pecl download extname
    $ gzip -d < extname.tgz | tar -xvf -
    $ mv extname-x.x.x extname

    В результате будет создана следующая директория:

        /your/phpsrcdir/ext/extname

    После этого, выполните заново сборку конфигурационного скрипта PHP и затем соберите PHP как обычно:

    $ cd /your/phpsrcdir
    $ rm configure
    $ ./buildconf --force
    $ ./configure --help
    $ ./configure --with-extname --enable-someotherext --with-foobar
    $ make
    $ make install

    Замечание: Для запуска скрипта ‘buildconf’ вам необходимы autoconf версии 2.13 и automake версии 1.4+ (более новые версии autoconf могут работать, но это не поддерживается).

    Одна из двух опций —enable-extname или —with-extname используется в зависимости от расширения. Обычно, в случае, когда расширение не требует подключения внешних библиотек, используется —enable. Для того, чтобы убедиться в этом, выполните следующую команду после buildconf:

    $ ./configure --help | grep extname

    Хранение изображений в базе данных MySQL

    Для хранения изображений в базе данных MySQL необходимо определить одно из полей таблицы как производное от типа BLOB. Сокращение BLOB означает большой двоичный объект. Тип хранения данных BLOB обладает несколькими вариантами:

    • TINYBLOB — может хранить до 255 байт
    • BLOB — может хранить до 64 килобайт информации
    • MEDIUMBLOB — до 16 мегабайт
    • LONGBLOB — до 4 гигабайт

    Соответсвенно, для хранения изображений нам надо создать таблицу images с двумя полями:

    • id — уникальный ID изображения
    • content — поле для хранения изображения

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

    <form action="putimage.php" enctype="multipart/form-data" method="post"> Изображение: <input name="image" type="file" />
    <input type="submit" value="Загрузить" />
    </form>Обработчик формы - файл putimage.php:
    // Проверяем пришел ли файл
    if( !empty( $_FILES['image']['name'] ) ) {
    // Проверяем, что при загрузке не произошло ошибок
    if ( $_FILES['image']['error'] == 0 ) {
    // Если файл загружен успешно, то проверяем - графический ли он
    if( substr($_FILES['image']['type'], 0, 5)=='image' ) {
    // Читаем содержимое файла
    $image = file_get_contents( $_FILES['image']['tmp_name'] );
    // Экранируем специальные символы в содержимом файла
    $image = mysql_escape_string( $image );
    // Формируем запрос на добавление файла в базу данных
    $query="INSERT INTO `images` VALUES(NULL, '".$image."')";
    // После чего остается только выполнить данный запрос к базе данных
    mysql_query( $query );
    }
    }
    }
    ?>

    Извлечь сохраненный файл изображения можно следующим образом (файл image.php):

    if ( isset( $_GET['id'] ) ) {
    // Здесь $id номер изображения
    $id = (int)$_GET['id'];
    if ( $id > 0 ) {
    $query = "SELECT `content` FROM `images` WHERE `id`=".$id;
    // Выполняем запрос и получаем файл
    $res = mysql_query($query);
    if ( mysql_num_rows( $res ) == 1 ) {
    $image = mysql_fetch_array($res);
    // Отсылаем браузеру заголовок, сообщающий о том, что сейчас будет передаваться файл изображения
    header("Content-type: image/*");
    // И  передаем сам файл
    echo $image['content'];
    }
    }
    }
    ?>

    Чтобы вывести изображение в HTML-документе, делаем так:

    <img src="image.php?id=17" alt="" />

    И последнее: графические файлы иногда имеют довольно большой размер, убедитесь, что настройки сервера позволяют работать с таким объемом данных. В файле php.ini это директивы post_max_size — определяет максимальный объем данных передаваемых методом POST, и upload_max_filesize — определяет максимальный размер загружаемого файла. Так же проверьте, позволяют ли настройки MySQL обрабатывать запросы с большим объемом данных (директива max_allowed_packet файла my.ini).

    Поиск файла по его временным атрибутам

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

    Например

    • Найти все папки измененные с конца обеда вчерашнего дня
    $> find . -newerct 'yesterday 14:00' -and -type d -print
    • Найти и удалить все файлы старше двух недель
    $> find . -not -newerBt '2 week ago' -and -type f -unlink
    • Нужно найти все файлы, которые были созданы с трех часов ночи позавчерашнего до обеда вчерашнего дня
    $> find . -newerBt '2 day ago 03:00' -and -not -newerBt 'yesterday 13:00' -and -type f -print

    Список ключей, ответственных за фильтрацию по временным атрибутам

    -Bmin n
    Истина если разница между временем создания файла и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

    -Bnewer file
    Смотрите описание -newerBm.

    -Btime n[smhdw]
    Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем создания файла и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
    Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения информации о файле и временем начала поиска составляет n единиц времени. Пожалуйста обратитесь к описанию ключа -atime для получения информации о поддерживаемых единицах времени.

    -amin n
    Истина если разница между временем последнего доступа к файлу и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

    -anewer file
    Смотрите описание -neweram.

    -atime n[smhdw]
    Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем последнего доступа к файлу и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
    Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего доступа к файлу и временем начала поиска составляет точно n единиц времени. Возможные единицы времени:

    • s секунда
    • m минута (60 секунд)
    • h час (60 минут)
    • d день (24 часов)
    • w неделя (7 дней)

    В аргументе ключа единицы времени можно комбинировать в произвольном порядке. Для примера «-atime -1h30m». Единицы времени используются только совместно с модификаторами «+» или «-».

    -cmin n
    Истина если разница между временем последнего изменения информации о файле и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

    -cnewer file
    Смотрите описание -newercm.

    -ctime n[smhdw]
    Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения информации о файле и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
    Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения информации о файле и временем начала поиска составляет n единиц времени. Пожалуйста обратитесь к описанию ключа -atime для получения информации о поддерживаемых единицах времени.

    -mmin n
    Истина если разница между временем последнего изменения файла и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

    -mtime n[smhdw]
    Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения файла и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
    Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения файла и временем начала поиска составляет n единиц времени. Пожалуйста обратитесь к описанию ключа -atime для получения информации о поддерживаемых единицах времени.

    -newer file
    -mnewer file

    Истина если у текущего файла более позднее время изменения чем у указанного файла.

    -newerXY file
    Истина если у текущего файла более позднее время доступа (X=a), время создания (X=B) или время изменения (X=m) чем время доступа (Y=a), время создания (Y=B) или время изменения (Y=m) указанного файла (file). В дополнение, если Y=t то file трактуется как время, заданное в одном из описанных в cvs(1) форматов. Отметьте, что -newermm эквивалентен -newer.

    Выдержка из man для cvs(1)
    Поддерживается множество вариантов форматов для описания даты, в частности ISO и Интернет. В случае, если временная зона в дате не указана явным образом, она трактуется в местной временной зоне. Примеры допустимых форматов:

    • 1 month ago
    • 2 hours ago
    • 400000 seconds ago
    • last year
    • last Monday
    • yesterday
    • a fortnight ago
    • 3/31/92 10:00:07 PST
    • January 23, 1987 10:05pm
    • 22:00 GMT