Самый легкий способ сделать это состоит в том, чтобы включать сценарий оболочки в /etc/bash_completion.d/
. Базовая структура этого файла является простой функцией, которая выполняет завершение и затем вызов complete
который является встроенным ударом. Вместо того, чтобы вдаваться в подробности о том, как использовать complete
, Я предполагаю, что Вы читаете Введение в Завершение Bash. Часть 1 покрывает основы, и Часть 2 входит, как Вы пошли бы о записи сценария завершения.
Более плотное описание завершения удара может быть найдено в разделе "Programmable Completion" man bash
(можно ввести "/Программируемое Завершение" и затем нажать 'n' несколько раз для получения там быстро. Или, если Вы чувствуете удачу, "ВОЗВРАТ g 2140").
Если Вы, намерение состоит в том, чтобы найти файловые системы с проблемами (т.е. монтирующееся состояние был изменен на ТОЛЬКО ДЛЯ ЧТЕНИЯ из-за ошибки файловой системы), то я сделаю следующее (принимающий расширение* файловые системы):
tune2fs -e panic [raw-disk-partition-name]
EX:
tune2fs -e panic /dev/sda1
То, что это делает, испугать систему, таким образом перезагружая сервер, возможно вызывая fsck на проблемную файловую систему для фиксации его. Таким образом серьезная проблема файловой системы решена при наличии системы, фиксируют его автоматически, вместо того, чтобы вывести его в Режим только для чтения, который я не нашел очень полезными. Кроме того, я испугал бы проблемную файловую систему, фиксируя его, чем пытающийся работать с поврежденным, который со временем мог бы нанести больше ущерба.
Я использовал следующее в прошлом
grep ' ro ' /proc/mounts
В некоторых случаях можно хотеть пропустить любого удаленное монтирование, которое может быть RO дизайном
grep ' ro ' /proc/mounts | grep -v ':'
Также можно хотеть пропустить вещи, которые смонтированы через автомонтирование
grep ' ro ' /proc/mounts | egrep -v 'automount|autofs'
Подход, который работает даже на удаленные файловые системы (который может быть смонтирован rw, даже если они экспортируются ro, приводящий к файловой системе только для чтения) должен просто создать тестовый файл в каждой файловой системе и протестировать код возврата той команды.
Но если это - что-то, что регулярно происходит, необходимо изучить причину вместо того, чтобы пытаться продолжить фиксацию признаков.
Если вы используете bash в терминале под X11 (большинство людей), то вы можете вырезать и вставить с помощью мыши, никаких клавиш не требуется.
Щелкните левой кнопкой мыши и перетащите ее, чтобы выделить. При этом выделенный текст помещается в X11 основной выделенный фрагмент.
Чтобы вставить основной выделенный фрагмент, установите курсор в целевое окно и щелкните мышью по центру.
Вы можете взаимодействовать с выбором в командной строке с помощью xsel
.
Для копирования содержимого файлов из Linux на компьютер Windows. Можно использовать WINSCP. Установите WINSCP в окнах и используйте полномочия linux и наоборот для передачи файлов.
-121--175319-cat /proc/mounts|sort|awk '{print $1 "\011" toupper(substr($4,0,2))}'
Вывод с разделителями табуляции с именем и режимом подключения.
Как показывают другие ответы, вы можете проанализировать / proc / mounts
с помощью grep
или awk
, например, вы можете перечислить монтирования только для чтения:
$ grep "\sro[\s,]" /proc/mounts
или
$ awk '$4~/(^|,)ro($|,)/' /proc/mounts
Альтернативой синтаксическому анализу содержимого / proc / mounts
, которое вы можете попробовать, является
$ grep '^ro$' /proc/fs/*/<device>/options
, где <устройство>
- имя узла устройства файловой системы в / dev
.Например,
$ grep '^ro$' /proc/fs/*/sdc1/options
вернет ro
, если / dev / sdc1
смонтирован только для чтения.
Если вы хотите проверить наличие блочного устройства только для чтения (вместо смонтированной файловой системы), вы можете использовать
$ cat /sys/block/<device>/ro
, который возвращает 1
, если файловая система доступна только для чтения, или 0
при чтении-записи.
Обратите внимание, что
выше относится к узлу реального устройства. Если вы хотите проверить устройство символьной ссылки (например, созданное device-mapper или by-uuid
ссылки), вы можете использовать basename
и readlink
, чтобы получить имя узла устройства. Как эти примеры:
$ grep '^ro$' /proc/fs/*/$(basename $(readlink -f /dev/mapper/foo)/options
$ cat /sys/block/$(basename $(readlink -f /dev/mapper/foo)/ro
Я немного опоздал, но вот как я справляюсь Это.
#!/bin/bash
FILE=/tmp/test.txt
# Check health of LXD host machine
touch ${FILE}
if [ -f ${FILE} ];
then
rm ${FILE}
echo "File System is Good!"
else
message="File System is R/O !"
echo ${message} >> /var/log/lxd/health.log >&2
send_twilio "${TWILIO_ACCOUNT_SID}" "${TWILIO_ACCOUNT_TOKEN}" "${TWILIO_NUMBER}" "${to_twilio}" "${HOST}" "${message}"