Ваши циклы кода Python навсегда. Таким образом Вы могли бы хотеть выполнить его в фоновом режиме и затем уничтожить его, когда размер файла превышен. Как острота:
{ ./gcd-rand.py 10000 10000 > f & }; p=$!; while (( $(stat -c %s f) < 33554432 )); do sleep .1; done; kill $p
Примечание: выберите время сна, столь соответствующее вместо статистики, можно также использовать du, как предложенный Dirk.
] Это просто конвенция. В исходных кодах Linux все идентификаторы констант ассоциированы с числами. Некоторые из них очень старые и происходят из самых первых выпусков ядра, в то время как другие были добавлены недавно.[
] []Константа []S_ISUID[
], связанная с "setuid", определена в []include/uapi/linux/stat.h[], одном из многочисленных заголовков Linux. Он мог быть определен с чем угодно, но оказался 04000.[
]Как говорит @steeldriver, []man 2 stat[
] может помочь вам понять значение различных констант, используемых для разрешения файлов:[
S_IFMT 0170000 bit mask for the file type bit fields
S_IFSOCK 0140000 socket
S_IFLNK 0120000 symbolic link
S_IFREG 0100000 regular file
S_IFBLK 0060000 block device
S_IFDIR 0040000 directory
S_IFCHR 0020000 character device
S_IFIFO 0010000 FIFO
S_ISUID 0004000 set-user-ID bit
S_ISGID 0002000 set-group-ID bit (see below)
S_ISVTX 0001000 sticky bit (see below)
S_IRWXU 00700 mask for file owner permissions
S_IRUSR 00400 owner has read permission
S_IWUSR 00200 owner has write permission
S_IXUSR 00100 owner has execute permission
S_IRWXG 00070 mask for group permissions
S_IRGRP 00040 group has read permission
S_IWGRP 00020 group has write permission
S_IXGRP 00010 group has execute permission
S_IRWXO 00007 mask for permissions for others (not in group)
S_IROTH 00004 others have read permission
S_IWOTH 00002 others have write permission
S_IXOTH 00001 others have execute permission
]
[]В этом отрывке вы видите не только константы и их числовое значение, но и способ их выбора. Разработчики/дизайнеры выбрали константы таким образом, что вы можете []объединить [] их. Например, []S_ISUID и S_IRWXU и S_IRUSR и S_IRGRP = 04740[
], поэтому разрешение []04740[
] точно означает "setuid и все разрешения для владельца и разрешения на чтение для группы владельцев"[
В большинстве Unix-подобных систем файл, каталог или любой другой объект файловой системы представлен индексным индексом , который, помимо прочего, содержит целое число, называемое режим , который описывает тип объекта и некоторые его разрешения. Он описан в POSIX stat.h .
The following symbolic names for the values of type mode_t shall also be defined:
File type:
S_IFREG
Regular.
S_IFDIR
Directory.
S_IFLNK
Symbolic link.
File mode bits:
S_IRWXU
Read, write, execute/search by owner.
S_IRUSR
Read permission, owner.
S_IWUSR
Write permission, owner.
S_IXUSR
Execute/search permission, owner.
...
S_ISUID
Set-user-ID on execution.
S_ISGID
Set-group-ID on execution.
...
Это все символические имена для целочисленных констант. S_IFREG
- 0100000. S_IRUSR
- 000400. S_ISUID
- 004000. Они указаны в восьмеричном формате для простоты использования: биты режима файла могут логически рассматриваться как 4 группы по 3 бита в каждой.
Здесь вы можете увидеть биты типа файла и биты режима файла моего .profile
:
$ perl -e 'printf("%#o\n", (stat(".profile"))[2]);'
0100644
Пользователи могут установить биты режима (но не тип файла) с помощью chmod
, который принимает целочисленный аргумент (возможно, с использованием некоторых из этих символических констант S_ *), или утилиту chmod
, которая принимает целочисленные или символьные имена (например, u + r
).
Поскольку на практике не так много различных комбинаций битов режима, многие пользователи Unix на протяжении многих десятилетий вызывали chmod
(и системный вызов, и команду) с числовым аргументом, а не символическим. имена. 0755
означает «доступный для записи владельцем, доступный для чтения и исполняемый для всех остальных», 0644
означает «доступный для записи владельцем, доступный для чтения всем остальным», 04755
означает «setuid» , доступный для записи владельцем, доступный для чтения и исполнения всем остальным.
Из (английской) страницы руководства для chmod
(debian jessy):
(Выделено мной)
Числовой режим состоит из одной-четырех восьмеричных цифр (0-7), полученный с помощью сложение битов со значениями 4, 2 и 1. Пропущенные цифры предполагается, что это ведущие нули. Первая цифра выбирает установленный идентификатор пользователя. (4) и установите идентификатор группы (2) и ограниченное удаление или липкие (1) атрибуты. Вторая цифра определяет права доступа для пользователя, владеющего файлом: чтение (4), напишите (2) и выполните (1); третий выбирает разрешения для других пользователи в группе файла, с такими же ценностями; и четвертый для других пользователей, не входящих в группу файла, с такими же значениями.
Я не уверен, что это ответ на ваш вопрос, но он объясняет, что означают числа.