Скопируйте.bash_history всех пользователей за один раз

Можно ли использовать cp для копирования файла.bash_history каждого пользователя в одну и ту же папку (с добавленным именем пользователя)?

Или, по крайней мере, можно скопировать их в параллельный набор папок? Я не могу понять это.

У меня есть root-доступ.

3 ответа

Решение

ТЛ; др; for a in /home/* ; do cp $a/.bash_history /tmp/$a.bash_history ; done

Более длинная версия:

для шаблона в цикле над всеми элементами в шаблоне.
Сам шаблон хранится в переменной с именем a.

Примеры:
for a in * ; do echo $a ; done эхо все имена файлов.
for a in /home/* ; do echo $a ; done echo - это имена всех homedirs в /home.

Вместо эха мы используем команду копирования. (Ф)

А поскольку мы не хотим перезаписывать все файлы, нам нужно либо изменить имя назначения, либо объединить их все в один файл.

.bash_history

Для копирования мы используем cp $ a / tmp / $ a_file (все файлы теперь называются по-разному.

Для объединения мы можем использовать cat с append для перенаправления.
for a in /home/* ; do cat $a/.bash_history >> /tmp/all-users_bash_history ; done

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

Также, будучи пользователем root, шпионит за файлом других пользователей, если для этого нет особых и веских причин. Здесь не хватает честности, если вы заранее не скажете им, что собираетесь это сделать.

Если вы ищете что-то конкретное, вы можете использовать:

grep -e "stuff goes here" /home/*/.bash_history

Источник

Другие вопросы по тегам