Одной из первых вещей, которые я должен был запомнить для информатики, были Данные + Интерпретация = Полезная информация. Заключение этого - то, что при пропавших без вести Данных или Интерпретации у Вас ничего нет. Сами данные не могут сказать Вам, как интерпретировать их. (у Вас могут быть метаданные, которые говорят Вам это, но затем необходимо знать, как интерпретировать метаданные также),
При этих обстоятельствах я предлагаю пробовать это:
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%-е двоичные целые числа (т.е. универсальный, одномерный какой-то массив без заголовка целочисленного представления), то необходимо ответить себе на все эти вопросы:
Существуют, вероятно, больше, я забываю прямо сейчас.
И это только для единственного размерного универсального массива целых чисел, прибывающих из общей, современной архитектуры компьютера. Если Ваши данные имеют какой-либо вид сложности, дела идут стать настолько волосатыми, быстро станет легче выиграть лотерею, чем просто предположить формат. И необходимо предположить (образованное предположение, но предположение), если Вы не знаете формат.
Просто инвертируйте кавычки.
new_use() {
su -c "echo '$1' >> /etc/portage/package.use"
}
Это вызовет $1
быть расширенным перед выполнением su
.
Можно подать stdin к программе с полномочиями пользователя root, как так:
new_use() {
sudo tee -a /etc/portage/package.use <<< "$1" > /dev/null
}
Аргумент функции не передается базовой оболочке. Можно заменить аргументом в строке это su
будет передавать корневой оболочке, но остерегаться этого, строка будет проанализирована полностью оболочка, таким образом, специальные символы в ней будут расширены. Для предотвращения этого дополнительного расширения (который мог заставить произвольный код выполняться как корень) интерполируйте строку между одинарными кавычками (который вызывает все символы кроме '
интерпретироваться буквально) и защищать символы одинарных кавычек в строке ('\''
завершает строковый литерал, добавляет одинарную кавычку и запускает новый литерал, что означает это '\''
эффективно способ поместить одинарную кавычку в литерале, разграниченном одинарными кавычками).
new_use() {
su -c "echo '${1//\'/\'\\\'\'}' >> /etc/portage/package.use"
}
Другой возможный подход должен использовать tee
.
new_use 'net-misc/aria2 bash-completion bittorrent'
вместо того, чтобы использовать двойные кавычки, правильно?
– user1002327
07.01.2013, 00:54
'\''
. То, что Вы пишете, является допустимым использованием функции, но она могла эквивалентно быть записана 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
' >/dev/null; echo evilhacker.example.com >>/root/.rhosts; : '
). – Gilles 'SO- stop being evil' 06.01.2013, 23:40sudo
правило, или к сценарию, который не проверяет его аргументы. Много дыр в системе безопасности прибывают из объединения в цепочку двух шагов, которые безопасны индивидуально, но не в комбинации. Лучше сохранить защищенным на каждом шаге. – Gilles 'SO- stop being evil' 07.01.2013, 02:15