Если Ваш файл является довольно маленьким, это могло бы работать:
#!/bin/bash
for n in {1..40}
do
sed -i $n's/raj/ram'$n'/' file
done
Это выполняет итерации за времена файла 40 и всегда заменяет всего 1 строку. Если Вы хотите увеличить счетчик не с методической точностью число, но количеством строк Вы изменились, необходимо сделать это по-другому с 2 переменными, но sed-команда была бы подобна - n, не будет установлен циклом.
sed-i изменяет файл на месте, поэтому если Вы хотите сохранить оригинал, необходимо сделать копию сначала.
Это может быть сделано в остроте, если Вы предпочитаете что:
for n in {1..40}; do sed -i $n's/raj/ram '$n'/' file ; done
Выбор корректного размера вместо 40 автоматически возможен также.
Это - всего один диск или какой-либо диск?
Это могло бы быть съемкой общим планом, но если диск имеет файловую систему расширения на ней, и она была смонтирована с errors=remount-ro
опция, может случиться так, что карта флэш-памяти начинает бросать ошибки?
Можно проверить, что ошибочное использование поведения монтируется (в случае, если пользовательские опции монтирования использовались), и tune2fs (для поведения по умолчанию).
$ mount | grep /dev/sda
/dev/sda2 on / type ext4 (rw,noatime,errors=remount-ro,discard)
$ sudo tune2fs -l /dev/sda2 | grep Errors
Errors behavior: Continue
Если это верно, и диск начал бросать ошибки, пора заменить диск.
Если Вы хотите продолжить использовать диск в режиме чтения-записи (знающий, что он май в любой точке прекращает работать полностью!), можно изменить ошибочный режим для продолжения, когда ошибки найдены. Выполнение этого зависит от того, как ошибочный режим установлен. Сначала (с включенным диском), измените поведение по умолчанию на самом разделе диска:
tune2fs -e continue /dev/sdb1
Затем если это все еще монтируется remount-ro
, проверьте/etc/fstab и удалите errors=remount-ro
часть от соответствующей строки. Хотя примечание, повторно монтирующееся в режиме только для чтения, полезно для уведомления Вас, когда устройство начинает перестать работать!
Ваша карта флэш-памяти идет только для чтения, потому что драйвер отказывает. Когда драйвер отказал, любые данные, которые это могло бы чувствовать себя заставленным записать, возможно повреждены, таким образом, файловая система вынуждена в режим только для чтения избежать любого (дальнейшего) повреждения.
Драйвер отказывает, потому что он исчерпывает память: трассировка заканчивается в warn_alloc_failed
, и отсутствием памяти показывают swapper/0: page allocation failure: order:2, mode:0x4020
. На первый взгляд похоже, что у Вас заканчивается память, это применимо ядром. Это не вполне то же самое, столь исчерпывающее RAM, как ядро не может использовать целую RAM для себя. Разряжение памяти ядра довольно редко, все же. Вы запускаете интенсивные приложения, которые вызывают большое одновременное использование диска или сетевой трафик? У Вас есть большая сумма видеопамяти?
Если ответ да, Вы, возможно, должны переключиться на 64-разрядную установку или уменьшить Ваше использование памяти ядра.
Если ответ не (или даже если это - да), это могло бы быть ошибкой ядра. Удостоверьтесь, что Вы выполняете последнее обеспеченное распределением ядро. Это могло быть ошибкой драйвера, это инициировано поврежденной файловой системой, или поврежденное средство чтения (драйвер, как предполагается, сопротивляется к неправильным данным, но много драйверов не тестируются много с неправильно себя ведущими устройствами). Это могло также приводить RAM к сбою; сделайте тест памяти.
yum update
(IIRC, я не знаю конфетку).
– Gilles 'SO- stop being evil'
27.04.2012, 03:39
errors=remount-ro
. Как я избавляюсь от этого (или еще лучше, избавьтесь от ошибок)? – Scott C Wilson 27.04.2012, 01:38