Меня интересовал тот же вопрос, поэтому я провел небольшой тест (на ядре 4.20.0, используя unshare from util -linux 2.33; man-страница для unshare в этой версии содержит некоторые заметки об общем/частном монтировании, которые стоит прочитать, и YMMV, если вы используете более старую версию ).
TL;DR:Да, файловая система размонтируется, когда завершается последний процесс в пространстве имен.
В моем случае я тестирую устройство dm-6
, и оно не смонтировано во «внешнем» пространстве имен.
Окно 1:
cd /sys/fs/ext4
ls -d dm-6
# No such file or directory
Окно 2 :unshare -m
mount /dev/dm-6 /mnt/tmp
# don't exit yet, keep the namespace active
Окно 3 :Сделайте то же самое, что и окно 1. Окно 1:
ls -d dm-6
# exists now
Окно 2 :Выход из среды unshare
Окно 1 :Проверьте еще раз, dm-6
все еще существует
Окно 3 :Выход из среды unshare
Окно 1 :Проверить еще раз, dm-6
снова нет
Еще одна полезная демонстрация/тест :Аналогичная идея, но вместо 3 окон вход и выход из окна 2 дважды. Проверьте dmesg
или журналы и убедитесь, что в этом случае сообщение ядра о том, что оно смонтировало файловую систему, появляется дважды.
count=`awk 'END{print NR}' filename`
for ((i=1;i<=$count;i++)); do j=$(($i+1)); m=`awk -F "|" -v i="$i" 'NR==i{k=substr($4,1,8);print k"_"$5}' filename`; echo $m >"$m.fasta";echo -e "\n" >> "$m.fasta" ;awk -v j="$j" 'NR==j {print $0}' filename >> "$m.fasta";i=$j; done
Проверено, работает нормально
awk -F'|' '
NR%2{ close(fileName); hdr=$4 $5; sub("annot.gbk", "", hdr); fileName=hdr".fasta";
print ">"hdr >fileName; next; };
{ print >fileName; }' infile
Решение, отличное от awk
, предполагающее, что файл должен быть разделен каждые 2 строки:
# split the file every 2 lines and save in files prefixed FOO.
split -l2 131751_pphA.fasta FOO.
# loop over the files
for f in FOO.*; do
# `awk` and `sed` to get the pattern to use as file name and first line, i.e "PANS_1_2_pphA"
n=$(awk -F'|' '{ print $4$5 }' "$f" | \
sed 's/annot\.gbk//')
# copy the 2nd line of the file into a new file named as pattern+.fasta
sed -n 2p "$f" > "$n.fasta"
# add the pattern in the created file
sed -i "1i>\\$n" "$n.fasta"
# remove the splited files
rm "$f"
done
$ cat PANS_1_2_pphA.fasta
PANS_1_2_pphA
MIKKLIAEKGTLIFIEAHNPLSALIASKAEQTNSEGRIVKFDGIWSSSLTDSASRGIPDNETLALSSRLENIADIRNVTDMPIIMDADTGGKPEHFSYYVKRMINNGVNGVIIEDKTGLKKNSLFGTEVEQTLADINDFSEKIKRGKSAVYIDDFMIIARLESLIAGFDVEHALERADAYVEAGADGIMIHSCKKTPDEVFLFSTKFRKKYPSVPLICVPTTYSATSNRELSEAGFNVIIYANHMLRAAYKAMENVSKEILRYGRTAEIEKSCMSVKEIISLIP
awk -F '|' '
/^>/ {
close(out)
head = $4
sub("_[^_]*$","_" $5, head)
$0 = ">" head
out = head ".fasta"
} { print >out }' 131751_pphA.fasta
Это похоже на ответ αғsнιη , но позволяет каждой последовательности состоять из более чем одной строки (, что возможно в общем файле FastA ).
Я также обрезаю имя заголовка немного по-другому, обрезая все после последнего _
в .gbk
имени файла (? ), который находится в четвертом|
-поле с разделителями в строке заголовка FastA, и добавление пятого поля.