Запретить использование терминала пользователям без полномочий root

for name in./*.fastq.gz; do
    rnum=${name##*_}
    rnum=${rnum%%.*}

    sample=${name#*_}
    sample=${sample%%_*}

    cat "$name" >>"${sample}_$rnum.fastq.gz"
done

Это перебирает все сжатые файлы Fastq в текущем каталоге и извлекает имя примера в переменную оболочки sample. Для всех имен файлов, показанных в вопросе, это будет 102697-001-001.

Переменная rnumбудет содержать бит R#в конце имени файла.

Имя образца извлекается путем взятия имени файла и удаления всего до первого символа _включительно, а затем удаления всего после первого символа _включительно из этого результата. Аналогичным образом извлекается значение переменной rnum.

Затем файл просто добавляется в конец агрегированного файла с помощью cat >>. Имя выходного файла будет состоять из имени образца, R#и строки .fastq.gz. Для показанных файлов это будет 102697-001-001_R1.fastq.gz.

Сжатые файлы Gzip не обязательно распаковывать, чтобы объединить их. Распаковка полученного файла даст вам несжатую конкатенацию всех файлов Fastq.


Альтернативный способ сделать это с помощью bash, используя регулярное выражение для определения имени выходного файла:

for name in./*.fastq.gz; do
    if [[ "$name" =~ _([0-9-]+)_.*(..)\.fastq\.gz ]]; then
        outfile="${BASH_REMATCH[1]}_${BASH_REMATCH[2]}.fastq.gz"

        cat "$name" >>"$outfile"
    fi
done

Имя файла сопоставляется с регулярным выражением

_([0-9-]+)_.*(..)\.fastq\.gz

Две группы (битов в круглых скобках )будут выбирать для нас соответствующие части имени файла. Первая группа захватывает строку, которая состоит только из символов, которые являются либо цифрами, либо тире. Эта группа должна быть окружена _с обеих сторон. Единственное место в имени файла, которому соответствует этот бит, — это имя образца.

После первой группы и _после нее мы допускаем любое количество любых символов(.*)до бита (..)\.fastq\.gz. \.fastq\.gzбудет соответствовать строке .fastq.gzв конце имени файла, поэтому последняя группа (..),захватывает R1непосредственно перед этим (, шаблон .будет соответствовать любому символу, а \.будет соответствовать точке ).

Две захваченные группы сохраняются как индексы 1 и 2 в BASH_REMATCHмассиве (имя является сокращением от «Bash Regular Expression Match» ), и мы используем их при построении имени выходного файла.

-1
04.08.2019, 16:57
1 ответ

Установите их оболочку на /bin/falseс помощью chsh. например. (как корень):

chsh -s /bin/false username

Это не позволит им получить оболочку при входе в систему через консоль или через ssh и т. д. Этого достаточно для большинства целей, но если они могут запускать другие программы в системе, у них есть много других способов получить как ад.

Это также эффективно предотвратит их вход в систему вообще, поэтому, если это не пользователь системы, предназначенный для запуска определенного демона (, например. www -данные для запуска apache )или его почтовый ящик -только пользователь или аналогичный, нет особого смысла в том, чтобы пользователь вообще имел учетную запись.


Другой, возможно, лучший вариант — настроить их оболочку на ограниченную оболочку , такую ​​как /bin/rbash, которая позволяет им запускать программы только в их (предварительном -наборе )PATH и запрещает им изменять каталог с помощью cdили изменять переменные среды, такие как SHELL, PATHи т. д. Подробности см. в man rbash.

напр. вы можете создать каталог где-нибудь в системе (, например. /usr/local/rbin ), скопируйте или свяжите в него разрешенные двоичные файлы и установите их PATH так, чтобы они могли запускать только программы, найденные в этом каталоге. Вы должны быть осторожны, какие программы вы помещаете в этот каталог -, например. установите rvimвместо vim, если им нужен текстовый редактор (rvim не позволяет выполнять команды оболочки ).

ПРИМЕЧАНИЕ. :Это потребует много работы и требует тщательного исследования, чтобы сделать все правильно (, т. е. чтобы не оставить лазейку, позволяющую получить доступ к оболочке ). На этом сайте есть несколько вопросов и ответов о rbashи других ограниченных оболочках. Начните свое исследование с:

https://unix.stackexchange.com/search?q=rbash

и очень тесно связанная темаchroot:

https://unix.stackexchange.com/search?q=chroot

1
28.01.2020, 05:09

Теги

Похожие вопросы