Да, PCMemTest — это переработанный Memtest86+, который можно загрузить из UEFI. У него все еще есть одно ограничение при загрузке из UEFI :: если CSM не включен, клавиатуру нельзя использовать, что означает, что конфигурацию нельзя изменить.
Кроме того, само ядро Linux содержит инструмент проверки памяти :опция memtest
будет запускать проверку памяти с использованием до 17 шаблонов (в настоящее время ). Если вы добавите memtest
к параметрам загрузки вашего ядра, оно будет запускать все тесты при загрузке и резервировать любые сбойные адреса, чтобы они не использовались. Если вы хотите меньше тестов, вы можете указать количество шаблонов (memtest=8
, например ).
Это не так обширно, как тесты Memtest86+, но все же дает довольно хорошие результаты.
Некоторые ядра дистрибутива не включают эту функцию; вы можете проверить, доступен ли он, выполнив поискCONFIG_MEMTEST
в конфигурации вашего ядра (try/boot/config-$(uname -r)
). Ядро не будет жаловаться, если вы укажете memtest
, но оно его не поддерживает; когда он запустится, вы должны увидеть вывод, например
[ 0.000000] early_memtest: # of tests: 17
[ 0.000000] 0x0000000000010000 - 0x0000000000099000 pattern 4c494e5558726c7a
[ 0.000000] 0x0000000000100000 - 0x0000000003800000 pattern 4c494e5558726c7a
[ 0.000000] 0x000000000500d000 - 0x0000000007fe0000 pattern 4c494e5558726c7a
[ 0.000000] 0x0000000000010000 - 0x0000000000099000 pattern eeeeeeeeeeeeeeee
[ 0.000000] 0x0000000000100000 - 0x0000000003800000 pattern eeeeeeeeeeeeeeee
[ 0.000000] 0x000000000500d000 - 0x0000000007fe0000 pattern eeeeeeeeeeeeeeee
[ 0.000000] 0x0000000000010000 - 0x0000000000099000 pattern dddddddddddddddd
[ 0.000000] 0x0000000000100000 - 0x0000000003800000 pattern dddddddddddddddd
[ 0.000000] 0x000000000500d000 - 0x0000000007fe0000 pattern dddddddddddddddd
[ 0.000000] 0x0000000000010000 - 0x0000000000099000 pattern bbbbbbbbbbbbbbbb
[ 0.000000] 0x0000000000100000 - 0x0000000003800000 pattern bbbbbbbbbbbbbbbb
...
во время загрузки ядра (или в журналах загрузки, позже ).
Вы можете использовать QEMU, чтобы почувствовать это.:
qemu-system-x86_64 -kernel /boot/vmlinuz-$(uname -r) -append "memtest console=ttyS0" -nographic
(или тот, который qemu-system-...
подходит для вашей архитектуры ), и найдите «ранний _memtest». Чтобы выйти из QEMU после паники ядра, нажмите Ctrla , c , q , Enter .
Предполагая, что слова разделены SPC, TAB или NUL и первое слово находится в первой строке, попробуйте:
for file (*.txt) {
read -r word rest < $file && mv -i -- $file $word.txt
}
Для разделения только на SPC замените read
на IFS=' ' read
.
Я не знаю, на каком языке должен быть написан этот rename File.ReadAllText('*.txt').split(' ')[0]
код, но это определенно не zsh
синтаксис (и не синтаксис любой другой оболочки, которую я знаю ).
Более прямой zsh
перевод того, для чего, как я полагаю, предназначен код, будет:
for file (*.txt) mv -i -- $file ${$(<$file)[1]}
Хотя при этом читается и разбивается весь файл в памяти и не выполняется много проверок ошибок. Этот разбивается на SPC, TAB, NUL или NL и не ограничивается тем, что первый находится в первой строке.
Чтобы сделать это быстрее, вы можете запустить zmodload zsh/files
заранее, что заменит команду mv
встроенной версией (, сохраняя дорогостоящие fork и exec при вызове ).
rename
само по себе является названием примера программы, поставляемой с perl
как минимум с 80-х годов. Аргумент представляет собой код perl
, используемый для вычисления имени замены. Не все системы поставляются с этой командой rename
, а в некоторых системах команда rename
является чем-то совершенно другим. Однако, если ваш rename
является perl
, вы можете сделать:
rename '
if (open FILE, "<", $_ and my $line = <FILE>) {
chomp $line;
my @words = split " ", $line;
$_ = "$words[0].txt" if @words;
}'./*.txt
Здесь используются одинарные кавычки, так что то, что внутри них, дословно передается в perl
как код языка perl
.
Вы также можете изменить *.txt
на *.txt(.)
или *.txt(-.)
, чтобы рассматривать только обычный файл (, пропуская каталоги, FIFO, устройства и другие нестандартные типы файлов -).
В vim
я бы сделал следующее (, хотя это чертовски грязно):
:$!ls *.txt
, который дает вам список всех .txt
файлов в вашем каталоге
:%norm A `sed 1q < | cut -f1 -d' '`
Это добавляет шаблон для команды, которая получает первое слово в файле (или первое слово, за которым следует пробел, а [обычно это считается одним и тем же] ), которое будет завершено в ближайшее время...
:%norm 0vf yf<p
, чтобы получить имя файла из нашего списка, который мы создали ранее, и вставить его после<
:%norm Imv˽
, чтобы добавить команду перемещения и пробел в начале каждой строки.
:w command.sh
, чтобы сохранить его как сценарий, который можно запустить через chmod +x command.sh
и запустить с помощью./command.sh
ПРЕДУПРЕЖДЕНИЕ:
Санитарная обработка не проводится. То есть не проверяется уникальность первого слова в файле. Это может быть дано вашим приложением, но в общем случае это не так. Поэтому возможно, что переименование файла в его первое слово содержимого приводит к тому, что файлы перезаписывают друг друга. По этой причине делать это нежелательно.