Интерфейсы системного вызова ядра Linux очень стабильны. Но у ядра есть другие интерфейсы, которые не всегда совместимы.
/ proc
в основном стабилен, но в прошлом было несколько изменений (например, некоторые интерфейсы перемещены в / sys
через некоторое время после создания / sys
) . / sys
содержит некоторые стабильные интерфейсы (перечисленные в Documentation / ABI / stable
), а некоторые нет. Вы не должны использовать те, которые не используются, но иногда люди это делают, и простое обновление безопасности и стабильности не должно им ничего сломать. В общем, основная причина не переходить на более новую версию ядра - это сторонние модули.
Некоторые дистрибутивы, тем не менее, предлагают в качестве опции свежие ядра. Например, Debian делает ядра из тестирования доступными для пользователей стабильной версии через backports. Точно так же в Ubuntu LTS доступны ядра из более поздних выпусков Ubuntu, но по умолчанию они не используются. Это в основном полезно для новых установок на оборудовании, которое еще не поддерживалось на момент завершения выпуска.
Вы создаете каталог с именем из $3
, но создаете файл в текущем каталоге.
Чтобы создать файл в новом каталоге, просто перенаправьте на имя в этом каталоге:
mkdir "$3"
tr -dc 'A-Za-z0-9' </dev/urandom | head -c 255 >"$3/$(shuf -n 1 /usr/share/dict/french)"
Или, чтобы разделить вещи для удобства чтения:
dir=$3
mkdir -p -- "$dir" || exit 1
fname=$(shuf -n 1 /usr/share/dict/french)
tr -dc 'A-Za-z0-9' </dev/urandom | head -c 255 >"$dir/$fname"
Здесь я также убедился, что если $3
содержит пути с несуществующими подкаталогами, полный путь создается (путем добавления -p
к вызову mkdir
; что также делаетmkdir
не неудачным, если путь уже существует ). Я также добавляю к пути префикс--
на тот случай, если первый символ в $3
— это -
(, в противном случае это может привести к путанице mkdir
; --
сигнализирует об окончании параметров командной строки ). Я также выхожу с нулевым статусом выхода, отличным от -, если вызов mkdir
не удался.