Первая возможность заключается в том, что установлен неизменяемый флаг. Вы можете изменить это поведение с помощью команды chattr -i filename
, чтобы разрешить внесение изменений в файл.
Но, возможно вы используете файловую систему с ошибками; это может сделать вашу файловую систему доступной только для чтения полностью или для определенных файлов. Проблемы с оперативной памятью тоже могут эмулировать эту проблему. Это можно исправить, перезагрузив сервер и запустив fsck, но иногда сервер может не запускаться и данные могут быть потеряны, когда операция перезагрузки пытается синхронизировать информацию в вашей оперативной памяти с диском во время перезапуска. Если dmesg показывает, что вы работаете с ошибками памяти или файловой системы, я бы рекомендовал сделать резервную копию данных перед перезагрузкой, если это возможно. Иногда ядро выдает неверные адреса памяти из-за проблем с оборудованием, и некоторые неверные данные могут попасть на диски при перезагрузке системы. Сумасшедшее ядро хуже, чем ядро в панике, и может вести себя неожиданно, например, записывать в MBR или важные файлы; это редко, но возможно на плохом оборудовании, особенно если вы работаете с плохой оперативной памятью или горячим процессором. В Бразилии у нас есть большое количество неисправного оборудования, которое может привести к этому. Примечание: Если проблема связана с оперативной памятью, не запускайте FSCK — это приведет к безумию.
ОБНОВЛЕНИЕ: Поскольку вы говорите, что у вас проблемы только с tmp, есть вероятность, что tmp монтируется в другой раздел (возможно, с ошибками?) или извне (samba, nfs?), так что в этом случае нам нужна дополнительная информация о ваших смонтированных разделах. Если это так, опубликуйте результат вашей команды mount
без каких-либо аргументов.
$?
— это статус выхода последней выполненной команды. В вашем случае это команда [
(, которую вы используете, чтобы проверить, является ли строка true
не пустой -как условие вашего цикла while
).
Вам почти никогда не нужно явно использовать $?
. Просто сделай
la=500
while
mark=$(zenity --scale \
--text 'FREQUENCY' \
--value="$la" \
--min-value=0 \
--max-value=5000 \
--step=1)
do
echo "$mark"
la=$mark
done
Или просто:
mark=500
while
mark=$(zenity --scale \
--text 'FREQUENCY' \
--value="$mark" \
--min-value=0 \
--max-value=5000 \
--step=1)
do
echo "$mark"
done
В вашем вызове zenity
отсутствует пробел перед обратной косой чертой, что может вызвать ошибку:
zen(){
mark=$(zenity --scale \
--text FREQUENCY \
--value=$la \
--min-value=0 \
--max-value=5000 \
--step=1)
}
la=500
echo "Script for shim. Regulary frequency"
zen
zen_ec=$?
while true
do
case $zen_ec in
0) echo $mark
la=$mark
#zenity --notification --window-icon="info" --text="Thank you!" --timeout=1
zen
;;
[...]