поместить самый старый файл в log.txt на smbclient

что делать

grep :0:0: /etc/passwd | sudo sed 's_/bin/bash_/sbin/nologin_' /etc/passwd

?

  • grep: 0:0 :/etc/passwd поиск строки (строк) с uid/gid быть 0, это обычно дает строку с корнем, эта строка подается в STDOUT (стандартный вывод)
  • | выход из grep подается в sudo sed, который отбрасывается из-за того, что файл указывается в командной строке
  • sed's _/bin/bash _/sbin/nologin _ '/etc/passwd эта замена bash на nologin с/etc/passwd на STDOUT ,/etc/passwd оставлена без изменений.

Вы просто пробовали..?

sudo sed -i '/:0:0:/s_/bin/bash_/sbin/nologin_' /etc/passwd
-121--290201-

Есть добавка TrackerBird 1.0.2 в thunderbird. Его просто нужно отключить.

-121--290262-

Являются ли пользователи локальными пользователями или пользователями vsftp?

Попробуйте выполнить следующие действия:

grep local_enable /etc/vsftpd/vsftpd.conf

Для этого необходимо установить значение YES, и пользователи должны войти в систему с локальными учетными записями.

Если этот набор не требуется или он уже установлен, вставьте /etc/vsftpd/vsftpd.conf сюда.

0
08.03.2018, 20:45
1 ответ

Учитывая, что набор команд smbclient -не реализует полную оболочку, моей лучшей идеей (за исключением smbounding общих ресурсов и использования утилит локальной оболочки ), является "разбор ls".

На высоком уровне вы бы заменили одну команду smbclient двумя:

  1. smbclient... dir--чтобы получить список файлов
  2. smbclient... get--для получения самого старого файла

Поскольку у меня нет окружения, похожего на ваше, вот "внутренности" того, что я бы заменил:

filename=$(smbclient '\\'$IP'\C$' -W *** -U ***%*** -c "cd \*****\*****; dir" | awk -f parse-smbclient-ls)
smbclient '\\'$IP'\C$' -W *** -U ***%*** -c "cd \*****\*****; get $filename"

Где содержимое parse -smbclient -ls будет:

BEGIN {
  "date +%s" | getline oldesttime
}

/ N / {
  #                      size           thu             mar             dd              dd:dd:dd                                dddd
  if (match($0, / N +[[:digit:]]+ +[[:alpha:]]{3} [[:alpha:]]{3} +[[:digit:]]+ [[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2} [[:digit:]]{4}$/)) {
    timestamp=sprintf("%s %s %s %s %s", $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF)
    filename=substr($0, 3, RSTART-3)
    # trim trailing whitespace -- *** hope the real filename doesn't end in whitespace
    sub(/ +$/, "", filename);
    ("date --date='"timestamp"' +%s") | getline seconds
    if (seconds < oldesttime) {
        oldesttime=seconds
        oldestfile=filename
    }
  }
}

END {
  print oldestfile
}

Пошаговое выполнение этого awk-скрипта:

  1. инициализировать текущее -самое старое -значение даты текущим временем; надеюсь, самый старый файл старше одной секунды
  2. Если строка соответствует / N /, то мы видим обычный файл (, а не каталог )
  3. .
  4. если строка соответствует заданному регулярному выражению (, которое старается быть осторожным, чтобы соответствовать только N, размеру -в -байтах и ​​метке времени, за которой следует конец строки $), тогда
  5. извлечь метку времени
  6. извлечь имя файла
  7. обрезать пробелы в конце имени файла
  8. запросить у GNU date отметку времени файла в секундах
  9. если текущий файл старше, чем у нас есть, сохраните отметку времени и имя файла
  10. в конце вывести самое старое имя файла

Обратите внимание, что у этого есть по крайней мере две проблемы, о которых я знаю:

  1. , если фактическое имя файла заканчивается пробелом (, что совершенно законно, даже в Windows, я полагаю ),тогда этот процесс завершится неудачно двумя способами --awk-скрипт сам обрезает пробелы, а подстановка команды также удалит завершающие пробелы.
  2. файлы, содержащие (какие-то )специальные символы, переименовываются; например, когда я создал файл с именем foo$'\n'bar, команда smbclient dirвместо этого показала мне:FKCEWC~Iв качестве имени файла.
0
28.01.2020, 04:29

Теги

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