Ответ на ваш вопрос¹ прост:
mkfs.msdos -n 'dickEt' -I /dev/sdd1
Тем не менее, он имеет следующие ограничения:
ОС -Совместимость с файловой системой (мини )матрица:
FAT NTFS EXT[2..4] BTRFS XFS HPFS
Amiga x
MS-DOS, Win95, 98 x
NT, W2K,... W10 x x 2
MacOS x 3 4 x
Linux x x x x x x
Примечание 1:Вы просили обеспечить максимальную совместимость с ОС, и это единственный ответ, поскольку он совместим с большинством ОС , поскольку это одна из старейших и наименее способных файловых систем.(Не ВСЕ ОС! Э.Г. C64 не поддерживает FAT!)
Примечание 2.:Коммерческое пробное ПО, если вам нужны возможности записи.
Примечание 3:Коммерческое программное обеспечение, если вам нужны возможности записи.
Примечание 4:Только чтение -
Команда выглядит так, как будто вы пытаетесь уничтожить текущее содержимое /var/log/messages
сразу на нескольких хостах. Это похоже на то, что может сделать злонамеренный хакер, пытаясь замести следы.
Я предполагаю, что machines.txt
в начале должно быть cat machines.txt
. Если нет, то это означает, что machines.txt
на самом деле будет исполняемым файлом, и что вы называете свои файлы таким образом, чтобы их не было видно; это еще одна вещь, которую иногда делают злонамеренные хакеры, пытающиеся скрыть свои инструменты во взломанной системе.
Поскольку вы передаете данные по конвейеру в xargs
, передаваемые данные заменяют стандартный входной поток для процесса xargs
. По умолчанию дочерние процессы xargs
будут получать свой стандартный ввод, перенаправленный из /dev/null
, чтобы не мешать вводу, передаваемому по конвейеру, в xargs
.Команда ssh
обнаружит, что ее стандартный ввод не является терминалом, и предположит, что она работает в пакетном режиме, т. е. попытается выполнить свою работу, вообще не взаимодействуя с пользователем.
xargs -I {}...
выполняет оставшуюся часть командной строки один раз для каждой строки в machines.txt
. Сообщения об ошибках могут быть выведены командой ssh
, выполненной для самой первой строки machines.txt
, или несколько строк могут быть уже успешно выполнены без вывода сообщений до того, как один из экземпляров команды ssh
обнаружит ошибку; из вывода невозможно с полной уверенностью сказать, какая из строк machines.txt
использовалась, когда произошла ошибка.
Первое сообщение:
Failed to add the host to the list of known hosts (/home/agilos/.ssh/known_hosts).
— предупреждение; SSH пытается записать открытый ключ хоста каждой новой системы, к которой он подключается, в файл known_hosts
, чтобы его можно было проверить при будущих подключениях, но на этот раз по какой-то причине это не удалось. Фактическая попытка подключения может продолжаться.
Второе сообщение:
Permission denied (publickey).
означает, что ваш ключ аутентификации SSH не был принят одним из хостов. Поскольку команда ssh
выполняется в пакетном режиме, она знала, что не следует даже пытаться проверять подлинность с помощью пароля, поскольку пакетный режим обычно означает, что команда выполняется в контексте, который не позволяет взаимодействовать с локальным пользователем. Таким образом, одна из попыток подключения SSH не удалась, поскольку не удалось пройти аутентификацию.
Третье сообщение:
xargs: ssh: exited with status 255; aborting
исходит от команды xargs
, так как она обнаруживает, что одна из выполняемых ею команд ssh
на основе содержимого конвейера -в данных завершилась с ошибкой. SSH выходит со статусом 255 каждый раз, когда возникает ошибка подключения; любой другой код ошибки будет результатом выполнения удаленной команды.
Вы пытаетесь выполнить команду sudo echo " " > /var/log/messages
на нескольких хостах, используя xargs
,но сама команда не будет делать то, что вы пытаетесь сделать :оболочка сначала настроит перенаправления перед выполнением команды, и поэтому с этой командной строкой команда sudo
в конечном итоге выполнит только часть echo " "
с привилегиями root, в то время как перенаправление (часть > /var/log/messages
)будет работать от имени пользователя, под которым вы вошли в систему... и поэтому, скорее всего, вообще ничего не сделает.
Если у ваших инстансов была соответствующая -настройка logrotate
и разрешение на запуск sudo
без запроса пароля, вы могли бы запустить дополнительный раунд ротации журналов на всех инстансах с чем-то вроде:
xargs -I {} ssh {} sudo /usr/sbin/logrotate /etc/logrotate.conf < machines.txt
Таким образом, не требуется никакого сложного цитирования -внутри цитирования -.
Если вам действительно нужно обрезать фактический /var/log/messages
, проблема «перенаправления на файл с правами root через sudo» обычно решается с помощью команды tee
с sudo
. Итак, ваша командная строка может выглядеть так:
xargs -I {} ssh {} bash -c "'echo " " | sudo tee /var/log/messages'" < machines.txt
Но сначала вам нужно решить проблему с аутентификацией SSH, а для этого вам нужно знать, какой хост не проходит аутентификацию по ключу SSH. Кроме того, echo " "
добавляет ненужный пробел в начале первой строки журнала; вместо этого лучше просто обрезать, используя /dev/null
.
xargs -I {} ssh {} bash -c "'sudo tee /var/log/messages </dev/null && hostname'" < machines.txt
Это выведет имя хоста каждой системы, которая успешно усекла свой журнал, поэтому вы будете знать, какой экземпляр в вашем machines.txt
не проходит аутентификацию SSH.