Вы говорите удару открывать файл и добавлять вывод команды sudo echo 'text'
к нему, который, конечно, не работает начиная с Ваших выполнений удара некорневыми. В интерактивном режиме я обычно работаю sudo -s
обойти это (с тех пор выполнения оболочки как корень и может открыть файл). С другой стороны, можно работать sudo sh -c "echo 'text' >> /file.txt"
, который также работает, но является чем-то вроде стычки со всей интерполяцией/выходом, которая может вмешаться, если Вы усложнили выражения.
Интересно ли маленькое sponge
утилита общего назначения ("впитывают стандартный вход и пишут в файл"), от moreutils будет полезна в этом случае и будет ли это следовать за символьной ссылкой.
Автор описывает sponge
как это:
Это решает проблему редактирования файлов, оперативных с инструментами Unix, а именно, что, если Вы просто перенаправляете вывод в файл, Вы пытаетесь отредактировать затем перенаправление, вступает в силу (избиение содержания файла), прежде чем первая команда в конвейере вернется к чтению из файла. Переключатели как
sed -i
иperl -i
работа вокруг этого, но не каждая команда, которую Вы могли бы хотеть использовать в конвейере, имеет такую опцию, и Вы не можете использовать тот подход с несколькими-конвейерами-команд так или иначе.Я обычно использую, моют губкой немного как это:
sed '...' file | grep '...' | sponge file
Если у вас есть последняя версия gawk
, вам повезло. Существует функция FPAT
, задокументированная здесь
awk 'BEGIN {
FPAT = "([^|]+)|(\"[^\"]+\")"
}
{
print "NF = ", NF
for (i = 1; i <= NF; i++) {
sub(/"$/, "", $i); sub(/^"/, "", $i);printf("$%d = %s\n", i, $i)
}
}' file
NF = 3
$1 = field1
$2 = field2
$3 = field3
NF = 3
$1 = field1
$2 = field2|field2
$3 = field3
-121--55121- встроенное ПО :
firmware: i915/skl_dmc_ver1.bin
Для правильной работы многих устройств необходимы две функции. Драйвер и микропрограмма. Драйвер запрашивает микропрограммное обеспечение из файловой системы по адресу /lib/firmware
. Это специальный файл, необходимый для оборудования, он не двоичный. Затем водолаз делает все необходимое для загрузки микропрограммного обеспечения в устройство. Микропрограммное обеспечение выполняет программирование аппаратных средств внутри устройства.
псевдоним :
alias: pci:v00008086d00005A84sv*sd*bc03sc*i*
Это может быть разделено на части после символов:
v00008086
: v
обозначает идентификатор поставщика , он идентифицирует производителя оборудования. Этот список поддерживается Группой специальных интересов PCI . Ваш номер 0x8086 означает «корпорация Intel». d00005A84
: d
обозначает идентификатор устройства , выбранный изготовителем. Этот идентификатор обычно объединяется с идентификатором поставщика для создания уникального 32-разрядного идентификатора для аппаратного устройства. Нет официального списка, и мне не удалось найти перечислять идентификаторов устройств Intel для поиска этого номера. sv *
, sd *
: версия поставщика подсистемы и версия устройства подсистемы предназначены для дальнейшей идентификации устройства ( *
указывает, что оно будет соответствовать любому) bc03
: базовый класс . Он определяет, что это за устройство; Интерфейс IDE
, Контроллер Ethernet
, Контроллер USB
,... bc03
означает Контроллер дисплея
. Их можно заметить из выходных данных lspci
, поскольку lspci
сопоставляет номер с классом устройства. sc *
: подкласс к базовому классу. i *
: интерфейс intree :
intree: Y
Все модули ядра начинают свою разработку как вне дерева
. Как только модуль принимается к включению, он становится модулем в дереве
. Модули без этого флага (набор N
) могут запятнать ядро .
vermagic :
vermagic: 4.2.0-1-amd64 SMP mod_unload modversions
При загрузке модуля проверяются последовательности в значении vermagic
, если они совпадают. Если они не совпадают, появится ошибка, и ядро откажется от загрузки модуля. Это можно преодолеть с помощью флага -force
для modprobe
. Естественно, эти проверки есть для вашей защиты, поэтому использовать эту опцию опасно.
Если известно, что somfile
является symlink, можно явно указать полный путь к файлу следующим образом:
perl -pi.bak -e 's/foo/bar/' $ (readlink somfile)
Таким образом, исходный symlink остается нетронутым, поскольку замена теперь выполняется непосредственно
Если вы имеете дело с одним файлом, команда будет выглядеть следующим образом:
perl -i -pe'...' -- "$qfn"
Тогда решение следующее:
perl -i -pe'...' -- "$( readlink -e -- "$qfn" )"
Это обрабатывает как символические ссылки, так и не -символические ссылки.
Если вы имеете дело с произвольно большим количеством файлов, команда будет выглядеть следующим образом:
... | xargs -r perl -i -pe'...' --
Тогда решение следующее:
... | xargs -r readlink -ze -- | xargs -r0 perl -i -pe'...' --
Это обрабатывает как символические ссылки, так и не -символические ссылки.
Вниманиеreadlink
не является стандартной командой, поэтому ее наличие, аргументы и функциональность зависят от системы, поэтому обязательно ознакомьтесь с документацией. Например, в некоторых реализациях есть -f
(, которые вы могли бы использовать и здесь ), но не -e
, а в некоторых нет ни того, ни другого. busybox
readlink -f
ведет себя как GNU readlink -e
. А в некоторых системах есть команда realpath
вместо readlink
, которая обычно ведет себя как GNU readlink -f
.
Имейте в виду, что с GNU readlink -e
символические ссылки, которые не могут быть преобразованы в существующий файл, автоматически удаляются.
sponge
для такого использования на практике? Что касается меня:еще нет. Вы могли оставить комментарий, указывающий, вел ли он себя в тесте путь, требуемый здесь? О, я вижу комментарий. Спасибо за подтверждение! – imz -- Ivan Zakharyaschev 16.03.2011, 02:28file
в Вашем примере выше символьная ссылка, ссылка оставлена в покое и реальный измененный файл. – mattdm 16.03.2011, 02:38