Гарантировано ли "пользователям" указывать всех пользователей на хосте?

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

Я проверил это и сразу обнаружил проблему:

wget уважает robots.txt, если явно не сказано не делать этого.

wget -r http://www.comp.brad.ac.uk/research/GIP/tutorials/index.html
--2015-12-31 12:29:52--  http://www.comp.brad.ac.uk/research/GIP/tutorials/index.html
Resolving www.comp.brad.ac.uk (www.comp.brad.ac.uk)... 143.53.133.30
Connecting to www.comp.brad.ac.uk (www.comp.brad.ac.uk)|143.53.133.30|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 878 [text/html]
Saving to: ‘www.comp.brad.ac.uk/research/GIP/tutorials/index.html’

www.comp.brad.ac.uk/research/GI 100%[======================================================>]     878  --.-KB/s   in 0s     

2015-12-31 12:29:53 (31.9 MB/s) - ‘www.comp.brad.ac.uk/research/GIP/tutorials/index.html’ saved [878/878]

Loading robots.txt; please ignore errors.
--2015-12-31 12:29:53--  http://www.comp.brad.ac.uk/robots.txt
Reusing existing connection to www.comp.brad.ac.uk:80.
HTTP request sent, awaiting response... 200 OK
Length: 26 [text/plain]
Saving to: ‘www.comp.brad.ac.uk/robots.txt’

www.comp.brad.ac.uk/robots.txt  100%[======================================================>]      26  --.-KB/s   in 0s     

2015-12-31 12:29:53 (1.02 MB/s) - ‘www.comp.brad.ac.uk/robots.txt’ saved [26/26]

FINISHED --2015-12-31 12:29:53--

Как видите, wget отлично выполнил то, о чем вы просили.

О чем говорится в файле robots.txt в этом случае?

cat robots.txt
User-agent: *
Disallow: /

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

wget -r -erobots=off  http://www.comp.brad.ac.uk/research/GIP/tutorials/index.html

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

Однако существует риск выполнения рекурсивных загрузок сайта, поэтому иногда лучше использовать ограничения, чтобы избежать захвата всего сайта:

wget -r -erobots=off -l2 -np  http://www.comp.brad.ac.uk/research/GIP/tutorials/index.html
  • -l2 означает максимум 2 уровня. -l означает: уровень.
  • -np означает, что не нужно подниматься вверх по дереву, только с начальной страницы. -np означает: без родителя.

Это просто зависит от целевой страницы, иногда вы хотите точно указать, что получать, а что не получать, например, в этом случае вы получаете только расширения .html / .htm по умолчанию, а не графику, pdf-файлы, музыка / видео расширения. Параметр -A позволяет добавлять типы расширений для захвата.

Между прочим, я проверил, и мой wget, версия 1.17, относится к 2015 году. Не уверен, какую версию вы используете. Python, кстати, я думаю, также был создан в 90-х годах, поэтому, по вашим рассуждениям, python также является мусором из 90-х.

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

2
18.08.2018, 13:10
5 ответов

Основываясь на ответе Стефана Шазела , я придумал:

function alias_expand {
  if [[ $ZSH_VERSION ]]; then
    # shellcheck disable=2154  # aliases referenced but not assigned
    [ ${aliases[$1]+x} ] && printf '%s\n' "${aliases[$1]}" && return
  else  # bash
    [ "${BASH_ALIASES[$1]+x}" ] && printf '%s\n' "${BASH_ALIASES[$1]}" && return
  fi
  false  # Error: alias not defined
}

(с bash 4.0 или новее ).

3
27.01.2020, 21:53

В моей среде zsh, когда я набираю aliasбез команды, я получаю stdoutсписок всех псевдонимов. То же самое происходит в bash (на MacOS как ). Они имеют формуalias=expansion

Таким образом, вы можете продолжить фильтрацию с помощью sed :alias | sed -ne 's/cdh=\(.*\)$/\1/p', если "cdh" является псевдонимом, который вы хотите узнать. Вы можете сделать для этого функцию оболочки в своем профиле, если это обычная для вас задача :например

expand_alias() { alias $@ | sed -ne 's/^'$@'=\(.*\)$/\1/p' }
0
27.01.2020, 21:53

В zshвы можете просто использовать

get_alias() {
  printf '%s\n' $aliases[$1]
}

С bash(, предполагая, что он не находится в режиме POSIX, и в этом случае его aliasдаст вывод, аналогичный zsh), вы можете сделать:

get_alias() (
  eval '
    alias() { printf "%s\n" "${1#*=}"; }'"
    $(alias -- "$1")"
)

По сути, мы оцениваем вывод aliasпосле переопределения aliasкак функции, которая печатает то, что находится справа от первого =в своем первом аргументе.

Вы можете использовать аналогичный подход для чего-то, совместимого с большинством оболочек POSIX, zshиbash:

get_alias() {
  eval "set -- $(alias -- "$1")"
  eval 'printf "%s\n" "${'"$#"'#*=}"'
}
7
27.01.2020, 21:53

Как насчет определения функции оболочки:

EXA() { alias $@ | sed 's/^/expand_/; s/=/ == /; s/\o047//g; '; }
0
27.01.2020, 21:53

У моего zsh это было привязано к комбинации клавиш:

_expand_alias () {
    local word expl tmp pre sel what
    local -a tmpa suf
    eval "$_comp_setup"
    if [[ -n $funcstack[2] ]]
    then
        if [[ "$funcstack[2]" = _prefix ]]
        then
            word="$IPREFIX$PREFIX$SUFFIX"
        else
            word="$IPREFIX$PREFIX$SUFFIX$ISUFFIX"
        fi
        pre=()
    else
        local curcontext="$curcontext"
        if [[ -z "$curcontext" ]]
        then
            curcontext="expand-alias-word:::"
        else
            curcontext="expand-alias-word:${curcontext#*:}"
        fi
        word="$IPREFIX$PREFIX$SUFFIX$ISUFFIX"
        pre=(_main_complete - aliases)
    fi
    zstyle -s ":completion:${curcontext}:" regular tmp || tmp=yes
    case $tmp in
        (always) sel=r  ;;
        (yes | 1 | true | on) [[ CURRENT -eq 1 ]] && sel=r  ;;
    esac
    zstyle -T ":completion:${curcontext}:" global && sel="g$sel"
    zstyle -t ":completion:${curcontext}:" disabled && sel="${sel}${(U)sel}"
    tmp=
    [[ $sel = *r* ]] && tmp=$aliases[$word]
    [[ -z $tmp && $sel = *g* ]] && tmp=$galiases[$word]
    [[ -z $tmp && $sel = *R* ]] && tmp=$dis_aliases[$word]
    [[ -z $tmp && $sel = *G* ]] && tmp=$dis_galiases[$word]
    if [[ -n $tmp ]]
    then
        tmp=${tmp%%[[:blank:]]##}
        if [[ $tmp[1] = [[:alnum:]_] ]]
        then
            tmpa=(${(z)tmp})
            if [[ $tmpa[1] = $word && $tmp = $aliases[$word] ]]
            then
                tmp="\\$tmp"
            fi
        fi
        zstyle -T ":completion:${curcontext}:" add-space || suf=(-S '')
        $pre _wanted aliases expl alias compadd -UQ "$suf[@]" -- ${tmp%%[[:blank:]]##}
    elif (( $#pre )) && zstyle -t ":completion:${curcontext}:" complete
    then
        $pre _aliases -s "$sel" -S ''
    else
        return 1
    fi
}
0
15.09.2021, 00:18

Теги

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