Парсинг параметров командной строки

Вы, кажется, понимаете понятие полномочий, но я думаю, что Вы становитесь схваченными на user/group/other и что они имеют в виду в различных контекстах.

Кратко,

  • Пользователь является отдельной учетной записью POSIX
  • Группа является логической группировкой нескольких учетных записей POSIX

Файл на диске имеет двух владельцев. user владелец и group владелец. Для какого-то конкретного файла, other любая учетная запись пользователя, которая не соответствует user ни член group. Другими словами, other любой пользователь, который не является пользовательским владельцем и не является членом владельца группы.

Далее, каждый процесс работает под определенным идентификатором пользователя (или UID) и является членом одного или нескольких идентификатор Группы (GID). Используйте команду ps -ef (на Linux и Солярисе, или ps -ej на OS X или *BSD), чтобы видеть, что пользователь выполняет каждый процесс. Вы будете видеть, что апач и ws_ftp также выполняются пользователями.

Когда процесс пытается получить доступ к файлу на диске, следующее происходит:

  • Если UID из процесса соответствует user владелец файла затем user полномочия осуществляются.
  • Еще, если любой GIDs процесса соответствуют group владелец файла затем group полномочия осуществляются.
  • Еще other полномочия осуществляются.

Отвечать на Ваши вопросы конкретно:

То, когда я вхожу в систему с WS_FTP, является мной Владелец?

Технически да, потому что всегда существует владелец, но это зависит от Вашего определения "I".

Если Вы входите в систему как настоящий пользователь POSIX в системе затем файлы, Вы создаете/получаете доступ, будет как пользователь, Вы вошли в систему как. При входе анонимно затем файлов, Вы создаете/получаете доступ, будет файл UID WS FTP. Это, вероятно, будет также ftp или nobody.

Действительно ли веб-браузер - Другой?

Веб-браузер - ничто, потому что он не выполняется на сервере. Но браузер получает доступ к веб-серверу. Веб-сервер работает как некоторый определенный пользователь (точно так же, как WS_FTP). Тот пользователь вероятен www-data, apache или nobody.

Сами Сценарии PHP попадают в один из этих классов?

Сценарии PHP выполняются модулем механизма выполнения сценариев веб-сервера. Они будут выполняться как тот же пользователь, выполняющий веб-сервер.

Существует ли различие между чтением, и выполнитесь на .php файле?

Да. Считайте средства, что пользователь может считать содержание файла. Выполните средства, что содержание может быть выполнено как абсолютный процесс.

Так как Сценарии PHP выполняются в механизме выполнения сценариев веб-сервера (т.е. они - часть пространства памяти и поток выполнения сервера), они не должны быть установлены исполняемый файл.

Так как я понятия не имею, кто "inetuser", я был бы корректен в не предоставлении Группе каких-либо полномочий? Что, если дело было не так (т.е. имя пользователя сайта также использовался для Группы - который это находится на моем dev сайте на другом хосте)?

inetuser учетная запись пользователя в системе, точно так же, как Ваша учетная запись. Это может также быть группа. Надо надеяться, можно ответить на этот вопрос сами после прочтения этого.

В каких полномочиях каждый вид файла/dir нуждается при этих обстоятельствах?

Обычно Вы хотите, чтобы файлы данных принадлежали учетным записям пользователей, которые используются фактическими людьми (т.е. Вы). Другими словами, Ваш веб-контент не должен принадлежать апачскому пользователю.

  • Полномочия пользователя должны почти всегда быть rw-для файлов данных или rwx для каталогов и программ.
  • Полномочия группы должны обычно быть r - для файлов данных или r-x для каталогов и программ. Если Вы хотите, чтобы члены той группы смогли записать в те файлы затем, это должен быть rw-и rwx.
  • Другие полномочия должны почти всегда быть r - для файлов данных и r-x для каталогов и программ или---, если Вы хотите запретить всего доступа.
2
17.02.2014, 01:00
2 ответа

paste -d берет обязательный аргумент.

См. страницу справочника

     -d, --delimiters=LIST
          reuse characters from LIST instead of TABs

Этот формат действительно означает

     -d LIST or --delimiters=LIST
          reuse characters from LIST instead of TABs

Таким образом с paste -d file1, Вы устанавливаете LIST кому: file1, и никакое имя файла не указано. И поскольку в странице справочника говорится:

    With no FILE, or when FILE is -, read standard input.

С paste -ds file1, Вы устанавливаете разделитель на s. Необходимо было бы предоставить несколько файлов для наблюдения эффекта.

Выдержать сравнение

$ paste <(printf 'foo\nbar\n') <(printf 'one\ntwo\n') 
foo<TAB>one
bar<TAB>two
$ paste -ds <(printf 'foo\nbar\n') <(printf 'one\ntwo\n')
foosone
barstwo
2
27.01.2020, 21:52

Я нахожу, что он обычно путающий смотрит на существующий корпус инструментов, чтобы попытаться получить понимание того, как работают параметры командной строки.

Почему Вы могли бы спросить?

Хорошо существует много ситуаций, где автор данного инструмента командной строки представляет параметры командной строки пользователю в том, что имеет большую часть смысла для их инструмента. Таким образом, следовательно, опции могут быть довольно сложными и сбивать с толку, пока Вы не получаете голову вокруг них.

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

getopts

Таким образом, я предложил бы смотреть на getopts, это включено в Bash, если бы Вы хотите получить оценку для того, как можно было бы проанализировать их собственные параметры командной строки, если бы они создавали сценарий оболочки, который потребовал аргументов парсинга.

Пример

#!/bin/sh

# Initialize our own variables:
output_file=""
verbose=0

OPTIND=1 # Reset is necessary if getopts was used previously in the script.
         # It is a good idea to make this local in a function.

while getopts "hvf:" opt; do
    case "$opt" in
        h)
            show_help
            exit 0
            ;;
        v)  verbose=1
            ;;
        f)  output_file=$OPTARG
            ;;
        '?')
            show_help >&2
            exit 1
            ;;
    esac
done
shift $((OPTIND-1)) # Shift off the options and optional --.

echo "verbose=$verbose, output_file='$output_file', Leftovers: $@"

# End of file
5
27.01.2020, 21:52

Теги

Похожие вопросы