Использование lynis в Unix/Linux
Lynis выполняет сотни отдельных тестов, чтобы определить состояние безопасности системы. Сама проверка безопасности состоит в выполнении набора шагов от инициализации программы до его отчета:
- Определяет операционную систему.
- Поиск доступных инструментов и утилит.
- Проверка Lynis обновлений.
- Запуск тестов для включенных плагинов.
- Запуск тестов безопасности для каждой категории.
- Состояние отчета проверки безопасности.
Во время сканирования технические данные о сканировании хранятся в лог-файл. В то же время результаты (предупреждения, предложения, сбор данных) хранятся в файле отчета.
Оппортунистическое сканирование
Сканирование Lynis является оппортунистическим: оно использует то, что может найти.
Например, если он видит, что вы используете Apache, он будет выполнять начальный раунд тест связанныq с Apache. Если во время сканирования Apache, он также обнаружит SSL/TLS конфигурацию, то он будет выполнять дополнительные шаги для аудита. При этом он будет собирать обнаруженные сертификаты, чтобы впоследствии их можно было отсканировать.
Углубленное сканирование безопасности
Выполняя оппортунистическое сканирование, инструмент может работать практически без зависимостей. Чем больше он найдет, тем глубже будет аудит. Другими словами, Lynis всегда будет выполнять сканирование, настроенное для вашей системы.
Плагины для Lynis
- Docker Containers.
- File Integrity.
- File sytems.
- Firewalls.
- Memory.
- Processes plugin.
- Software plugin.
Для подробной информации, используйте:
# man lynis
Выполним полную проверку системы в «тихом» режиме (иначе после каждого блока проверок придется подтверждать действия вводом с клавиатуры):
# lynis -c -Q
По завершению сканирования, внимательно изучаем отчет. Желательно в первую очередь исправить все Warnings и по мере возможности, выполнить рекомендации секции Suggestions. Также порадовал параметр Hardening index, который отображает числовое значение уровня защищенности сервера.
Некоторые полезные опции:
- —checkall, -c : Запуск сканирования.
- —check-update : Проврка обновлений для Lynis.
- —cronjob : Запускает Lynis как cronjob (включает в себя «-c» и «-Q» опции).
- —help, -h : Показывает помощь.
- —quick, -Q : Не ждите ввода пользователя, кроме ошибок.
- —version, -V : Выводит Lynis версию.
Создание Lynis Cronjobs
Если вы хотите создать ежедневный отчет о проверке своей системы, вам нужно установить для него задание cron:
# crontab -e
Добавьте следующее задание cron с параметром -crontab, все специальные символы будут проигнорированы из вывода, и сканирование будет полностью автоматизировано:
00 12 * * * root lynis -c -Q --auditor "automated" --cronjob
Данная задание будет выполнятся каждый день, в 12.00 и будут вести отчет в /var/log/lynis.log файл.
Обновление Lynis
Если вы хотите обновить lynis, просто введите следующую команду, чтобы загрузить и установить последнюю версию lynis:
# lynis --check-update
Вот и все, статья «Установка lynis в Unix/Linux» завершена.
Установить новый Python
Список доступных для установки через pyenv версий можно получить выполнив
pyenv install —list
Версий очень много, поэтому советую воспользоваться
grep
pyenv install —list | grep «3\.»
3.8.0
3.8-dev
3.8.1
3.8.2
3.8.3
3.8.4
3.8.5
3.8.6
3.8.7
3.8.8
3.8.9
3.8.10
3.9.0
3.9-dev
3.9.1
3.9.2
3.9.3
3.9.4
3.9.5
miniconda-3.8.3
miniconda-3.9.1
miniconda3-3.8.3
miniconda3-3.8-4.8.2
miniconda3-3.8-4.8.3
miniconda3-3.8-4.9.2
miniconda3-3.9.1
miniconda3-3.9-4.9.2
Установить нужную версию (я выбрал 3.9.5) можно командой
pyenv isntall 3.9.5
Downloading Python-3.9.5.tar.xz…
-> https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz
Installing Python-3.9.5…
Installed Python-3.9.5 to /home/andrei/.pyenv/versions/3.9.5
Ничего не устанавливайте в глобальный интерпретатор
Иногда возникает желание установить какой-нибудь пакет прямо в глобальный
интерпретатор, потому что по смыслу этот пакет вроде как должен быть вне
виртуальных окружений. Например, это может быть какая-нибудь программа,
типа ,
,
или
. Руки набирают в терминал:
Установка начинается, прогресс-бары заполняются, но в итоге всё завершается
чем-то типа такого:
Можно попробовать установить, используя , и это сработает, но это
считается очень плохой практикой,
и я настоятельно рекомендую так не делать по нескольким причинам:
-
Угроза безопасности.
В секции про установку пакетов я упомянул, что для пакетов других форматов,
кроме wheel, могут потребоваться дополнительные действия. На самом деле,
при установке пакета формата исполняется файл, в котором
потенциально могут содержаться любые действия — от честной установки пакета,
до или установки криптомайнера в систему. Т.к. в PyPI пакет
загрузить может кто угодно, никогда нельзя быть уверенным, что именно сделает пакет
при установке. Выполнять такой скрипт с системными привилегиями () —
не самый мудрый ход. -
Может нарушить целостность системы.
Часто в операционных системах принято устанавливать программы через
пакетный менеджер (будь то , или ). Этот же пакетный
менеджер затем может без следа удалить установленную программу, потому что он
ведёт учёт файлов — какой программе какие файлы принадлежит. Если начать
изменять файлы программ каким-либо образом, помимо пакетного менеджера,
то это может нарушить его работу. , конечно, установит что нужно,
но после этого могут возникнуть проблемы с системным пакетным менеджером.
Как правильно:
-
сказать , чтобы он установил пакет не в директорию , а в
домашнюю директорию пользователя при помощи флага :Обязательно нужно убедиться, что директория, куда установится пакет,
перечислена в переменной . Путь к директории можно получить при помощи
следующей команды:К получившемуся пути нужно в конце добавить для Linux и MacOS,
либо для Windows, так что
в моём случае (MacOS) в нужно добавить вот такой путь:
.Подробнее про этот метод установки читайте .
-
установить программу через пакетный менеджер ОС, например:
Часто мейнтейнеры ОС создают обёртки для пакетов из PyPI, которые можно
установить при помощи системного пакетного менеджера. Как правило, такие
обёртки называются или .
Это делается как раз для того, чтобы дать пользователям возможность
устанавливать Python-программы, не нарушая работу пакетного менеджера ОС.
Кроме того, эти пакеты проходят проверку безопасности, так что риск получить
криптомайнер значительно ниже.
Выводы
- всегда устанавливайте зависимости проектов в отдельные виртуальные окружения;
- если нужно установить пакет «глобально», то используйте либо ,
либо прибегните к помощи пакетного менеджера операционной системы; - никогда не используйте — считайте, что это табу.
Да, виртуальные окружения — определенно не самая удобная часть разработки на
Python, и уж точно не самая простая тема, к этому просто нужно привыкнуть.
Несколько раз повторил, выработал привычку — в целом, ничего сложного.
Кроме того, экосистема Python развивается очень быстро, и я надеюсь,
что скоро правильная установка пакетов
и управление виртуальными окружениями станут намного легче.
Уже сейчас можно пользоваться такими инструментами,
которые в некоторой мере прячут от пользователя виртуальные окружения:
- poetry;
- pipenv.
Стабильных вам зависимостей и кода без багов!
Безопасность
Для Debian или Ubuntu стоит настроить брандмауэр. А для Rocky Linux / CentOS — отключить SELinux (если только мы не собираемся его настраивать).
Debian / Ubuntu
По умолчанию, в системах на базе deb брандмауэр работает по принципу полного разрешения. Желательно, это поправить. Введем стартовые настройки.
Разрешаем SSH:
iptables -I INPUT -p tcp —dport 22 -j ACCEPT
* если мы подключаемся к SSH по нестандартному порту, то меняе 22 на нужное значение.
Создаем правила для нормальной работы apt-get или yum:
iptables -I INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT
Разрешаем ICMP (для выполнения команды ping):
iptables -I INPUT -p icmp -j ACCEPT
Разрешаем все входящие на адрес локальной петли:
iptables -I INPUT -i lo -j ACCEPT
Ставим политику запрета на входящие и разрешаем все исходящие:
iptables -P INPUT DROP
Для сохранения правил ставим пакет iptables-persistent:
apt-get install iptables-persistent
Для сохранения правил вводим команду:
netfilter-persistent save
Rocky Linux / CentOS
В системах на базе RPM брандмауэр работает на запрет пакетов и не требует начальной настройки. Но в данных системах используется SELinux. Его, чаще, предпочитают отключать. Это делается двумя командами:
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
Подробнее в инструкции Как отключить SELinux. Если мы хотим его настроить, читаем инструкцию Настройка SELinux в CentOS.
Постоянные переменные среды
Чтобы сделать переменные среды постоянными, вам необходимо определить эти переменные в файлах конфигурации bash. В большинстве дистрибутивов Linux при запуске нового сеанса переменные среды считываются из следующих файлов:
-
— используйте этот файл для настройки общесистемных переменных среды. Переменные в этом файле задаются в следующем формате:
-
— переменные, установленные в этом файле, загружаются при входе в оболочку входа в bash. При объявлении переменных окружения в этом файле вам необходимо использовать команду :
-
Файлы конфигурации для конкретной оболочки пользователя. Например, если вы используете Bash, вы можете объявить переменные в :
Чтобы загрузить новые переменные среды в текущий сеанс оболочки, используйте команду:
Скачать и установить Python 2.7.9
Чтобы установить Python из скачанного архива нужен компилятор
C
например
gcc
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
—2021-01-11 12:17:43— https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
Resolving www.python.org (www.python.org)… 151.101.84.223, 2a04:4e42:14::223
Connecting to www.python.org (www.python.org)|151.101.84.223|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 16657930 (16M) [application/octet-stream]
Saving to: ‘Python-2.7.9.tgz’
Python-2.7.9.tgz 100% 15.89M 3.63MB/s in 4.4s
2021-01-11 12:17:48 (3.61 MB/s) — ‘Python-2.7.9.tgz’ saved [16657930/16657930]
Распаковать архив можно командой
tar xvzf Python-2.7.9.tgz
Затем нужно перейти в распакованную директорию и выполнить
configure make install
cd Python-2.7.9
./configure
make
sudo make install
Использование утилиты pv в Unix/Linux
Например, можно использовать утилиту pv вместо cat, следующим образом:
# pv linux-notes.org.zone.txt | gzip > linux-notes.org.tar.gz 963 MB 0:00:50 [2.04MiB/s] 10% ETA 0:04:50
Собственно, все наглядно выглядит. Не правда ли?
Давайте упакуем некоторую папку в архив:
# tar -czf - backUPs | pv > backUPs.tgz 455MiB 0:00:13 [35.7MiB/s]
Наглядно, но не знаешь когда операция завершиться, по этому, давайте добавим ключ «-s» чтобы вывести ETA, например:
# tar -czf - backUPs | pv -s $(du -sb backUPs| grep -o '*') > backUPs.tgz 100MB 0:00:50 [3.88MB/s] 20% ETA 0:04:50
Так же, можно составлять команды из несколько копий pv:
# tar -cf - backUPs | pv -cN tar -s $(du -sb ./backUPs | grep -o '*') | gzip | pv -cN gzip > backUPs.tgz tar: 97.1MB 0:00:08 [12.3MB/s] 0% ETA 1:50:26 gzip: 13.1MB 0:00:08 [1.6MB/s]
Можно выводить прогресс-бар в виде цифр (в столбик), например:
$ tar -czf - backUPs | pv -n > backUPs.tgz 2 4 6 8 10 12 ...... 100
Такс, например, вам нужно ограничить скорость изменять скорость передачи данных через pv утилиту. Например, я использовал -L для ограничения скорости передачи данных до 4МБ/с:
$ tar -czf - backUPs | pv -L 4m > backUPs.tgz 30MiB 0:00:08 [4.17MiB/s]
Как я уже описывал разные опции, но опишу опции еще раз:
- -c — Данная опция не выводит информацию друг поверх друга.
- -N — Называем шкалу определенным именем.
Можно поигратся и выполнить:
# pv /dev/urandom > /dev/null 66MB 0:00:44 [ 6.8MB/s]
Чтобы узнать как быстро компьютер читает с /dev/zero, выполните:
$ pv /dev/zero > /dev/null
Обнуление диска, можно выполнить следющим образом:
# pv < /dev/zero > /dev/sda
Симуляция ввода:
$ echo "You could simulate some text here" | pv -qL 10
Чтобы проверить тест пропускной способности сети ssh, выполните:
$ yes | pv | ssh $your_host_here "cat > /dev/null"
Или:
$ pv /dev/zero|ssh $your_host_here 'cat > /dev/null'
И так, команда что выше, подключается к хосту через ssh и отображает скорость передачи в реальном времени, направляя все переданные данные в /dev/null.
Пример использования pv и dd утилиты:
# dd if=/dev/sdc bs=4096 | pv -s 2G | sudo dd bs=4096 of=~/USB_BLACK_BACKUP.IMG
Чтобы поиграться, выполните:
$ curl -s http://artscene.textfiles.com/vt100/movglobe.vt | pv -q -L 9600
Используя инструмент pv и dialog, вы можете создать панель выполнения следующим образом:
# tar -czf - ./home/captain/backups/ | (pv -n > backup.tgz) 2>&1 | dialog --gauge "Progress" 10 70
Работа pv + mysql в Unix/Linux
Создать mysqldump можно так:
$ pv my_DB.sql.gz | gunzip | mysql -uroot -p my_DB
Или:
$ mysqldump -uroot -p my_DB | pv | gzip -9 >m y_DB.sql.gz
Влить созданный mysqldump можно так:
$ zcat my_DB.sql.gz | pv -cN zcat | mysql -uroot -p my_DB
Более нагляднее, будет:
$ zcat my_DB.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uroot -p my_DB
Чтобы сделать его еще приятнее, вы можете добавить progres NAME, например:
# zcat my_DB.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name ' Importing.. ' | mysql -uroot -p my_DB
Вот и все, статья «Утилита pv — прогресс bar для консольных утилит в Unix/Linux» завершена.
Настройка после установки
После установки по умолчанию будет по прежнему системный Pyhton 2.7
python
Python 2.7.18 (default, Mar 8 2021, 13:02:45)
on linux2
Type «help», «copyright», «credits» or «license» for more information.
ll ~/.pyenv/versions
total 12
drwxr-xr-x 3 andrei urnsu 4096 Jun 15 15:36 ./
drwxr-xr-x 13 andrei urnsu 4096 Jun 15 15:12 ../
drwxr-xr-x 6 andrei urnsu 4096 Jun 15 15:32 3.9.5/
vi ~/.pyenv/version
python -V
3.9.5
which python
/home/andrei/.pyenv/shims/python
pyenv versions
system
* 3.9.5 (set by /home/andrei/.pyenv/version)
pyenv which python
/home/andrei/.pyenv/versions/3.9.5/bin/python
2 ответа
Лучший ответ
Поскольку большинство реализаций Python интерпретируются, а не компилируются, шаг компиляции происходит при запуске кода. Вот почему пользовательский интерфейс PyCharm имеет заметную кнопку «Выполнить» ( ️), но не имеет кнопки компиляции.
Это правда, что для CPython есть шаг компиляции, который компилируется из кода Python в байт-код, но это деталь реализации. CPython 3 сохраняет свои кэшированные результаты компиляции в файлах в каталоге с именем . Эти файлы генерируются автоматически при импорте модуля (использование приведет к созданию файла ), но не при запуске обычной программы.
Наконец, согласно комментарию @shmee, можно скомпилировать исходный файл с помощью py_compile, но я должен подчеркнуть, что обычно это не делается или не требуется.
Теперь, если вы беспокоитесь о проверке правильности кода, в мире интерпретируемых языков мы больше полагаемся на тестирование. Я бы порекомендовал вам изучить тесты для вашего кода (используя pytest и превосходный тестовая интеграция в PyCharm).
6
chthonicdaemon
13 Апр 2018 в 16:03
Позвольте мне начать с терминологии:
-
Python — это язык программирования. Это «просто» спецификация языка программирования.
-
CPython — эталонная реализация языка Python. На самом деле это всего лишь один из нескольких интерпретаторов Python. Сам CPython работает (назовем это деталью реализации) путем преобразования (но вы также можете сказать, компиляции) кода в импортированных файлах / модулях Python в байт-код, а затем выполняет этот байт-код. Фактически он сохраняет перевод в виде файлов в папке этого файла), чтобы ускорить последующий импорт, но это характерно для CPython и также может быть отключено.
-
PyCharm — это интегрированная среда разработки. Однако для этого требуется «Настроить интерпретатор Python». для запуска кода Python.
Это означает, что PyCharm не несет ответственности за создание файлов . Если вы настроили интерпретатор, отличный от CPython, или использовали переменную среды для отключения создания файла , файлов pyc не будет.
Но если вы использовали соответствующий интерпретатор CPython в PyCharm, он создаст файлы для файлов / модулей, которые вы успешно импортировали. Это означает, что вам действительно нужно импортировать или иным образом запустить файлы Python в своем проекте, чтобы получить файлы .
На самом деле документация Python содержит примечание о
2
MSeifert
22 Апр 2018 в 19:28
Переменные среды и переменные оболочки
Переменные имеют следующий формат:
- Имена переменных чувствительны к регистру. По соглашению, переменные среды должны иметь имена в ВЕРХНЕМ РЕГИСТРЕ.
- При присвоении переменной нескольких значений они должны быть разделены двоеточием символ.
- Вокруг символа равенства нет пробела.
Переменные можно разделить на две основные категории: переменные среды и переменные оболочки.
Переменные среды — это переменные, доступные для всей системы и наследуемые всеми порожденными дочерними процессами и оболочками.
Переменные оболочки — это переменные, которые применяются только к текущему экземпляру оболочки. Каждая оболочка, такая как и , имеет собственный набор внутренних переменных оболочки.
Доступно несколько команд, которые позволяют вам перечислять и устанавливать переменные среды в Linux:
- — команда позволяет запускать другую программу в настраиваемой среде без изменения текущей. При использовании без аргумента он распечатает список текущих переменных среды.
- — команда печатает все или указанные переменные среды.
- — Команда устанавливает или отменяет переменные оболочки. При использовании без аргумента он распечатает список всех переменных, включая переменные среды и оболочки, а также функции оболочки.
- — команда удаляет переменные оболочки и среды.
- — команда устанавливает переменные среды.
0.2 Какой Python подходит вам?
Если вы собираетесь работать с Python на удалённом сервере, ваш хостинг-провайдер, возможно, уже установил Python 3. Если у вас домашний компьютер с Linux, Python 3 тоже может быть уже установлен. В большинстве популярных дистрибутивов GNU/Linux по умолчанию установлен Python 2, немногие (но их число растёт) также включают Python 3. Mac OS X включает консольную версию Python 2, но до сих пор не включает Python 3. В Microsoft Windows не входит никакая версия Python. Но не отчаивайтесь! Python можно установить в несколько кликов, независимо от вашей операционной системы.
Простейший способ проверить, установлен ли Python 3 в вашем Linux или Mac OS X, – это открыть командную строку. В Linux поищите программу «Терминал» («Terminal») в меню приложений («Applications»). Она может находиться в подменю «Стандартные» («Accessories») или «Системные утилиты» («System»). В Mac OS X в папке /Application/Utilities/ должно быть приложение «Terminal.app».
Получив приглашение командной строки, просто введите (строчными буквами, без пробелов) и посмотрите, что произойдёт. На моей домашней Linux-системе Python 3 уже установлен, и эта команда запускает интерактивную оболочку Python.
(Чтобы выйти из интерактивной оболочки Python, введите и нажмите Enter.)
Мой хостинг-провайдер тоже предоставляет Linux с доступом к командной строке, но Python 3 на сервере не установлен. (Фу!)
Итак, вернёмся к вопросу, с которого начался этот раздел: «Какой Python вам подходит?» Любой, который работает на вашем компьютере.
Читайте далее инструкции по установке на Windows или перейдите к установке , или .
Установка
-
Скачаем .
Установка производится простым клонированием git-репозитория.
У проекта есть умный скрипт,
который скачает и его сотоварищей:Скрипт не требует прав суперпользователя (без ), потому что
всё устанавливается в домашнюю директорию пользователя. Туда же
будут устанавливаться и интерпретаторы. Если страшно запускать
какие-то скрипты из интернета (так и должно быть), то прочитать код скрипта можно
здесь. -
Настроим шелл.
Предыдущая команда перед завершением должна была напечатать инструкции
по настройке шелла. Допустим, в случае с она выводит
следующее:В случае с нужно будет добавить те же самые строки в .
В случае с в связи с особенностями самого шелла инструкции отличаются:
Кстати, горячо рекомендую попробовать , очень удобный шелл.
-
Установим зависимости для сборки.
При установке новой версии интерпретатора через под капотом
происходит сборка из исходников, поэтому для успешной установки
необходимы некоторые зависимости. Полный и актуальный список
для своей ОС смотрите
или .
Лучше установить всё заранее. -
Перезапустим шелл и проверим установку.
Предисловие
Часто встречалась такая ситуация:
- В комплект поставки входит Python 2.x, а вам нужен Python 3.x;
- Для некоторых фреймворков машинного обучения (например, PaddlePaddle / Tensorflow) требуется python3.5, но ваша система поддерживает более высокую версию python и не может быть удалена (поскольку некоторое программное обеспечение будет зависеть от python)
В настоящее время в системе необходимо установить несколько Python, но они не могут повлиять на Python, поставляемый с системой, а это означает, что несколько версий Python должны сосуществовать.pyenvЭто такой менеджер версий Python. pyenvВы можете переключить версию Python глобально или предоставить соответствующую версию Python для одного проекта. После использования «pyenv» вы можете легко установить разные версии Python, и переключение между разными версиями становится очень простым.
Установка Pip
sudo apt update
sudo apt install python3-pip
pip3 —version
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)
Про
pip
Библиотеки лежат в /home/andrei/.local/lib
ls -la /home/andrei/.local/lib
total 0
drwx—— 0 andrei andrei 512 Mar 20 16:41 .
drwx—— 0 andrei andrei 512 Mar 19 13:31 ..
drwx—— 0 andrei andrei 512 Mar 19 13:19 python2.7
drwx—— 0 andrei andrei 512 Mar 20 15:01 python3.5
Пример Make файла для установки рабочего окружения
.PHONY: preinstall-env
preinstall-env:
@sudo apt -y update
@sudo apt -y upgrade
@sudo apt-get install -y build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev libffi-dev \
wget llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev \
liblzma-dev curl git
@curl https://pyenv.run | bash
# substitute for
# curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
@echo «# Pyenv Config» >> ~/.bashrc
@echo ‘export PYENV_ROOT=»$$HOME/.pyenv»‘ >> /home/$$(whoami)/.bashrc
@echo ‘export PATH=»$$PYENV_ROOT/bin:$$PATH»‘ >> /home/$$(whoami)/.bashrc
@echo ‘eval «$$(pyenv init —path)»‘ >> /home/$$(whoami)/.bashrc
@echo ‘eval «$$(pyenv virtualenv-init -)»‘ >> /home/$$(whoami)/.bashrc
В .bashrc будет прописано
# PyEnv Configuration
export PYENV_ROOT=»$HOME/.pyenv»
export PATH=»$PYENV_ROOT/bin:$PATH»
eval «$(pyenv init —path)»
eval «$(pyenv virtualenv-init -)»
Перезапустить shell можно выполнив
exec «$SHELL»
Команда chgrp Linux
Стандарт прав файлов пришёл в Linux из Unix. У каждого файла есть владелец (user) и группа (group), помимо этого описываются права остальных пользователей (other). Права состоят из трёх пунктов: чтение (read), запись (write), выполнение (execute). Для изменения прав используется команда umask, но для изменения непосредственно владельца и группы используются команды chown и chgrp. Для просмотра текущих прав можно использовать команду ls.
Синтаксис и опции chgrp
Общий вид команды chgrp:
$ chgrp новая_группа имя_файла
Список распространённых параметров команды chgrp:
- -h – работать непосредственно с самими символьными ссылками, а не с файлами, на которые они ссылаются;
- —dereference – работать с файлами, а не самими символьными ссылками. Используется по умолчанию;
- -R – рекурсивная обработка каталога со всем его содержимым;
- -H – перейти по символической ссылке и изменить атрибуты файла/каталога. Сама ссылка остаётся без изменений. Используется вместе с параметром -R;
- -L — перейти по символической ссылке и продолжить рекурсивную обработку. Сама ссылка остаётся без изменений. Используется вместе с параметром -R;
- -P – при встрече с символьной ссылкой обрабатывать только её. Используется вместе с параметром -R, является значением по умолчанию;
- —reference=имя_образца – использовать группу образца. Используется вместо новая_группа;
- -c – при обработке выводить только изменения;
- -v – выводить информацию о каждом обработанном файле.
Использование команды chgrp
Рассмотрим сразу несколько случаев использования, с реальным файлом и каталогом, а затем с символическими ссылками на них. Простейший пример использования команды chgrp без параметров. Следующая команда меняет группу на www-data для файла file в текущей папке:
А эта меняет группу на www-data для папки folder:
С реальными файлами и каталогами команда работает весьма предсказуемо, меняя их группу. Файлы в папке остаются неизменными. Если же обрабатывать символические ссылки, то их атрибуты останутся неизменными, а файлы получат новую группу. Такое поведение аналогично работе с параметром —dereference. Например, эти команды, применённые к символическим ссылкам, отработают как показано на снимке:
Теперь посмотрим на то, как будет работать параметр -h, меняющий атрибуты символической ссылки:
С параметром -h изменились только атрибуты ссылок, а не сами файлы. Теперь рассмотрим работу c параметром -R, предназначенным для рекурсивной обработки каталогов:
Новая группа была задана не только каталогу, но и всем файлам внутри
Обратите внимание на то, что поведение изменилось, теперь при обработке символической ссылки атрибуты выставляются для самой ссылки, а не файла
Чтобы увидеть разницу между параметрами -H и -L, рассмотрим ещё пару примеров. Напомним, что их надо использовать совместно с параметром -R:
С использованием параметра -H поведение при обработке символических ссылок изменилось, теперь они обрабатываются так, как будто команды выполняются по отдельности. Атрибуты ссылок не меняются, меняются атрибуты самих файлов, при переходе на каталог рекурсивная обработка прекращается.
С использованием параметра -L при переходе к папке по символической ссылке рекурсивная обработка не прекращается
Обращаем ваше внимание на то, что параметры -H и -L использовать небезопасно, они могут дойти до системных файлов
Стоит ли использовать Pipenv?
Определенно. Даже если это просто способ объединить инструменты, которые вы уже используете (pip & virtualenv), в единый интерфейс. Тем не менее, это гораздо больше, чем просто объеденение. Используя Pipfile вы указываете только те зависимости, которые вам действительно нужны.
У вас больше не будет головной боли, от того что вам нужно было самим управлять версиями всего лишь для того, чтобы убедиться, что вы можете клонировать свою среду разработки. С Pipfile.lock вы можете работать над своим проектом со спокойной душой, зная, что вы можете точно воспроизвести свое окружение в любом месте.
В дополнение ко всему, весьма вероятно, что формат Pipfile будет принят и поддержан как официальный инструмент Python, такими как pip, поэтому было бы полезно заранее ознакомится с ним.