эта команда должна работать. Вам следует посмотреть ИЛИ взглянуть на / var / log / secure (или /var/log/auth.log в некоторых дистрибутивах). Посмотрите, были ли неудачные попытки войти в Oracle.
Если ваш сервер открыт для публики, несомненно, он подвергся атаке методом грубой силы.
проверьте sshd и убедитесь, что у вас установлено MaxAuthTries
; это заблокировало бы пользователя, если будет много попыток ssh.
вы можете захотеть полностью отключить oracle ssh / etc / ssh / sshd_config
:
Match User oracle
PasswordAuthentication no
$ foo=(1 2 '3 4' 4 5)
$ printf "'%s'\n" "${foo[@]}"
'1'
'2'
'3 4'
'4'
'5'
$ subcommand() { printf "'%s'\n" "$@"; }
$ subcommand "${foo[@]}"
'1'
'2'
'3 4'
'4'
'5'
Итак, давайте адаптируем это к вашему конкретному -случаю использования:
git filter-branch --index-filter \
'git rm -rf --cached file1 file2 […]' \
HEAD
В вашем случае нам нужно проявить немного изобретательности и разбить все на более мелкие части.
git filter-branch --index-filter \
'git rm -rf --cached [MAGIC]' \
HEAD
Создаваемый нами список файлов — это место, где вам нужно, чтобы произошло «волшебство». Остальное все статично, да? И так как вы пишете это, вам не нужно чтобы он был на трех строках, что упрощает:
git filter-branch --index-filter 'git rm -rf --cached [MAGIC]' HEAD
Так:
prefix="git filter-branch --index-filter 'git rm -rf --cached "
postfix="' HEAD"
magic="$(printf '"%s" ' "${file[@]}"'
И тогда, если мы выполним:
${prefix}${magic}${postfix}
Таким образом, мы собрали вашу команду -, хотя и использовали "
для заключения ваших имен файлов, а не '
s, поскольку команда filter-branch
уже находится в '
s.
Вместо массива используйте set -- file1 file2...
для заполнения списка параметров, затем используйтеbash
преобразование параметров с операторомQ
uote :
set -- 'a "b' c "d 'e" "f 'g "'"h' ; (set -x; printf 'cmd %s\n' "${*@Q}")
Выход:
+ printf 'cmd %s\n' ''\''a "b'\'' '\''c'\'' '\''d '\''\'\'''\''e'\'' '\''f '\''\'\'''\''g "h'\'''
cmd 'a "b' 'c' 'd '\''e' 'f '\''g "h'
Или, если мы удалим часть set -x;
, вывод станет:
cmd 'a "b' 'c' 'd '\''e' 'f '\''g "h'
Комментарий от LL3предлагает лучший способ, который не требуетset --...
:
export x; n=(a "b 'c"); x="${n[@]@Q}"
( n=($x); printf 'cmd %s\n' "${n[*]}"; )
Выход:
cmd 'a' 'b '\''c'
Еще один метод заключается в использованииbash
преобразования параметров с операторA
ssignment , (которому также требуетсяeval
):
export x;n=(a b 'c d');x="${n[@]@A}"; (eval "$x";printf '%s\n' "${n[@]}")
Вывод, показывающий, что видит printf
:
a
b
c d
git filter-branch
запускает /bin/sh /usr/lib/git-core/git-filter-branch
, и этот скрипт оценивает аргумент --index-filter
с помощьюeval
.
Таким образом, этот аргумент оценивается как /bin/sh
код.
В большинстве систем /bin/sh
будет в той или иной степени интерпретатором языка POSIX sh
, хотя в некоторых, таких как Solaris 10 и старше, это все еще может быть древний язык Bourne sh
.
Когда дело доходит до синтаксиса цитирования, это мало что меняет.
В любом случае нельзя использовать ни один из расширенных операторов кавычек ksh/bash/zsh, например $'...'
.Это означает, что вы не можете использовать оператор GNU/bash/zsh/ksh printf %q
илиmksh/bash
${var@Q}
или трассировку xtrace
для создания цитирования, поскольку в некоторых случаях прибегают к $'...'
. Они также используют некоторые формы цитирования, которые -небезопасны для локализации (, например\
).
Один из встроенных операторов цитирования, который вы можете использовать, — это zsh
флаг раскрытия параметра qq
, так как он использует одинарные кавычки:
files=(foo 'a b c' $'a\nb\nc' --foo-- "a'b")
git filter-branch --index-filter "git rm -rf --cached -- ${${(@qq)files}}" HEAD
Чтобы увидеть, как zsh
цитирует эти:
$ printf '<%s>\n' "${${(@qq)files}}"
<'foo' 'a b c' 'a
b
c' '--foo--' 'a'\''b'>
С помощью bash/ksh/yash/zsh вы можете сделать то же самое цитирование, используя такую функцию, как:
shquote() {
LC_ALL=C awk -v q=\' '
BEGIN{
for (i=1; i<ARGC; i++) {
gsub(q, q "\\" q q, ARGV[i])
printf "%s ", q ARGV[i] q
}
print ""
}' "$@"
}
А потом:
git filter-branch --index-filter "git rm -rf --cached -- $(shquote "${files[@]}")" HEAD