Дізнаємось усю можливу інфомрація про файл/папку

Shell класний тим, що можна дуже просто виконати команду в один рядок і вона зробить все що треба. Єдиний недолік це кількість знань яку необхідно мати для всіх маніпуляцій. Я часто пишу конфігураційні файли в системі puppet і там є класна опція onlyif тобто виконуємо деяку команду тільки при певних умовах. Отже Як на bash дізнатись хто є власником папки?

Елементарно Ватсон =) Є чудова команда stat

stat commandВона видає дофіга інформації про папку/файл. Як ви бачите реально інформації море. І там є власник папки.

stat -c %G /tmp

Трохи розшифруємо -c аргумент вказує на те що ми хочемо дані тільки певного формату

%G - формат - який означає хто є власником файлу.

А ось такі формати є доступні в даній утиліті

%a     access rights in octal
%A     access rights in human readable form
%b     number of blocks allocated (see %B)
%B     the size in bytes of each block reported by %b
%C     SELinux security context string
%d     device number in decimal
%D     device number in hex
%f     raw mode in hex
%F     file type
%g     group ID of owner
%G     group name of owner
%h     number of hard links
%i     inode number
%m     mount point
%n     file name
%N     quoted file name with dereference if symbolic link
%o     optimal I/O transfer size hint
%s     total size, in bytes
%t     major device type in hex
%T     minor device type in hex
%u     user ID of owner
%U     user name of owner
%w     time of file birth, human-readable; - if unknown
%W     time of file birth, seconds since Epoch; 0 if unknown
%x     time of last access, human-readable
%X     time of last access, seconds since Epoch
%y     time of last modification, human-readable
%Y     time of last modification, seconds since Epoch
%z     time of last change, human-readable
%Z     time of last change, seconds since Epoch
Valid format sequences for file systems:
%a     free blocks available to non-superuser
%b     total data blocks in file system
%c     total file nodes in file system
%d     free file nodes in file system
%f     free blocks in file system
%i     file system ID in hex
%l     maximum length of filenames
%n     file name
%s     block size (for faster transfers)
%S     fundamental block size (for block counts)
%t     file system type in hex
%T     file system type in human readable form

Перекладати не буду так як на мене і так все зрозуміло. А для кращого знайомства з утилітою рекомендую man stat. В puppet я написав все елементарно

exec { "chown ivan.ivan /tmp/" :  onlyif => "stat -c %G /tmp | grep -v '^ivan", }