Если в именах ваших файлов нет символов новой строки в них вы могли бы сделать это, просто указав оболочке разделить вывод ls
только на новые строки, а не на пробелы по умолчанию. Разделение управляется переменной IFS
, любые символы, содержащиеся в IFS
, используются в качестве разделителей.
IFS=$'\n' # set it to just a newline
convert $(ls -vd ./*.png) output.pdf
Это может по-прежнему иметь проблемы, если имена файлов достаточно забавные или если ls
искажает их для отображения. При печати на терминал ls
обычно перечисляет файлы в нескольких столбцах. Но когда вывод не поступает на терминал (здесь его читает оболочка), он действует так, как если бы было задано -1
.
Для реализации идеи, с которой вы начали, вы можете использовать eval
.
eval: eval [arg ...]
Объедините ARG в одну строку, используйте результат в качестве входных данных для оболочки и выполните полученные команды.
Но проблема с eval
в том, что все и вся в командной строке снова анализируется, и даже то, что обычно безопасно, не является. Подумайте о файле с именем $ (touch HELLO)
и о том, что произойдет, если такое имя будет пропущено в командной строке.
Кроме того, если вы пойдете этим путем, вы можете использовать - quoting-style = shell
вместо -Q
, поскольку это может соответствовать обработке оболочкой специальных символов. ближе. (Оба могут быть специфичными для GNU ls, но я думаю, что -v
тоже.)
стандартные отчеты Linux об использовании su и sudo через модуль PAM в /var/log/auth.log
.
Таким образом, самый простой способ — отслеживать этот файл журнала и создавать сигналы тревоги. Вы можете создать простой скрипт для отправки писем или использовать анализаторы лог-файлов (например, logstash, Graylog), которые могут вызывать сигналы тревоги.
Вот два примера протоколов использования su
и sudo
:
пользователь: testx успешно получил root с помощью команды su
в 07:47. :26 и снова вышел в 07:47:30
May 11 07:47:26 server su[3873]: Successful su for root by testx
May 11 07:47:26 server su[3873]: + /dev/pts/3 testx:root
May 11 07:47:26 server su[3873]: pam_unix(su:session): session opened for user root by testx(uid=1002)
May 11 07:47:30 server su[3873]: pam_unix(su:session): session closed for user root
пользователь: testx успешно получил root с помощью команды sudo
в 07:54:21 и снова вышел в 07:54:31
May 11 07:54:21 server sudo: testx : TTY=pts/3 ; PWD=/ ; USER=root ; COMMAND=/bin/sh
May 11 07:54:21 server sudo: pam_unix(sudo:session): session opened for user root by testx(uid=0)
May 11 07:54:31 server sudo: pam_unix(sudo:session): session closed for user root
пользователь : testx не разрешено использовать команду sudo
(неудачная попытка).
May 11 07:56:04 server sudo: testx : user NOT in sudoers ; TTY=pts/3 ; PWD=/ ; USER=root ; COMMAND=/bin/sh
пользователь: text не разрешено использовать команду su
(неверный пароль).
May 11 07:56:57 server su[3927]: pam_unix(su:auth): authentication failure; logname=testx uid=1002 euid=0 tty=/dev/pts/3 ruser=testx rhost= user=root
May 11 07:56:59 server su[3927]: pam_authenticate: Authentication failure
May 11 07:56:59 server su[3927]: FAILED su for root by testx
May 11 07:56:59 server su[3927]: - /dev/pts/3 testx:root