Это, кажется, делает это. Будучи простой одной строкой awk
, он должен довольно быстро работать с файлом строк размером 1,2 млн. Создав фиктивный файл из 1,3 млн строк на основе вашего образца, я увидел, что он был завершен за 24 секунды на базовой виртуальной машине CentOS 7 с 4 ГБ памяти и GNU Awk 4.0.2.
Чтобы получить точные ответы от StackExchange, вы можете опубликовать свой образец ввода на pastebin вместе с образцом вывода.
$ awk '{printf "%s %-6s%-81s%-12s%-12s%s\n",$1,$2,gensub(/[0-9.-]* +[0-9.-]* +[0-9]$/,"","g",substr($0,10)),$(NF-2),$(NF-1),$NF}' inp | head
AD AD100 Canillo 42.5833 1.6667 6
AD AD200 Encamp 42.5333 1.6333 6
AD AD300 Ordino 42.6 1.55 6
AD AD400 La Massana 42.5667 1.4833 6
AD AD500 Andorra la Vella 42.5 1.5 6
AD AD600 Sant Julià de Lòria 42.4667 1.5 6
AD AD700 Escaldes-Engordany 42.5 1.5667 6
AR 3636 POZO CERCADO (EL CHORRO (F), DPTO. RIVADAVIA (S)) Salta A -23.4933 -61.9267 3
AR 4123 LAS SALADAS Salta A -25.7833 -64.5 4
AR 4126 BARADERO Salta A -26.0833 -65.263 3
$
Когда программа в стиле Unix -создает новый файл, она указывает для него исходные разрешения. Эти начальные указанные разрешения обычно имеют значение 0666
или rw-rw-rw-
для обычных файлов и 0777
или rwxrwxrwx
для каталогов или исполняемых файлов. Это то, что закодировано прямо в каждой программе и не может быть легко изменено.
Но эти первоначальные разрешения не будут применяться непосредственно к новому файлу. Операционная система сначала удалит все биты разрешения, установленные в значении umask
. У вашего пользователя sadmin
есть umask 0002
, что соответствует -------w-
, т.е. он только выбивает бит записи для "других" пользователей и разрешает все права, запрашиваемые программой для владельца файла, а также для группы пользователей файл принадлежит. Это приводит к разрешениям rw-rw-r--
для обычных файлов и rwxrwxr-x
для каталогов и исполняемых файлов.
С другой стороны, ваша учетная запись root
имеет umask 0022
, что соответствует ----w--w-
, поэтому доступ на запись будет закрыт для всех, кроме фактического владельца файла. Это приводит к разрешениям rw-r--r--
для обычных файлов,и rwxr-xr-x
для каталогов и исполняемых файлов. Как правило, это хорошо, так как файлы, принадлежащие пользователю root, но доступные для записи кому-то еще, могут упростить некоторые эксплойты безопасности. Это значение umask позволит избежать случайного создания таких файлов.
Но почему существующие файлы могут изменяться при редактировании root? Ну, это зависит от того, что именно делает ваш текстовый редактор. Некоторые текстовые редакторы изначально создают новый временный файл (, чтобы они могли сохранить ваши изменения, если вы работаете удаленно и во время редактирования теряется сетевое соединение ), а когда вы «сохраняете», они на самом деле просто удаляют исходный файл и переименовать отредактированную временную копию как оригинал. Некоторые редакторы могут сохранять права/право собственности исходного файла в процессе, но не все из них. Некоторые редакторы можно настроить так, как вам нужно.
Вы можете изменить umask root на 0002 с помощью простой команды umask 0002
только для одного сеанса. Или вы можете добавить команду в соответствующий сценарий запуска оболочки -, чтобы сделать его постоянным для root. Но ни один из них на самом деле не рекомендуется, так как это делает вашу корневую учетную запись более уязвимой для эксплойтов безопасности.
Если ваша файловая система поддерживает списки ACL (и эта поддержка была включена в настройках файловой системы по умолчанию или параметрах монтирования -в современной CentOS она, вероятно, включена по умолчанию ), вы можете установить ACL по умолчанию в каталоге, что фактически заменит настройку umask
только для этого конкретного каталога:
setfacl -m d:u::rwx,d:g::rwx,d:o::rx /srv/servers/spi
Любые новые подкаталоги -, созданные, когда это действует, автоматически наследуют ACL по умолчанию, точно так же, как это происходит с битом setgid.
Если в вашем общем ресурсе уже есть подкаталоги -, вы можете сделать это для всех каталогов в пределах всего дерева каталогов /srv/servers/spi
:
find /srv/servers/spi -type d -exec setfacl -m d:u::rwx,d:g::rwx,d:o::rx {} \+
В качестве еще одного варианта:если вы следуете передовым методам администрирования, вам не следует входить в систему как root, поэтому вы, вероятно, входите в свою личную учетную запись, а затем используете sudo
или su
, чтобы стать пользователем root.
Вы уже предоставили доступ на запись в этот каталог группе sambashare
, так что вы можете просто добавить свою личную учетную запись в группу sambashare
, и тогда вам не нужно быть root, чтобы вносить изменения в общие каталоги -и для лучшей подотчетности в идеале не следует вносить изменения от имени пользователя root, если вы можете сделать это, используя свою личную учетную запись. Если в этой системе включено ведение журнала аудита, то журналы аудита в /var/log/audit
будут напрямую показывать, кто -делал -что -и когда, что может быть чрезвычайно важно в некоторых ситуациях.
Как правило, лучше всего, чтобы группы пользователей и права доступа к файлам отражали реальность того, кому разрешено и ожидается изменение вещей, чтобы каждый мог выполнять обычные дневные -–-повседневные дела, используя свои личные учетные записи пользователей, вместо обычного использования учетной записи root для всего.