Zsh функционируют с su и эхом

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

При этих обстоятельствах я предлагаю пробовать это:

file filename

Если это придумывает что-то как:

filename: data

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

Восьмеричный вывод дампа

od (восьмеричный дамп), производит гибрид text-octal дамп. Нечисла являются любой печатаемыми символами такой как o, s, f, и т.д., или непечатаемые символы такой как \0 (ASCII 0, NUL), или \a (ASCII 7, BEL), или числа в основе 8, со стандартом C префикс 0 (например, 032 = 26 в десятичном числе). Ваш файл интерпретируется как поток 8-разрядных байтов.

Шестнадцатеричный вывод дампа

hexdump производит традиционный шестнадцатеричный дамп, с одним столбцом, перечисляющим 8-разрядные байты в шестнадцатеричном, другой показ, какие символы ASCII эти байты соответствуют ot, если любой (если значение байта является непечатаемым символом ASCII или не символом ASCII вообще, . показан в том положении). Снова, Ваш файл интерпретируется как поток 8-разрядных байтов.

Целые числа

Если Ваш файл включает 100%-е двоичные целые числа (т.е. универсальный, одномерный какой-то массив без заголовка целочисленного представления), то необходимо ответить себе на все эти вопросы:

Существуют, вероятно, больше, я забываю прямо сейчас.

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

3
06.01.2013, 22:24
3 ответа

Просто инвертируйте кавычки.

new_use() {
    su -c "echo '$1' >> /etc/portage/package.use"
}

Это вызовет $1 быть расширенным перед выполнением su.

3
27.01.2020, 21:08
  • 1
    О, это точно, что я хотел.Спасибо. –  user1002327 06.01.2013, 05:07
  • 2
    Это, вероятно, достаточно хорошо здесь, но остерегайтесь этого в целом, это небезопасно, потому что это позволяет вызывающей стороне функции выполнять произвольные команды оболочки путем передачи аргумента, который содержит одинарную кавычку (' >/dev/null; echo evilhacker.example.com >>/root/.rhosts; : '). –  Gilles 'SO- stop being evil' 06.01.2013, 23:40
  • 3
    @Gilles это требует пароля root. –  jordanm 07.01.2013, 02:12
  • 4
    @jordanm, Который является, почему это, вероятно, достаточно хорошо здесь. Но это не фрагмент для расширения этого до a sudo правило, или к сценарию, который не проверяет его аргументы. Много дыр в системе безопасности прибывают из объединения в цепочку двух шагов, которые безопасны индивидуально, но не в комбинации. Лучше сохранить защищенным на каждом шаге. –  Gilles 'SO- stop being evil' 07.01.2013, 02:15

Можно подать stdin к программе с полномочиями пользователя root, как так:

new_use() {
    sudo tee -a /etc/portage/package.use <<< "$1" > /dev/null
}
7
27.01.2020, 21:08
  • 1
    Ничего себе, это прибывает удобное. Спасибо за альтернативный ответ! –  user1002327 06.01.2013, 05:08
  • 2
    Должен любить Unix. Я не думаю, что когда-либо видел три' <<<' прежде 8-). –  slm♦ 06.01.2013, 05:11
  • 3
    @slm, это - функция оболочки, известная как здесь строка. термофиксатор –  jordanm 06.01.2013, 09:20

Аргумент функции не передается базовой оболочке. Можно заменить аргументом в строке это su будет передавать корневой оболочке, но остерегаться этого, строка будет проанализирована полностью оболочка, таким образом, специальные символы в ней будут расширены. Для предотвращения этого дополнительного расширения (который мог заставить произвольный код выполняться как корень) интерполируйте строку между одинарными кавычками (который вызывает все символы кроме ' интерпретироваться буквально) и защищать символы одинарных кавычек в строке ('\'' завершает строковый литерал, добавляет одинарную кавычку и запускает новый литерал, что означает это '\'' эффективно способ поместить одинарную кавычку в литерале, разграниченном одинарными кавычками).

new_use() {
  su -c "echo '${1//\'/\'\\\'\'}' >> /etc/portage/package.use"
}

Другой возможный подход должен использовать tee.

3
27.01.2020, 21:08
  • 1
    Очень интересный. Таким образом, это означает, что можно использовать одинарные кавычки в одинарных кавычках, и функция использовалась бы как new_use 'net-misc/aria2 bash-completion bittorrent' вместо того, чтобы использовать двойные кавычки, правильно? –  user1002327 07.01.2013, 00:54
  • 2
    я не понимаю Вашего вопроса. Можно “использовать одинарные кавычки в одинарных кавычках”, но одинарная кавычка должна быть записана '\''. То, что Вы пишете, является допустимым использованием функции, но она могла эквивалентно быть записана new_use "net-misc/aria2 bash-completion bittorrent" или new_use net-misc/aria2\ bash-completion\ bittorrent или много других путей. –  Gilles 'SO- stop being evil' 07.01.2013, 00:59
  • 3
    О, я знаю, что необходимо выйти из них, если Вы хотите использовать одинарные кавычки в одинарных кавычках. Но затем я не думаю, что понимаю Ваш ответ. Что делает это отличающимся от других помимо предотвращения дополнительного расширения?Прошу прощения. синтаксису удара все еще удается смутить меня. –  user1002327 07.01.2013, 01:43
  • 4
    @user1002327 Видит мой комментарий в соответствии с ответом jordanm: проблема состоит в том, когда существует одинарная кавычка в аргументе. –  Gilles 'SO- stop being evil' 07.01.2013, 01:55
  • 5
    О, я ужасно сожалею, я не считал его прежде, чем прокомментировать здесь. Ну, принятый ответ более чем достаточно в этом случае, но я приму Ваш совет во внимание. Не знал, что Вы могли сделать это. –  user1002327 07.01.2013, 02:52

Теги

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